forked from istio/ztunnel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.rs
79 lines (68 loc) · 2.34 KB
/
main.rs
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
// Copyright Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
extern crate core;
use std::sync::Arc;
use tracing::info;
use ztunnel::*;
#[cfg(feature = "jemalloc")]
#[cfg(feature = "jemalloc")]
#[global_allocator]
static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
#[cfg(feature = "jemalloc")]
#[allow(non_upper_case_globals)]
#[export_name = "malloc_conf"]
pub static malloc_conf: &[u8] = b"prof:true,prof_active:true,lg_prof_sample:19\0";
fn main() -> anyhow::Result<()> {
let _log_flush = telemetry::setup_logging();
// For now we don't need a complex CLI, so rather than pull in dependencies just use basic argv[1]
match std::env::args().nth(1).as_deref() {
None | Some("proxy") => (),
Some("version") => return version(),
Some("help") => return help(),
Some(unknown) => {
eprintln!("unknown command: {unknown}");
help().unwrap();
std::process::exit(1)
}
};
tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.unwrap()
.block_on(async move {
let config = Arc::new(config::parse_config()?);
proxy(config).await
})
}
fn help() -> anyhow::Result<()> {
let version = version::BuildInfo::new();
println!(
"
Istio Ztunnel ({version})
Commands:
proxy (default) - Start the ztunnel proxy
version - Print the version of ztunnel
help - Print commands and version of ztunnel"
);
Ok(())
}
fn version() -> anyhow::Result<()> {
println!("{}", version::BuildInfo::new());
Ok(())
}
async fn proxy(cfg: Arc<config::Config>) -> anyhow::Result<()> {
info!("version: {}", version::BuildInfo::new());
info!("running with config: {}", serde_yaml::to_string(&cfg)?);
app::build(cfg).await?.wait_termination().await
}