analytics.ts
1 // Analytics types for ACDC Forge 2 3 import type { Chain } from './vote' 4 5 // Time range for analytics 6 export type TimeRange = '24h' | '7d' | '30d' | '90d' | 'all' 7 8 // Activity metrics 9 export interface ActivityMetrics { 10 chain: Chain 11 timeRange: TimeRange 12 // Vote metrics 13 totalVotes: number 14 votesPassedRatio: number 15 averageVoterParticipation: number 16 // PR metrics 17 prsSubmitted: number 18 prsMerged: number 19 averageTimeToMerge: number // in hours 20 // Governor metrics 21 activeGovernors: number 22 newGovernors: number 23 governorChurn: number // registrations - departures 24 // Emergency metrics 25 emergencyActions: number 26 emergencyActionsExecuted: number 27 } 28 29 // Time series data point 30 export interface TimeSeriesPoint { 31 timestamp: number 32 value: number 33 } 34 35 // Vote analytics 36 export interface VoteAnalytics { 37 chain: Chain 38 timeRange: TimeRange 39 totalVotes: number 40 passedVotes: number 41 failedVotes: number 42 expiredVotes: number 43 averageYesPercentage: number 44 averageVoterCount: number 45 // Flags breakdown 46 securityFlags: number 47 politicalFlags: number 48 economicFlags: number 49 // Time series 50 votesOverTime: TimeSeriesPoint[] 51 participationOverTime: TimeSeriesPoint[] 52 } 53 54 // Repository analytics 55 export interface RepoAnalytics { 56 repoId: string 57 chain: Chain 58 timeRange: TimeRange 59 // Activity 60 commits: number 61 pullRequests: number 62 contributors: number 63 // Health metrics 64 averagePRSize: number 65 averageReviewTime: number 66 mergeRate: number 67 // Top contributors 68 topContributors: ContributorStats[] 69 } 70 71 // Contributor statistics 72 export interface ContributorStats { 73 address: string 74 prsSubmitted: number 75 prsMerged: number 76 behaviorScore: number // Higher is better 77 lastActive: number 78 } 79 80 // Governor analytics 81 export interface GovernorAnalytics { 82 chain: Chain 83 timeRange: TimeRange 84 totalGovernors: number 85 activeGovernors: number 86 // Participation 87 averageVotesPerGovernor: number 88 topVoters: GovernorVotingStats[] 89 leastActiveGovernors: GovernorVotingStats[] 90 // Churn 91 newRegistrations: number 92 departures: number 93 // Stake (Delta only) 94 totalStaked?: number 95 averageStake?: number 96 } 97 98 // Governor voting statistics 99 export interface GovernorVotingStats { 100 address: string 101 votesCase: number 102 missedVotes: number 103 participationRate: number 104 registeredAt: number 105 } 106 107 // System health metrics 108 export interface SystemHealth { 109 chain: Chain 110 timestamp: number 111 // Node health 112 nodeStatus: 'healthy' | 'degraded' | 'down' 113 blockHeight: number 114 lastBlockTime: number 115 // Network 116 activePeers: number 117 averageLatency: number 118 // Programs 119 programsDeployed: number 120 transactionsPerDay: number 121 } 122 123 // Dashboard summary 124 export interface AnalyticsDashboard { 125 alpha: ActivityMetrics 126 delta: ActivityMetrics 127 combined: { 128 totalVotes: number 129 totalPRs: number 130 totalGovernors: number 131 systemHealth: 'healthy' | 'degraded' | 'issues' 132 } 133 lastUpdated: number 134 } 135 136 // Chart configuration 137 export interface ChartConfig { 138 type: 'line' | 'bar' | 'pie' | 'area' 139 title: string 140 dataKey: string 141 color: string 142 }