generated from Patagia/template-nix
parent
e42e924ce6
commit
3cf1714185
5 changed files with 631 additions and 416 deletions
960
Cargo.lock
generated
960
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
20
Cargo.toml
20
Cargo.toml
|
@ -23,26 +23,26 @@ edition = "2021"
|
|||
name = "patagia-run"
|
||||
|
||||
[workspace.dependencies]
|
||||
anyhow = "1.0.95"
|
||||
clap = { version = "4.5.26", features = [
|
||||
anyhow = "1.0.98"
|
||||
clap = { version = "4.5.37", features = [
|
||||
"derive",
|
||||
"deprecated",
|
||||
"env",
|
||||
"wrap_help",
|
||||
"string",
|
||||
] }
|
||||
dropshot = "0.15.1"
|
||||
dropshot = "0.16.0"
|
||||
futures = "0.3"
|
||||
http = "1.2.0"
|
||||
once_cell = "1.20.2"
|
||||
http = "1.3.1"
|
||||
once_cell = "1.21.3"
|
||||
progenitor = "0.9"
|
||||
reqwest = { version = "0.12.12", features = ["json", "stream", "rustls-tls"] }
|
||||
schemars = "0.8.21"
|
||||
semver = "1.0.24"
|
||||
serde = { version = "1.0.217", features = ["derive"] }
|
||||
reqwest = { version = "0.12.15", features = ["json", "stream", "rustls-tls"] }
|
||||
schemars = "0.8.22"
|
||||
semver = "1.0.26"
|
||||
serde = { version = "1.0.219", features = ["derive"] }
|
||||
slog = "2.7.0"
|
||||
slog-async = "2.8.0"
|
||||
tokio = { version = "1.43.0", features = ["full"] }
|
||||
tokio = { version = "1.44.2", features = ["full"] }
|
||||
tracing = "0.1.41"
|
||||
tracing-core = "0.1.33"
|
||||
tracing-chrome = "0.7.2"
|
||||
|
|
|
@ -15,7 +15,7 @@ schemars.workspace = true
|
|||
serde.workspace = true
|
||||
slog-async.workspace = true
|
||||
slog.workspace = true
|
||||
sqlx = { version = "0.8.3", default-features = false, features = [
|
||||
sqlx = { version = "0.8.5", default-features = false, features = [
|
||||
"macros", "migrate", "postgres", "runtime-tokio", "tls-rustls", "time", "uuid"
|
||||
] }
|
||||
tokio.workspace = true
|
||||
|
|
|
@ -8,14 +8,14 @@ version.workspace = true
|
|||
anyhow.workspace = true
|
||||
http.workspace = true
|
||||
once_cell.workspace = true
|
||||
opentelemetry-otlp = { version = "0.27.0", features = ["grpc-tonic", "gzip-tonic", "zstd-tonic", "tls", "tls-roots", "trace"] }
|
||||
opentelemetry_sdk = { version = "0.27.1", features = ["metrics", "rt-tokio"] }
|
||||
opentelemetry-semantic-conventions = "0.27.0"
|
||||
opentelemetry-appender-tracing = { version = "0.27.0", features = ["log", "experimental_metadata_attributes"] }
|
||||
opentelemetry-resource-detectors = { version = "0.6.0" }
|
||||
opentelemetry = "0.27.1"
|
||||
tonic = "0.12.3"
|
||||
tracing-opentelemetry = "0.28.0"
|
||||
opentelemetry-otlp = { version = "0.29.0", features = ["grpc-tonic", "gzip-tonic", "zstd-tonic", "tls", "tls-roots", "trace"] }
|
||||
opentelemetry_sdk = { version = "0.29.0", features = ["metrics", "rt-tokio"] }
|
||||
opentelemetry-semantic-conventions = "0.29.0"
|
||||
opentelemetry-appender-tracing = { version = "0.29.1", features = ["log", "experimental_metadata_attributes"] }
|
||||
opentelemetry-resource-detectors = { version = "0.8.0" }
|
||||
opentelemetry = "0.29.1"
|
||||
tonic = { version = "0.13.0", features = [ "channel", "tls-native-roots" ] }
|
||||
tracing-opentelemetry = "0.30.0"
|
||||
tracing-subscriber = { version = "0.3.19", default-features = false, features = [
|
||||
"std",
|
||||
"ansi",
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
use anyhow::{anyhow, Result};
|
||||
use opentelemetry::{trace::TracerProvider as _, KeyValue};
|
||||
use opentelemetry_otlp::{WithExportConfig, WithTonicConfig};
|
||||
use opentelemetry::trace::TracerProvider;
|
||||
use opentelemetry::KeyValue;
|
||||
use opentelemetry_otlp::WithExportConfig;
|
||||
use opentelemetry_sdk::{
|
||||
metrics::{MeterProviderBuilder, PeriodicReader, SdkMeterProvider},
|
||||
propagation::TraceContextPropagator,
|
||||
runtime,
|
||||
trace::{RandomIdGenerator, Sampler, TracerProvider},
|
||||
trace::{RandomIdGenerator, Sampler, SdkTracerProvider},
|
||||
Resource,
|
||||
};
|
||||
use opentelemetry_semantic_conventions as semcov;
|
||||
|
@ -13,15 +13,11 @@ use tracing_opentelemetry::{MetricsLayer, OpenTelemetryLayer};
|
|||
use tracing_subscriber::layer::SubscriberExt;
|
||||
use tracing_subscriber::util::SubscriberInitExt;
|
||||
|
||||
use std::time::Duration;
|
||||
|
||||
// Construct MeterProvider for MetricsLayer
|
||||
fn init_meter_provider(otel_endpoint: &String, resource: Resource) -> Result<SdkMeterProvider> {
|
||||
let exporter = opentelemetry_otlp::MetricExporter::builder()
|
||||
.with_tonic()
|
||||
.with_endpoint(otel_endpoint)
|
||||
.with_tls_config(tonic::transport::ClientTlsConfig::new().with_native_roots())
|
||||
.with_compression(opentelemetry_otlp::Compression::Gzip)
|
||||
.with_temporality(opentelemetry_sdk::metrics::Temporality::default())
|
||||
.build()
|
||||
.map_err(|e| anyhow!("Error creating OTLP metric exporter: {:?}", e))?;
|
||||
|
@ -29,7 +25,7 @@ fn init_meter_provider(otel_endpoint: &String, resource: Resource) -> Result<Sdk
|
|||
let meter_provider = MeterProviderBuilder::default()
|
||||
.with_resource(resource)
|
||||
.with_reader(
|
||||
PeriodicReader::builder(exporter, runtime::Tokio)
|
||||
PeriodicReader::builder(exporter)
|
||||
.with_interval(std::time::Duration::from_secs(10))
|
||||
.build(),
|
||||
)
|
||||
|
@ -41,22 +37,20 @@ fn init_meter_provider(otel_endpoint: &String, resource: Resource) -> Result<Sdk
|
|||
}
|
||||
|
||||
// Construct TracerProvider for OpenTelemetryLayer
|
||||
fn init_tracer_provider(otel_endpoint: &String, resource: Resource) -> Result<TracerProvider> {
|
||||
fn init_tracer_provider(otel_endpoint: &String, resource: Resource) -> Result<SdkTracerProvider> {
|
||||
let exporter = opentelemetry_otlp::SpanExporter::builder()
|
||||
.with_tonic()
|
||||
.with_tls_config(tonic::transport::ClientTlsConfig::new().with_native_roots())
|
||||
.with_compression(opentelemetry_otlp::Compression::Gzip)
|
||||
.with_endpoint(otel_endpoint)
|
||||
.build()
|
||||
.map_err(|e| anyhow!("Error creating OTLP span exporter: {:?}", e))?;
|
||||
|
||||
let tracer_provider = opentelemetry_sdk::trace::TracerProvider::builder()
|
||||
let tracer_provider = SdkTracerProvider::builder()
|
||||
.with_sampler(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
|
||||
1.0,
|
||||
))))
|
||||
.with_resource(resource)
|
||||
.with_id_generator(RandomIdGenerator::default())
|
||||
.with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio)
|
||||
.with_batch_exporter(exporter)
|
||||
.build();
|
||||
|
||||
Ok(tracer_provider)
|
||||
|
@ -65,22 +59,19 @@ fn init_tracer_provider(otel_endpoint: &String, resource: Resource) -> Result<Tr
|
|||
// Initialize tracing-subscriber and return TracingGuard for opentelemetry-related termination processing
|
||||
pub fn init_tracing(otel_endpoint: Option<&String>, log_stderr: bool) -> Result<TracingGuard> {
|
||||
let resource = {
|
||||
let r = Resource::new([KeyValue::new(
|
||||
semcov::resource::SERVICE_VERSION,
|
||||
env!("CARGO_PKG_VERSION"),
|
||||
)]);
|
||||
|
||||
let detected = Resource::from_detectors(
|
||||
Duration::from_secs(5),
|
||||
vec![
|
||||
let r = Resource::builder()
|
||||
.with_attribute(KeyValue::new(
|
||||
semcov::resource::SERVICE_VERSION,
|
||||
env!("CARGO_PKG_VERSION"),
|
||||
))
|
||||
.with_detectors(&[
|
||||
Box::new(opentelemetry_sdk::resource::SdkProvidedResourceDetector),
|
||||
Box::new(opentelemetry_sdk::resource::EnvResourceDetector::new()),
|
||||
Box::new(opentelemetry_resource_detectors::OsResourceDetector),
|
||||
Box::new(opentelemetry_resource_detectors::ProcessResourceDetector),
|
||||
Box::new(opentelemetry_sdk::resource::TelemetryResourceDetector),
|
||||
],
|
||||
);
|
||||
r.merge(&detected)
|
||||
]);
|
||||
r.build()
|
||||
};
|
||||
|
||||
let env_filter = tracing_subscriber::EnvFilter::try_from_default_env()
|
||||
|
@ -126,16 +117,14 @@ pub fn init_tracing(otel_endpoint: Option<&String>, log_stderr: bool) -> Result<
|
|||
|
||||
pub struct TracingGuard {
|
||||
meter_provider: Option<SdkMeterProvider>,
|
||||
tracer_provider: Option<TracerProvider>,
|
||||
tracer_provider: Option<SdkTracerProvider>,
|
||||
}
|
||||
|
||||
impl Drop for TracingGuard {
|
||||
fn drop(&mut self) {
|
||||
if let Some(tracer_provider) = &self.tracer_provider {
|
||||
for result in tracer_provider.force_flush() {
|
||||
if let Err(err) = result {
|
||||
eprintln!("{err:?}");
|
||||
}
|
||||
if let Err(err) = tracer_provider.force_flush() {
|
||||
eprintln!("{err:?}");
|
||||
}
|
||||
if let Err(err) = tracer_provider.shutdown() {
|
||||
eprintln!("{err:?}");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue