@ahmedhegazee/nestjs-telescope
Version:
Advanced observability and monitoring solution for NestJS applications with ML-powered analytics, enterprise features, and production-ready scaling
78 lines (77 loc) • 2.25 kB
TypeScript
import { RequestContext, ResponseContext } from './request-watcher.interceptor';
export interface SessionInfo {
id: string;
userId?: string;
startTime: Date;
lastActivity: Date;
requestCount: number;
totalDuration: number;
averageResponseTime: number;
errorCount: number;
pages: string[];
userAgent: string;
ipAddress: string;
isActive: boolean;
}
export interface UserSession {
sessionId: string;
userId?: string;
requests: SessionRequest[];
startTime: Date;
endTime?: Date;
duration: number;
isActive: boolean;
metadata: SessionMetadata;
}
export interface SessionRequest {
id: string;
method: string;
url: string;
statusCode: number;
duration: number;
timestamp: Date;
error?: string;
}
export interface SessionMetadata {
userAgent: string;
ipAddress: string;
initialReferrer?: string;
totalPages: number;
uniquePages: number;
bounceRate: number;
avgTimePerPage: number;
}
export declare class RequestSessionTracker {
private readonly logger;
private readonly sessions;
private readonly userSessions;
private readonly sessionTimeout;
private readonly cleanupInterval;
constructor();
trackRequest(requestContext: RequestContext, responseContext: ResponseContext, error: Error | null): void;
private trackSessionRequest;
private trackUserSession;
private updateSessionMetadata;
private extractPageFromUrl;
private generateSessionId;
private startCleanupTimer;
private cleanupInactiveSessions;
getSessionInfo(sessionId: string): SessionInfo | undefined;
getUserSession(userId: string, sessionId?: string): UserSession | undefined;
getActiveSessions(): SessionInfo[];
getActiveUserSessions(): UserSession[];
getSessionsByUser(userId: string): UserSession[];
getSessionStats(): {
totalSessions: number;
activeSessions: number;
averageSessionDuration: number;
averageRequestsPerSession: number;
bounceRate: number;
topPages: Array<{
page: string;
visits: number;
}>;
};
invalidateSession(sessionId: string): void;
clearAllSessions(): void;
}