improve span structure in hyper-echo example

This commit is contained in:
Eliza Weisman 2018-09-28 15:52:42 -07:00
parent 9de9eab1d7
commit bff434aa24
No known key found for this signature in database
GPG Key ID: F9C1A595C3814436
2 changed files with 21 additions and 10 deletions

View File

@ -14,3 +14,4 @@ hyper = "0.12"
futures = "0.1" futures = "0.1"
ansi_term = "0.11" ansi_term = "0.11"
humantime = "1.1.1" humantime = "1.1.1"
tokio = "0.1"

View File

@ -3,11 +3,13 @@ extern crate hyper;
#[macro_use] #[macro_use]
extern crate tokio_trace; extern crate tokio_trace;
extern crate tokio_trace_env_logger; extern crate tokio_trace_env_logger;
extern crate tokio;
use futures::future; use futures::future;
use hyper::rt::{Future, Stream}; use hyper::rt::{Future, Stream};
use hyper::service::service_fn; use hyper::service::service_fn;
use hyper::{Body, Method, Request, Response, Server, StatusCode}; use hyper::{Body, Method, Request, Response, Server, StatusCode};
use hyper::server::conn::Http;
#[path = "../../tokio-trace/examples/sloggish/sloggish_subscriber.rs"] #[path = "../../tokio-trace/examples/sloggish/sloggish_subscriber.rs"]
mod sloggish; mod sloggish;
@ -98,17 +100,25 @@ fn main() {
tokio_trace_env_logger::try_init().expect("init log adapter"); tokio_trace_env_logger::try_init().expect("init log adapter");
let addr: ::std::net::SocketAddr = ([127, 0, 0, 1], 3000).into(); let addr: ::std::net::SocketAddr = ([127, 0, 0, 1], 3000).into();
let server_span = span!( let server_span = span!("server", local = addr);
"server",
local_addr = addr.ip(),
local_port = addr.port()
);
server_span.clone().enter(|| { server_span.clone().enter(|| {
let span2 = server_span.clone(); let server = tokio::net::TcpListener::bind(&addr)
let server = Server::bind(&addr) .expect("bind")
.serve(move || span2.clone().enter(|| service_fn(echo))) .incoming()
.map_err(|e| event!(Level::Error, { error = e }, "server error")); .fold(Http::new(), move |http, sock| {
let span = span!("connection", remote = sock.peer_addr().unwrap());
hyper::rt::spawn(http.serve_connection(sock, service_fn(echo))
.map_err(|e| { event!(Level::Error, { error = &e }, "serve error"); })
.instrument(span));
Ok::<_, ::std::io::Error>(http)
})
.instrument(server_span)
.map(|_|())
.map_err(|e| { event!(Level::Error, { error = &e }, "server error"); })
;
event!(Level::Info, {}, "listening..."); event!(Level::Info, {}, "listening...");
hyper::rt::run(server.instrument(server_span)); hyper::rt::run(server);
}); });
} }