cardamon
Version:
A CLI tool for measuring the carbon footprint and energy consumption of web pages using the Cardamon model
150 lines • 3.81 kB
TypeScript
/**
* types.ts
* Type definitions for the Cardamon SDK
*/
import { REFERENCE_DEVICES } from './constants';
export interface DeviceSpecs {
type: 'mobile' | 'desktop' | 'server';
oledProportion: number;
oledMinPower: number;
oledMaxPower: number;
lcdPower: number;
idlePower: number;
networkMaxPower: number;
networkMinPower: number;
networkTransferRate: number;
boaviztaCoefficients: {
a: number;
b: number;
c: number;
d: number;
};
embodiedEmissions: {
manufacturing: number;
lifetime: number;
};
info: {
name: string;
description: string;
specs: {
cpu: {
cores: number;
};
};
};
}
export interface Sample {
/** CPU utilization [0-100] or pixel color [0-1] */
value: number;
/** Unix timestamp in milliseconds */
timestamp: number;
}
export interface NetworkMetrics {
/** Bytes transferred with cache */
cachedBytes: number;
/** Bytes transferred without cache */
uncachedBytes: number;
/** Duration in milliseconds */
duration: number;
}
export interface RegionalDistribution {
/** Region code (e.g., 'UK', 'US', 'global') */
region_code: string;
/** Proportion of traffic from this region (0-1) */
proportion: number;
/** Carbon intensity in gCO2e/kWh for this region */
carbon_intensity: number;
}
export interface Region {
/** Unique identifier for the region */
id: string;
/** Total number of page visits */
page_visit_count: number;
/** Number of return visits */
return_visit_count: number;
/** Distribution of traffic across regions */
regionalDistribution: RegionalDistribution[];
}
export interface FrontendMetrics {
cpu: Sample[];
screen: Sample[];
network: NetworkMetrics;
device: DeviceSpecs;
}
export interface BackendMetrics {
network: NetworkMetrics;
serverConfig: ServerConfig[];
}
export interface CardamonConfig {
frontend: FrontendMetrics;
backend: BackendMetrics;
userAnalytics: UserAnalytics;
scalingMethod: 'backend' | 'frontend';
}
export interface UserAnalytics {
start_date: string;
end_date: string;
page_visit_count: number;
return_visit_count: number;
regional_distribution: RegionalDistribution[];
report_page_count: number;
average_session_duration: number;
device_breakdown: {
desktop: {
percentage: number;
};
};
}
export interface ServerConfig {
serverId: string;
cpuUtilization: number;
quantity: number;
totalReportVisit: number;
totalServerVisit: number;
vcpu: number;
isDedicated: boolean;
regionalDistribution: {
regionCode: string;
carbonIntensity: number;
};
specs?: any;
}
export interface ComponentEnergy {
/** Energy in Watt-hours (Wh) */
cpu: number;
network: number;
idle: number;
operational: number;
total: number;
}
export interface FrontendEnergy extends ComponentEnergy {
screen: number;
}
export interface EnergyMetrics {
infrastructure: any;
frontend: FrontendEnergy;
backend: ComponentEnergy;
operational: number;
total: number;
}
export interface ComponentEmissions {
idle: number;
cpu: number;
network: number;
operational: number;
embodied: number;
total: number;
}
export interface FrontendEmissions extends ComponentEmissions {
screen: number;
}
export interface EmissionsMetrics {
infrastructure: any;
frontend: FrontendEmissions;
backend: ComponentEmissions;
operational: number;
embodied: number;
total: number;
}
export type DeviceType = keyof typeof REFERENCE_DEVICES;
//# sourceMappingURL=types.d.ts.map