diff --git a/Cargo.lock b/Cargo.lock index 1aeb1eb81..34e8d8eae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -920,6 +920,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + [[package]] name = "convert_case" version = "0.4.0" @@ -2338,6 +2348,7 @@ version = "1.0.0" dependencies = [ "anyhow", "clap", + "colored", "futures", "monitor_client", "partial_derive2", diff --git a/Cargo.toml b/Cargo.toml index 2400a33da..107537079 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -91,4 +91,5 @@ aws-sdk-ec2 = "1.34.0" # MISC derive_builder = "0.20.0" +colored = "2.1.0" typeshare = "1.0.2" diff --git a/bin/monrun/Cargo.toml b/bin/monrun/Cargo.toml index a0d707355..d888146fc 100644 --- a/bin/monrun/Cargo.toml +++ b/bin/monrun/Cargo.toml @@ -13,6 +13,7 @@ monitor_client.workspace = true # mogh partial_derive2.workspace = true # external +colored.workspace = true anyhow.workspace = true tokio.workspace = true serde.workspace = true diff --git a/bin/monrun/resources/builds.toml b/bin/monrun/resources/builds.toml index 5bfb91c3c..028b27afb 100644 --- a/bin/monrun/resources/builds.toml +++ b/bin/monrun/resources/builds.toml @@ -1,46 +1,49 @@ [[build]] -name = "test_logger" -tags = ["test"] -config.builder = "mogh-builder" -config.repo = "mbecker20/test_logger" -config.branch = "master" -config.github_account = "mbecker20" -config.docker_account = "mbecker2020" +name = "monitor_core" +description = "Public monitor core build" +tags = ["monitor"] + +[build.config] +builder_id = "mogh-builder" +repo = "mbecker20/monitor" +branch = "main" +docker_account = "mbecker2020" +build_path = "." +dockerfile_path = "bin/core/Dockerfile" [[build]] -name = "alert_logger" -tags = ["test"] -config.builder = "mogh-builder" -config.repo = "mbecker20/monitor" -config.branch = "next" -config.build_path = "." -config.dockerfile_path = "bin/alert_logger/Dockerfile" -config.docker_account = "mbecker2020" +name = "monitor_core_dev" +description = "" +tags = ["monitor", "dev"] -[[build]] -name = "update_logger" -tags = ["test"] -config.builder = "mogh-builder" -config.repo = "mbecker20/monitor" -config.branch = "next" -config.build_path = "." -config.dockerfile_path = "bin/update_logger/Dockerfile" -config.docker_account = "mbecker2020" +[build.config] +builder_id = "mogh-builder" +repo = "mbecker20/monitor" +branch = "main" +docker_account = "mbecker2020" +build_path = "." +dockerfile_path = "bin/core/Dockerfile" + +## BUILDER -# BUILDER [[builder]] name = "mogh-builder" -description = "the builder for the mogh images" -config.type = "Aws" -config.params.region = "us-east-2" -config.params.instance_type = "c5.2xlarge" -config.params.volume_gb = 20 -config.params.ami_id = "ami-01c8bdba63708cde6" -config.params.subnet_id = "subnet-02ae5ad480eacc4bc" -config.params.key_pair_name = "mogh-key" -config.params.assign_public_ip = true -config.params.use_public_ip = false -config.params.port = 8000 -config.params.security_group_ids = ["sg-049d98c819f9ace58", "sg-006c0ca638af8eb44"] -config.params.github_accounts = ["mbecker20"] -config.params.docker_accounts = ["mbecker2020"] \ No newline at end of file +description = "" +tags = [] + +[builder.config] +type = "Aws" + +[builder.config.params] +region = "us-east-2" +instance_type = "c5.2xlarge" +volume_gb = 20 +port = 8120 +ami_id = "ami-0005a05fa63a080ab" +subnet_id = "subnet-02ae5ad480eacc4bc" +security_group_ids = ["sg-049d98c819f9ace58", "sg-006c0ca638af8eb44"] +key_pair_name = "mogh-key" +assign_public_ip = true +use_public_ip = false +github_accounts = [] +docker_accounts = [] \ No newline at end of file diff --git a/bin/monrun/resources/deployments.toml b/bin/monrun/resources/deployments.toml index 7b8365753..12b4bdd17 100644 --- a/bin/monrun/resources/deployments.toml +++ b/bin/monrun/resources/deployments.toml @@ -1,51 +1,168 @@ [[deployment]] -name = "hello-world" -tags = ["test"] -config.server = "mogh-server" -config.image.type = "Image" -config.image.params.image = "hello-world" +name = "monitor-proxy" +description = "" +tags = ["monitor"] + +[deployment.config] +server_id = "monitor-01" +network = "host" +restart = "on-failure" + +[deployment.config.image] +type = "Image" + +[deployment.config.image.params] +image = "jc21/nginx-proxy-manager" + +[[deployment.config.volumes]] +local = "/data/nginx/data" +container = "/data" + +[[deployment.config.volumes]] +local = "/data/nginx/letsencrypt" +container = "/etc/letsencrypt" [[deployment]] -name = "test_logger" -tags = ["test"] -config.server = "mogh-server" -config.image.type = "Build" -config.image.params.build = "test_logger" +name = "monitor-mongo" +description = "" +tags = ["monitor"] + +[deployment.config] +server_id = "monitor-01" +network = "host" +restart = "no" + +[deployment.config.image] +type = "Image" +params.image = "mongo" [[deployment]] -name = "alert_logger" -tags = ["test"] -config.server = "mogh-server" -config.image.type = "Build" -config.image.params.build = "alert_logger" +name = "monitor-core" +description = "" +tags = ["monitor"] -[[deployment]] -name = "update_logger" -tags = ["test", "logging"] -config.server = "mogh-server" -config.image.type = "Build" -config.image.params.build = "update_logger" -[[deployment.config.environment]] -variable = "MONITOR_ADDRESS" -value = "http://localhost:9001" +[deployment.config] +server_id = "monitor-01" +network = "host" +restart = "no" -[[deployment]] -name = "vector" -tags = ["logging"] -config.server = "mogh-server" -config.image.type = "Image" -config.image.params.image = "timberio/vector" - -[[deployment]] -name = "loki" -tags = ["logging"] -config.server = "mogh-server" -config.image.type = "Image" -config.image.params.image = "grafana/loki" +[deployment.config.image] +type = "Image" +params.image = "mbecker2020/monitor_core" [[deployment]] name = "grafana" -tags = ["frontend"] -config.server = "mogh-server" -config.image.type = "Image" -config.image.params.image = "grafana/grafana" \ No newline at end of file +description = "" +tags = ["logging"] + +[deployment.config] +server_id = "monitor-01" +network = "host" +restart = "unless-stopped" +extra_args = ["--user root"] + +[deployment.config.image] +type = "Image" +params.image = "grafana/grafana" + +[[deployment.config.volumes]] +local = "/data/grafana" +container = "/var/lib/grafana" + +[[deployment.config.environment]] +variable = "GF_SERVER_HTTP_PORT" +value = "3080" + +[[deployment]] +name = "loki" +description = "" +tags = ["logging"] + +[deployment.config] +server_id = "monitor-01" +network = "host" +restart = "unless-stopped" +extra_args = ["--user root"] + +[deployment.config.image] +type = "Image" +params.image = "grafana/loki" + +[[deployment.config.volumes]] +local = "/data/loki" +container = "/loki" + +[[deployment]] +name = "tempo" +description = "" +tags = ["logging"] + +[deployment.config] +server_id = "monitor-01" +network = "host" +restart = "unless-stopped" +process_args = "-server.http-listen-port=3200 -server.grpc-listen-port=9096 --storage.trace.backend=local --storage.trace.local.path=/tmp/tempo/traces --storage.trace.wal.path=/tmp/tempo/wal" +extra_args = ["--user root"] + +[deployment.config.image] +type = "Image" +params.image = "grafana/tempo" + +[[deployment.config.volumes]] +local = "/data/tempo" +container = "/tmp/tempo" + +[[deployment]] +name = "vector" +description = "" +tags = ["logging"] + +[deployment.config] +server_id = "monitor-01" +network = "host" +restart = "unless-stopped" +process_args = "--config /etc/vector/*.toml" +extra_args = ["--user root"] + +[deployment.config.image] +type = "Image" +params.image = "timberio/vector:latest-debian" + +[[deployment.config.volumes]] +local = "/home/ubuntu/.config/vector" +container = "/etc/vector" + +[[deployment.config.volumes]] +local = "/data/vector" +container = "/var/lib/vector" + +[[deployment.config.volumes]] +local = "/var/run/docker.sock" +container = "/var/run/docker.sock" + +[[deployment]] +name = "monitor-core-dev" +description = "" +tags = ["monitor", "dev"] + +[deployment.config] +server_id = "monitor-01" +redeploy_on_build = true +network = "host" +restart = "no" + +[deployment.config.image] +type = "Build" +params.build_id = "monitor_core" + +[[deployment.config.volumes]] +local = "/home/ubuntu/.config/monitor/dev.core.config.toml" +container = "/config/config.toml" + +[[deployment.config.volumes]] +local = "/etc/monitor/repos/monitor-dev-frontend/frontend/dist" +container = "/frontend" + +[[deployment.config.labels]] +variable = "vector" +value = "rust" \ No newline at end of file diff --git a/bin/monrun/resources/procedures.toml b/bin/monrun/resources/procedures.toml index 8b1378917..cafad041f 100644 --- a/bin/monrun/resources/procedures.toml +++ b/bin/monrun/resources/procedures.toml @@ -1 +1,8 @@ +[[procedure]] +name = "test-procedure" +description = "" +tags = [] +[procedure.config] +procedure_type = "Sequence" +executions = [] \ No newline at end of file diff --git a/bin/monrun/resources/repos.toml b/bin/monrun/resources/repos.toml new file mode 100644 index 000000000..bb8832e72 --- /dev/null +++ b/bin/monrun/resources/repos.toml @@ -0,0 +1,18 @@ +[[repo]] +name = "monitor-dev-frontend" +description = "Used as frontend for monitor-core-dev" +tags = ["monitor", "dev"] + +[repo.config] +server_id = "monitor-01" +repo = "mbecker20/monitor" +branch = "main" +github_account = "" + +[repo.config.on_clone] +path = "" +command = "" + +[repo.config.on_pull] +path = "frontend" +command = "sh on_pull.sh" \ No newline at end of file diff --git a/bin/monrun/resources/servers.toml b/bin/monrun/resources/servers.toml index 7070a0356..37a2168b2 100644 --- a/bin/monrun/resources/servers.toml +++ b/bin/monrun/resources/servers.toml @@ -1,13 +1,51 @@ [[server]] -name = "mogh-server" -description = "main mogh server" -tags = ["mogh", "prod"] -config.address = "http://localhost:8001" -config.region = "us-east-2" +name = "monitor-01" +description = "" +tags = ["monitor"] -[[server]] -name = "testo" -description = "test server 1" -tags = ["mogh", "test"] -config.address = "http://locahost:8120" -config.enabled = false \ No newline at end of file +[server.config] +address = "http://localhost:8120" +enabled = true +stats_monitoring = true +auto_prune = true +send_unreachable_alerts = true +send_cpu_alerts = true +send_mem_alerts = true +send_disk_alerts = true +region = "us-east-2" + +## TEMPLATE + +[[server_template]] +name = "mogh-template" +description = "" +tags = [] + +[server_template.config] +type = "Aws" + +[server_template.config.params] +region = "us-east-2" +instance_type = "t3.medium" +ami_id = "ami-0005a05fa63a080ab" +subnet_id = "subnet-02ae5ad480eacc4bc" +key_pair_name = "mogh-key" +assign_public_ip = true +use_public_ip = false +port = 8120 +user_data = "" +security_group_ids = ["sg-049d98c819f9ace58", "sg-006c0ca638af8eb44"] + +[[server_template.config.params.volumes]] +device_name = "/dev/sda1" +size_gb = 20 +volume_type = "gp2" +iops = 0 +throughput = 0 + +[[server_template.config.params.volumes]] +device_name = "/dev/sdb" +size_gb = 10 +volume_type = "gp3" +iops = 0 +throughput = 0 \ No newline at end of file diff --git a/bin/monrun/resources/user_groups.toml b/bin/monrun/resources/user_groups.toml deleted file mode 100644 index 2259c8ac9..000000000 --- a/bin/monrun/resources/user_groups.toml +++ /dev/null @@ -1,28 +0,0 @@ -[[user_group]] -name = "uso_groupo" -users = ["becker.maxh", "defi moses"] - -[[user_group.permission]] -target.type = "Server" -target.id = "mogh-server" -level = "Read" - -[[user_group.permission]] -target.type = "Deployment" -target.id = "monitor-core-v1-dev" -level = "Execute" - -[[user_group.permission]] -target.type = "Deployment" -target.id = "monitor-frontend-v1-dev" -level = "Execute" - -[[user_group.permission]] -target.type = "Build" -target.id = "monitor-core-next" -level = "Execute" - -[[user_group.permission]] -target.type = "Build" -target.id = "monitor-frontend-next" -level = "Execute" \ No newline at end of file diff --git a/bin/monrun/src/main.rs b/bin/monrun/src/main.rs index 5ef8a8ac1..a24365626 100644 --- a/bin/monrun/src/main.rs +++ b/bin/monrun/src/main.rs @@ -5,6 +5,7 @@ use std::{io::Read, path::PathBuf, str::FromStr, sync::OnceLock}; use anyhow::Context; use clap::{Parser, Subcommand}; +use colored::Colorize; use monitor_client::{api::read, MonitorClient}; use serde::{de::DeserializeOwned, Deserialize}; @@ -20,12 +21,15 @@ fn cli_args() -> &'static CliArgs { #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct CliArgs { + /// Sync or Exec #[command(subcommand)] command: Command, + /// The path to a creds file. #[arg(long, default_value_t = String::from("./creds.toml"))] creds: String, + /// Log less (just resource names). #[arg(long, default_value_t = false)] - verbose: bool, + quiet: bool, } #[derive(Debug, Clone, Subcommand)] @@ -90,7 +94,7 @@ fn parse_toml_file( } fn wait_for_enter(message: &str) -> anyhow::Result<()> { - println!("\nPress ENTER to {message}\n"); + println!("\nPress {} to {}\n", "ENTER".green(), message.bold()); let buffer = &mut [0u8]; std::io::stdin() .read_exact(buffer) diff --git a/bin/monrun/src/sync/mod.rs b/bin/monrun/src/sync/mod.rs index 857103447..ea31a4948 100644 --- a/bin/monrun/src/sync/mod.rs +++ b/bin/monrun/src/sync/mod.rs @@ -17,8 +17,6 @@ pub async fn run_sync(path: &Path) -> anyhow::Result<()> { let resources = resource_file::read_resources(path)?; - println!("{resources:#?}"); - let (server_template_creates, server_template_updates) = ServerTemplate::get_updates(resources.server_templates).await?; let (server_creates, server_updates) = diff --git a/bin/monrun/src/sync/resources/mod.rs b/bin/monrun/src/sync/resources/mod.rs index 3cb3d2cb5..e16666e3e 100644 --- a/bin/monrun/src/sync/resources/mod.rs +++ b/bin/monrun/src/sync/resources/mod.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; +use colored::Colorize; use monitor_client::{ api::write::{UpdateDescription, UpdateTagsOnResource}, entities::{ @@ -93,40 +94,47 @@ pub trait ResourceSync { } } - let verbose = cli_args().verbose; + let quiet = cli_args().quiet; if !to_create.is_empty() { - if verbose { - println!("\n{} TO CREATE:\n{to_create:#?}", Self::display(),); - } else { + if quiet { println!( - "\n{} TO CREATE: {:#?}", + "\n{} {}: {:#?}", Self::display(), + "TO CREATE".green(), to_create .iter() .map(|item| item.name.as_str()) .collect::>() ); + } else { + println!( + "\n{} {}:\n{to_create:#?}", + Self::display(), + "TO CREATE".green() + ); } } if !to_update.is_empty() { - if verbose { + if quiet { println!( - "\n{} TO UPDATE:\n{:#?}", - Self::display(), - to_update.iter().map(|(_, r)| r).collect::>() - ); - } else { - println!( - "\n{} TO UPDATE: {}", + "\n{} {}: {}", Self::display(), + "TO UPDATE".blue(), to_update .iter() .map(|(_, item)| item.name.as_str()) .collect::>() .join(", ") ); + } else { + println!( + "\n{} {}:\n{:#?}", + Self::display(), + "TO UPDATE".blue(), + to_update.iter().map(|(_, r)| r).collect::>() + ); } }