Untitled
import fs from 'fs/promises'; import path from 'path'; export interface StatsData { totalItemsSorted: number; itemsPerWasteType: Record<string, number>; sortingTimestamps: Array<{ timestamp: string; wasteType: string }>; bins: Array<{ id: number; type: string; fillLevel: number; emptyings: number }>; modelUsage: { api: number; local: number }; dailyUsage: Array<{ date: string; count: number }>; weeklyUsage: Array<{ week: string; count: number }>; monthlyUsage: Array<{ month: string; count: number }>; timeBetweenSorts: { average: number; min: number; max: number }; timeOfDayPatterns: Array<{ hour: number; count: number }>; streaks: { daily: number; weekly: number; monthly: number }; binMetrics: { timeTo90PercentFull: { average: number; min: number; max: number }; fillRate: { average: number; min: number; max: number }; fillLevelBalance: number; }; classificationResponseTimes: { average: number; min: number; max: number }; } export async function getStatsData(): Promise<StatsData> { try { const filePath = path.join(process.cwd(), 'data', 'stats.json'); const fileContents = await fs.readFile(filePath, 'utf8'); return JSON.parse(fileContents); } catch (error) { console.error('Error reading stats file:', error); // Return mock data as fallback return { totalItemsSorted: 10000, itemsPerWasteType: { plastic: 3000, paper: 2500, glass: 1500, metal: 1000, organic: 2000 }, sortingTimestamps: [ {timestamp: "2023-06-01T08:30:00Z", wasteType: "plastic"}, {timestamp: "2023-06-01T09:15:00Z", wasteType: "paper"}, ], bins: [ {id: 1, type: "plastic", fillLevel: 75, emptyings: 5}, {id: 2, type: "paper", fillLevel: 60, emptyings: 4}, ], modelUsage: { api: 8000, local: 2000 }, dailyUsage: [ {date: "2023-06-01", count: 350}, {date: "2023-06-02", count: 375}, ], weeklyUsage: [ {week: "2023-W22", count: 2450}, {week: "2023-W23", count: 2600}, ], monthlyUsage: [ {month: "2023-05", count: 9800}, {month: "2023-06", count: 10200}, ], timeBetweenSorts: { average: 300, min: 60, max: 1800 }, timeOfDayPatterns: [ {hour: 0, count: 50}, {hour: 1, count: 30}, ], streaks: { daily: 15, weekly: 4, monthly: 2 }, binMetrics: { timeTo90PercentFull: { average: 86400, min: 43200, max: 129600 }, fillRate: { average: 0.5, min: 0.2, max: 0.8 }, fillLevelBalance: 0.85 }, classificationResponseTimes: { average: 250, min: 100, max: 500 } }; } }
Leave a Comment