-
Notifications
You must be signed in to change notification settings - Fork 66
/
engula.rs
77 lines (66 loc) · 2.37 KB
/
engula.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
mod bench;
mod config;
mod start;
use std::net::SocketAddr;
use clap::Clap;
use metrics::{register_counter, register_histogram};
use metrics_exporter_prometheus::PrometheusBuilder;
use tracing_subscriber::layer::{Layer, SubscriberExt};
use tracing_subscriber::util::SubscriberInitExt;
#[derive(Clap)]
struct Command {
#[clap(long, default_value = "/tmp/engula")]
log_dir: String,
#[clap(short, long, default_value = "engula/etc/default.toml")]
config_file: String,
#[clap(long, default_value = "127.0.0.1:19090")]
prometheus_addr: String,
#[clap(subcommand)]
subcmd: SubCommand,
}
#[derive(Clap)]
enum SubCommand {
Bench(bench::Command),
Start(start::Command),
}
#[tokio::main]
async fn main() {
let cmd: Command = Command::parse();
let filter = tracing_subscriber::filter::LevelFilter::INFO;
let appender = tracing_appender::rolling::never(&cmd.log_dir, "LOG");
let (writer, _writer_guard) = tracing_appender::non_blocking(appender);
let fmt_layer = tracing_subscriber::fmt::layer()
.pretty()
.with_writer(writer)
.with_filter(filter);
tracing_subscriber::registry().with(fmt_layer).init();
let prometheus_addr: SocketAddr = cmd.prometheus_addr.parse().unwrap();
let config = config::Config::from_file(&cmd.config_file).unwrap();
println!("{:#?}", config);
match &cmd.subcmd {
SubCommand::Bench(cmd) => {
// This panic in some cases, haven't figure it out.
PrometheusBuilder::new()
.listen_address(prometheus_addr)
.install()
.unwrap();
register_metrics();
cmd.run(config).await.unwrap();
}
SubCommand::Start(cmd) => cmd.run(config).await.unwrap(),
}
opentelemetry::global::shutdown_tracer_provider();
}
fn register_metrics() {
register_histogram!("engula.get.us");
register_histogram!("engula.put.us");
register_counter!("engula.flush.bytes");
register_histogram!("engula.flush.throughput");
register_counter!("engula.compact.bytes");
register_histogram!("engula.compact.throughput");
register_counter!("engula.fs.s3.read.bytes");
register_histogram!("engula.fs.s3.read.throughput");
register_counter!("engula.fs.s3.write.bytes");
register_histogram!("engula.fs.s3.write.throughput");
register_histogram!("engula.fs.s3.finish.seconds");
}