feat(serviceworker): Add persistent event store, cumulative metrics and dashboard events UI for service worker observability
This commit is contained in:
@@ -313,4 +313,127 @@ export interface IRequest_Serviceworker_GetStatus
|
||||
connectedClients: number;
|
||||
lastUpdateCheck: number;
|
||||
};
|
||||
}
|
||||
|
||||
// ===============
|
||||
// Persistent Store interfaces
|
||||
// ===============
|
||||
|
||||
/**
|
||||
* Event types for the persistent event log
|
||||
*/
|
||||
export type TEventType =
|
||||
| 'sw_installed'
|
||||
| 'sw_activated'
|
||||
| 'sw_updated'
|
||||
| 'sw_stopped'
|
||||
| 'speedtest_started'
|
||||
| 'speedtest_completed'
|
||||
| 'speedtest_failed'
|
||||
| 'backend_connected'
|
||||
| 'backend_disconnected'
|
||||
| 'cache_invalidated'
|
||||
| 'network_online'
|
||||
| 'network_offline'
|
||||
| 'update_check'
|
||||
| 'error';
|
||||
|
||||
/**
|
||||
* Event log entry structure
|
||||
* Survives both SW restarts AND cache invalidation
|
||||
*/
|
||||
export interface IEventLogEntry {
|
||||
id: string;
|
||||
timestamp: number;
|
||||
type: TEventType;
|
||||
message: string;
|
||||
details?: Record<string, any>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cumulative metrics that persist across SW restarts
|
||||
* Reset on cache invalidation
|
||||
*/
|
||||
export interface ICumulativeMetrics {
|
||||
firstSeenTimestamp: number;
|
||||
totalCacheHits: number;
|
||||
totalCacheMisses: number;
|
||||
totalCacheErrors: number;
|
||||
totalBytesServedFromCache: number;
|
||||
totalBytesFetched: number;
|
||||
totalNetworkRequests: number;
|
||||
totalNetworkSuccesses: number;
|
||||
totalNetworkFailures: number;
|
||||
totalNetworkTimeouts: number;
|
||||
totalBytesTransferred: number;
|
||||
totalUpdateChecks: number;
|
||||
totalUpdatesApplied: number;
|
||||
totalSpeedtests: number;
|
||||
swRestartCount: number;
|
||||
lastUpdatedTimestamp: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Request to get event log from service worker
|
||||
*/
|
||||
export interface IRequest_Serviceworker_GetEventLog
|
||||
extends plugins.typedrequestInterfaces.implementsTR<
|
||||
plugins.typedrequestInterfaces.ITypedRequest,
|
||||
IRequest_Serviceworker_GetEventLog
|
||||
> {
|
||||
method: 'serviceworker_getEventLog';
|
||||
request: {
|
||||
limit?: number;
|
||||
type?: TEventType;
|
||||
since?: number;
|
||||
};
|
||||
response: {
|
||||
events: IEventLogEntry[];
|
||||
totalCount: number;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Request to get cumulative metrics from service worker
|
||||
*/
|
||||
export interface IRequest_Serviceworker_GetCumulativeMetrics
|
||||
extends plugins.typedrequestInterfaces.implementsTR<
|
||||
plugins.typedrequestInterfaces.ITypedRequest,
|
||||
IRequest_Serviceworker_GetCumulativeMetrics
|
||||
> {
|
||||
method: 'serviceworker_getCumulativeMetrics';
|
||||
request: {};
|
||||
response: ICumulativeMetrics;
|
||||
}
|
||||
|
||||
/**
|
||||
* Request to clear event log
|
||||
*/
|
||||
export interface IRequest_Serviceworker_ClearEventLog
|
||||
extends plugins.typedrequestInterfaces.implementsTR<
|
||||
plugins.typedrequestInterfaces.ITypedRequest,
|
||||
IRequest_Serviceworker_ClearEventLog
|
||||
> {
|
||||
method: 'serviceworker_clearEventLog';
|
||||
request: {};
|
||||
response: {
|
||||
success: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Request to get event count since a timestamp
|
||||
*/
|
||||
export interface IRequest_Serviceworker_GetEventCount
|
||||
extends plugins.typedrequestInterfaces.implementsTR<
|
||||
plugins.typedrequestInterfaces.ITypedRequest,
|
||||
IRequest_Serviceworker_GetEventCount
|
||||
> {
|
||||
method: 'serviceworker_getEventCount';
|
||||
request: {
|
||||
since: number;
|
||||
};
|
||||
response: {
|
||||
count: number;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user