1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize, Default)]
7pub struct PerformanceMetrics {
8 pub latency: LatencyMetrics,
10 pub throughput: ThroughputMetrics,
12 pub resource_usage: ResourceMetrics,
14 pub scalability: ScalabilityMetrics,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct LatencyMetrics {
21 pub p50_ms: f64,
23 pub p95_ms: f64,
25 pub p99_ms: f64,
27 pub cold_start_ms: f64,
29 pub ttfb_ms: f64,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct ThroughputMetrics {
36 pub requests_per_second: f64,
38 pub mb_per_second: f64,
40 pub concurrent_connections: u64,
42 pub queue_depth: f64,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct ResourceMetrics {
49 pub cpu_efficiency: f64,
51 pub memory_bandwidth_gb_s: f64,
53 pub io_operations_per_sec: f64,
55 pub cache_hit_rate: f64,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct SafetyMetrics {
62 pub unsafe_blocks: u32,
64 pub clippy_warnings: u32,
66 pub avg_cyclomatic: f64,
68}
69
70impl Default for SafetyMetrics {
71 fn default() -> Self {
72 Self {
73 unsafe_blocks: 0,
74 clippy_warnings: 0,
75 avg_cyclomatic: 1.0,
76 }
77 }
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82pub struct ScalabilityMetrics {
83 pub linear_scaling_factor: f64,
85 pub degradation_curve: Vec<(u32, f64)>,
87 pub bottleneck_score: f64,
89 pub elasticity_coefficient: f64,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize, Default)]
95pub struct EnergyMetrics {
96 pub direct_consumption: PowerConsumption,
98 pub carbon_efficiency: CarbonEfficiency,
100 pub hardware_lifecycle: HardwareLifecycle,
102 pub algorithmic_efficiency: AlgorithmEfficiency,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct PowerConsumption {
109 pub average_watts: f64,
111 pub peak_watts: f64,
113 pub idle_watts: f64,
115 pub joules_per_operation: f64,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
121pub struct CarbonEfficiency {
122 pub co2_per_operation: f64,
124 pub carbon_intensity: f64,
126 pub renewable_percentage: f64,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
132pub struct HardwareLifecycle {
133 pub thermal_efficiency: f64,
135 pub component_stress: f64,
137 pub expected_lifespan_years: f64,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize)]
143pub struct AlgorithmEfficiency {
144 pub time_complexity: String,
146 pub space_complexity: String,
148 pub actual_time_coefficient: f64,
150 pub actual_space_coefficient: f64,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize, Default)]
156pub struct CostMetrics {
157 pub infrastructure: InfrastructureCosts,
159 pub operations: OperationalCosts,
161 pub development: DevelopmentCosts,
163 pub business_impact: BusinessImpact,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
169pub struct InfrastructureCosts {
170 pub cloud_compute_usd: f64,
172 pub storage_usd: f64,
174 pub network_egress_usd: f64,
176 pub cost_per_million_ops: f64,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize)]
182pub struct OperationalCosts {
183 pub mttr_minutes: f64,
185 pub incidents_per_month: f64,
187 pub overhead_percentage: f64,
189 pub monitoring_usd: f64,
191}
192
193#[derive(Debug, Clone, Serialize, Deserialize)]
195pub struct DevelopmentCosts {
196 pub loc: u64,
198 pub cyclomatic_complexity: f64,
200 pub code_churn: f64,
202 pub onboarding_days: f64,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
208pub struct BusinessImpact {
209 pub revenue_per_100ms_latency: f64,
211 pub csat_score: f64,
213 pub sla_compliance: f64,
215 pub competitive_advantage: f64,
217}
218
219impl Default for LatencyMetrics {
224 fn default() -> Self {
225 Self {
226 p50_ms: 0.0,
227 p95_ms: 0.0,
228 p99_ms: 0.0,
229 cold_start_ms: 0.0,
230 ttfb_ms: 0.0,
231 }
232 }
233}
234
235impl Default for ThroughputMetrics {
236 fn default() -> Self {
237 Self {
238 requests_per_second: 0.0,
239 mb_per_second: 0.0,
240 concurrent_connections: 0,
241 queue_depth: 0.0,
242 }
243 }
244}
245
246impl Default for ResourceMetrics {
247 fn default() -> Self {
248 Self {
249 cpu_efficiency: 0.0,
250 memory_bandwidth_gb_s: 0.0,
251 io_operations_per_sec: 0.0,
252 cache_hit_rate: 0.0,
253 }
254 }
255}
256
257impl Default for ScalabilityMetrics {
258 fn default() -> Self {
259 Self {
260 linear_scaling_factor: 1.0,
261 degradation_curve: Vec::new(),
262 bottleneck_score: 0.0,
263 elasticity_coefficient: 0.0,
264 }
265 }
266}
267
268impl Default for PowerConsumption {
269 fn default() -> Self {
270 Self {
271 average_watts: 0.0,
272 peak_watts: 0.0,
273 idle_watts: 0.0,
274 joules_per_operation: 0.0,
275 }
276 }
277}
278
279impl Default for CarbonEfficiency {
280 fn default() -> Self {
281 Self {
282 co2_per_operation: 0.0,
283 carbon_intensity: 0.0,
284 renewable_percentage: 0.0,
285 }
286 }
287}
288
289impl Default for HardwareLifecycle {
290 fn default() -> Self {
291 Self {
292 thermal_efficiency: 0.0,
293 component_stress: 0.0,
294 expected_lifespan_years: 0.0,
295 }
296 }
297}
298
299impl Default for AlgorithmEfficiency {
300 fn default() -> Self {
301 Self {
302 time_complexity: String::new(),
303 space_complexity: String::new(),
304 actual_time_coefficient: 0.0,
305 actual_space_coefficient: 0.0,
306 }
307 }
308}
309
310impl Default for InfrastructureCosts {
311 fn default() -> Self {
312 Self {
313 cloud_compute_usd: 0.0,
314 storage_usd: 0.0,
315 network_egress_usd: 0.0,
316 cost_per_million_ops: 0.0,
317 }
318 }
319}
320
321impl Default for OperationalCosts {
322 fn default() -> Self {
323 Self {
324 mttr_minutes: 0.0,
325 incidents_per_month: 0.0,
326 overhead_percentage: 0.0,
327 monitoring_usd: 0.0,
328 }
329 }
330}
331
332impl Default for DevelopmentCosts {
333 fn default() -> Self {
334 Self {
335 loc: 0,
336 cyclomatic_complexity: 0.0,
337 code_churn: 0.0,
338 onboarding_days: 0.0,
339 }
340 }
341}
342
343impl Default for BusinessImpact {
344 fn default() -> Self {
345 Self {
346 revenue_per_100ms_latency: 0.0,
347 csat_score: 0.0,
348 sla_compliance: 0.0,
349 competitive_advantage: 0.0,
350 }
351 }
352}