Skip to content

Commit

Permalink
Add metrics conf
Browse files Browse the repository at this point in the history
  • Loading branch information
julianocosta89 committed Mar 5, 2024
1 parent 0c75292 commit 2845a5f
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 80 deletions.
4 changes: 2 additions & 2 deletions src/shippingservice/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ reqwest = { version = "0.11", default-features = false, features = ["json"] }
prost = "0.12"
prost-types = "0.12"
tokio = { version = "1.36", features = ["macros", "rt-multi-thread"] }
opentelemetry = { version = "0.21", features = ["trace", "logs"] }
opentelemetry = { version = "0.21", features = ["trace", "metrics", "logs"] }
opentelemetry-appender-log = "0.2.0"
opentelemetry_sdk = { version = "0.21", features = ["rt-tokio", "logs_level_enabled"]}
opentelemetry_sdk = { version = "0.21", features = ["rt-tokio", "metrics", "logs_level_enabled"]}
opentelemetry-semantic-conventions = "0.13.0"
opentelemetry-http = "0.10.0"
opentelemetry-otlp = { version = "0.14.0", features = ["tonic", "metrics", "logs"] }
Expand Down
3 changes: 3 additions & 0 deletions src/shippingservice/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ mod telemetry;
use telemetry::init_logger;
use telemetry::init_reqwest_tracing;
use telemetry::init_tracer;
use telemetry::init_metrics;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
Expand All @@ -25,6 +26,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {

init_logger();
init_reqwest_tracing(init_tracer()?)?;
let _ = init_metrics()?;

info!("OTel pipeline created");
let port = env::var("SHIPPING_SERVICE_PORT").expect("$SHIPPING_SERVICE_PORT is not set");
let addr = format!("0.0.0.0:{}", port).parse()?;
Expand Down
78 changes: 4 additions & 74 deletions src/shippingservice/src/shipping_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ impl ShippingService for ShippingServer {
&self,
request: Request<GetQuoteRequest>,
) -> Result<Response<GetQuoteResponse>, Status> {
info!("GetQuoteRequest: {:?}", request);
debug!("GetQuoteRequest: {:?}", request);
let parent_cx =
global::get_text_map_propagator(|prop| prop.extract(&MetadataMap(request.metadata())));

Expand Down Expand Up @@ -113,7 +113,7 @@ impl ShippingService for ShippingServer {
&self,
request: Request<ShipOrderRequest>,
) -> Result<Response<ShipOrderResponse>, Status> {
info!("ShipOrderRequest: {:?}", request);
debug!("ShipOrderRequest: {:?}", request);

let parent_cx =
global::get_text_map_propagator(|prop| prop.extract(&MetadataMap(request.metadata())));
Expand Down Expand Up @@ -146,82 +146,12 @@ impl ShippingService for ShippingServer {
mod tests {
use super::{
shop::shipping_service_server::ShippingService,
shop::{Address, GetQuoteRequest},
shop::{CartItem, ShipOrderRequest},
ShippingServer, NANOS_MULTIPLE,
shop::ShipOrderRequest,
ShippingServer,
};
use tonic::Request;
use uuid::Uuid;

fn make_quote_request_with_items(items: Vec<i32>) -> Request<GetQuoteRequest> {
let cart_items: Vec<CartItem> = items.into_iter().fold(Vec::new(), |mut accum, count| {
accum.push(CartItem {
product_id: "fake-item".to_string(),
quantity: count,
});
accum
});

Request::new(GetQuoteRequest {
address: Some(Address::default()),
items: cart_items,
})
}

fn make_empty_quote_request() -> Request<GetQuoteRequest> {
Request::new(GetQuoteRequest::default())
}
#[tokio::test]
async fn empty_quote() {
let server = ShippingServer::default();

// when we provide no items, the quote should be empty
match server.get_quote(make_empty_quote_request()).await {
Ok(resp) => {
let money = resp.into_inner().cost_usd.unwrap();
assert_eq!(money.units, 0);
assert_eq!(money.nanos, 0);
}
Err(e) => panic!("error when making empty quote request: {}", e),
}
}

#[tokio::test]
async fn quote_for_one_value() {
let server = ShippingServer::default();

match server
.get_quote(make_quote_request_with_items(vec![1_i32]))
.await
{
Ok(resp) => {
// items are fixed at 8.99, so we should see that price reflected.
let money = resp.into_inner().cost_usd.unwrap();
assert_eq!(money.units, 8);
assert_eq!(money.nanos, 99 * NANOS_MULTIPLE);
}
Err(e) => panic!("error when making quote request for one value: {}", e),
}
}

#[tokio::test]
async fn quote_for_many_values() {
let server = ShippingServer::default();

match server
.get_quote(make_quote_request_with_items(vec![1_i32, 2_i32]))
.await
{
Ok(resp) => {
// items are fixed at 8.99, so we should see that price reflected for 3 items
let money = resp.into_inner().cost_usd.unwrap();
assert_eq!(money.units, 26);
assert_eq!(money.nanos, 97 * NANOS_MULTIPLE);
}
Err(e) => panic!("error when making quote request for many values: {}", e),
}
}

#[tokio::test]
async fn can_get_tracking_id() {
let server = ShippingServer::default();
Expand Down
3 changes: 3 additions & 0 deletions src/shippingservice/src/telemetry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ pub use traces_conf::init_tracer;

mod logs_conf;
pub use logs_conf::init_logger;

mod metrics_conf;
pub use metrics_conf::init_metrics;
6 changes: 2 additions & 4 deletions src/shippingservice/src/telemetry/logs_conf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,12 @@ pub fn init_logger() {
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
.install_batch(runtime::Tokio);

bla();
set_log_bridge();
}

fn bla() {
// Retrieve the global LoggerProvider.
fn set_log_bridge() {
let logger_provider = logger_provider();

// Create a new OpenTelemetryLogBridge using the above LoggerProvider.
let otel_log_appender = OpenTelemetryLogBridge::new(&logger_provider);
log::set_boxed_logger(Box::new(otel_log_appender)).unwrap();
log::set_max_level(Level::Info.to_level_filter());
Expand Down
15 changes: 15 additions & 0 deletions src/shippingservice/src/telemetry/metrics_conf.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

use opentelemetry::metrics::MetricsError;
use opentelemetry_sdk::{metrics::MeterProvider, runtime};

use super::get_resource_attr;

pub fn init_metrics() -> Result<MeterProvider, MetricsError> {
opentelemetry_otlp::new_pipeline()
.metrics(runtime::Tokio)
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
.with_resource(get_resource_attr())
.build()
}

0 comments on commit 2845a5f

Please sign in to comment.