Skip to content

Commit ee43773

Browse files
authored
Merge pull request #8 from demeter-run/7-fix-dbsync-controller-to-use-threads
fix dbsync controller to use threads
2 parents 127323f + ba036e3 commit ee43773

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

src/main.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use actix_web::{
44
use dotenv::dotenv;
55
use prometheus::{Encoder, TextEncoder};
66
use std::{io, sync::Arc};
7-
use tracing::error;
87

98
use ext_cardano_dbsync::{controller, metrics as metrics_collector, Config, State};
109

@@ -29,8 +28,11 @@ async fn main() -> io::Result<()> {
2928
let state = Arc::new(State::new());
3029
let config = Config::try_new().unwrap();
3130

32-
let controller = controller::run(state.clone(), config.clone());
33-
let metrics_collector = metrics_collector::run_metrics_collector(state.clone(), config.clone());
31+
let controller = tokio::spawn(controller::run(state.clone(), config.clone()));
32+
let metrics_collector = tokio::spawn(metrics_collector::run_metrics_collector(
33+
state.clone(),
34+
config.clone(),
35+
));
3436

3537
let addr = std::env::var("ADDR").unwrap_or("0.0.0.0:8080".into());
3638

@@ -43,11 +45,7 @@ async fn main() -> io::Result<()> {
4345
})
4446
.bind(addr)?;
4547

46-
let result = tokio::join!(controller, metrics_collector, server.run()).1;
47-
if let Err(err) = result {
48-
error!("{err}");
49-
std::process::exit(1)
50-
}
48+
tokio::join!(controller, metrics_collector, server.run()).2?;
5149

5250
Ok(())
5351
}

src/metrics.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ use crate::{
1212
pub struct Metrics {
1313
pub users_created: IntCounterVec,
1414
pub users_deactivated: IntCounterVec,
15-
pub failures: IntCounterVec,
15+
pub reconcile_failures: IntCounterVec,
16+
pub metrics_failures: IntCounterVec,
1617
pub dcu: IntCounterVec,
1718
}
1819

@@ -36,7 +37,7 @@ impl Default for Metrics {
3637
)
3738
.unwrap();
3839

39-
let failures = IntCounterVec::new(
40+
let reconcile_failures = IntCounterVec::new(
4041
opts!(
4142
"crd_controller_reconciliation_errors_total",
4243
"reconciliation errors",
@@ -45,6 +46,15 @@ impl Default for Metrics {
4546
)
4647
.unwrap();
4748

49+
let metrics_failures = IntCounterVec::new(
50+
opts!(
51+
"metrics_controller_errors_total",
52+
"errors to calculation metrics",
53+
),
54+
&["error"],
55+
)
56+
.unwrap();
57+
4858
let dcu = IntCounterVec::new(
4959
opts!("dmtr_consumed_dcus", "quantity of dcu consumed",),
5060
&["project", "service", "service_type", "tenancy"],
@@ -54,27 +64,34 @@ impl Default for Metrics {
5464
Metrics {
5565
users_created,
5666
users_deactivated,
57-
failures,
67+
reconcile_failures,
68+
metrics_failures,
5869
dcu,
5970
}
6071
}
6172
}
6273

6374
impl Metrics {
6475
pub fn register(self, registry: &Registry) -> Result<Self, prometheus::Error> {
65-
registry.register(Box::new(self.failures.clone()))?;
76+
registry.register(Box::new(self.reconcile_failures.clone()))?;
6677
registry.register(Box::new(self.users_created.clone()))?;
6778
registry.register(Box::new(self.users_deactivated.clone()))?;
6879
registry.register(Box::new(self.dcu.clone()))?;
6980
Ok(self)
7081
}
7182

7283
pub fn reconcile_failure(&self, crd: &DbSyncPort, e: &Error) {
73-
self.failures
84+
self.reconcile_failures
7485
.with_label_values(&[crd.name_any().as_ref(), e.metric_label().as_ref()])
7586
.inc()
7687
}
7788

89+
pub fn metrics_failure(&self, e: &Error) {
90+
self.metrics_failures
91+
.with_label_values(&[e.metric_label().as_ref()])
92+
.inc()
93+
}
94+
7895
pub fn count_user_created(&self, username: &str) {
7996
self.users_created.with_label_values(&[username]).inc();
8097
}
@@ -124,13 +141,15 @@ pub async fn run_metrics_collector(state: Arc<State>, config: Config) -> Result<
124141
let postgres_result = Postgres::new(url).await;
125142
if let Err(err) = postgres_result {
126143
error!("Error to connect postgres: {err}");
144+
state.metrics.metrics_failure(&err);
127145
continue;
128146
}
129147
let postgres = postgres_result.unwrap();
130148

131149
let user_statements_result = postgres.user_metrics().await;
132150
if let Err(err) = user_statements_result {
133151
error!("Error get user statements: {err}");
152+
state.metrics.metrics_failure(&err);
134153
continue;
135154
}
136155

0 commit comments

Comments
 (0)