@re-shell/cli
Version:
Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja
161 lines (160 loc) • 4.73 kB
TypeScript
import { EventEmitter } from 'events';
import { Template, TemplateCategory } from './template-engine';
export interface TemplateUsageEvent {
id: string;
templateId: string;
version: string;
eventType: UsageEventType;
timestamp: Date;
duration?: number;
success: boolean;
error?: string;
context: {
projectName?: string;
projectPath?: string;
variables?: Record<string, any>;
platform: string;
nodeVersion: string;
cliVersion: string;
};
metadata?: Record<string, any>;
}
export declare enum UsageEventType {
INSTALLED = "installed",
CREATED = "created",
UPDATED = "updated",
REMOVED = "removed",
VALIDATED = "validated",
PUBLISHED = "published",
DOWNLOADED = "downloaded",
FAILED = "failed",
CUSTOMIZED = "customized"
}
export interface TemplateMetrics {
templateId: string;
totalUsage: number;
successRate: number;
averageDuration: number;
errorRate: number;
popularVariables: Array<{
name: string;
values: any[];
count: number;
}>;
platformDistribution: Record<string, number>;
versionDistribution: Record<string, number>;
timeSeriesData: TimeSeriesData[];
userSegments: UserSegment[];
}
export interface TimeSeriesData {
date: Date;
usage: number;
success: number;
errors: number;
uniqueUsers: number;
}
export interface UserSegment {
name: string;
description: string;
userCount: number;
percentage: number;
characteristics: Record<string, any>;
}
export interface AnalyticsReport {
period: {
start: Date;
end: Date;
};
summary: {
totalEvents: number;
uniqueTemplates: number;
uniqueUsers: number;
successRate: number;
averageDuration: number;
};
topTemplates: Array<{
templateId: string;
usage: number;
successRate: number;
trend: 'up' | 'down' | 'stable';
}>;
categoryBreakdown: Record<TemplateCategory, number>;
errorAnalysis: Array<{
error: string;
count: number;
templates: string[];
suggestions: string[];
}>;
insights: Insight[];
}
export interface Insight {
type: InsightType;
severity: 'info' | 'warning' | 'critical';
title: string;
description: string;
data?: any;
recommendations?: string[];
}
export declare enum InsightType {
PERFORMANCE = "performance",
RELIABILITY = "reliability",
ADOPTION = "adoption",
ERRORS = "errors",
TRENDS = "trends",
OPPORTUNITIES = "opportunities"
}
export interface AnalyticsConfig {
enabled?: boolean;
anonymize?: boolean;
storageLimit?: number;
retentionDays?: number;
syncInterval?: number;
remoteEndpoint?: string;
includeSystemInfo?: boolean;
trackVariables?: boolean;
}
export declare class TemplateAnalytics extends EventEmitter {
private dataDir;
private config;
private events;
private metricsCache;
private storagePath;
private syncInterval?;
private sessionId;
private defaultConfig;
constructor(dataDir: string, config?: AnalyticsConfig);
private initialize;
private loadEvents;
private cleanupOldEvents;
private startSyncing;
trackUsage(template: Template, eventType: UsageEventType, context?: Partial<TemplateUsageEvent['context']>, metadata?: Record<string, any>): Promise<void>;
trackError(template: Template, error: Error, context?: Partial<TemplateUsageEvent['context']>): Promise<void>;
getMetrics(templateId: string): Promise<TemplateMetrics | null>;
private calculateMetrics;
private generateTimeSeriesData;
private analyzeUserSegments;
generateReport(startDate?: Date, endDate?: Date, templateIds?: string[]): Promise<AnalyticsReport>;
private analyzeErrors;
private getErrorSuggestions;
private generateInsights;
private calculateTrend;
private groupBy;
private anonymizeContext;
private anonymizePath;
private hashString;
private isSensitiveVariable;
private persistEvents;
private checkStorageLimit;
private syncToRemote;
private generateEventId;
private generateSessionId;
private getCliVersion;
isEnabled(): boolean;
setEnabled(enabled: boolean): void;
exportData(format?: 'json' | 'csv'): Promise<string>;
clearData(): Promise<void>;
stop(): void;
}
export declare function createTemplateAnalytics(dataDir: string, config?: AnalyticsConfig): TemplateAnalytics;
export declare function getGlobalTemplateAnalytics(): TemplateAnalytics;
export declare function setGlobalTemplateAnalytics(analytics: TemplateAnalytics): void;