Skip to content

Commit

Permalink
fix: logging on server start (#680)
Browse files Browse the repository at this point in the history
  • Loading branch information
amitksingh1490 committed Nov 21, 2023
1 parent ad222dd commit ae30d13
Show file tree
Hide file tree
Showing 18 changed files with 55 additions and 94 deletions.
1 change: 1 addition & 0 deletions examples/.tailcallrc.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ directive @server(
introspection: Boolean
queryValidation: Boolean
responseValidation: Boolean
batchRequests: Boolean
globalResponseTimeout: Int
workers: Int
port: Int
Expand Down
6 changes: 3 additions & 3 deletions examples/jsonplaceholder_http_2.graphql
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
schema
@server(
port: 3000
enableGraphiql: true
enableQueryValidation: false
graphiql: true
queryValidation: false
hostname: "0.0.0.0"
version: HTTP2
cert: "./examples/example.crt"
key: "./examples/example.key"
)
@upstream(baseURL: "http://jsonplaceholder.typicode.com", enableHttpCache: true) {
@upstream(baseURL: "http://jsonplaceholder.typicode.com", httpCache: true) {
query: Query
}

Expand Down
58 changes: 24 additions & 34 deletions src/http/http_1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,29 @@ use crate::cli::CLIError;

pub async fn start_http_1(sc: Arc<ServerConfig>) -> std::prelude::v1::Result<(), anyhow::Error> {
let addr = sc.addr();
Ok(
sc.tokio_runtime()?
.spawn(async move {
let sc_cloned = sc.clone();
let make_svc_single_req = make_service_fn(|_conn| {
let state = Arc::clone(&sc);
async move {
Ok::<_, anyhow::Error>(service_fn(move |req| {
handle_single_request(req, state.server_context.clone())
}))
}
});

let make_svc_single_req = make_service_fn(|_conn| {
let state = Arc::clone(&sc_cloned);
async move {
Ok::<_, anyhow::Error>(service_fn(move |req| {
handle_single_request(req, state.server_context.clone())
}))
}
});

let make_svc_batch_req = make_service_fn(|_conn| {
let state = Arc::clone(&sc_cloned);
async move {
Ok::<_, anyhow::Error>(service_fn(move |req| {
handle_batch_request(req, state.server_context.clone())
}))
}
});
let builder = hyper::Server::try_bind(&addr).map_err(CLIError::from)?;

let server: std::prelude::v1::Result<(), hyper::Error> = if sc_cloned.blueprint.server.enable_batch_requests {
builder.serve(make_svc_batch_req).await
} else {
builder.serve(make_svc_single_req).await
};

log_launch(sc.as_ref());
server.map_err(CLIError::from)
})
.await??,
)
let make_svc_batch_req = make_service_fn(|_conn| {
let state = Arc::clone(&sc);
async move {
Ok::<_, anyhow::Error>(service_fn(move |req| {
handle_batch_request(req, state.server_context.clone())
}))
}
});
let builder = hyper::Server::try_bind(&addr).map_err(CLIError::from)?;
log_launch(sc.as_ref());
let server: std::prelude::v1::Result<(), hyper::Error> = if sc.blueprint.server.enable_batch_requests {
builder.serve(make_svc_batch_req).await
} else {
builder.serve(make_svc_single_req).await
};
Ok(server.map_err(CLIError::from)?)
}
13 changes: 2 additions & 11 deletions src/http/http_2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,10 @@ pub async fn start_http_2(
let cert_chain = load_cert(&cert).await?;
let key = load_private_key(&key).await?;
let incoming = AddrIncoming::bind(&addr)?;
let rt = sc.tokio_runtime()?;
let acceptor = TlsAcceptor::builder()
.with_single_cert(cert_chain, key)?
.with_http2_alpn()
.with_incoming(incoming);

let make_svc_single_req = make_service_fn(|_conn| {
let state = Arc::clone(&sc);
async move {
Expand All @@ -78,18 +76,11 @@ pub async fn start_http_2(
});

let builder = Server::builder(acceptor).http2_only(true);

log_launch(sc.as_ref());
let server: std::prelude::v1::Result<(), hyper::Error> = if sc.blueprint.server.enable_batch_requests {
builder.serve(make_svc_batch_req).await
} else {
builder.serve(make_svc_single_req).await
};

Ok(
rt.spawn(async move {
log_launch(sc.as_ref());
server.map_err(CLIError::from)
})
.await??,
)
Ok(server.map_err(CLIError::from)?)
}
2 changes: 1 addition & 1 deletion src/http/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ fn log_launch(sc: &ServerConfig) {
let addr = sc.addr().to_string();
log::info!("🚀 Tailcall launched at [{}] over {}", addr, sc.http_version());
if sc.graphiql() {
log::info!("🌍 Playground: https://{}", addr);
log::info!("🌍 Playground: {}", sc.graphiql_url());
}
}

Expand Down
24 changes: 9 additions & 15 deletions src/http/server_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,22 @@ impl ServerConfig {
(self.blueprint.server.hostname, self.blueprint.server.port).into()
}

pub fn workers(&self) -> usize {
self.blueprint.server.worker
}

pub fn tokio_runtime(&self) -> anyhow::Result<tokio::runtime::Runtime> {
let workers = self.workers();

Ok(
tokio::runtime::Builder::new_multi_thread()
.worker_threads(workers)
.enable_all()
.build()?,
)
}

pub fn http_version(&self) -> String {
match self.blueprint.server.http {
Http::HTTP2 { cert: _, key: _ } => "HTTP/2".to_string(),
_ => "HTTP/1.1".to_string(),
}
}

pub fn graphiql_url(&self) -> String {
let protocol = match self.http_version().as_str() {
"HTTP/2" => "https",
_ => "http",
};
let addr = self.addr().to_string();
format!("{}://{}", protocol, addr)
}

pub fn graphiql(&self) -> bool {
self.blueprint.server.enable_graphiql
}
Expand Down
2 changes: 1 addition & 1 deletion tests/graphql/errors/test-hostname-faliure.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#> server-sdl
schema @server(enableGraphiql: true, hostname: "abc") {
schema @server(graphiql: true, hostname: "abc") {
query: Query
}

Expand Down
2 changes: 1 addition & 1 deletion tests/graphql/errors/test-response-header-value.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#> server-sdl
schema @server(baseURL: "https://jsonplaceholder.typicode.com", responseHeaders: [{key: "a", value: "a \n b"}]) {
schema @server(responseHeaders: [{key: "a", value: "a \n b"}]) {
query: Query
}

Expand Down
6 changes: 1 addition & 5 deletions tests/graphql/errors/test-response-headers-multi.graphql
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
#> server-sdl
schema
@server(
baseURL: "https://jsonplaceholder.typicode.com"
responseHeaders: [{key: "a b", value: "a \n b"}, {key: "a c", value: "a \n b"}]
) {
schema @server(responseHeaders: [{key: "a b", value: "a \n b"}, {key: "a c", value: "a \n b"}]) {
query: Query
}

Expand Down
2 changes: 1 addition & 1 deletion tests/graphql/errors/test-response-headers-name.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#> server-sdl
schema @server(baseURL: "https://jsonplaceholder.typicode.com", responseHeaders: [{key: "🤣", value: "a"}]) {
schema @server(responseHeaders: [{key: "🤣", value: "a"}]) {
query: Query
}

Expand Down
2 changes: 1 addition & 1 deletion tests/graphql/errors/undeclared-type.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#> server-sdl
schema @schema {
schema @server {
query: Query
}

Expand Down
2 changes: 1 addition & 1 deletion tests/graphql/passed/test-batching-default.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#> server-sdl
schema @server @upstream(baseURL: "http://jsonplaceholder.typicode.com", enableHttpCache: true) {
schema @server @upstream(baseURL: "http://jsonplaceholder.typicode.com", httpCache: true) {
query: Query
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#> server-sdl
schema
@server
@upstream(baseURL: "http://jsonplaceholder.typicode.com", enableHttpCache: true, batch: {delay: 1, maxSize: 1000}) {
@upstream(baseURL: "http://jsonplaceholder.typicode.com", httpCache: true, batch: {delay: 1, maxSize: 1000}) {
query: Query
}

Expand Down
9 changes: 2 additions & 7 deletions tests/graphql/passed/test-batching-group-by.graphql
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
#> server-sdl
schema
@server(port: 8000, enableGraphiql: true)
@upstream(
baseURL: "http://jsonplaceholder.typicode.com"
enableQueryValidation: false
enableHttpCache: true
batch: {delay: 1, maxSize: 1000}
) {
@server(port: 8000, graphiql: true, queryValidation: false)
@upstream(baseURL: "http://jsonplaceholder.typicode.com", httpCache: true, batch: {delay: 1, maxSize: 1000}) {
query: Query
}

Expand Down
4 changes: 2 additions & 2 deletions tests/graphql/passed/test-batching.graphql
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#> server-sdl
schema
@server(port: 8000, enableGraphiql: true, enableQueryValidation: false)
@server(port: 8000, graphiql: true, queryValidation: false)
@upstream(
enableHttpCache: true
httpCache: true
batch: {maxSize: 1000, delay: 0, headers: []}
baseURL: "http://jsonplaceholder.typicode.com"
) {
Expand Down
2 changes: 1 addition & 1 deletion tests/graphql/passed/test-resolve-with-headers.graphql
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#> server-sdl
schema @server(allowedHeaders: ["authorization"]) {
schema @upstream(allowedHeaders: ["authorization"]) {
query: Query
}

Expand Down
10 changes: 2 additions & 8 deletions tests/graphql_mock/test-batched-request.graphql
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
schema
@server(
port: 8000
enableGraphiql: true
enableQueryValidation: false
hostname: "0.0.0.0"
enableBatchRequests: true
)
@upstream(baseURL: "http://jsonplaceholder.typicode.com", enableHttpCache: true) {
@server(port: 8000, graphiql: true, queryValidation: false, hostname: "0.0.0.0", batchRequests: true)
@upstream(baseURL: "http://jsonplaceholder.typicode.com", httpCache: true) {
query: Query
}

Expand Down
2 changes: 1 addition & 1 deletion tests/graphql_mock/test-custom-headers.graphql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
schema @server(responseHeaders: [{key: "x-id", value: "1"}, {key: "x-value", value: "value"}], enableGraphiql: true) {
schema @server(responseHeaders: [{key: "x-id", value: "1"}, {key: "x-value", value: "value"}], graphiql: true) {
query: Query
}

Expand Down

0 comments on commit ae30d13

Please sign in to comment.