From f1a2cfa7b4bb7804a2db9f99376dc4aaba2d7263 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Fri, 15 Mar 2024 22:14:14 -0400 Subject: [PATCH] add scan stats after finish --- backend/endpoints/sockets/scan.py | 27 +++++++++++++- frontend/src/stores/scanning.ts | 8 +++++ frontend/src/views/Library/Scan/Base.vue | 45 ++++++++++++++++++++++-- 3 files changed, 76 insertions(+), 4 deletions(-) diff --git a/backend/endpoints/sockets/scan.py b/backend/endpoints/sockets/scan.py index 73bb396ed..68aac068b 100644 --- a/backend/endpoints/sockets/scan.py +++ b/backend/endpoints/sockets/scan.py @@ -27,6 +27,16 @@ from handler.metadata_handler.moby_handler import MOBY_API_ENABLED from logger.logger import log +class ScanStats: + def __init__(self): + self.scanned_platforms = 0 + self.added_platforms = 0 + self.metadata_platforms = 0 + self.scanned_roms = 0 + self.added_roms = 0 + self.metadata_roms = 0 + + def _get_socket_manager(): # Connect to external socketio server return socketio.AsyncRedisManager(redis_url, write_only=True) @@ -61,6 +71,8 @@ async def scan_platforms( await sm.emit("scan:done_ko", e.message) return + scan_stats = ScanStats() + try: platform_list = [ db_platform_handler.get_platforms(s).fs_slug for s in platform_ids @@ -84,6 +96,12 @@ async def scan_platforms( if platform: scanned_platform.id = platform.id + scan_stats.scanned_platforms += 1 + scan_stats.added_platforms += 1 if not platform else 0 + scan_stats.metadata_platforms += ( + 1 if scanned_platform.igdb_id or scanned_platform.moby_id else 0 + ) + platform = db_platform_handler.add_platform(scanned_platform) await sm.emit( @@ -136,6 +154,13 @@ async def scan_platforms( scan_type=scan_type, metadata_sources=metadata_sources, ) + + scan_stats.scanned_roms += 1 + scan_stats.added_roms += 1 if not rom else 0 + scan_stats.metadata_roms += ( + 1 if scanned_rom.igdb_id or scanned_rom.moby_id else 0 + ) + _added_rom = db_rom_handler.add_rom(scanned_rom) rom = db_rom_handler.get_roms(_added_rom.id) @@ -154,7 +179,7 @@ async def scan_platforms( db_platform_handler.purge_platforms(fs_platforms) log.info(emoji.emojize(":check_mark: Scan completed ")) - await sm.emit("scan:done", {}) + await sm.emit("scan:done", scan_stats.__dict__) except Exception as e: log.error(e) # Catch all exceptions and emit error to the client diff --git a/frontend/src/stores/scanning.ts b/frontend/src/stores/scanning.ts index 848147235..f5fa6404f 100644 --- a/frontend/src/stores/scanning.ts +++ b/frontend/src/stores/scanning.ts @@ -10,6 +10,14 @@ export default defineStore("scanning", { id: number; roms: Rom[]; }[], + scanStats: { + scanned_platforms: 0, + added_platforms: 0, + metadata_platforms: 0, + scanned_roms: 0, + added_roms: 0, + metadata_roms: 0 + } }), actions: { diff --git a/frontend/src/views/Library/Scan/Base.vue b/frontend/src/views/Library/Scan/Base.vue index 30af750d2..2a025a39c 100644 --- a/frontend/src/views/Library/Scan/Base.vue +++ b/frontend/src/views/Library/Scan/Base.vue @@ -9,7 +9,7 @@ import { ref } from "vue"; // Props const scanningStore = storeScanning(); -const { scanning, scanningPlatforms } = storeToRefs(scanningStore); +const { scanning, scanningPlatforms, scanStats } = storeToRefs(scanningStore); const platforms = storePlatforms(); const heartbeat = storeHeartbeat(); @@ -76,6 +76,10 @@ async function scan() { }); } +socket.on("scan:done", (stats) => { + scanStats.value = stats; +}); + async function stopScan() { socket.emit("scan:stop"); } @@ -149,6 +153,7 @@ async function stopScan() { label="Scan option" v-model="scanType" :items="scanOptions" + class="py-3" >