Skip to content

Commit 029da01

Browse files
chore: Add usage metric (#40)
* chore: Add usage metric * Use correct value
1 parent adcde1a commit 029da01

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

operator/src/metrics.rs

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use chrono::Utc;
2-
use kube::{api::ListParams, Api, Client, Resource, ResourceExt};
2+
use kube::{api::ListParams, core::object::HasSpec, Api, Client, Resource, ResourceExt};
33
use prometheus::{opts, IntCounterVec, Registry};
44
use serde::{Deserialize, Deserializer};
55
use std::sync::Arc;
@@ -14,6 +14,7 @@ pub struct Metrics {
1414
pub reconcile_failures: IntCounterVec,
1515
pub metrics_failures: IntCounterVec,
1616
pub dcu: IntCounterVec,
17+
pub usage: IntCounterVec,
1718
}
1819

1920
impl Default for Metrics {
@@ -60,12 +61,19 @@ impl Default for Metrics {
6061
)
6162
.unwrap();
6263

64+
let usage = IntCounterVec::new(
65+
opts!("usage", "Feature usage",),
66+
&["feature", "project", "resource_name", "tier"],
67+
)
68+
.unwrap();
69+
6370
Metrics {
6471
users_created,
6572
users_dropped,
6673
reconcile_failures,
6774
metrics_failures,
6875
dcu,
76+
usage,
6977
}
7078
}
7179
}
@@ -76,6 +84,7 @@ impl Metrics {
7684
registry.register(Box::new(self.users_created.clone()))?;
7785
registry.register(Box::new(self.users_dropped.clone()))?;
7886
registry.register(Box::new(self.dcu.clone()))?;
87+
registry.register(Box::new(self.usage.clone()))?;
7988
Ok(self)
8089
}
8190

@@ -105,18 +114,26 @@ impl Metrics {
105114
.inc();
106115
}
107116

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

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

116124
self.dcu
117-
.with_label_values(&[&project, &service, &service_type, tenancy])
125+
.with_label_values(&[project, &service, &service_type, tenancy])
118126
.inc_by(dcu);
119127
}
128+
129+
pub fn count_usage(&self, project: &str, resource_name: &str, tier: &str, value: f64) {
130+
let feature = &DbSyncPort::kind(&());
131+
let value: u64 = value.ceil() as u64;
132+
133+
self.usage
134+
.with_label_values(&[feature, project, resource_name, tier])
135+
.inc_by(value);
136+
}
120137
}
121138

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

198215
let dcu = total_exec_time * dcu_per_second;
216+
217+
let project = get_project_id(&crd.namespace().unwrap());
218+
199219
state
200220
.metrics
201-
.count_dcu_consumed(&crd.namespace().unwrap(), &crd.spec.network, dcu);
221+
.count_dcu_consumed(&project, &crd.spec.network, dcu);
222+
state.metrics.count_usage(
223+
&project,
224+
&crd.name_any(),
225+
&crd.spec()
226+
.throughput_tier
227+
.clone()
228+
.unwrap_or("0".to_string()),
229+
total_exec_time,
230+
);
202231
}
203232
}
204233
});

0 commit comments

Comments
 (0)