rebrand: Switchboard Core → Armature

- Rename Go module switchboard-core → armature (155+ files)
- Rename Docker image → gobha/armature
- Rename K8s resources, secrets, deployments
- Rename Prometheus metrics switchboard_* → armature_*
- Rename env vars SWITCHBOARD_ADMIN_* → ARMATURE_ADMIN_*
- Rename DB names switchboard_core* → armature*
- Update all frontend branding, notification templates, docs
- Update CI scripts, e2e tests, Keycloak realm, nginx conf
- Rename scripts/switchboard-ca.sh → scripts/armature-ca.sh
- Rename k8s/switchboard.yaml → k8s/armature.yaml
- Rename chart alerting/dashboard files
- Fix: DockerHub push uses env: binding for secret injection
- Helm chart updated (name, labels, template functions, dashboard, alerting)
- Replace favicon/icon assets with Armature brand

No functional changes. Pure mechanical rename + CI fix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-31 21:39:58 +00:00
parent fb5284f667
commit f0dd43144e
287 changed files with 898 additions and 975 deletions

View File

@@ -12,8 +12,8 @@ import (
"runtime"
"time"
"switchboard-core/database"
"switchboard-core/store"
"armature/database"
"armature/store"
)
// Snapshot is the top-level JSON response from GET /api/v1/admin/metrics.

View File

@@ -1,5 +1,5 @@
// Package metrics defines all Prometheus metrics for Switchboard Core.
// All metrics use the "switchboard_" prefix. Registered via promauto
// Package metrics defines all Prometheus metrics for Armature Core.
// All metrics use the "armature_" prefix. Registered via promauto
// so they are available on the default registry's /metrics endpoint.
package metrics
@@ -12,12 +12,12 @@ import (
var (
HTTPRequestsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
Name: "switchboard_http_requests_total",
Name: "armature_http_requests_total",
Help: "Total HTTP requests by method, path pattern, and status code.",
}, []string{"method", "path_pattern", "status"})
HTTPRequestDuration = promauto.NewHistogramVec(prometheus.HistogramOpts{
Name: "switchboard_http_request_duration_seconds",
Name: "armature_http_request_duration_seconds",
Help: "HTTP request latency in seconds.",
Buckets: []float64{0.01, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 30},
}, []string{"method", "path_pattern"})
@@ -26,7 +26,7 @@ var (
// ── WebSocket Metrics ───────────────────────
var WebSocketConnections = promauto.NewGauge(prometheus.GaugeOpts{
Name: "switchboard_websocket_connections",
Name: "armature_websocket_connections",
Help: "Current number of active WebSocket connections.",
})
@@ -34,17 +34,17 @@ var WebSocketConnections = promauto.NewGauge(prometheus.GaugeOpts{
var (
CompletionTokensTotal = promauto.NewCounterVec(prometheus.CounterOpts{
Name: "switchboard_completion_tokens_total",
Name: "armature_completion_tokens_total",
Help: "Total tokens processed by direction (prompt|completion) and model.",
}, []string{"direction", "model_id"})
CompletionsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
Name: "switchboard_completions_total",
Name: "armature_completions_total",
Help: "Total completion requests by provider, model, and status.",
}, []string{"provider_config_id", "model_id", "status"})
CompletionDuration = promauto.NewHistogramVec(prometheus.HistogramOpts{
Name: "switchboard_completion_duration_seconds",
Name: "armature_completion_duration_seconds",
Help: "Completion request latency (wall time including tool loops).",
Buckets: []float64{0.1, 0.5, 1, 2, 5, 10, 30, 60, 120},
}, []string{"provider_config_id", "model_id"})
@@ -53,7 +53,7 @@ var (
// ── Provider Health ─────────────────────────
var ProviderStatus = promauto.NewGaugeVec(prometheus.GaugeOpts{
Name: "switchboard_provider_status",
Name: "armature_provider_status",
Help: "Provider health status: 0=unknown, 1=healthy, 2=degraded, 3=down.",
}, []string{"provider_config_id"})
@@ -61,23 +61,23 @@ var ProviderStatus = promauto.NewGaugeVec(prometheus.GaugeOpts{
var (
DBOpenConnections = promauto.NewGauge(prometheus.GaugeOpts{
Name: "switchboard_db_open_connections",
Name: "armature_db_open_connections",
Help: "Number of open database connections.",
})
DBInUseConnections = promauto.NewGauge(prometheus.GaugeOpts{
Name: "switchboard_db_in_use_connections",
Name: "armature_db_in_use_connections",
Help: "Number of database connections currently in use.",
})
DBIdleConnections = promauto.NewGauge(prometheus.GaugeOpts{
Name: "switchboard_db_idle_connections",
Name: "armature_db_idle_connections",
Help: "Number of idle database connections.",
})
DBWaitCount = promauto.NewGauge(prometheus.GaugeOpts{
Name: "switchboard_db_wait_count_total",
Name: "armature_db_wait_count_total",
Help: "Total number of connections waited for.",
})
DBWaitDuration = promauto.NewGauge(prometheus.GaugeOpts{
Name: "switchboard_db_wait_duration_seconds_total",
Name: "armature_db_wait_duration_seconds_total",
Help: "Total time blocked waiting for a new connection (seconds).",
})
)
@@ -85,13 +85,13 @@ var (
// ── Task Scheduler Metrics ──────────────────
var TaskExecutionsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
Name: "switchboard_task_executions_total",
Name: "armature_task_executions_total",
Help: "Total task executions by status (success|error).",
}, []string{"status"})
// ── Sandbox Metrics ─────────────────────────
var SandboxExecutionsTotal = promauto.NewCounterVec(prometheus.CounterOpts{
Name: "switchboard_sandbox_executions_total",
Name: "armature_sandbox_executions_total",
Help: "Total Starlark sandbox executions by entry point and status.",
}, []string{"entry_point", "status"})