Changed the fingerprinting code for Kavita+. Optimized System tab to be way faster. (#2140)

This commit is contained in:
Joe Milazzo 2023-07-17 18:33:45 -05:00 committed by GitHub
parent 43cc771838
commit 5f505eaf6d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 84 additions and 34 deletions

View File

@ -124,6 +124,17 @@ public class ServerController : BaseApiController
return Ok(await _statsService.GetServerInfo());
}
/// <summary>
/// Returns non-sensitive information about the current system
/// </summary>
/// <remarks>This is just for the UI and is extremly lightweight</remarks>
/// <returns></returns>
[HttpGet("server-info-slim")]
public async Task<ActionResult<ServerInfoDto>> GetSlimVersion()
{
return Ok(await _statsService.GetServerInfoSlim());
}
/// <summary>
/// Triggers the scheduling of the convert media job. This will convert all media to the target encoding (except for PNG). Only one job will run at a time.

View File

@ -0,0 +1,21 @@
namespace API.DTOs.Stats;
/// <summary>
/// This is just for the Server tab on UI
/// </summary>
public class ServerInfoSlimDto
{
/// <summary>
/// Unique Id that represents a unique install
/// </summary>
public required string InstallId { get; set; }
/// <summary>
/// If the Kavita install is using Docker
/// </summary>
public bool IsDocker { get; set; }
/// <summary>
/// Version of Kavita
/// </summary>
public required string KavitaVersion { get; set; }
}

View File

@ -23,6 +23,7 @@ public interface IStatsService
{
Task Send();
Task<ServerInfoDto> GetServerInfo();
Task<ServerInfoSlimDto> GetServerInfoSlim();
Task SendCancellation();
}
/// <summary>
@ -171,6 +172,17 @@ public class StatsService : IStatsService
return serverInfo;
}
public async Task<ServerInfoSlimDto> GetServerInfoSlim()
{
var serverSettings = await _unitOfWork.SettingsRepository.GetSettingsDtoAsync();
return new ServerInfoSlimDto()
{
InstallId = serverSettings.InstallId,
KavitaVersion = serverSettings.InstallVersion,
IsDocker = OsInfo.IsDocker
};
}
public async Task SendCancellation()
{
_logger.LogInformation("Informing KavitaStats that this instance is no longer sending stats");

View File

@ -45,28 +45,7 @@ public static class HashUtil
public static string ServerToken()
{
var seed = new DeviceIdBuilder()
.AddMacAddress()
.AddUserName()
.AddComponent("ProcessorCount", new DeviceIdComponent($"{Environment.ProcessorCount}"))
.AddComponent("OSPlatform", new DeviceIdComponent($"{Environment.OSVersion.Platform}"))
.OnWindows(windows => windows
.AddProcessorId())
.OnLinux(linux =>
{
var osInfo = RunAndCapture("uname", "-a");
if (Regex.IsMatch(osInfo, @"\bUnraid\b"))
{
var cpuModel = RunAndCapture("lscpu", string.Empty);
var match = Regex.Match(cpuModel, @"Model name:\s+(.+)");
linux.AddComponent("CPUModel", new DeviceIdComponent($"{match.Groups[1].Value.Trim()}"));
return;
}
linux.AddMotherboardSerialNumber();
})
.OnMac(mac => mac.AddSystemDriveSerialNumber())
.ToString();
return CalculateCrc(seed);
return AnonymousToken();
}
/// <summary>

View File

@ -1,7 +1,7 @@
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';
import { ServerInfo } from '../admin/_models/server-info';
import {ServerInfoSlim} from '../admin/_models/server-info';
import { UpdateVersionEvent } from '../_models/events/update-version-event';
import { Job } from '../_models/job/job';
import { KavitaMediaError } from '../admin/_models/media-error';
@ -17,7 +17,7 @@ export class ServerService {
getServerInfo() {
return this.httpClient.get<ServerInfo>(this.baseUrl + 'server/server-info');
return this.httpClient.get<ServerInfoSlim>(this.baseUrl + 'server/server-info-slim');
}
clearCache() {

View File

@ -1,9 +1,5 @@
export interface ServerInfo {
os: string;
dotnetVersion: string;
runTimeVersion: string;
export interface ServerInfoSlim {
kavitaVersion: string;
NumOfCores: number;
installId: string;
isDocker: boolean;
}
}

View File

@ -4,7 +4,7 @@ import { ToastrService } from 'ngx-toastr';
import { take } from 'rxjs/operators';
import { ServerService } from 'src/app/_services/server.service';
import { SettingsService } from '../settings.service';
import { ServerInfo } from '../_models/server-info';
import {ServerInfoSlim} from '../_models/server-info';
import { ServerSettings } from '../_models/server-settings';
import { NgIf } from '@angular/common';
@ -19,10 +19,10 @@ export class ManageSystemComponent implements OnInit {
settingsForm: FormGroup = new FormGroup({});
serverSettings!: ServerSettings;
serverInfo!: ServerInfo;
serverInfo!: ServerInfoSlim;
constructor(private settingsService: SettingsService, private toastr: ToastrService,
constructor(private settingsService: SettingsService, private toastr: ToastrService,
private serverService: ServerService) { }
ngOnInit(): void {

View File

@ -7,7 +7,7 @@
"name": "GPL-3.0",
"url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE"
},
"version": "0.7.4.4"
"version": "0.7.4.5"
},
"servers": [
{
@ -8384,6 +8384,37 @@
}
}
},
"/api/Server/server-info-slim": {
"get": {
"tags": [
"Server"
],
"summary": "Returns non-sensitive information about the current system",
"description": "This is just for the UI and is extremly lightweight",
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/ServerInfoDto"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServerInfoDto"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ServerInfoDto"
}
}
}
}
}
}
},
"/api/Server/convert-media": {
"post": {
"tags": [