/ frontend / src / types / analytics.ts
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  }