Files
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

151 lines
4.3 KiB
HCL

# Observability Module
# Provides unified logging, metrics, and tracing across all environments
locals {
environments = var.environments
global_config = var.global_config
clusters = var.clusters
# Extract observability config
obs_config = try(local.global_config, {})
logging_config = try(local.obs_config.logging, {})
metrics_config = try(local.obs_config.metrics, {})
tracing_config = try(local.obs_config.tracing, {})
}
# ============================================
# LOGGING CONFIGURATION
# ============================================
# Generate logging configuration per environment
resource "local_file" "logging_config" {
for_each = local.clusters
filename = "${path.module}/../../../../config/observability/logging-${each.key}.yaml"
content = yamlencode({
cluster = each.key
provider = try(local.logging_config.provider, "loki")
endpoint = try(local.logging_config.central_endpoint, "")
config = {
loki = {
url = try(local.logging_config.central_endpoint, "http://loki:3100")
labels = {
cluster = each.key
provider = try(local.environments[each.key].provider, "unknown")
}
}
elasticsearch = {
url = try(local.logging_config.central_endpoint, "")
index = "besu-network-${each.key}"
}
}
})
}
# ============================================
# METRICS CONFIGURATION
# ============================================
# Generate Prometheus/metrics configuration
resource "local_file" "metrics_config" {
for_each = local.clusters
filename = "${path.module}/../../../../config/observability/metrics-${each.key}.yaml"
content = yamlencode({
cluster = each.key
provider = try(local.metrics_config.provider, "prometheus")
endpoint = try(local.metrics_config.central_endpoint, "")
scrape_configs = [
{
job_name = "besu-validators"
kubernetes_sd_configs = [{
role = "pod"
}]
relabel_configs = [{
source_labels = ["__meta_kubernetes_pod_label_role"]
action = "keep"
regex = "validator"
}]
},
{
job_name = "besu-rpc"
kubernetes_sd_configs = [{
role = "pod"
}]
relabel_configs = [{
source_labels = ["__meta_kubernetes_pod_label_role"]
action = "keep"
regex = "rpc"
}]
}
]
})
}
# ============================================
# TRACING CONFIGURATION
# ============================================
# Generate tracing configuration
resource "local_file" "tracing_config" {
for_each = local.clusters
filename = "${path.module}/../../../../config/observability/tracing-${each.key}.yaml"
content = yamlencode({
cluster = each.key
provider = try(local.tracing_config.provider, "jaeger")
endpoint = try(local.tracing_config.central_endpoint, "")
config = {
jaeger = {
agent_host = try(split(":", local.tracing_config.central_endpoint)[0], "jaeger")
agent_port = try(split(":", local.tracing_config.central_endpoint)[1], "6831")
}
zipkin = {
url = try(local.tracing_config.central_endpoint, "http://zipkin:9411")
}
}
})
}
# ============================================
# GRAFANA DASHBOARDS
# ============================================
# Generate Grafana dashboard configuration
resource "local_file" "grafana_dashboards" {
filename = "${path.module}/../../../../config/observability/grafana-dashboards.yaml"
content = yamlencode({
dashboards = {
for name, cluster in local.clusters : name => {
title = "Besu Network - ${name}"
panels = [
{
title = "Block Production Rate"
targets = [
{
expr = "rate(besu_blockchain_blocks_added_total[5m])"
legendFormat = "{{cluster}}"
}
]
},
{
title = "Validator Health"
targets = [
{
expr = "besu_validator_health"
legendFormat = "{{validator}}"
}
]
},
{
title = "RPC Requests"
targets = [
{
expr = "rate(besu_rpc_requests_total[5m])"
legendFormat = "{{method}}"
}
]
}
]
}
}
})
}