This commit is contained in:
mbecker20
2024-05-06 01:12:14 -07:00
parent 568c317d6d
commit 2d0a09f760
12 changed files with 314 additions and 136 deletions

11
Cargo.lock generated
View File

@@ -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",

View File

@@ -91,4 +91,5 @@ aws-sdk-ec2 = "1.34.0"
# MISC
derive_builder = "0.20.0"
colored = "2.1.0"
typeshare = "1.0.2"

View File

@@ -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

View File

@@ -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"]
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 = []

View File

@@ -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"
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"

View File

@@ -1 +1,8 @@
[[procedure]]
name = "test-procedure"
description = ""
tags = []
[procedure.config]
procedure_type = "Sequence"
executions = []

View File

@@ -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"

View File

@@ -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
[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

View File

@@ -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"

View File

@@ -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<T: DeserializeOwned>(
}
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)

View File

@@ -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) =

View File

@@ -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::<Vec<_>>()
);
} 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::<Vec<_>>()
);
} else {
println!(
"\n{} TO UPDATE: {}",
"\n{} {}: {}",
Self::display(),
"TO UPDATE".blue(),
to_update
.iter()
.map(|(_, item)| item.name.as_str())
.collect::<Vec<_>>()
.join(", ")
);
} else {
println!(
"\n{} {}:\n{:#?}",
Self::display(),
"TO UPDATE".blue(),
to_update.iter().map(|(_, r)| r).collect::<Vec<_>>()
);
}
}