Compare commits

...
Author SHA1 Message Date
Brandon Thomas 375d95ade9 centralized config 2026-03-31 04:00:57 -04:00
Brandon Thomas e8e1d95006 central config 2026-03-31 03:55:12 -04:00
Brandon Thomas 2a726dc329 central rootly config 2026-03-31 03:33:47 -04:00
14 changed files with 103 additions and 27 deletions
Generated
+15
View File
@@ -9620,6 +9620,10 @@ dependencies = [
"workspace-build-acceleration",
]
[[package]]
name = "rootly_config"
version = "0.0.1"
[[package]]
name = "rsa"
version = "0.9.6"
@@ -10701,6 +10705,13 @@ dependencies = [
"keccak",
]
[[package]]
name = "shared_env_var_config"
version = "0.0.1"
dependencies = [
"easyenv",
]
[[package]]
name = "shlex"
version = "1.3.0"
@@ -11278,6 +11289,7 @@ dependencies = [
"resend-rs",
"reusable_types",
"rootly_client",
"rootly_config",
"rust-s3",
"rustls 0.23.36",
"seedance2pro_client",
@@ -11285,6 +11297,7 @@ dependencies = [
"serde_derive",
"serde_json",
"server_environment",
"shared_env_var_config",
"speculoos",
"sqlx",
"strum",
@@ -13362,10 +13375,12 @@ dependencies = [
"mysql_queries",
"pager",
"rootly_client",
"rootly_config",
"serde",
"serde_derive",
"serde_json",
"server_environment",
"shared_env_var_config",
"sqlx",
"tempdir",
"tokio",
+6
View File
@@ -101,6 +101,10 @@ members = [
# Schema (buckets): S3/R2 topology
"crates/schema/buckets/bucket_paths",
# Schema (config): configuration constants for external services
"crates/schema/config/rootly_config",
"crates/schema/config/shared_env_var_config",
# Schema (database): queries, database layouts, Redis keys, etc.
"crates/schema/database/elasticsearch_schema",
"crates/schema/database/migration",
@@ -242,6 +246,8 @@ file_to_base64_url = { path = "crates/lib/files/file_to_base64_url" }
filesys = { path = "crates/lib/files/filesys" }
grok_client = { path = "crates/api_clients/grok_client" }
rootly_client = { path = "crates/api_clients/rootly_client" }
rootly_config = { path = "crates/schema/config/rootly_config" }
shared_env_var_config = { path = "crates/schema/config/shared_env_var_config" }
http_headers = { path = "crates/lib/http_headers" }
images = { path = "crates/lib/files/images" }
jobs_common = { path = "crates/lib/jobs_common" }
@@ -0,0 +1,9 @@
[package]
name = "rootly_config"
edition = "2024"
version = "0.0.1"
publish = false
[lib]
name = "rootly_config"
path = "src/lib.rs"
@@ -0,0 +1,2 @@
pub mod services;
pub mod urgencies;
@@ -0,0 +1,2 @@
pub const ROOTLY_SERVICE_ID_STORYTELLER_WEB: &str = "9ebebb09-0c56-4c8a-8f57-d5f0f85f3f16";
pub const ROOTLY_SERVICE_ID_VIDEO_THUMBNAIL_JOB: &str = "9d22997c-4474-47cb-af7b-53119eed1a88";
@@ -0,0 +1,3 @@
pub const ROOTLY_URGENCY_ID_HIGH: &str = "62fde143-1258-4639-9ee6-1400ebf7308d";
pub const ROOTLY_URGENCY_ID_MEDIUM: &str = "7366ba5e-f6ea-4a4e-a1b4-ae43d512e1e2";
pub const ROOTLY_URGENCY_ID_LOW: &str = "4db3d3ed-f4ed-4818-82f5-7746da404bd2";
@@ -0,0 +1,12 @@
[package]
name = "shared_env_var_config"
edition = "2024"
version = "0.0.1"
publish = false
[lib]
name = "shared_env_var_config"
path = "src/lib.rs"
[dependencies]
easyenv.workspace = true
@@ -0,0 +1 @@
pub mod paging;
@@ -0,0 +1,29 @@
// ----- Environment Variable Names -----
const ENV_ENABLE_PAGING: &str = "ENABLE_PAGING";
const ENV_ENABLE_PAGING_FOR_500S: &str = "ENABLE_PAGING_FOR_500S";
const ENV_ROOTLY_API_KEY: &str = "ROOTLY_API_KEY";
const ENV_ROOTLY_NOTIFICATION_TARGET_TYPE: &str = "ROOTLY_NOTIFICATION_TARGET_TYPE";
const ENV_ROOTLY_NOTIFICATION_TARGET_ID: &str = "ROOTLY_NOTIFICATION_TARGET_ID";
// ----- Read Environment Variables -----
pub fn env_enable_paging_default_false() -> bool {
easyenv::get_env_bool_or_default(ENV_ENABLE_PAGING, false)
}
pub fn env_enable_paging_for_500s_default_false() -> bool {
easyenv::get_env_bool_or_default(ENV_ENABLE_PAGING_FOR_500S, false)
}
pub fn env_optional_rootly_api_key() -> Option<String> {
easyenv::get_env_string_optional(ENV_ROOTLY_API_KEY)
}
pub fn env_optional_rootly_notification_target_type() -> Option<String> {
easyenv::get_env_string_optional(ENV_ROOTLY_NOTIFICATION_TARGET_TYPE)
}
pub fn env_optional_rootly_notification_target_id() -> Option<String> {
easyenv::get_env_string_optional(ENV_ROOTLY_NOTIFICATION_TARGET_ID)
}
@@ -33,6 +33,8 @@ jobs_common.workspace = true
mysql_queries.workspace = true
pager = { path = "../../../lib/pager" }
rootly_client.workspace = true
rootly_config.workspace = true
shared_env_var_config.workspace = true
server_environment = { path = "../../../lib/server_environment" }
# External
@@ -3,19 +3,15 @@ use pager::client::pager::Pager;
use pager::client::pager_builder::PagerBuilder;
use pager::worker::pager_worker::PagerWorker;
use rootly_client::creds::rootly_api_key::RootlyApiKey;
/// `video-thumbnail-job` rootly service ID
const ROOTLY_SERVICE_ID: &str = "9d22997c-4474-47cb-af7b-53119eed1a88";
const ROOTLY_URGENCY_ID_HIGH: &str = "62fde143-1258-4639-9ee6-1400ebf7308d";
const ROOTLY_URGENCY_ID_MEDIUM: &str = "7366ba5e-f6ea-4a4e-a1b4-ae43d512e1e2";
const ROOTLY_URGENCY_ID_LOW: &str = "4db3d3ed-f4ed-4818-82f5-7746da404bd2";
use rootly_config::services::ROOTLY_SERVICE_ID_VIDEO_THUMBNAIL_JOB;
use rootly_config::urgencies::{ROOTLY_URGENCY_ID_HIGH, ROOTLY_URGENCY_ID_LOW, ROOTLY_URGENCY_ID_MEDIUM};
use shared_env_var_config::paging::{env_enable_paging_default_false, env_optional_rootly_api_key, env_optional_rootly_notification_target_id, env_optional_rootly_notification_target_type};
pub fn build_pager(
server_environment: server_environment::ServerEnvironment,
hostname: &str,
) -> (Pager, PagerWorker) {
let is_paging_enabled = easyenv::get_env_bool_or_default("ENABLE_PAGING", false);
let is_paging_enabled = env_enable_paging_default_false();
info!("Paging enabled: {}", is_paging_enabled);
@@ -29,7 +25,7 @@ pub fn build_pager(
.application_name("video-thumbnail-job".to_string())
.environment(environment.to_string())
.hostname(hostname.to_string())
.service_id(ROOTLY_SERVICE_ID.to_string());
.service_id(ROOTLY_SERVICE_ID_VIDEO_THUMBNAIL_JOB.to_string());
// If paging is globally disabled, use a NoOp pager regardless of API key.
if !is_paging_enabled {
@@ -37,7 +33,7 @@ pub fn build_pager(
return builder.build_with_worker();
}
let maybe_api_key = easyenv::get_env_string_optional("ROOTLY_API_KEY");
let maybe_api_key = env_optional_rootly_api_key();
match maybe_api_key {
Some(api_key) => {
@@ -58,8 +54,8 @@ fn build_rootly_pager(builder: PagerBuilder, api_key: String) -> (Pager, PagerWo
.urgency_id_medium(ROOTLY_URGENCY_ID_MEDIUM.to_string())
.urgency_id_low(ROOTLY_URGENCY_ID_LOW.to_string());
let target_type = easyenv::get_env_string_optional("ROOTLY_NOTIFICATION_TARGET_TYPE");
let target_id = easyenv::get_env_string_optional("ROOTLY_NOTIFICATION_TARGET_ID");
let target_type = env_optional_rootly_notification_target_type();
let target_id = env_optional_rootly_notification_target_id();
if let (Some(t_type), Some(t_id)) = (target_type, target_id) {
rootly_builder = rootly_builder.notification_target(t_type, t_id);
@@ -68,6 +68,8 @@ mysql_queries.workspace = true
pager.workspace = true
password = { path = "../../../lib/password" }
rootly_client.workspace = true
rootly_config.workspace = true
shared_env_var_config.workspace = true
primitives = { path = "../../../lib/data/primitives" }
prompt_engineering = { path = "../../../lib/deprecated/machine_learning/prompt_engineering" }
redis_caching = { path = "../../../lib/caching/redis_caching" }
@@ -1,17 +1,12 @@
use crate::state::flags::paging_flags::PagingFlags;
use log::{info, warn};
use pager::client::pager::Pager;
use pager::client::pager_builder::PagerBuilder;
use pager::worker::pager_worker::PagerWorker;
use rootly_client::creds::rootly_api_key::RootlyApiKey;
use crate::state::flags::paging_flags::PagingFlags;
/// `storyteller-web` rootly service ID
const ROOTLY_SERVICE_ID: &str = "9ebebb09-0c56-4c8a-8f57-d5f0f85f3f16";
const ROOTLY_URGENCY_ID_HIGH: &str = "62fde143-1258-4639-9ee6-1400ebf7308d";
const ROOTLY_URGENCY_ID_MEDIUM: &str = "7366ba5e-f6ea-4a4e-a1b4-ae43d512e1e2";
const ROOTLY_URGENCY_ID_LOW: &str = "4db3d3ed-f4ed-4818-82f5-7746da404bd2";
use rootly_config::services::ROOTLY_SERVICE_ID_STORYTELLER_WEB;
use rootly_config::urgencies::{ROOTLY_URGENCY_ID_HIGH, ROOTLY_URGENCY_ID_LOW, ROOTLY_URGENCY_ID_MEDIUM};
use shared_env_var_config::paging::{env_optional_rootly_api_key, env_optional_rootly_notification_target_id, env_optional_rootly_notification_target_type};
pub fn build_pager(
server_environment: server_environment::ServerEnvironment,
@@ -31,7 +26,7 @@ pub fn build_pager(
.application_name("storyteller-web".to_string())
.environment(environment.to_string())
.hostname(hostname.to_string())
.service_id(ROOTLY_SERVICE_ID.to_string());
.service_id(ROOTLY_SERVICE_ID_STORYTELLER_WEB.to_string());
// If paging is globally disabled, use a NoOp pager regardless of API key.
if !paging_flags.is_paging_enabled {
@@ -40,7 +35,7 @@ pub fn build_pager(
return (pager, worker, paging_flags);
}
let maybe_api_key = easyenv::get_env_string_optional("ROOTLY_API_KEY");
let maybe_api_key = env_optional_rootly_api_key();
let (pager, worker) = match maybe_api_key {
Some(api_key) => {
@@ -63,8 +58,8 @@ fn build_rootly_pager(builder: PagerBuilder, api_key: String) -> (Pager, PagerWo
.urgency_id_medium(ROOTLY_URGENCY_ID_MEDIUM.to_string())
.urgency_id_low(ROOTLY_URGENCY_ID_LOW.to_string());
let target_type = easyenv::get_env_string_optional("ROOTLY_NOTIFICATION_TARGET_TYPE");
let target_id = easyenv::get_env_string_optional("ROOTLY_NOTIFICATION_TARGET_ID");
let target_type = env_optional_rootly_notification_target_type();
let target_id = env_optional_rootly_notification_target_id();
if let (Some(t_type), Some(t_id)) = (target_type, target_id) {
rootly_builder = rootly_builder.notification_target(t_type, t_id);
@@ -1,3 +1,5 @@
use shared_env_var_config::paging::{env_enable_paging_default_false, env_enable_paging_for_500s_default_false};
/// Flags controlling the pager system.
#[derive(Clone, Debug)]
pub struct PagingFlags {
@@ -14,8 +16,8 @@ pub struct PagingFlags {
impl PagingFlags {
pub fn from_env() -> Self {
Self {
is_paging_enabled: easyenv::get_env_bool_or_default("ENABLE_PAGING", false),
is_paging_for_500s_enabled: easyenv::get_env_bool_or_default("ENABLE_PAGING_FOR_500S", false),
is_paging_enabled: env_enable_paging_default_false(),
is_paging_for_500s_enabled: env_enable_paging_for_500s_default_false(),
}
}
}