Skip to content

Commit

Permalink
chore: Add usage metric
Browse files Browse the repository at this point in the history
  • Loading branch information
gonzalezzfelipe committed Jun 10, 2024
1 parent adcde1a commit d385980
Showing 1 changed file with 34 additions and 5 deletions.
39 changes: 34 additions & 5 deletions operator/src/metrics.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use chrono::Utc;
use kube::{api::ListParams, Api, Client, Resource, ResourceExt};
use kube::{api::ListParams, core::object::HasSpec, Api, Client, Resource, ResourceExt};
use prometheus::{opts, IntCounterVec, Registry};
use serde::{Deserialize, Deserializer};
use std::sync::Arc;
Expand All @@ -14,6 +14,7 @@ pub struct Metrics {
pub reconcile_failures: IntCounterVec,
pub metrics_failures: IntCounterVec,
pub dcu: IntCounterVec,
pub usage: IntCounterVec,
}

impl Default for Metrics {
Expand Down Expand Up @@ -60,12 +61,19 @@ impl Default for Metrics {
)
.unwrap();

let usage = IntCounterVec::new(
opts!("usage", "Feature usage",),
&["feature", "project", "resource_name", "tier"],
)
.unwrap();

Metrics {
users_created,
users_dropped,
reconcile_failures,
metrics_failures,
dcu,
usage,
}
}
}
Expand All @@ -76,6 +84,7 @@ impl Metrics {
registry.register(Box::new(self.users_created.clone()))?;
registry.register(Box::new(self.users_dropped.clone()))?;
registry.register(Box::new(self.dcu.clone()))?;
registry.register(Box::new(self.usage.clone()))?;
Ok(self)
}

Expand Down Expand Up @@ -105,18 +114,26 @@ impl Metrics {
.inc();
}

pub fn count_dcu_consumed(&self, namespace: &str, network: &str, dcu: f64) {
let project = get_project_id(namespace);
pub fn count_dcu_consumed(&self, project: &str, network: &str, dcu: f64) {
let service = format!("{}-{}", DbSyncPort::kind(&()), network);
let service_type = format!("{}.{}", DbSyncPort::plural(&()), DbSyncPort::group(&()));
let tenancy = "proxy";

let dcu: u64 = dcu.ceil() as u64;

self.dcu
.with_label_values(&[&project, &service, &service_type, tenancy])
.with_label_values(&[project, &service, &service_type, tenancy])
.inc_by(dcu);
}

pub fn count_usage(&self, project: &str, resource_name: &str, tier: &str, value: f64) {
let feature = &DbSyncPort::kind(&());
let value: u64 = value.ceil() as u64;

self.usage
.with_label_values(&[feature, project, resource_name, tier])
.inc_by(value);
}
}

fn get_project_id(namespace: &str) -> String {
Expand Down Expand Up @@ -196,9 +213,21 @@ pub async fn run_metrics_collector(state: Arc<State>) {
let total_exec_time = result.value * (interval as f64);

let dcu = total_exec_time * dcu_per_second;

let project = get_project_id(&crd.namespace().unwrap());

state
.metrics
.count_dcu_consumed(&crd.namespace().unwrap(), &crd.spec.network, dcu);
.count_dcu_consumed(&project, &crd.spec.network, dcu);
state.metrics.count_usage(
&project,
&crd.name_any(),
&crd.spec()
.throughput_tier
.clone()
.unwrap_or("0".to_string()),
result.value,
);
}
}
});
Expand Down

0 comments on commit d385980

Please sign in to comment.