Skip to content

Commit 97b20a7

Browse files
fix: Change query of usage metric (#45)
1 parent 878c357 commit 97b20a7

File tree

1 file changed

+37
-32
lines changed

1 file changed

+37
-32
lines changed

operator/src/metrics.rs

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -173,43 +173,48 @@ pub async fn run_metrics_collector(state: Arc<State>) {
173173
last_execution = end;
174174

175175
let query = format!(
176-
"sum by (user) (avg_over_time(pgbouncer_pools_client_active_connections{{user=~\"dmtr_.*\", namespace=\"{current_namespace}\"}}[{interval}s] @ {})) > 0",
176+
"sum by (usename) (avg_over_time(pg_stat_activity_count{{usename=~\"dmtr_.*\", namespace=\"{current_namespace}\"}}[{interval}s] @ {})) > 0",
177177
end.timestamp_millis() / 1000
178178
);
179179

180-
let response = collect_prometheus_metrics(config, query).await;
181-
if let Err(err) = response {
182-
error!(error = err.to_string(), "error to make prometheus request");
183-
state.metrics.metrics_failure(&err);
184-
continue;
185-
}
186-
let response = response.unwrap();
187-
188-
for result in response.data.result {
189-
let crd = crds
190-
.iter()
191-
.filter(|c| c.status.is_some())
192-
.find(|c| c.status.as_ref().unwrap().username.eq(&result.metric.user));
193-
194-
if crd.is_none() {
195-
warn!(user = result.metric.user, "username doesnt have a crd");
180+
let response = match collect_prometheus_metrics(config, query).await {
181+
Ok(response) => response,
182+
Err(err) => {
183+
error!(error = err.to_string(), "error to make prometheus request");
184+
state.metrics.metrics_failure(&err);
196185
continue;
197186
}
187+
};
198188

199-
let crd = crd.unwrap();
200-
201-
let dcu_per_second = config.dcu_per_second.get(&crd.spec.network);
202-
if dcu_per_second.is_none() {
203-
let error = Error::ConfigError(format!(
204-
"dcu_per_second not configured to {} network",
205-
&crd.spec.network
206-
));
207-
error!(error = error.to_string());
208-
state.metrics.metrics_failure(&error);
209-
continue;
210-
}
211-
212-
let dcu_per_second = dcu_per_second.unwrap();
189+
for result in response.data.result {
190+
let crd = match crds.iter().filter(|c| c.status.is_some()).find(|c| {
191+
c.status
192+
.as_ref()
193+
.unwrap()
194+
.username
195+
.eq(&result.metric.usename)
196+
}) {
197+
Some(crd) => crd,
198+
None => {
199+
if result.metric.usename != "dmtr_blockfrost" {
200+
warn!(user = result.metric.usename, "username doesnt have a crd");
201+
}
202+
continue;
203+
}
204+
};
205+
206+
let dcu_per_second = match config.dcu_per_second.get(&crd.spec.network) {
207+
Some(dcu_per_second) => dcu_per_second,
208+
None => {
209+
let error = Error::ConfigError(format!(
210+
"dcu_per_second not configured to {} network",
211+
&crd.spec.network
212+
));
213+
error!(error = error.to_string());
214+
state.metrics.metrics_failure(&error);
215+
continue;
216+
}
217+
};
213218
let total_exec_time = result.value * (interval as f64);
214219

215220
let dcu = total_exec_time * dcu_per_second;
@@ -258,7 +263,7 @@ async fn collect_prometheus_metrics(
258263

259264
#[derive(Debug, Deserialize)]
260265
struct PrometheusDataResultMetric {
261-
user: String,
266+
usename: String,
262267
}
263268

264269
#[derive(Debug, Deserialize)]

0 commit comments

Comments
 (0)