From e186980fdf982dbab8a8327cec57e36dbc0a3177 Mon Sep 17 00:00:00 2001 From: Jeffrey Rooks Date: Fri, 16 Sep 2022 10:18:20 -0400 Subject: [PATCH 1/2] add basic stdout telemetry example --- Cargo.toml | 1 + opentelemetry-basic/Cargo.toml | 13 +++++++++ opentelemetry-basic/src/main.rs | 31 ++++++++++++++++++++ poem/opentelemetry-basic/Cargo.toml | 13 +++++++++ poem/opentelemetry-basic/src/main.rs | 42 ++++++++++++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 opentelemetry-basic/Cargo.toml create mode 100644 opentelemetry-basic/src/main.rs create mode 100644 poem/opentelemetry-basic/Cargo.toml create mode 100644 poem/opentelemetry-basic/src/main.rs diff --git a/Cargo.toml b/Cargo.toml index f092164..dc0ed93 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "models/files", "models/token", + "poem/opentelemetry-basic", "poem/starwars", "poem/subscription", "poem/subscription-redis", diff --git a/opentelemetry-basic/Cargo.toml b/opentelemetry-basic/Cargo.toml new file mode 100644 index 0000000..a7f8146 --- /dev/null +++ b/opentelemetry-basic/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "poem-opentelemetry-basic" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +async-graphql = { path = "../../..", features = ["opentelemetry"] } +async-graphql-poem = { path = "../../../integrations/poem" } +tokio = { version = "1.8", features = ["macros", "rt-multi-thread"] } +poem = { version = "1.3.42" } +opentelemetry = { version = "0.17.0", features = ["rt-tokio"] } \ No newline at end of file diff --git a/opentelemetry-basic/src/main.rs b/opentelemetry-basic/src/main.rs new file mode 100644 index 0000000..5f1e6a6 --- /dev/null +++ b/opentelemetry-basic/src/main.rs @@ -0,0 +1,31 @@ +use async_graphql::{extensions::OpenTelemetry, EmptyMutation, EmptySubscription, Schema}; +use async_graphql_poem::{GraphQLProtocol, GraphQLRequest, GraphQLResponse}; +use opentelemetry::sdk::export::trace::stdout; +use poem::{ + handler, http::HeaderMap, listener::TcpListener, web::Data, EndpointExt, IntoResponse, Route, + Server, +}; + +#[handler] +async fn index( + schema: Data<&TokenSchema>, + headers: &HeaderMap, + req: GraphQLRequest, +) -> GraphQLResponse { + schema.execute(req).await.into() +} + +#[tokio::main] +async fn main() { + let tracer = stdout::new_pipeline().install_simple(); + let opentelemetry_extension = OpenTelemetry::new(tracer); + + let schema = Schema::new(QueryRoot, EmptyMutation, EmptySubscription); + + let app = Route::new().at("/", post(index)).data(schema); + + Server::new(TcpListener::bind("0.0.0.0:8000")) + .run(app) + .await + .unwrap(); +} diff --git a/poem/opentelemetry-basic/Cargo.toml b/poem/opentelemetry-basic/Cargo.toml new file mode 100644 index 0000000..1e7b98d --- /dev/null +++ b/poem/opentelemetry-basic/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "poem-opentelemetry-basic" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +async-graphql = { path = "../../..", features = ["opentelemetry"] } +async-graphql-poem = { path = "../../../integrations/poem" } +tokio = { version = "1.8", features = ["macros", "rt-multi-thread"] } +poem = "1.3.42" +opentelemetry = { version = "0.17.0", features = ["rt-tokio"] } \ No newline at end of file diff --git a/poem/opentelemetry-basic/src/main.rs b/poem/opentelemetry-basic/src/main.rs new file mode 100644 index 0000000..625e12b --- /dev/null +++ b/poem/opentelemetry-basic/src/main.rs @@ -0,0 +1,42 @@ +use async_graphql::{ + extensions::OpenTelemetry, EmptyMutation, EmptySubscription, Object, Result, Schema, +}; +use async_graphql_poem::GraphQL; +use opentelemetry::sdk::export::trace::stdout; +use poem::{listener::TcpListener, post, EndpointExt, Route, Server}; + +struct QueryRoot; + +#[Object] +impl QueryRoot { + async fn hello(&self) -> Result { + Ok("World".to_string()) + } +} + +#[tokio::main] +async fn main() { + let tracer = stdout::new_pipeline().install_simple(); + let opentelemetry_extension = OpenTelemetry::new(tracer); + + let schema = Schema::build(QueryRoot, EmptyMutation, EmptySubscription) + .extension(opentelemetry_extension) + .finish(); + + let app = Route::new() + .at("/", post(GraphQL::new(schema.clone()))) + .data(schema); + + let example_curl = "\ + curl '0.0.0.0:8000' \ + -X POST \ + -H 'content-type: application/json' \ + --data '{ \"query\": \"{ hello }\" }'"; + + println!("Run this curl command from another terminal window to see opentelemetry output in this terminal.\n\n{example_curl}\n\n"); + + Server::new(TcpListener::bind("0.0.0.0:8000")) + .run(app) + .await + .unwrap(); +} From 2123636515a12049c661745debde76e261a244a3 Mon Sep 17 00:00:00 2001 From: Jeffrey Rooks Date: Fri, 16 Sep 2022 10:20:01 -0400 Subject: [PATCH 2/2] remove folder --- opentelemetry-basic/Cargo.toml | 13 ------------- opentelemetry-basic/src/main.rs | 31 ------------------------------- 2 files changed, 44 deletions(-) delete mode 100644 opentelemetry-basic/Cargo.toml delete mode 100644 opentelemetry-basic/src/main.rs diff --git a/opentelemetry-basic/Cargo.toml b/opentelemetry-basic/Cargo.toml deleted file mode 100644 index a7f8146..0000000 --- a/opentelemetry-basic/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "poem-opentelemetry-basic" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -async-graphql = { path = "../../..", features = ["opentelemetry"] } -async-graphql-poem = { path = "../../../integrations/poem" } -tokio = { version = "1.8", features = ["macros", "rt-multi-thread"] } -poem = { version = "1.3.42" } -opentelemetry = { version = "0.17.0", features = ["rt-tokio"] } \ No newline at end of file diff --git a/opentelemetry-basic/src/main.rs b/opentelemetry-basic/src/main.rs deleted file mode 100644 index 5f1e6a6..0000000 --- a/opentelemetry-basic/src/main.rs +++ /dev/null @@ -1,31 +0,0 @@ -use async_graphql::{extensions::OpenTelemetry, EmptyMutation, EmptySubscription, Schema}; -use async_graphql_poem::{GraphQLProtocol, GraphQLRequest, GraphQLResponse}; -use opentelemetry::sdk::export::trace::stdout; -use poem::{ - handler, http::HeaderMap, listener::TcpListener, web::Data, EndpointExt, IntoResponse, Route, - Server, -}; - -#[handler] -async fn index( - schema: Data<&TokenSchema>, - headers: &HeaderMap, - req: GraphQLRequest, -) -> GraphQLResponse { - schema.execute(req).await.into() -} - -#[tokio::main] -async fn main() { - let tracer = stdout::new_pipeline().install_simple(); - let opentelemetry_extension = OpenTelemetry::new(tracer); - - let schema = Schema::new(QueryRoot, EmptyMutation, EmptySubscription); - - let app = Route::new().at("/", post(index)).data(schema); - - Server::new(TcpListener::bind("0.0.0.0:8000")) - .run(app) - .await - .unwrap(); -}