Compare commits

..

No commits in common. "main" and "lsjostro/push-smrvlkrvklot" have entirely different histories.

10 changed files with 447 additions and 662 deletions

966
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -17,32 +17,32 @@ default-members = [
[workspace.package]
version = "0.2.0"
edition = "2024"
edition = "2021"
[workspace.metadata.crane]
name = "patagia-run"
[workspace.dependencies]
anyhow = "1.0.98"
clap = { version = "4.5.37", features = [
anyhow = "1.0.95"
clap = { version = "4.5.26", features = [
"derive",
"deprecated",
"env",
"wrap_help",
"string",
] }
dropshot = "0.16.0"
dropshot = "0.15.1"
futures = "0.3"
http = "1.3.1"
once_cell = "1.21.3"
http = "1.2.0"
once_cell = "1.20.2"
progenitor = "0.9"
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"] }
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"] }
slog = "2.7.0"
slog-async = "2.8.0"
tokio = { version = "1.44.2", features = ["full"] }
tokio = { version = "1.43.0", features = ["full"] }
tracing = "0.1.41"
tracing-core = "0.1.33"
tracing-chrome = "0.7.2"

View file

@ -1,6 +1,6 @@
[package]
name = "patagia-agent"
edition = "2024"
edition = "2021"
license = "MPL-2.0"
version.workspace = true

View file

@ -1,7 +1,7 @@
[package]
name = "patagia-controller"
description = "Patagia control plane server"
edition = "2024"
edition = "2021"
license = "MPL-2.0"
version.workspace = true
@ -15,7 +15,7 @@ schemars.workspace = true
serde.workspace = true
slog-async.workspace = true
slog.workspace = true
sqlx = { version = "0.8.5", default-features = false, features = [
sqlx = { version = "0.8.3", default-features = false, features = [
"macros", "migrate", "postgres", "runtime-tokio", "tls-rustls", "time", "uuid"
] }
tokio.workspace = true

42
flake.lock generated
View file

@ -3,11 +3,11 @@
"advisory-db": {
"flake": false,
"locked": {
"lastModified": 1745847494,
"narHash": "sha256-tVK06dd+WVWurUq+VvzApYD6ZJHUKHAm3jbks5aVNqM=",
"lastModified": 1735928634,
"narHash": "sha256-Qg1vJOuEohAbdRmTTOLrbbGsyK9KRB54r3+aBuOMctM=",
"owner": "rustsec",
"repo": "advisory-db",
"rev": "49a83cd6c827efeab34e74a4075ae184a32d2648",
"rev": "63a2f39924f66ca89cf5761f299a8a244fe02543",
"type": "github"
},
"original": {
@ -18,11 +18,11 @@
},
"crane": {
"locked": {
"lastModified": 1745454774,
"narHash": "sha256-oLvmxOnsEKGtwczxp/CwhrfmQUG2ym24OMWowcoRhH8=",
"lastModified": 1736101677,
"narHash": "sha256-iKOPq86AOWCohuzxwFy/MtC8PcSVGnrxBOvxpjpzrAY=",
"owner": "ipetkov",
"repo": "crane",
"rev": "efd36682371678e2b6da3f108fdb5c613b3ec598",
"rev": "61ba163d85e5adeddc7b3a69bb174034965965b2",
"type": "github"
},
"original": {
@ -66,11 +66,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1745742390,
"narHash": "sha256-1rqa/XPSJqJg21BKWjzJZC7yU0l/YTVtjRi0RJmipus=",
"lastModified": 1736061677,
"narHash": "sha256-DjkQPnkAfd7eB522PwnkGhOMuT9QVCZspDpJJYyOj60=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "26245db0cb552047418cfcef9a25da91b222d6c7",
"rev": "cbd8ec4de4469333c82ff40d057350c30e9f7d36",
"type": "github"
},
"original": {
@ -82,11 +82,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"lastModified": 1728538411,
"narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221",
"type": "github"
},
"original": {
@ -98,11 +98,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1745377448,
"narHash": "sha256-jhZDfXVKdD7TSEGgzFJQvEEZ2K65UMiqW5YJ2aIqxMA=",
"lastModified": 1735554305,
"narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "507b63021ada5fee621b6ca371c4fca9ca46f52c",
"rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd",
"type": "github"
},
"original": {
@ -128,11 +128,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1745807802,
"narHash": "sha256-Aary9kzSx9QFgfK1CDu3ZqxhuoyHvf0F71j64gXZebA=",
"lastModified": 1736044260,
"narHash": "sha256-DTAr0mAd8AZwWgRtU9ZZFPz3DwNeoH/Oi/1QMSqc9YQ=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "9a6045615437787dfb9c1a3242fd75c6b6976b6b",
"rev": "c8ed24cc104ebbc218d992e208131e9f024b69f0",
"type": "github"
},
"original": {
@ -161,11 +161,11 @@
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1745848521,
"narHash": "sha256-gNrTO3pEjmu3WiuYrUHJrTGCFw9v+qZXCFmX/Vjf5WI=",
"lastModified": 1736115332,
"narHash": "sha256-FBG9d7e0BTFfxVdw4b5EmNll2Mv7hfRc54hbB4LrKko=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "763f1ce0dd12fe44ce6a5c6ea3f159d438571874",
"rev": "1788ca5acd4b542b923d4757d4cfe4183cc6a92d",
"type": "github"
},
"original": {

View file

@ -26,7 +26,7 @@
flake-utils.lib.eachDefaultSystem (
system:
let
rustVersion = "1.86.0";
rustVersion = "1.83.0";
target = "x86_64-unknown-linux-musl";
isStatic = true;

View file

@ -1,6 +1,6 @@
[package]
name = "instrumentation"
edition = "2024"
edition = "2021"
license = "MPL-2.0"
version.workspace = true
@ -8,14 +8,14 @@ version.workspace = true
anyhow.workspace = true
http.workspace = true
once_cell.workspace = true
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"
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"
tracing-subscriber = { version = "0.3.19", default-features = false, features = [
"std",
"ansi",

View file

@ -1,11 +1,11 @@
use anyhow::{anyhow, Result};
use opentelemetry::trace::TracerProvider;
use opentelemetry::KeyValue;
use opentelemetry_otlp::WithExportConfig;
use opentelemetry::{trace::TracerProvider as _, KeyValue};
use opentelemetry_otlp::{WithExportConfig, WithTonicConfig};
use opentelemetry_sdk::{
metrics::{MeterProviderBuilder, PeriodicReader, SdkMeterProvider},
propagation::TraceContextPropagator,
trace::{RandomIdGenerator, Sampler, SdkTracerProvider},
runtime,
trace::{RandomIdGenerator, Sampler, TracerProvider},
Resource,
};
use opentelemetry_semantic_conventions as semcov;
@ -13,11 +13,15 @@ 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))?;
@ -25,7 +29,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)
PeriodicReader::builder(exporter, runtime::Tokio)
.with_interval(std::time::Duration::from_secs(10))
.build(),
)
@ -37,20 +41,22 @@ 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<SdkTracerProvider> {
fn init_tracer_provider(otel_endpoint: &String, resource: Resource) -> Result<TracerProvider> {
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 = SdkTracerProvider::builder()
let tracer_provider = opentelemetry_sdk::trace::TracerProvider::builder()
.with_sampler(Sampler::ParentBased(Box::new(Sampler::TraceIdRatioBased(
1.0,
))))
.with_resource(resource)
.with_id_generator(RandomIdGenerator::default())
.with_batch_exporter(exporter)
.with_batch_exporter(exporter, opentelemetry_sdk::runtime::Tokio)
.build();
Ok(tracer_provider)
@ -59,19 +65,22 @@ fn init_tracer_provider(otel_endpoint: &String, resource: Resource) -> Result<Sd
// 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::builder()
.with_attribute(KeyValue::new(
semcov::resource::SERVICE_VERSION,
env!("CARGO_PKG_VERSION"),
))
.with_detectors(&[
let r = Resource::new([KeyValue::new(
semcov::resource::SERVICE_VERSION,
env!("CARGO_PKG_VERSION"),
)]);
let detected = Resource::from_detectors(
Duration::from_secs(5),
vec![
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.build()
],
);
r.merge(&detected)
};
let env_filter = tracing_subscriber::EnvFilter::try_from_default_env()
@ -117,14 +126,16 @@ pub fn init_tracing(otel_endpoint: Option<&String>, log_stderr: bool) -> Result<
pub struct TracingGuard {
meter_provider: Option<SdkMeterProvider>,
tracer_provider: Option<SdkTracerProvider>,
tracer_provider: Option<TracerProvider>,
}
impl Drop for TracingGuard {
fn drop(&mut self) {
if let Some(tracer_provider) = &self.tracer_provider {
if let Err(err) = tracer_provider.force_flush() {
eprintln!("{err:?}");
for result in tracer_provider.force_flush() {
if let Err(err) = result {
eprintln!("{err:?}");
}
}
if let Err(err) = tracer_provider.shutdown() {
eprintln!("{err:?}");

View file

@ -1,6 +1,6 @@
[package]
name = "trace-request"
edition = "2024"
edition = "2021"
license = "MPL-2.0"
version.workspace = true

View file

@ -1,6 +1,6 @@
[package]
name = "xtask"
edition = "2024"
edition = "2021"
version.workspace = true
[[bin]]