@jagilber-org/index-server 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1354 -0
- package/CODE_OF_CONDUCT.md +49 -0
- package/CONTRIBUTING.md +99 -0
- package/LICENSE +21 -0
- package/README.md +228 -0
- package/SECURITY.md +50 -0
- package/dist/config/configUtils.d.ts +11 -0
- package/dist/config/configUtils.js +87 -0
- package/dist/config/dashboardConfig.d.ts +46 -0
- package/dist/config/dashboardConfig.js +67 -0
- package/dist/config/defaultValues.d.ts +63 -0
- package/dist/config/defaultValues.js +72 -0
- package/dist/config/dirConstants.d.ts +18 -0
- package/dist/config/dirConstants.js +29 -0
- package/dist/config/featureConfig.d.ts +61 -0
- package/dist/config/featureConfig.js +121 -0
- package/dist/config/runtimeConfig.d.ts +151 -0
- package/dist/config/runtimeConfig.js +380 -0
- package/dist/config/serverConfig.d.ts +90 -0
- package/dist/config/serverConfig.js +167 -0
- package/dist/dashboard/analytics/AnalyticsEngine.d.ts +142 -0
- package/dist/dashboard/analytics/AnalyticsEngine.js +373 -0
- package/dist/dashboard/analytics/BusinessIntelligence.d.ts +187 -0
- package/dist/dashboard/analytics/BusinessIntelligence.js +594 -0
- package/dist/dashboard/client/admin.html +2175 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs +1 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/render-T6MDALS3.mjs +27 -0
- package/dist/dashboard/client/css/admin.css +1587 -0
- package/dist/dashboard/client/js/admin.auth.js +179 -0
- package/dist/dashboard/client/js/admin.boot.js +359 -0
- package/dist/dashboard/client/js/admin.config.js +196 -0
- package/dist/dashboard/client/js/admin.embeddings.js +426 -0
- package/dist/dashboard/client/js/admin.graph.js +615 -0
- package/dist/dashboard/client/js/admin.instances.js +120 -0
- package/dist/dashboard/client/js/admin.instructions.js +579 -0
- package/dist/dashboard/client/js/admin.logs.js +113 -0
- package/dist/dashboard/client/js/admin.maintenance.js +393 -0
- package/dist/dashboard/client/js/admin.messaging.js +636 -0
- package/dist/dashboard/client/js/admin.monitor.js +184 -0
- package/dist/dashboard/client/js/admin.overview.js +221 -0
- package/dist/dashboard/client/js/admin.performance.js +61 -0
- package/dist/dashboard/client/js/admin.sessions.js +292 -0
- package/dist/dashboard/client/js/admin.sqlite.js +373 -0
- package/dist/dashboard/client/js/admin.utils.js +49 -0
- package/dist/dashboard/client/js/chart.umd.js +14 -0
- package/dist/dashboard/client/js/elk.bundled.js +6696 -0
- package/dist/dashboard/client/js/marked.umd.js +74 -0
- package/dist/dashboard/client/js/mermaid.min.js +3022 -0
- package/dist/dashboard/client/mermaid-layout-elk.esm.min.mjs +1 -0
- package/dist/dashboard/export/DataExporter.d.ts +169 -0
- package/dist/dashboard/export/DataExporter.js +737 -0
- package/dist/dashboard/export/exporters/csvExporter.d.ts +11 -0
- package/dist/dashboard/export/exporters/csvExporter.js +47 -0
- package/dist/dashboard/export/exporters/exportTypes.d.ts +89 -0
- package/dist/dashboard/export/exporters/exportTypes.js +5 -0
- package/dist/dashboard/export/exporters/jsonExporter.d.ts +7 -0
- package/dist/dashboard/export/exporters/jsonExporter.js +23 -0
- package/dist/dashboard/export/exporters/xmlExporter.d.ts +17 -0
- package/dist/dashboard/export/exporters/xmlExporter.js +176 -0
- package/dist/dashboard/integration/APIIntegration.d.ts +41 -0
- package/dist/dashboard/integration/APIIntegration.js +95 -0
- package/dist/dashboard/security/SecurityMonitor.d.ts +167 -0
- package/dist/dashboard/security/SecurityMonitor.js +560 -0
- package/dist/dashboard/server/AdminPanel.d.ts +195 -0
- package/dist/dashboard/server/AdminPanel.js +861 -0
- package/dist/dashboard/server/AdminPanelConfig.d.ts +42 -0
- package/dist/dashboard/server/AdminPanelConfig.js +80 -0
- package/dist/dashboard/server/AdminPanelState.d.ts +47 -0
- package/dist/dashboard/server/AdminPanelState.js +215 -0
- package/dist/dashboard/server/ApiRoutes.d.ts +17 -0
- package/dist/dashboard/server/ApiRoutes.js +184 -0
- package/dist/dashboard/server/DashboardServer.d.ts +49 -0
- package/dist/dashboard/server/DashboardServer.js +160 -0
- package/dist/dashboard/server/FileMetricsStorage.d.ts +49 -0
- package/dist/dashboard/server/FileMetricsStorage.js +196 -0
- package/dist/dashboard/server/HttpTransport.d.ts +23 -0
- package/dist/dashboard/server/HttpTransport.js +116 -0
- package/dist/dashboard/server/InstanceManager.d.ts +53 -0
- package/dist/dashboard/server/InstanceManager.js +295 -0
- package/dist/dashboard/server/KnowledgeStore.d.ts +35 -0
- package/dist/dashboard/server/KnowledgeStore.js +105 -0
- package/dist/dashboard/server/LeaderElection.d.ts +81 -0
- package/dist/dashboard/server/LeaderElection.js +268 -0
- package/dist/dashboard/server/MetricsCollector.d.ts +200 -0
- package/dist/dashboard/server/MetricsCollector.js +810 -0
- package/dist/dashboard/server/SessionPersistenceManager.d.ts +88 -0
- package/dist/dashboard/server/SessionPersistenceManager.js +458 -0
- package/dist/dashboard/server/ThinClient.d.ts +64 -0
- package/dist/dashboard/server/ThinClient.js +237 -0
- package/dist/dashboard/server/WebSocketManager.d.ts +161 -0
- package/dist/dashboard/server/WebSocketManager.js +448 -0
- package/dist/dashboard/server/httpLifecycle.d.ts +17 -0
- package/dist/dashboard/server/httpLifecycle.js +35 -0
- package/dist/dashboard/server/legacyDashboardHtml.d.ts +9 -0
- package/dist/dashboard/server/legacyDashboardHtml.js +618 -0
- package/dist/dashboard/server/legacyDashboardStyles.d.ts +5 -0
- package/dist/dashboard/server/legacyDashboardStyles.js +490 -0
- package/dist/dashboard/server/metricsAggregation.d.ts +252 -0
- package/dist/dashboard/server/metricsAggregation.js +210 -0
- package/dist/dashboard/server/metricsSerializer.d.ts +25 -0
- package/dist/dashboard/server/metricsSerializer.js +195 -0
- package/dist/dashboard/server/middleware/ensureLoadedMiddleware.d.ts +25 -0
- package/dist/dashboard/server/middleware/ensureLoadedMiddleware.js +24 -0
- package/dist/dashboard/server/routes/admin.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/admin.routes.js +574 -0
- package/dist/dashboard/server/routes/adminAuth.d.ts +4 -0
- package/dist/dashboard/server/routes/adminAuth.js +46 -0
- package/dist/dashboard/server/routes/alerts.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/alerts.routes.js +91 -0
- package/dist/dashboard/server/routes/api.feedback.routes.d.ts +73 -0
- package/dist/dashboard/server/routes/api.feedback.routes.js +171 -0
- package/dist/dashboard/server/routes/api.instructions.routes.d.ts +101 -0
- package/dist/dashboard/server/routes/api.instructions.routes.js +213 -0
- package/dist/dashboard/server/routes/api.usage.routes.d.ts +57 -0
- package/dist/dashboard/server/routes/api.usage.routes.js +374 -0
- package/dist/dashboard/server/routes/embeddings.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/embeddings.routes.js +246 -0
- package/dist/dashboard/server/routes/graph.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/graph.routes.js +279 -0
- package/dist/dashboard/server/routes/index.d.ts +39 -0
- package/dist/dashboard/server/routes/index.js +229 -0
- package/dist/dashboard/server/routes/instances.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/instances.routes.js +35 -0
- package/dist/dashboard/server/routes/instructions.routes.d.ts +8 -0
- package/dist/dashboard/server/routes/instructions.routes.js +268 -0
- package/dist/dashboard/server/routes/knowledge.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/knowledge.routes.js +80 -0
- package/dist/dashboard/server/routes/logs.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/logs.routes.js +166 -0
- package/dist/dashboard/server/routes/messaging.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/messaging.routes.js +307 -0
- package/dist/dashboard/server/routes/metrics.routes.d.ts +10 -0
- package/dist/dashboard/server/routes/metrics.routes.js +335 -0
- package/dist/dashboard/server/routes/scripts.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/scripts.routes.js +84 -0
- package/dist/dashboard/server/routes/sqlite.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/sqlite.routes.js +570 -0
- package/dist/dashboard/server/routes/status.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/status.routes.js +179 -0
- package/dist/dashboard/server/routes/synthetic.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/synthetic.routes.js +197 -0
- package/dist/dashboard/server/routes/tools.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/tools.routes.js +47 -0
- package/dist/dashboard/server/routes/usage.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/usage.routes.js +26 -0
- package/dist/dashboard/server/wsInit.d.ts +16 -0
- package/dist/dashboard/server/wsInit.js +35 -0
- package/dist/externalClientLib.d.ts +1 -0
- package/dist/externalClientLib.js +2 -0
- package/dist/minimal/index.d.ts +1 -0
- package/dist/minimal/index.js +140 -0
- package/dist/models/SessionPersistence.d.ts +115 -0
- package/dist/models/SessionPersistence.js +66 -0
- package/dist/models/instruction.d.ts +46 -0
- package/dist/models/instruction.js +2 -0
- package/dist/perf/benchmark.d.ts +1 -0
- package/dist/perf/benchmark.js +50 -0
- package/dist/portableClientWrapper.d.ts +1 -0
- package/dist/portableClientWrapper.js +2 -0
- package/dist/schemas/index.d.ts +132 -0
- package/dist/schemas/index.js +372 -0
- package/dist/scripts/runPerformanceBaseline.d.ts +1 -0
- package/dist/scripts/runPerformanceBaseline.js +17 -0
- package/dist/server/backgroundServicesStartup.d.ts +3 -0
- package/dist/server/backgroundServicesStartup.js +51 -0
- package/dist/server/handshakeManager.d.ts +25 -0
- package/dist/server/handshakeManager.js +470 -0
- package/dist/server/index-server.d.ts +38 -0
- package/dist/server/index-server.js +620 -0
- package/dist/server/multiInstanceStartup.d.ts +6 -0
- package/dist/server/multiInstanceStartup.js +132 -0
- package/dist/server/registry.d.ts +44 -0
- package/dist/server/registry.js +236 -0
- package/dist/server/sdkServer.d.ts +8 -0
- package/dist/server/sdkServer.js +299 -0
- package/dist/server/shutdownGuard.d.ts +41 -0
- package/dist/server/shutdownGuard.js +52 -0
- package/dist/server/startupDiagnostics.d.ts +2 -0
- package/dist/server/startupDiagnostics.js +33 -0
- package/dist/server/thin-client.d.ts +22 -0
- package/dist/server/thin-client.js +111 -0
- package/dist/server/transport.d.ts +41 -0
- package/dist/server/transport.js +312 -0
- package/dist/server/transportFactory.d.ts +21 -0
- package/dist/server/transportFactory.js +429 -0
- package/dist/services/atomicFs.d.ts +22 -0
- package/dist/services/atomicFs.js +103 -0
- package/dist/services/auditLog.d.ts +38 -0
- package/dist/services/auditLog.js +142 -0
- package/dist/services/autoBackup.d.ts +14 -0
- package/dist/services/autoBackup.js +171 -0
- package/dist/services/autoSplit.d.ts +32 -0
- package/dist/services/autoSplit.js +113 -0
- package/dist/services/backupZip.d.ts +25 -0
- package/dist/services/backupZip.js +112 -0
- package/dist/services/bootstrapGating.d.ts +123 -0
- package/dist/services/bootstrapGating.js +221 -0
- package/dist/services/canonical.d.ts +23 -0
- package/dist/services/canonical.js +65 -0
- package/dist/services/categoryRules.d.ts +7 -0
- package/dist/services/categoryRules.js +37 -0
- package/dist/services/classificationService.d.ts +42 -0
- package/dist/services/classificationService.js +168 -0
- package/dist/services/embeddingService.d.ts +62 -0
- package/dist/services/embeddingService.js +264 -0
- package/dist/services/errors.d.ts +22 -0
- package/dist/services/errors.js +31 -0
- package/dist/services/featureFlags.d.ts +25 -0
- package/dist/services/featureFlags.js +89 -0
- package/dist/services/features.d.ts +13 -0
- package/dist/services/features.js +35 -0
- package/dist/services/handlers/instructions.add.d.ts +1 -0
- package/dist/services/handlers/instructions.add.js +510 -0
- package/dist/services/handlers/instructions.groom.d.ts +1 -0
- package/dist/services/handlers/instructions.groom.js +575 -0
- package/dist/services/handlers/instructions.import.d.ts +1 -0
- package/dist/services/handlers/instructions.import.js +205 -0
- package/dist/services/handlers/instructions.patch.d.ts +1 -0
- package/dist/services/handlers/instructions.patch.js +121 -0
- package/dist/services/handlers/instructions.query.d.ts +159 -0
- package/dist/services/handlers/instructions.query.js +469 -0
- package/dist/services/handlers/instructions.reload.d.ts +1 -0
- package/dist/services/handlers/instructions.reload.js +13 -0
- package/dist/services/handlers/instructions.remove.d.ts +1 -0
- package/dist/services/handlers/instructions.remove.js +122 -0
- package/dist/services/handlers/instructions.shared.d.ts +32 -0
- package/dist/services/handlers/instructions.shared.js +91 -0
- package/dist/services/handlers.activation.d.ts +1 -0
- package/dist/services/handlers.activation.js +203 -0
- package/dist/services/handlers.bootstrap.d.ts +1 -0
- package/dist/services/handlers.bootstrap.js +38 -0
- package/dist/services/handlers.dashboardConfig.d.ts +34 -0
- package/dist/services/handlers.dashboardConfig.js +110 -0
- package/dist/services/handlers.diagnostics.d.ts +1 -0
- package/dist/services/handlers.diagnostics.js +64 -0
- package/dist/services/handlers.feedback.d.ts +15 -0
- package/dist/services/handlers.feedback.js +389 -0
- package/dist/services/handlers.gates.d.ts +1 -0
- package/dist/services/handlers.gates.js +47 -0
- package/dist/services/handlers.graph.d.ts +53 -0
- package/dist/services/handlers.graph.js +231 -0
- package/dist/services/handlers.help.d.ts +1 -0
- package/dist/services/handlers.help.js +119 -0
- package/dist/services/handlers.instructionSchema.d.ts +1 -0
- package/dist/services/handlers.instructionSchema.js +227 -0
- package/dist/services/handlers.instructions.d.ts +8 -0
- package/dist/services/handlers.instructions.js +14 -0
- package/dist/services/handlers.instructionsDiagnostics.d.ts +1 -0
- package/dist/services/handlers.instructionsDiagnostics.js +14 -0
- package/dist/services/handlers.integrity.d.ts +1 -0
- package/dist/services/handlers.integrity.js +35 -0
- package/dist/services/handlers.manifest.d.ts +1 -0
- package/dist/services/handlers.manifest.js +24 -0
- package/dist/services/handlers.messaging.d.ts +12 -0
- package/dist/services/handlers.messaging.js +203 -0
- package/dist/services/handlers.metrics.d.ts +1 -0
- package/dist/services/handlers.metrics.js +43 -0
- package/dist/services/handlers.promote.d.ts +1 -0
- package/dist/services/handlers.promote.js +326 -0
- package/dist/services/handlers.prompt.d.ts +1 -0
- package/dist/services/handlers.prompt.js +7 -0
- package/dist/services/handlers.search.d.ts +69 -0
- package/dist/services/handlers.search.js +669 -0
- package/dist/services/handlers.testPrimitive.d.ts +1 -0
- package/dist/services/handlers.testPrimitive.js +5 -0
- package/dist/services/handlers.trace.d.ts +1 -0
- package/dist/services/handlers.trace.js +35 -0
- package/dist/services/handlers.usage.d.ts +1 -0
- package/dist/services/handlers.usage.js +11 -0
- package/dist/services/hotScore.d.ts +137 -0
- package/dist/services/hotScore.js +244 -0
- package/dist/services/indexContext.d.ts +117 -0
- package/dist/services/indexContext.js +989 -0
- package/dist/services/indexLoader.d.ts +44 -0
- package/dist/services/indexLoader.js +920 -0
- package/dist/services/indexRepository.d.ts +32 -0
- package/dist/services/indexRepository.js +71 -0
- package/dist/services/indexingService.d.ts +1 -0
- package/dist/services/indexingService.js +2 -0
- package/dist/services/instructions.dispatcher.d.ts +1 -0
- package/dist/services/instructions.dispatcher.js +231 -0
- package/dist/services/logPrefix.d.ts +1 -0
- package/dist/services/logPrefix.js +30 -0
- package/dist/services/logger.d.ts +52 -0
- package/dist/services/logger.js +268 -0
- package/dist/services/manifestManager.d.ts +82 -0
- package/dist/services/manifestManager.js +200 -0
- package/dist/services/messaging/agentMailbox.d.ts +60 -0
- package/dist/services/messaging/agentMailbox.js +353 -0
- package/dist/services/messaging/messagingPersistence.d.ts +20 -0
- package/dist/services/messaging/messagingPersistence.js +111 -0
- package/dist/services/messaging/messagingTypes.d.ts +150 -0
- package/dist/services/messaging/messagingTypes.js +66 -0
- package/dist/services/ownershipService.d.ts +1 -0
- package/dist/services/ownershipService.js +36 -0
- package/dist/services/performanceBaseline.d.ts +19 -0
- package/dist/services/performanceBaseline.js +210 -0
- package/dist/services/preflight.d.ts +12 -0
- package/dist/services/preflight.js +79 -0
- package/dist/services/promptReviewService.d.ts +44 -0
- package/dist/services/promptReviewService.js +101 -0
- package/dist/services/responseEnvelope.d.ts +6 -0
- package/dist/services/responseEnvelope.js +25 -0
- package/dist/services/seedBootstrap.d.ts +34 -0
- package/dist/services/seedBootstrap.js +259 -0
- package/dist/services/storage/factory.d.ts +17 -0
- package/dist/services/storage/factory.js +35 -0
- package/dist/services/storage/hashUtils.d.ts +11 -0
- package/dist/services/storage/hashUtils.js +35 -0
- package/dist/services/storage/index.d.ts +12 -0
- package/dist/services/storage/index.js +18 -0
- package/dist/services/storage/jsonFileStore.d.ts +32 -0
- package/dist/services/storage/jsonFileStore.js +241 -0
- package/dist/services/storage/migrationEngine.d.ts +35 -0
- package/dist/services/storage/migrationEngine.js +93 -0
- package/dist/services/storage/sqliteMessageStore.d.ts +53 -0
- package/dist/services/storage/sqliteMessageStore.js +146 -0
- package/dist/services/storage/sqliteSchema.d.ts +12 -0
- package/dist/services/storage/sqliteSchema.js +123 -0
- package/dist/services/storage/sqliteStore.d.ts +42 -0
- package/dist/services/storage/sqliteStore.js +361 -0
- package/dist/services/storage/sqliteUsageStore.d.ts +35 -0
- package/dist/services/storage/sqliteUsageStore.js +94 -0
- package/dist/services/storage/types.d.ts +171 -0
- package/dist/services/storage/types.js +12 -0
- package/dist/services/toolHandlers.d.ts +23 -0
- package/dist/services/toolHandlers.js +50 -0
- package/dist/services/toolRegistry.d.ts +20 -0
- package/dist/services/toolRegistry.js +490 -0
- package/dist/services/toolRegistry.zod.d.ts +10 -0
- package/dist/services/toolRegistry.zod.js +325 -0
- package/dist/services/tracing.d.ts +26 -0
- package/dist/services/tracing.js +260 -0
- package/dist/services/usageBuckets.d.ts +161 -0
- package/dist/services/usageBuckets.js +364 -0
- package/dist/services/validationService.d.ts +38 -0
- package/dist/services/validationService.js +125 -0
- package/dist/utils/BufferRing.d.ts +203 -0
- package/dist/utils/BufferRing.js +551 -0
- package/dist/utils/BufferRingExamples.d.ts +55 -0
- package/dist/utils/BufferRingExamples.js +188 -0
- package/dist/utils/envUtils.d.ts +42 -0
- package/dist/utils/envUtils.js +80 -0
- package/dist/utils/memoryMonitor.d.ts +83 -0
- package/dist/utils/memoryMonitor.js +275 -0
- package/dist/versioning/schemaVersion.d.ts +6 -0
- package/dist/versioning/schemaVersion.js +94 -0
- package/package.json +139 -0
- package/schemas/README.md +13 -0
- package/schemas/feedback-entry.schema.json +27 -0
- package/schemas/graph-export-v2.schema.json +60 -0
- package/schemas/index-server.code-schema.json +40670 -0
- package/schemas/instruction.schema.json +262 -0
- package/schemas/json-schema/SessionPersistence-persisted-admin-session.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-persisted-session-history-entry.schema.json +51 -0
- package/schemas/json-schema/SessionPersistence-persisted-web-socket-connection.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-config.schema.json +110 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-data.schema.json +229 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-manifest.schema.json +109 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-metadata.schema.json +55 -0
- package/schemas/json-schema/instruction-audience-scope.schema.json +14 -0
- package/schemas/json-schema/instruction-content-type.schema.json +17 -0
- package/schemas/json-schema/instruction-instruction-entry.schema.json +210 -0
- package/schemas/json-schema/instruction-requirement-level.schema.json +16 -0
- package/schemas/manifest.json +78 -0
- package/schemas/manifest.schema.json +33 -0
- package/schemas/usage-batch.schema.json +16 -0
- package/schemas/usage-buckets.schema.json +30 -0
- package/schemas/usage-event.schema.json +17 -0
- package/scripts/copy-dashboard-assets.mjs +170 -0
- package/scripts/dist/README.md +15 -0
- package/scripts/setup-hooks.cjs +28 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AnalyticsEngine - Phase 3 Advanced Analytics & Business Intelligence
|
|
3
|
+
*
|
|
4
|
+
* Analytics engine providing:
|
|
5
|
+
* - Real-time trend analysis and forecasting
|
|
6
|
+
* - Business intelligence metrics and KPIs
|
|
7
|
+
* - Performance analytics and optimization insights
|
|
8
|
+
* - Usage pattern recognition and anomaly detection
|
|
9
|
+
*/
|
|
10
|
+
export interface TimeSeriesData {
|
|
11
|
+
timestamp: number;
|
|
12
|
+
value: number;
|
|
13
|
+
metadata?: Record<string, string | number | boolean>;
|
|
14
|
+
}
|
|
15
|
+
export interface TrendAnalysis {
|
|
16
|
+
trend: 'increasing' | 'decreasing' | 'stable' | 'volatile';
|
|
17
|
+
confidence: number;
|
|
18
|
+
slope: number;
|
|
19
|
+
correlation: number;
|
|
20
|
+
forecast: TimeSeriesData[];
|
|
21
|
+
seasonality?: {
|
|
22
|
+
detected: boolean;
|
|
23
|
+
period: number;
|
|
24
|
+
strength: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface BusinessMetrics {
|
|
28
|
+
totalRequests: number;
|
|
29
|
+
successRate: number;
|
|
30
|
+
averageResponseTime: number;
|
|
31
|
+
errorRate: number;
|
|
32
|
+
throughput: number;
|
|
33
|
+
latencyPercentiles: {
|
|
34
|
+
p50: number;
|
|
35
|
+
p90: number;
|
|
36
|
+
p95: number;
|
|
37
|
+
p99: number;
|
|
38
|
+
};
|
|
39
|
+
topTools: Array<{
|
|
40
|
+
name: string;
|
|
41
|
+
usage: number;
|
|
42
|
+
trend: number;
|
|
43
|
+
revenue?: number;
|
|
44
|
+
}>;
|
|
45
|
+
userSegmentation: {
|
|
46
|
+
powerUsers: number;
|
|
47
|
+
regularUsers: number;
|
|
48
|
+
casualUsers: number;
|
|
49
|
+
};
|
|
50
|
+
growthRate: number;
|
|
51
|
+
retentionRate: number;
|
|
52
|
+
churnRate: number;
|
|
53
|
+
}
|
|
54
|
+
export interface AnomalyDetection {
|
|
55
|
+
anomalies: Array<{
|
|
56
|
+
timestamp: number;
|
|
57
|
+
value: number;
|
|
58
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
59
|
+
type: 'spike' | 'drop' | 'outlier' | 'pattern_break';
|
|
60
|
+
description: string;
|
|
61
|
+
confidence: number;
|
|
62
|
+
}>;
|
|
63
|
+
patterns: Array<{
|
|
64
|
+
name: string;
|
|
65
|
+
description: string;
|
|
66
|
+
frequency: number;
|
|
67
|
+
lastSeen: number;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
export interface PredictiveInsights {
|
|
71
|
+
nextHourForecast: TimeSeriesData[];
|
|
72
|
+
nextDayForecast: TimeSeriesData[];
|
|
73
|
+
nextWeekForecast: TimeSeriesData[];
|
|
74
|
+
recommendations: Array<{
|
|
75
|
+
type: 'optimization' | 'scaling' | 'maintenance' | 'business';
|
|
76
|
+
priority: 'low' | 'medium' | 'high' | 'critical';
|
|
77
|
+
title: string;
|
|
78
|
+
description: string;
|
|
79
|
+
impact: string;
|
|
80
|
+
effort: 'low' | 'medium' | 'high';
|
|
81
|
+
expectedRoi?: number;
|
|
82
|
+
}>;
|
|
83
|
+
alerts: Array<{
|
|
84
|
+
id: string;
|
|
85
|
+
type: 'performance' | 'capacity' | 'security' | 'business';
|
|
86
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
87
|
+
message: string;
|
|
88
|
+
timestamp: number;
|
|
89
|
+
actionRequired: boolean;
|
|
90
|
+
}>;
|
|
91
|
+
}
|
|
92
|
+
export declare class AnalyticsEngine {
|
|
93
|
+
private timeSeriesData;
|
|
94
|
+
private businessMetrics;
|
|
95
|
+
private anomaliesHistory;
|
|
96
|
+
constructor();
|
|
97
|
+
private initializeMetrics;
|
|
98
|
+
/**
|
|
99
|
+
* Add time series data point for analysis
|
|
100
|
+
*/
|
|
101
|
+
addDataPoint(metric: string, value: number, metadata?: Record<string, string | number | boolean>): void;
|
|
102
|
+
/**
|
|
103
|
+
* Perform trend analysis on time series data
|
|
104
|
+
*/
|
|
105
|
+
analyzeTrend(metric: string, lookbackHours?: number): TrendAnalysis | null;
|
|
106
|
+
/**
|
|
107
|
+
* Detect anomalies in time series data
|
|
108
|
+
*/
|
|
109
|
+
detectAnomalies(metric: string): AnomalyDetection;
|
|
110
|
+
/**
|
|
111
|
+
* Generate predictive insights and recommendations
|
|
112
|
+
*/
|
|
113
|
+
generateInsights(): PredictiveInsights;
|
|
114
|
+
/**
|
|
115
|
+
* Get current business metrics
|
|
116
|
+
*/
|
|
117
|
+
getBusinessMetrics(): BusinessMetrics;
|
|
118
|
+
/**
|
|
119
|
+
* Get time series data for visualization
|
|
120
|
+
*/
|
|
121
|
+
getTimeSeriesData(metric: string, hours?: number): TimeSeriesData[];
|
|
122
|
+
/**
|
|
123
|
+
* Get available metrics list
|
|
124
|
+
*/
|
|
125
|
+
getAvailableMetrics(): string[];
|
|
126
|
+
private calculateLinearRegression;
|
|
127
|
+
private determineTrend;
|
|
128
|
+
private calculateVolatility;
|
|
129
|
+
private generateForecast;
|
|
130
|
+
private detectSeasonality;
|
|
131
|
+
private calculateSeasonalStrength;
|
|
132
|
+
private findAnomalies;
|
|
133
|
+
private identifyPatterns;
|
|
134
|
+
private calculateHourlyAverages;
|
|
135
|
+
private generateRecommendations;
|
|
136
|
+
private generateAlerts;
|
|
137
|
+
private generateMetricForecast;
|
|
138
|
+
private updateBusinessMetrics;
|
|
139
|
+
private startAnalyticsLoop;
|
|
140
|
+
private performBackgroundAnalytics;
|
|
141
|
+
}
|
|
142
|
+
export declare function getAnalyticsEngine(): AnalyticsEngine;
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AnalyticsEngine - Phase 3 Advanced Analytics & Business Intelligence
|
|
4
|
+
*
|
|
5
|
+
* Analytics engine providing:
|
|
6
|
+
* - Real-time trend analysis and forecasting
|
|
7
|
+
* - Business intelligence metrics and KPIs
|
|
8
|
+
* - Performance analytics and optimization insights
|
|
9
|
+
* - Usage pattern recognition and anomaly detection
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AnalyticsEngine = void 0;
|
|
13
|
+
exports.getAnalyticsEngine = getAnalyticsEngine;
|
|
14
|
+
class AnalyticsEngine {
|
|
15
|
+
timeSeriesData = new Map();
|
|
16
|
+
businessMetrics;
|
|
17
|
+
anomaliesHistory = [];
|
|
18
|
+
constructor() {
|
|
19
|
+
this.businessMetrics = this.initializeMetrics();
|
|
20
|
+
this.startAnalyticsLoop();
|
|
21
|
+
}
|
|
22
|
+
initializeMetrics() {
|
|
23
|
+
return {
|
|
24
|
+
totalRequests: 0,
|
|
25
|
+
successRate: 0.0,
|
|
26
|
+
averageResponseTime: 0,
|
|
27
|
+
errorRate: 0.0,
|
|
28
|
+
throughput: 0,
|
|
29
|
+
latencyPercentiles: { p50: 0, p90: 0, p95: 0, p99: 0 },
|
|
30
|
+
topTools: [],
|
|
31
|
+
userSegmentation: { powerUsers: 0, regularUsers: 0, casualUsers: 0 },
|
|
32
|
+
growthRate: 0,
|
|
33
|
+
retentionRate: 0,
|
|
34
|
+
churnRate: 0
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Add time series data point for analysis
|
|
39
|
+
*/
|
|
40
|
+
addDataPoint(metric, value, metadata) {
|
|
41
|
+
const dataPoint = {
|
|
42
|
+
timestamp: Date.now(),
|
|
43
|
+
value,
|
|
44
|
+
metadata
|
|
45
|
+
};
|
|
46
|
+
if (!this.timeSeriesData.has(metric)) {
|
|
47
|
+
this.timeSeriesData.set(metric, []);
|
|
48
|
+
}
|
|
49
|
+
const series = this.timeSeriesData.get(metric);
|
|
50
|
+
series.push(dataPoint);
|
|
51
|
+
// Keep only last 24 hours of data for performance
|
|
52
|
+
const twentyFourHoursAgo = Date.now() - (24 * 60 * 60 * 1000);
|
|
53
|
+
this.timeSeriesData.set(metric, series.filter(point => point.timestamp > twentyFourHoursAgo));
|
|
54
|
+
this.updateBusinessMetrics(metric, value, metadata);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Perform trend analysis on time series data
|
|
58
|
+
*/
|
|
59
|
+
analyzeTrend(metric, lookbackHours = 1) {
|
|
60
|
+
const series = this.timeSeriesData.get(metric);
|
|
61
|
+
if (!series || series.length < 10)
|
|
62
|
+
return null;
|
|
63
|
+
const lookbackMs = lookbackHours * 60 * 60 * 1000;
|
|
64
|
+
const cutoff = Date.now() - lookbackMs;
|
|
65
|
+
const recentData = series.filter(point => point.timestamp >= cutoff);
|
|
66
|
+
if (recentData.length < 5)
|
|
67
|
+
return null;
|
|
68
|
+
// Calculate linear regression
|
|
69
|
+
const { slope, correlation } = this.calculateLinearRegression(recentData);
|
|
70
|
+
// Determine trend direction
|
|
71
|
+
const trend = this.determineTrend(slope, recentData);
|
|
72
|
+
// Calculate confidence based on correlation and data points
|
|
73
|
+
const confidence = Math.min(0.95, Math.abs(correlation) * (recentData.length / 100));
|
|
74
|
+
// Generate forecast
|
|
75
|
+
const forecast = this.generateForecast(recentData, slope, 12); // 12 future points
|
|
76
|
+
// Detect seasonality
|
|
77
|
+
const seasonality = this.detectSeasonality(series);
|
|
78
|
+
return {
|
|
79
|
+
trend,
|
|
80
|
+
confidence,
|
|
81
|
+
slope,
|
|
82
|
+
correlation,
|
|
83
|
+
forecast,
|
|
84
|
+
seasonality
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Detect anomalies in time series data
|
|
89
|
+
*/
|
|
90
|
+
detectAnomalies(metric) {
|
|
91
|
+
const series = this.timeSeriesData.get(metric) || [];
|
|
92
|
+
if (series.length < 20) {
|
|
93
|
+
return { anomalies: [], patterns: [] };
|
|
94
|
+
}
|
|
95
|
+
const anomalies = this.findAnomalies(series);
|
|
96
|
+
const patterns = this.identifyPatterns(series);
|
|
97
|
+
return { anomalies, patterns };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Generate predictive insights and recommendations
|
|
101
|
+
*/
|
|
102
|
+
generateInsights() {
|
|
103
|
+
const recommendations = this.generateRecommendations();
|
|
104
|
+
const alerts = this.generateAlerts();
|
|
105
|
+
// Generate forecasts for key metrics
|
|
106
|
+
const nextHourForecast = this.generateMetricForecast('requests_per_minute', 60);
|
|
107
|
+
const nextDayForecast = this.generateMetricForecast('requests_per_hour', 24);
|
|
108
|
+
const nextWeekForecast = this.generateMetricForecast('requests_per_day', 7);
|
|
109
|
+
return {
|
|
110
|
+
nextHourForecast,
|
|
111
|
+
nextDayForecast,
|
|
112
|
+
nextWeekForecast,
|
|
113
|
+
recommendations,
|
|
114
|
+
alerts
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get current business metrics
|
|
119
|
+
*/
|
|
120
|
+
getBusinessMetrics() {
|
|
121
|
+
return { ...this.businessMetrics };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get time series data for visualization
|
|
125
|
+
*/
|
|
126
|
+
getTimeSeriesData(metric, hours = 1) {
|
|
127
|
+
const series = this.timeSeriesData.get(metric) || [];
|
|
128
|
+
const cutoff = Date.now() - (hours * 60 * 60 * 1000);
|
|
129
|
+
return series.filter(point => point.timestamp >= cutoff);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get available metrics list
|
|
133
|
+
*/
|
|
134
|
+
getAvailableMetrics() {
|
|
135
|
+
return Array.from(this.timeSeriesData.keys());
|
|
136
|
+
}
|
|
137
|
+
// Private helper methods
|
|
138
|
+
calculateLinearRegression(data) {
|
|
139
|
+
const n = data.length;
|
|
140
|
+
if (n < 2)
|
|
141
|
+
return { slope: 0, correlation: 0 };
|
|
142
|
+
const x = data.map(point => point.timestamp);
|
|
143
|
+
const y = data.map(point => point.value);
|
|
144
|
+
const sumX = x.reduce((a, b) => a + b, 0);
|
|
145
|
+
const sumY = y.reduce((a, b) => a + b, 0);
|
|
146
|
+
const sumXY = x.reduce((total, xi, i) => total + xi * y[i], 0);
|
|
147
|
+
const sumXX = x.reduce((total, xi) => total + xi * xi, 0);
|
|
148
|
+
const sumYY = y.reduce((total, yi) => total + yi * yi, 0);
|
|
149
|
+
const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
|
|
150
|
+
const numerator = n * sumXY - sumX * sumY;
|
|
151
|
+
const denominator = Math.sqrt((n * sumXX - sumX * sumX) * (n * sumYY - sumY * sumY));
|
|
152
|
+
const correlation = denominator === 0 ? 0 : numerator / denominator;
|
|
153
|
+
return { slope, correlation };
|
|
154
|
+
}
|
|
155
|
+
determineTrend(slope, data) {
|
|
156
|
+
const values = data.map(point => point.value);
|
|
157
|
+
const volatility = this.calculateVolatility(values);
|
|
158
|
+
if (volatility > 0.5)
|
|
159
|
+
return 'volatile';
|
|
160
|
+
if (Math.abs(slope) < 0.001)
|
|
161
|
+
return 'stable';
|
|
162
|
+
return slope > 0 ? 'increasing' : 'decreasing';
|
|
163
|
+
}
|
|
164
|
+
calculateVolatility(values) {
|
|
165
|
+
if (values.length < 2)
|
|
166
|
+
return 0;
|
|
167
|
+
const mean = values.reduce((a, b) => a + b, 0) / values.length;
|
|
168
|
+
const variance = values.reduce((total, value) => total + Math.pow(value - mean, 2), 0) / values.length;
|
|
169
|
+
const stdDev = Math.sqrt(variance);
|
|
170
|
+
return mean === 0 ? 0 : stdDev / Math.abs(mean);
|
|
171
|
+
}
|
|
172
|
+
generateForecast(data, slope, points) {
|
|
173
|
+
if (data.length === 0)
|
|
174
|
+
return [];
|
|
175
|
+
const lastPoint = data[data.length - 1];
|
|
176
|
+
const timeInterval = data.length > 1 ?
|
|
177
|
+
(lastPoint.timestamp - data[data.length - 2].timestamp) : 60000; // 1 minute default
|
|
178
|
+
const forecast = [];
|
|
179
|
+
for (let i = 1; i <= points; i++) {
|
|
180
|
+
const timestamp = lastPoint.timestamp + (i * timeInterval);
|
|
181
|
+
const value = Math.max(0, lastPoint.value + (slope * i * timeInterval));
|
|
182
|
+
forecast.push({
|
|
183
|
+
timestamp,
|
|
184
|
+
value,
|
|
185
|
+
metadata: { forecasted: true }
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return forecast;
|
|
189
|
+
}
|
|
190
|
+
detectSeasonality(data) {
|
|
191
|
+
if (data.length < 48)
|
|
192
|
+
return { detected: false, period: 0, strength: 0 };
|
|
193
|
+
// Simple seasonality detection - check for repeating patterns
|
|
194
|
+
const values = data.map(point => point.value);
|
|
195
|
+
const periods = [12, 24, 48, 96]; // 5min, 10min, 20min, 40min intervals
|
|
196
|
+
let bestPeriod = 0;
|
|
197
|
+
let bestStrength = 0;
|
|
198
|
+
for (const period of periods) {
|
|
199
|
+
if (period * 2 > values.length)
|
|
200
|
+
continue;
|
|
201
|
+
const strength = this.calculateSeasonalStrength(values, period);
|
|
202
|
+
if (strength > bestStrength) {
|
|
203
|
+
bestStrength = strength;
|
|
204
|
+
bestPeriod = period;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
detected: bestStrength > 0.3,
|
|
209
|
+
period: bestPeriod,
|
|
210
|
+
strength: bestStrength
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
calculateSeasonalStrength(values, period) {
|
|
214
|
+
if (values.length < period * 2)
|
|
215
|
+
return 0;
|
|
216
|
+
let correlation = 0;
|
|
217
|
+
let count = 0;
|
|
218
|
+
for (let i = period; i < values.length; i++) {
|
|
219
|
+
correlation += values[i] * values[i - period];
|
|
220
|
+
count++;
|
|
221
|
+
}
|
|
222
|
+
return count === 0 ? 0 : Math.abs(correlation / count) / Math.max(1, Math.max(...values));
|
|
223
|
+
}
|
|
224
|
+
findAnomalies(data) {
|
|
225
|
+
if (data.length < 10)
|
|
226
|
+
return [];
|
|
227
|
+
const values = data.map(point => point.value);
|
|
228
|
+
const mean = values.reduce((a, b) => a + b, 0) / values.length;
|
|
229
|
+
const stdDev = Math.sqrt(values.reduce((total, value) => total + Math.pow(value - mean, 2), 0) / values.length);
|
|
230
|
+
const anomalies = [];
|
|
231
|
+
for (let i = 0; i < data.length; i++) {
|
|
232
|
+
const point = data[i];
|
|
233
|
+
const zScore = stdDev === 0 ? 0 : Math.abs(point.value - mean) / stdDev;
|
|
234
|
+
if (zScore > 2.5) {
|
|
235
|
+
const severity = zScore > 4 ? 'critical' : zScore > 3.5 ? 'high' : zScore > 3 ? 'medium' : 'low';
|
|
236
|
+
const type = point.value > mean ? 'spike' : 'drop';
|
|
237
|
+
anomalies.push({
|
|
238
|
+
timestamp: point.timestamp,
|
|
239
|
+
value: point.value,
|
|
240
|
+
severity,
|
|
241
|
+
type,
|
|
242
|
+
description: `${type === 'spike' ? 'Unusual spike' : 'Unusual drop'} detected (${zScore.toFixed(1)}σ from mean)`,
|
|
243
|
+
confidence: Math.min(0.95, zScore / 4)
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return anomalies;
|
|
248
|
+
}
|
|
249
|
+
identifyPatterns(data) {
|
|
250
|
+
// Simple pattern identification - could be enhanced with more sophisticated algorithms
|
|
251
|
+
const patterns = [];
|
|
252
|
+
if (data.length >= 24) {
|
|
253
|
+
const hourlyAverages = this.calculateHourlyAverages(data);
|
|
254
|
+
const peakHour = hourlyAverages.indexOf(Math.max(...hourlyAverages));
|
|
255
|
+
patterns.push({
|
|
256
|
+
name: 'Daily Peak Pattern',
|
|
257
|
+
description: `Peak usage typically occurs around hour ${peakHour}`,
|
|
258
|
+
frequency: 1.0, // daily
|
|
259
|
+
lastSeen: Date.now()
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return patterns;
|
|
263
|
+
}
|
|
264
|
+
calculateHourlyAverages(data) {
|
|
265
|
+
const hourlyBuckets = Array(24).fill(0).map(() => []);
|
|
266
|
+
data.forEach(point => {
|
|
267
|
+
const hour = new Date(point.timestamp).getHours();
|
|
268
|
+
hourlyBuckets[hour].push(point.value);
|
|
269
|
+
});
|
|
270
|
+
return hourlyBuckets.map(bucket => bucket.length === 0 ? 0 : bucket.reduce((a, b) => a + b, 0) / bucket.length);
|
|
271
|
+
}
|
|
272
|
+
generateRecommendations() {
|
|
273
|
+
const recommendations = [];
|
|
274
|
+
// Analyze current metrics and generate recommendations
|
|
275
|
+
if (this.businessMetrics.errorRate > 0.05) {
|
|
276
|
+
recommendations.push({
|
|
277
|
+
type: 'optimization',
|
|
278
|
+
priority: 'high',
|
|
279
|
+
title: 'Reduce Error Rate',
|
|
280
|
+
description: `Current error rate is ${(this.businessMetrics.errorRate * 100).toFixed(1)}%, which is above the 5% threshold`,
|
|
281
|
+
impact: 'Improve user experience and system reliability',
|
|
282
|
+
effort: 'medium',
|
|
283
|
+
expectedRoi: 0.15
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
if (this.businessMetrics.averageResponseTime > 1000) {
|
|
287
|
+
recommendations.push({
|
|
288
|
+
type: 'optimization',
|
|
289
|
+
priority: 'medium',
|
|
290
|
+
title: 'Optimize Response Times',
|
|
291
|
+
description: `Average response time is ${this.businessMetrics.averageResponseTime}ms, consider optimization`,
|
|
292
|
+
impact: 'Better user experience and increased throughput',
|
|
293
|
+
effort: 'medium',
|
|
294
|
+
expectedRoi: 0.12
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return recommendations;
|
|
298
|
+
}
|
|
299
|
+
generateAlerts() {
|
|
300
|
+
const alerts = [];
|
|
301
|
+
const now = Date.now();
|
|
302
|
+
// Generate alerts based on current metrics
|
|
303
|
+
if (this.businessMetrics.errorRate > 0.1) {
|
|
304
|
+
alerts.push({
|
|
305
|
+
id: `error-rate-${now}`,
|
|
306
|
+
type: 'performance',
|
|
307
|
+
severity: 'critical',
|
|
308
|
+
message: `Error rate critically high: ${(this.businessMetrics.errorRate * 100).toFixed(1)}%`,
|
|
309
|
+
timestamp: now,
|
|
310
|
+
actionRequired: true
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
if (this.businessMetrics.throughput < 1) {
|
|
314
|
+
alerts.push({
|
|
315
|
+
id: `low-throughput-${now}`,
|
|
316
|
+
type: 'performance',
|
|
317
|
+
severity: 'warning',
|
|
318
|
+
message: 'Low throughput detected, consider investigating performance',
|
|
319
|
+
timestamp: now,
|
|
320
|
+
actionRequired: false
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
return alerts;
|
|
324
|
+
}
|
|
325
|
+
generateMetricForecast(metric, points) {
|
|
326
|
+
const trend = this.analyzeTrend(metric, 1);
|
|
327
|
+
return trend?.forecast.slice(0, points) || [];
|
|
328
|
+
}
|
|
329
|
+
updateBusinessMetrics(metric, value, _metadata) {
|
|
330
|
+
// Update business metrics based on incoming data
|
|
331
|
+
switch (metric) {
|
|
332
|
+
case 'total_requests':
|
|
333
|
+
this.businessMetrics.totalRequests = value;
|
|
334
|
+
break;
|
|
335
|
+
case 'response_time':
|
|
336
|
+
this.businessMetrics.averageResponseTime = value;
|
|
337
|
+
break;
|
|
338
|
+
case 'error_rate':
|
|
339
|
+
this.businessMetrics.errorRate = value;
|
|
340
|
+
break;
|
|
341
|
+
case 'throughput':
|
|
342
|
+
this.businessMetrics.throughput = value;
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
startAnalyticsLoop() {
|
|
347
|
+
// Start background analytics processing
|
|
348
|
+
setInterval(() => {
|
|
349
|
+
this.performBackgroundAnalytics();
|
|
350
|
+
}, 60000); // Every minute
|
|
351
|
+
}
|
|
352
|
+
performBackgroundAnalytics() {
|
|
353
|
+
// Background processing for continuous analytics
|
|
354
|
+
const metrics = this.getAvailableMetrics();
|
|
355
|
+
metrics.forEach(metric => {
|
|
356
|
+
const anomalies = this.detectAnomalies(metric);
|
|
357
|
+
if (anomalies.anomalies.length > 0) {
|
|
358
|
+
this.anomaliesHistory.push(anomalies);
|
|
359
|
+
// Keep only recent history
|
|
360
|
+
this.anomaliesHistory = this.anomaliesHistory.slice(-100);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
exports.AnalyticsEngine = AnalyticsEngine;
|
|
366
|
+
// Singleton instance
|
|
367
|
+
let analyticsEngine = null;
|
|
368
|
+
function getAnalyticsEngine() {
|
|
369
|
+
if (!analyticsEngine) {
|
|
370
|
+
analyticsEngine = new AnalyticsEngine();
|
|
371
|
+
}
|
|
372
|
+
return analyticsEngine;
|
|
373
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BusinessIntelligence - Phase 3 Advanced BI Components
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive business intelligence dashboard components providing:
|
|
5
|
+
* - Executive dashboards with KPI visualizations
|
|
6
|
+
* - Advanced charting and data visualization
|
|
7
|
+
* - Interactive reporting and drill-down capabilities
|
|
8
|
+
* - Real-time business metrics monitoring
|
|
9
|
+
*/
|
|
10
|
+
export interface KPIWidget {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
value: number | string;
|
|
14
|
+
previousValue?: number | string;
|
|
15
|
+
trend: 'up' | 'down' | 'stable';
|
|
16
|
+
trendPercentage: number;
|
|
17
|
+
format: 'number' | 'percentage' | 'currency' | 'duration' | 'bytes';
|
|
18
|
+
color: 'success' | 'warning' | 'danger' | 'info' | 'primary';
|
|
19
|
+
icon: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ChartConfiguration {
|
|
23
|
+
id: string;
|
|
24
|
+
type: 'line' | 'bar' | 'doughnut' | 'radar' | 'scatter' | 'area' | 'heatmap';
|
|
25
|
+
title: string;
|
|
26
|
+
data: ChartDataset[];
|
|
27
|
+
options: ChartOptions;
|
|
28
|
+
responsive: boolean;
|
|
29
|
+
realTime: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface ChartDataset {
|
|
32
|
+
label: string;
|
|
33
|
+
data: Array<{
|
|
34
|
+
x: number | string;
|
|
35
|
+
y: number;
|
|
36
|
+
}>;
|
|
37
|
+
backgroundColor?: string | string[];
|
|
38
|
+
borderColor?: string;
|
|
39
|
+
borderWidth?: number;
|
|
40
|
+
fill?: boolean;
|
|
41
|
+
tension?: number;
|
|
42
|
+
}
|
|
43
|
+
export interface ChartOptions {
|
|
44
|
+
responsive: boolean;
|
|
45
|
+
maintainAspectRatio: boolean;
|
|
46
|
+
plugins: {
|
|
47
|
+
legend: {
|
|
48
|
+
display: boolean;
|
|
49
|
+
position: 'top' | 'bottom' | 'left' | 'right';
|
|
50
|
+
};
|
|
51
|
+
title: {
|
|
52
|
+
display: boolean;
|
|
53
|
+
text: string;
|
|
54
|
+
};
|
|
55
|
+
tooltip: {
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
mode: 'index' | 'point' | 'dataset';
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
scales?: {
|
|
61
|
+
x: {
|
|
62
|
+
type: 'linear' | 'time' | 'category';
|
|
63
|
+
display: boolean;
|
|
64
|
+
title: {
|
|
65
|
+
display: boolean;
|
|
66
|
+
text: string;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
y: {
|
|
70
|
+
type: 'linear' | 'logarithmic';
|
|
71
|
+
display: boolean;
|
|
72
|
+
beginAtZero: boolean;
|
|
73
|
+
title: {
|
|
74
|
+
display: boolean;
|
|
75
|
+
text: string;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
animation?: {
|
|
80
|
+
duration: number;
|
|
81
|
+
easing: 'linear' | 'easeInQuad' | 'easeOutQuad';
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export interface DashboardLayout {
|
|
85
|
+
sections: DashboardSection[];
|
|
86
|
+
theme: 'light' | 'dark' | 'auto';
|
|
87
|
+
layout: 'grid' | 'masonry' | 'flex';
|
|
88
|
+
columns: number;
|
|
89
|
+
refreshInterval: number;
|
|
90
|
+
}
|
|
91
|
+
export interface DashboardSection {
|
|
92
|
+
id: string;
|
|
93
|
+
title: string;
|
|
94
|
+
type: 'kpi' | 'chart' | 'table' | 'alert' | 'text' | 'custom';
|
|
95
|
+
position: {
|
|
96
|
+
row: number;
|
|
97
|
+
col: number;
|
|
98
|
+
width: number;
|
|
99
|
+
height: number;
|
|
100
|
+
};
|
|
101
|
+
config: KPIWidget | ChartConfiguration | TableConfiguration | AlertConfiguration;
|
|
102
|
+
visible: boolean;
|
|
103
|
+
minimized: boolean;
|
|
104
|
+
}
|
|
105
|
+
export interface TableConfiguration {
|
|
106
|
+
id: string;
|
|
107
|
+
title: string;
|
|
108
|
+
columns: Array<{
|
|
109
|
+
key: string;
|
|
110
|
+
label: string;
|
|
111
|
+
type: 'text' | 'number' | 'date' | 'badge' | 'progress';
|
|
112
|
+
sortable: boolean;
|
|
113
|
+
filterable: boolean;
|
|
114
|
+
}>;
|
|
115
|
+
data: Record<string, unknown>[];
|
|
116
|
+
pagination: {
|
|
117
|
+
enabled: boolean;
|
|
118
|
+
pageSize: number;
|
|
119
|
+
currentPage: number;
|
|
120
|
+
};
|
|
121
|
+
search: {
|
|
122
|
+
enabled: boolean;
|
|
123
|
+
placeholder: string;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export interface AlertConfiguration {
|
|
127
|
+
id: string;
|
|
128
|
+
title: string;
|
|
129
|
+
alerts: Array<{
|
|
130
|
+
id: string;
|
|
131
|
+
message: string;
|
|
132
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
133
|
+
timestamp: number;
|
|
134
|
+
acknowledged: boolean;
|
|
135
|
+
actionUrl?: string;
|
|
136
|
+
}>;
|
|
137
|
+
maxVisible: number;
|
|
138
|
+
autoRefresh: boolean;
|
|
139
|
+
}
|
|
140
|
+
export declare class BusinessIntelligence {
|
|
141
|
+
private analyticsEngine;
|
|
142
|
+
private dashboardLayouts;
|
|
143
|
+
private realtimeSubscriptions;
|
|
144
|
+
constructor();
|
|
145
|
+
/**
|
|
146
|
+
* Generate KPI widgets based on current business metrics
|
|
147
|
+
*/
|
|
148
|
+
generateKPIWidgets(): KPIWidget[];
|
|
149
|
+
/**
|
|
150
|
+
* Generate advanced chart configurations
|
|
151
|
+
*/
|
|
152
|
+
generateChartConfigurations(): ChartConfiguration[];
|
|
153
|
+
/**
|
|
154
|
+
* Create executive dashboard layout
|
|
155
|
+
*/
|
|
156
|
+
createExecutiveDashboard(): DashboardLayout;
|
|
157
|
+
/**
|
|
158
|
+
* Create operational dashboard layout
|
|
159
|
+
*/
|
|
160
|
+
createOperationalDashboard(): DashboardLayout;
|
|
161
|
+
/**
|
|
162
|
+
* Get dashboard layout by name
|
|
163
|
+
*/
|
|
164
|
+
getDashboardLayout(name: string): DashboardLayout | null;
|
|
165
|
+
/**
|
|
166
|
+
* Subscribe to real-time updates for a dashboard
|
|
167
|
+
*/
|
|
168
|
+
subscribeToRealTimeUpdates(dashboardId: string, callback: (data: unknown) => void): string;
|
|
169
|
+
/**
|
|
170
|
+
* Unsubscribe from real-time updates
|
|
171
|
+
*/
|
|
172
|
+
unsubscribeFromRealTimeUpdates(subscriptionId: string): void;
|
|
173
|
+
private initializeDefaultDashboards;
|
|
174
|
+
private formatNumber;
|
|
175
|
+
private calculateTrend;
|
|
176
|
+
private calculateTrendPercentage;
|
|
177
|
+
private getTimeSeriesChartData;
|
|
178
|
+
private getResponseTimeDistributionData;
|
|
179
|
+
private getTopToolsData;
|
|
180
|
+
private createTimeSeriesChartOptions;
|
|
181
|
+
private createBarChartOptions;
|
|
182
|
+
private createDoughnutChartOptions;
|
|
183
|
+
private createMultiAxisChartOptions;
|
|
184
|
+
private generateAlertConfiguration;
|
|
185
|
+
private generateMetricsTable;
|
|
186
|
+
}
|
|
187
|
+
export declare function getBusinessIntelligence(): BusinessIntelligence;
|