Working open telemetry

This commit is contained in:
2023-11-28 17:09:50 +01:00
parent f2b16ba472
commit b43aa68130
4 changed files with 302 additions and 26 deletions

View File

@@ -1,10 +1,13 @@
use opentelemetry_otlp::WithExportConfig;
use opentelemetry_sdk::Resource;
use ovlach_pdf::rocket_builder;
use rocket::launch;
use opentelemetry::trace::TracerProvider as _;
use opentelemetry_sdk::trace::TracerProvider;
use opentelemetry::trace::{TracerProvider as _, TraceError};
use opentelemetry_sdk::trace::{TracerProvider, Config};
use opentelemetry_stdout as stdout;
use tokio::net::unix::pipe;
use tracing::{error, span};
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
use tracing_subscriber::Registry;
@@ -28,6 +31,23 @@ fn init_meterprovider() -> MeterProvider {
}
fn init_tracer() -> Result<opentelemetry_sdk::trace::Tracer, TraceError> {
opentelemetry_otlp::new_pipeline()
.tracing()
.with_exporter(
opentelemetry_otlp::new_exporter()
.tonic()
.with_endpoint("http://localhost:4317"),
)
.with_trace_config(
opentelemetry_sdk::trace::config().with_resource(Resource::new(vec![KeyValue::new(
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
"ovlach_pdf",
)])),
)
.install_batch(runtime::Tokio)
//.install_simple()
}
#[rocket::main]
async fn main() {
@@ -36,8 +56,12 @@ async fn main() {
.with_simple_exporter(logger)
.build();
let telemetry = tracing_opentelemetry::layer().with_tracer(provider.tracer("default"));
let meter_provider = init_meterprovider();
let telemetry = tracing_opentelemetry::layer().with_tracer(
provider.tracer("default")
).with_tracer(
init_tracer().unwrap()
);
let meter_provider = init_meterprovider();
Registry::default().with(telemetry).init();
let _ = rocket_builder().launch().await;
}

View File

@@ -5,14 +5,17 @@ use std::io::prelude::*;
use headless_chrome::Browser;
use headless_chrome::{types::PrintToPdfOptions, LaunchOptions};
use rocket::{get, Response, futures::Stream, tokio::net::UnixStream, fs::NamedFile};
use tracing::{info_span, debug, info, error};
use tracing::{info_span, debug, info, error, Span, instrument};
use crate::chromium::rocket::BrowserHolder;
use crate::tools::rocket::TracingSpan;
fn generate_pdf(browser: Browser) {
let tab = browser.new_tab().unwrap();
let tab = tab.navigate_to("file:///home/6a6996c0-1609-48b6-8ca6-affbef1b4d1d/Devel/Nanobyte/ovlach/ovlach_pdf/template.html").unwrap().wait_until_navigated().unwrap();
info_span!("open_pdf").in_scope(|| {
tab.navigate_to("file:///home/6a6996c0-1609-48b6-8ca6-affbef1b4d1d/Devel/Nanobyte/ovlach/ovlach_pdf/template.html").unwrap().wait_until_navigated().unwrap();
});
let options = PrintToPdfOptions{
margin_bottom: Some(0.0),
margin_left: Some(0.0),
@@ -26,25 +29,29 @@ fn generate_pdf(browser: Browser) {
//thread::sleep(Duration::from_secs(10));
let bytes = tab.print_to_pdf(Some(options)).unwrap();
let mut file = fs::OpenOptions::new()
// .create(true) // To create a new file
.write(true)
// either use the ? operator or unwrap since it returns a Result
.open("/tmp/foo.pdf").unwrap();
file.write_all(&bytes).unwrap();
let bytes = info_span!("print_pdf").in_scope(|| {
tab.print_to_pdf(Some(options)).unwrap()
});
info_span!("write_temporary_file").in_scope(|| {
let mut file = fs::OpenOptions::new()
// .create(true) // To create a new file
.write(true)
// either use the ? operator or unwrap since it returns a Result
.open("/tmp/foo.pdf").unwrap();
file.write_all(&bytes).unwrap();
});
}
#[get("/cv/<username>/pdf")]
pub async fn render_pdf_cv(username: &str, browser: BrowserHolder, tracing: TracingSpan) -> NamedFile {
let entered_span = tracing.0.enter();
let span = info_span!("render_pdf", username = username);
let entered_inner_span = span.enter();
info!("generate PDF");
generate_pdf(browser.browser);
span.in_scope(||{
generate_pdf(browser.browser);
});
info!("done generating");
drop(entered_inner_span);
drop(entered_span);
"foo!".to_string();
NamedFile::open("/tmp/foo.pdf").await.expect("failed to open foo.pdf")
}