From a1c4b0020603af30fcaa928d83c0e7691bf597af Mon Sep 17 00:00:00 2001 From: iamvigneshwars Date: Wed, 20 Mar 2024 14:56:29 +0000 Subject: [PATCH] Add telemetry --- Cargo.lock | 409 +++++++++++++++++++++++++++++++++--- datasets/Cargo.toml | 5 + datasets/{src => }/build.rs | 0 datasets/src/built_info.rs | 1 + datasets/src/graphql/mod.rs | 28 +-- datasets/src/main.rs | 67 ++++++ models/.gitignore | 2 +- 7 files changed, 457 insertions(+), 55 deletions(-) rename datasets/{src => }/build.rs (100%) create mode 100644 datasets/src/built_info.rs diff --git a/Cargo.lock b/Cargo.lock index 75d05bc..c527c0e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -164,8 +164,8 @@ dependencies = [ "fnv", "futures-util", "handlebars", - "http", - "indexmap", + "http 1.1.0", + "indexmap 2.2.5", "mime", "multer", "num-traits", @@ -189,7 +189,7 @@ checksum = "93605d26b9da33b4cf6541906a9eb9e74396f1accbbc0f066e06f3b0869b84fc" dependencies = [ "async-graphql", "async-trait", - "axum", + "axum 0.7.4", "bytes", "futures-util", "serde_json", @@ -235,7 +235,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68e40849c29a39012d38bff87bfed431f1ed6c53fbec493294c1045d61a7ae75" dependencies = [ "bytes", - "indexmap", + "indexmap 2.2.5", "serde", "serde_json", ] @@ -288,6 +288,34 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "axum" version = "0.7.4" @@ -295,14 +323,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" dependencies = [ "async-trait", - "axum-core", + "axum-core 0.4.3", "base64", "bytes", "futures-util", - "http", - "http-body", + "http 1.1.0", + "http-body 1.0.0", "http-body-util", - "hyper", + "hyper 1.2.0", "hyper-util", "itoa", "matchit", @@ -325,6 +353,23 @@ dependencies = [ "tracing", ] +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "axum-core" version = "0.4.3" @@ -334,8 +379,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 1.1.0", + "http-body 1.0.0", "http-body-util", "mime", "pin-project-lite", @@ -608,6 +653,15 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +[[package]] +name = "crossbeam-channel" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-queue" version = "0.3.11" @@ -681,15 +735,20 @@ dependencies = [ "anyhow", "async-graphql", "async-graphql-axum", - "axum", + "axum 0.7.4", "built", "chrono", "clap", "dotenvy", "models", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry-semantic-conventions", + "opentelemetry_sdk", "sea-orm", "tokio", "tracing", + "tracing-opentelemetry", "tracing-subscriber", "url", ] @@ -966,6 +1025,31 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.2.5", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.3" @@ -977,8 +1061,8 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", - "indexmap", + "http 1.1.0", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", @@ -1081,6 +1165,17 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http" version = "1.1.0" @@ -1092,6 +1187,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + [[package]] name = "http-body" version = "1.0.0" @@ -1099,7 +1205,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", - "http", + "http 1.1.0", ] [[package]] @@ -1110,8 +1216,8 @@ checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" dependencies = [ "bytes", "futures-core", - "http", - "http-body", + "http 1.1.0", + "http-body 1.0.0", "pin-project-lite", ] @@ -1127,6 +1233,30 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.25", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + [[package]] name = "hyper" version = "1.2.0" @@ -1136,9 +1266,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2", - "http", - "http-body", + "h2 0.4.3", + "http 1.1.0", + "http-body 1.0.0", "httparse", "httpdate", "itoa", @@ -1147,6 +1277,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.28", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "hyper-util" version = "0.1.3" @@ -1155,9 +1297,9 @@ checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" dependencies = [ "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.2.0", "pin-project-lite", "socket2", "tokio", @@ -1202,6 +1344,16 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + [[package]] name = "indexmap" version = "2.2.5" @@ -1224,6 +1376,15 @@ dependencies = [ "syn 2.0.53", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -1378,7 +1539,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http", + "http 1.1.0", "httparse", "log", "memchr", @@ -1496,6 +1657,80 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "opentelemetry" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900d57987be3f2aeb70d385fff9b27fb74c5723cc9a52d904d4f9c807a0667bf" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a016b8d9495c639af2145ac22387dcb88e44118e45320d9238fbf4e7889abcb" +dependencies = [ + "async-trait", + "futures-core", + "http 0.2.12", + "opentelemetry", + "opentelemetry-proto", + "opentelemetry-semantic-conventions", + "opentelemetry_sdk", + "prost", + "thiserror", + "tokio", + "tonic", +] + +[[package]] +name = "opentelemetry-proto" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8fddc9b68f5b80dae9d6f510b88e02396f006ad48cac349411fbecc80caae4" +dependencies = [ + "opentelemetry", + "opentelemetry_sdk", + "prost", + "tonic", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9ab5bd6c42fb9349dcf28af2ba9a0667f697f9bdcca045d39f2cec5543e2910" + +[[package]] +name = "opentelemetry_sdk" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e90c7113be649e31e9a0f8b5ee24ed7a16923b322c3c5ab6367469c049d6b7e" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "once_cell", + "opentelemetry", + "ordered-float 4.2.0", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", +] + [[package]] name = "ordered-float" version = "3.9.2" @@ -1505,6 +1740,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-float" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +dependencies = [ + "num-traits", +] + [[package]] name = "ouroboros" version = "0.17.2" @@ -1757,6 +2001,29 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.53", +] + [[package]] name = "ptr_meta" version = "0.1.4" @@ -2105,7 +2372,7 @@ dependencies = [ "chrono", "derivative", "inherent", - "ordered-float", + "ordered-float 3.9.2", "rust_decimal", "sea-query-derive", "serde_json", @@ -2329,7 +2596,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" dependencies = [ - "itertools", + "itertools 0.12.1", "nom", "unicode_categories", ] @@ -2370,7 +2637,7 @@ dependencies = [ "futures-util", "hashlink", "hex", - "indexmap", + "indexmap 2.2.5", "log", "memchr", "once_cell", @@ -2770,6 +3037,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + [[package]] name = "tokio-macros" version = "2.2.0" @@ -2831,7 +3108,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.5", "toml_datetime", "winnow", ] @@ -2842,11 +3119,38 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap", + "indexmap 2.2.5", "toml_datetime", "winnow", ] +[[package]] +name = "tonic" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.6.20", + "base64", + "bytes", + "h2 0.3.25", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower" version = "0.4.13" @@ -2855,9 +3159,13 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", + "indexmap 1.9.3", "pin-project", "pin-project-lite", + "rand", + "slab", "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", @@ -2931,6 +3239,24 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-opentelemetry" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9be14ba1bbe4ab79e9229f7f89fab8d120b865859f10527f31c033e599d2284" +dependencies = [ + "js-sys", + "once_cell", + "opentelemetry", + "opentelemetry_sdk", + "smallvec", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber", + "web-time", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -2945,6 +3271,12 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "tungstenite" version = "0.21.0" @@ -2954,7 +3286,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http", + "http 1.1.0", "httparse", "log", "rand", @@ -3071,6 +3403,15 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -3137,6 +3478,16 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webpki-roots" version = "0.25.4" diff --git a/datasets/Cargo.toml b/datasets/Cargo.toml index 3841ac0..98213c1 100644 --- a/datasets/Cargo.toml +++ b/datasets/Cargo.toml @@ -18,9 +18,14 @@ chrono = { version = "0.4.35" } clap = { version = "4.5.2", features = ["derive", "env"] } dotenvy = { version = "0.15.7" } models = { path = "../models" } +opentelemetry = { version = "0.22.0", features = ["metrics"] } +opentelemetry-otlp = { version = "0.15.0", features = ["metrics", "tokio"] } +opentelemetry-semantic-conventions = { version = "0.14.0" } +opentelemetry_sdk = { version = "0.22.1", features = ["rt-tokio"] } sea-orm = { workspace = true } tokio = { version = "1.36.0", features = ["macros", "rt-multi-thread"] } tracing = { version = "0.1.40" } +tracing-opentelemetry = { version = "0.23.0" } tracing-subscriber = { version = "0.3.18" } url = { version = "2.5.0" } diff --git a/datasets/src/build.rs b/datasets/build.rs similarity index 100% rename from datasets/src/build.rs rename to datasets/build.rs diff --git a/datasets/src/built_info.rs b/datasets/src/built_info.rs new file mode 100644 index 0000000..ee17776 --- /dev/null +++ b/datasets/src/built_info.rs @@ -0,0 +1 @@ +include!(concat!(env!("OUT_DIR"), "/built.rs")); diff --git a/datasets/src/graphql/mod.rs b/datasets/src/graphql/mod.rs index 1f12251..0aae127 100644 --- a/datasets/src/graphql/mod.rs +++ b/datasets/src/graphql/mod.rs @@ -37,21 +37,9 @@ impl Session { #[Object] impl Query { - /// Retrieves all datasets collected during Sessions - async fn datasets( - &self, - ctx: &Context<'_>, - ) -> Result, async_graphql::Error> { - let database = ctx.data::()?; - Ok(data_collection::Entity::find() - .all(database) - .await? - .into_iter() - .map(DataCollection::from) - .collect()) - } - /// Retrieves a single dataset collected during Sessions - async fn dataset( + /// Reference dataset resolver for the router + #[graphql(entity)] + async fn router_dataset( &self, ctx: &Context<'_>, data_collection_id: u32, @@ -63,16 +51,6 @@ impl Query { .map(DataCollection::from)) } - /// Reference dataset resolver for the router - #[graphql(entity)] - async fn router_dataset( - &self, - ctx: &Context<'_>, - data_collection_id: u32, - ) -> Result, async_graphql::Error> { - self.dataset(ctx, data_collection_id).await - } - /// Reference sessions resolver for the router #[graphql(entity)] async fn router_sessions(&self, id: i32) -> Session { diff --git a/datasets/src/main.rs b/datasets/src/main.rs index 68b83d7..c50eb9b 100644 --- a/datasets/src/main.rs +++ b/datasets/src/main.rs @@ -3,6 +3,8 @@ #![warn(missing_docs)] #![warn(clippy::missing_docs_in_private_items)] +/// Metadata about the crate, courtesy of [`built`] +mod built_info; /// GraphQL resolvers mod graphql; @@ -11,15 +13,18 @@ use async_graphql_axum::{GraphQL, GraphQLSubscription}; use axum::{response::Html, routing::get, Router}; use clap::Parser; use graphql::{root_schema_builder, RootSchema}; +use opentelemetry_otlp::WithExportConfig; use sea_orm::{ConnectOptions, Database, DatabaseConnection, DbErr, TransactionError}; use std::{ fs::File, io::Write, net::{Ipv4Addr, SocketAddr, SocketAddrV4}, path::PathBuf, + time::Duration, }; use tokio::net::TcpListener; use tracing::instrument; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use url::Url; /// A service providing Beamline ISPyB data collected during sessions @@ -95,6 +100,67 @@ async fn serve(router: Router, port: u16) -> Result<(), std::io::Error> { Ok(()) } +/// Sets up Logging & Tracing using opentelemetry if available +fn setup_telemetry( + log_level: tracing::Level, + otel_collector_url: Option, +) -> Result<(), anyhow::Error> { + let level_filter = tracing_subscriber::filter::LevelFilter::from_level(log_level); + let log_layer = tracing_subscriber::fmt::layer(); + let service_name_resource = opentelemetry_sdk::Resource::new(vec![ + opentelemetry::KeyValue::new( + opentelemetry_semantic_conventions::resource::SERVICE_NAME, + built_info::PKG_NAME, + ), + opentelemetry::KeyValue::new( + opentelemetry_semantic_conventions::resource::SERVICE_VERSION, + built_info::PKG_VERSION, + ), + ]); + let (metrics_layer, tracing_layer) = if let Some(otel_collector_url) = otel_collector_url { + ( + Some(tracing_opentelemetry::MetricsLayer::new( + opentelemetry_otlp::new_pipeline() + .metrics(opentelemetry_sdk::runtime::Tokio) + .with_exporter( + opentelemetry_otlp::new_exporter() + .tonic() + .with_endpoint(otel_collector_url.clone()), + ) + .with_resource(service_name_resource.clone()) + .with_period(Duration::from_secs(10)) + .build()?, + )), + Some( + tracing_opentelemetry::layer().with_tracer( + opentelemetry_otlp::new_pipeline() + .tracing() + .with_exporter( + opentelemetry_otlp::new_exporter() + .tonic() + .with_endpoint(otel_collector_url), + ) + .with_trace_config( + opentelemetry_sdk::trace::config().with_resource(service_name_resource), + ) + .install_batch(opentelemetry_sdk::runtime::Tokio)?, + ), + ), + ) + } else { + (None, None) + }; + + tracing_subscriber::Registry::default() + .with(level_filter) + .with(log_layer) + .with(metrics_layer) + .with(tracing_layer) + .init(); + + Ok(()) +} + #[tokio::main] async fn main() { dotenvy::dotenv().ok(); @@ -102,6 +168,7 @@ async fn main() { match args { Cli::Serve(args) => { + setup_telemetry(args.log_level, args.otel_collector_url).unwrap(); let database = setup_database(args.database_url).await.unwrap(); let schema = root_schema_builder() .extension(Tracing) diff --git a/models/.gitignore b/models/.gitignore index e7c0a75..386d0dd 100644 --- a/models/.gitignore +++ b/models/.gitignore @@ -1,2 +1,2 @@ # Generated Models -/src \ No newline at end of file +/src