add install ollama models , fixes

This commit is contained in:
Stijnus
2025-01-28 22:57:06 +01:00
parent f32016c91d
commit 0765bc3173
19 changed files with 1496 additions and 715 deletions

View File

@@ -309,7 +309,7 @@ export default function TaskManagerTab() {
try {
setLoading((prev) => ({ ...prev, metrics: true }));
// Get memory info
// Get memory info using Performance API
const memory = performance.memory || {
jsHeapSizeLimit: 0,
totalJSHeapSize: 0,
@@ -319,6 +319,9 @@ export default function TaskManagerTab() {
const usedMem = memory.usedJSHeapSize / (1024 * 1024);
const memPercentage = (usedMem / totalMem) * 100;
// Get CPU usage using Performance API
const cpuUsage = await getCPUUsage();
// Get battery info
let batteryInfo: SystemMetrics['battery'] | undefined;
@@ -333,7 +336,7 @@ export default function TaskManagerTab() {
console.log('Battery API not available');
}
// Get network info
// Get network info using Network Information API
const connection =
(navigator as any).connection || (navigator as any).mozConnection || (navigator as any).webkitConnection;
const networkInfo = {
@@ -343,13 +346,13 @@ export default function TaskManagerTab() {
};
const newMetrics = {
cpu: Math.random() * 100,
cpu: cpuUsage,
memory: {
used: Math.round(usedMem),
total: Math.round(totalMem),
percentage: Math.round(memPercentage),
},
activeProcesses: document.querySelectorAll('[data-process]').length,
activeProcesses: await getActiveProcessCount(),
uptime: performance.now() / 1000,
battery: batteryInfo,
network: networkInfo,
@@ -375,60 +378,111 @@ export default function TaskManagerTab() {
}
};
// Get real CPU usage using Performance API
const getCPUUsage = async (): Promise<number> => {
try {
const t0 = performance.now();
const startEntries = performance.getEntriesByType('measure');
// Wait a short time to measure CPU usage
await new Promise((resolve) => setTimeout(resolve, 100));
const t1 = performance.now();
const endEntries = performance.getEntriesByType('measure');
// Calculate CPU usage based on the number of performance entries
const entriesPerMs = (endEntries.length - startEntries.length) / (t1 - t0);
// Normalize to percentage (0-100)
return Math.min(100, entriesPerMs * 1000);
} catch (error) {
console.error('Failed to get CPU usage:', error);
return 0;
}
};
// Get real active process count
const getActiveProcessCount = async (): Promise<number> => {
try {
// Count active network connections
const networkCount = (navigator as any)?.connections?.length || 0;
// Count active service workers
const swCount = (await navigator.serviceWorker?.getRegistrations().then((regs) => regs.length)) || 0;
// Count active animations
const animationCount = document.getAnimations().length;
// Count active fetch requests
const fetchCount = performance
.getEntriesByType('resource')
.filter(
(entry) => (entry as PerformanceResourceTiming).initiatorType === 'fetch' && entry.duration === 0,
).length;
return networkCount + swCount + animationCount + fetchCount;
} catch (error) {
console.error('Failed to get active process count:', error);
return 0;
}
};
const updateProcesses = async () => {
try {
setLoading((prev) => ({ ...prev, processes: true }));
// Enhanced process monitoring
const mockProcesses: ProcessInfo[] = [
{
name: 'Ollama Model Updates',
type: 'Network',
cpuUsage: Math.random() * 5,
memoryUsage: Math.random() * 50,
status: 'idle',
lastUpdate: new Date().toISOString(),
impact: 'high',
},
{
name: 'UI Animations',
type: 'Animation',
cpuUsage: Math.random() * 3,
memoryUsage: Math.random() * 30,
status: 'idle',
lastUpdate: new Date().toISOString(),
impact: 'medium',
},
{
name: 'Background Sync',
type: 'Background',
cpuUsage: Math.random() * 2,
memoryUsage: Math.random() * 20,
status: 'idle',
lastUpdate: new Date().toISOString(),
impact: 'low',
},
{
name: 'IndexedDB Operations',
type: 'Storage',
cpuUsage: Math.random() * 1,
memoryUsage: Math.random() * 15,
status: 'idle',
lastUpdate: new Date().toISOString(),
impact: 'low',
},
{
name: 'WebSocket Connection',
type: 'Network',
cpuUsage: Math.random() * 2,
memoryUsage: Math.random() * 10,
status: 'idle',
lastUpdate: new Date().toISOString(),
impact: 'medium',
},
];
// Get real process information
const processes: ProcessInfo[] = [];
setProcesses(mockProcesses);
// Add network processes
const networkEntries = performance
.getEntriesByType('resource')
.filter((entry) => (entry as PerformanceResourceTiming).initiatorType === 'fetch' && entry.duration === 0)
.slice(-5); // Get last 5 active requests
networkEntries.forEach((entry) => {
processes.push({
name: `Network Request: ${new URL((entry as PerformanceResourceTiming).name).pathname}`,
type: 'Network',
cpuUsage: entry.duration > 0 ? entry.duration / 100 : 0,
memoryUsage: (entry as PerformanceResourceTiming).encodedBodySize / (1024 * 1024), // Convert to MB
status: entry.duration === 0 ? 'active' : 'idle',
lastUpdate: new Date().toISOString(),
impact: entry.duration > 1000 ? 'high' : entry.duration > 500 ? 'medium' : 'low',
});
});
// Add animation processes
document
.getAnimations()
.slice(0, 5)
.forEach((animation) => {
processes.push({
name: `Animation: ${animation.id || 'Unnamed'}`,
type: 'Animation',
cpuUsage: animation.playState === 'running' ? 2 : 0,
memoryUsage: 1, // Approximate memory usage
status: animation.playState === 'running' ? 'active' : 'idle',
lastUpdate: new Date().toISOString(),
impact: 'low',
});
});
// Add service worker processes
const serviceWorkers = (await navigator.serviceWorker?.getRegistrations()) || [];
serviceWorkers.forEach((sw) => {
processes.push({
name: `Service Worker: ${sw.scope}`,
type: 'Background',
cpuUsage: sw.active ? 1 : 0,
memoryUsage: 5, // Approximate memory usage
status: sw.active ? 'active' : 'idle',
lastUpdate: new Date().toISOString(),
impact: 'low',
});
});
setProcesses(processes);
} catch (error) {
console.error('Failed to update process list:', error);
} finally {