feat: add clap and env vars through clap, add Dockerfile

This commit is contained in:
Fran Arbanas
2024-10-14 12:32:29 +02:00
parent 8758bea17c
commit b68fca0efa
5 changed files with 61 additions and 13 deletions
+1
View File
@@ -17,6 +17,7 @@ readme.workspace = true
anyhow = { workspace = true }
axum = { workspace = true, features = ["tokio"] }
chrono = { workspace = true }
clap = { workspace = true, features = ["derive", "env"] }
nym-bin-common = { path = "../common/bin-common" }
nym-network-defaults = { path = "../common/network-defaults" }
nym-task = { path = "../common/task" }
+21
View File
@@ -0,0 +1,21 @@
FROM rust:latest AS builder
COPY ./ /usr/src/nym
WORKDIR /usr/src/nym/nym-data-observatory
RUN cargo build --release
FROM debian:12-slim
RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \
echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \
echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom
RUN apt update
RUN apt install -yy curl
WORKDIR /nym
COPY --from=builder /usr/src/nym/target/release/nym-data-observatory ./
CMD [ "/nym/nym-data-observatory" ]
+12 -2
View File
@@ -2,12 +2,22 @@ services:
postgres:
image: postgres:13
container_name: nym-data-observatory-pg
env_file:
- .env
environment:
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
data-observatory:
image: nym-data-observatory:latest
build:
context: ../
dockerfile: nym-data-observatory/Dockerfile
container_name: nym-data-observatory
environment:
NYM_DATA_OBSERVATORY_CONNECTION_URL: "postgres://postgres:password@postgres:5432"
NYM_DATA_OBSERVATORY_HTTP_PORT: 8000
volumes:
pgdata:
+2 -2
View File
@@ -16,8 +16,8 @@ pub(crate) struct Storage {
}
impl Storage {
pub async fn init() -> Result<Self> {
let connection_url = std::env::var(DATABASE_URL_ENV_VAR).map_err(anyhow::Error::from)?;
pub async fn init(connection_url: Option<String>) -> Result<Self> {
let connection_url = connection_url.unwrap();
let connect_options = {
let mut connect_options = PgConnectOptions::from_str(&connection_url)?;
let connect_options = connect_options.disable_statement_logging();
+25 -9
View File
@@ -1,3 +1,4 @@
use clap::Parser;
use nym_network_defaults::setup_env;
use nym_task::signal::wait_for_signal;
@@ -8,29 +9,44 @@ mod db;
mod http;
mod logging;
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
/// Port to listen on
#[arg(long, default_value_t = 8000, env = "NYM_DATA_OBSERVATORY_HTTP_PORT")]
http_port: u16,
/// Path to the environment file
#[arg(short, long, default_value = None, env = "NYM_DATA_OBSERVATORY_ENV_FILE")]
env_file: Option<String>,
/// DB connection url
#[arg(short, long, default_value = None, env = "NYM_DATA_OBSERVATORY_CONNECTION_URL")]
connection_url: Option<String>,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
logging::setup_tracing_logger();
// if dotenv file is present, load its values
// otherwise, default to mainnet
setup_env(Some(".env"));
let args = Args::parse();
setup_env(args.env_file); // Defaults to mainnet if empty
let conf = config::Config::from_env();
tracing::debug!("Using config:\n{:?}", conf);
let storage = db::Storage::init().await?;
let storage = db::Storage::init(args.connection_url).await?;
let db_pool = storage.pool_owned().await;
tokio::spawn(async move {
background_task::spawn_in_background(db_pool).await;
tracing::info!("Started task");
});
let shutdown_handles =
http::server::start_http_api(storage.pool_owned().await, conf.http_port())
.await
.expect("Failed to start server");
tracing::info!("Started HTTP server on port {}", conf.http_port());
let shutdown_handles = http::server::start_http_api(storage.pool_owned().await, args.http_port)
.await
.expect("Failed to start server");
tracing::info!("Started HTTP server on port {}", args.http_port);
wait_for_signal().await;