-
Notifications
You must be signed in to change notification settings - Fork 146
Expand file tree
/
Copy pathgrpc-cdh.rs
More file actions
92 lines (75 loc) · 3.11 KB
/
grpc-cdh.rs
File metadata and controls
92 lines (75 loc) · 3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright (c) 2024 Alibaba Cloud
//
// SPDX-License-Identifier: Apache-2.0
//
use std::net::SocketAddr;
use anyhow::{Context, Result};
use clap::Parser;
use confidential_data_hub::hub::Hub;
use const_format::concatcp;
use shadow_rs::shadow;
use tokio::signal::unix::{signal, SignalKind};
use tracing::{debug, info};
use tracing_subscriber::{fmt::Subscriber, EnvFilter};
shadow!(build);
mod config;
mod grpc_server;
mod message;
const FEATURE_INFO: &str = include_str!(concat!(env!("OUT_DIR"), "/version"));
const DIRTY_SUFFIX: &str = if build::GIT_CLEAN { "" } else { " (dirty)" };
const VERSION: &str = concatcp!(
build::LAST_TAG,
"-",
build::SHORT_COMMIT,
DIRTY_SUFFIX,
"\n",
FEATURE_INFO
);
#[derive(Debug, Parser)]
#[command(author, version = VERSION)]
struct Cli {
/// Path to the config file
///
/// `--config /etc/confidential-data-hub.conf`
#[arg(short)]
config: Option<String>,
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
let (config, config_log) = config::read_config(cli.config).context("failed to read config")?;
let env_filter = match std::env::var_os("RUST_LOG") {
Some(_) => EnvFilter::try_from_default_env().context("RUST_LOG is present but invalid")?,
None => EnvFilter::try_new(&config.log.level)
.context(format!("Invalid log level: {}", config.log.level))?,
};
let version = format!(
r"
_____ __ _ _ _ _ _ ______ _ _ _ _
/ __ \ / _|(_) | | | | (_) | | | _ \ | | | | | | | |
| / \/ ___ _ __ | |_ _ __| | ___ _ __ | |_ _ __ _ | | | | | | __ _ | |_ __ _ | |_| | _ _ | |__
| | / _ \ | '_ \ | _|| | / _` | / _ \| '_ \ | __|| | / _` || | | | | |/ _` || __|/ _` | | _ || | | || '_ \
| \__/\| (_) || | | || | | || (_| || __/| | | || |_ | || (_| || | | |/ /| (_| || |_| (_| | | | | || |_| || |_) |
\____/ \___/ |_| |_||_| |_| \__,_| \___||_| |_| \__||_| \__,_||_| |___/ \__,_| \__|\__,_| \_| |_/ \__,_||_.__/
version: {VERSION}
buildtime: {}
loglevel: {env_filter}
rpc: grpc
",
build::BUILD_TIME,
);
Subscriber::builder().with_env_filter(env_filter).init();
info!("Welcome to Confidential Containers Confidential Data Hub (gRPC version)!\n\n{version}");
info!("{config_log}");
debug!(config = ?config, "Using config");
let cdh_socket = config.socket.parse::<SocketAddr>()?;
let cdh = Hub::new(config).await.context("start CDH")?;
let mut interrupt = signal(SignalKind::interrupt())?;
let mut hangup = signal(SignalKind::hangup())?;
tokio::select! {
_ = hangup.recv() => info!("Client terminal disconnected."),
_ = interrupt.recv() => info!("SIGINT received, gracefully shutdown."),
_ = grpc_server::start_grpc_service(cdh_socket, cdh) => info!("CDH exits."),
}
Ok(())
}