三种采集器(host-promtail / k8s-daemonset / k8s-fluentbit-sidecar),每种关联已部署 Loki: - host-promtail:SSH 安装 Promtail(复用 deployBinary) - k8s-daemonset:helm 安装 Promtail DaemonSet(复用 deployHelm) - k8s-fluentbit-sidecar:kubectl patch 注入 Fluent Bit sidecar 含 Collector 数据模型、三个部署器、配置模板、CRUD API、前端页面。 附带 UI 优化:ErrorBoundary、部署卡片浏览器访问按钮、菜单名称调整。 Co-Authored-By: Claude <noreply@anthropic.com>
82 lines
1.6 KiB
Go
82 lines
1.6 KiB
Go
package models
|
|
|
|
// Sanitizer interface for models that can sanitize themselves
|
|
type Sanitizer interface {
|
|
Sanitized() map[string]interface{}
|
|
}
|
|
|
|
// SanitizedJSON sanitizes a single model or a slice of models
|
|
func SanitizedJSON(v any) any {
|
|
switch val := v.(type) {
|
|
// Single objects
|
|
case User:
|
|
return val.Sanitized()
|
|
case *User:
|
|
if val == nil {
|
|
return nil
|
|
}
|
|
return val.Sanitized()
|
|
case Cluster:
|
|
return val.Sanitized()
|
|
case *Cluster:
|
|
if val == nil {
|
|
return nil
|
|
}
|
|
return val.Sanitized()
|
|
case Host:
|
|
return val.Sanitized()
|
|
case *Host:
|
|
if val == nil {
|
|
return nil
|
|
}
|
|
return val.Sanitized()
|
|
case StorageConfig:
|
|
return val.Sanitized()
|
|
case *StorageConfig:
|
|
if val == nil {
|
|
return nil
|
|
}
|
|
return val.Sanitized()
|
|
case Collector:
|
|
return val.Sanitized()
|
|
case *Collector:
|
|
if val == nil {
|
|
return nil
|
|
}
|
|
return val.Sanitized()
|
|
// Slices
|
|
case []User:
|
|
result := make([]map[string]interface{}, len(val))
|
|
for i, item := range val {
|
|
result[i] = item.Sanitized()
|
|
}
|
|
return result
|
|
case []Cluster:
|
|
result := make([]map[string]interface{}, len(val))
|
|
for i, item := range val {
|
|
result[i] = item.Sanitized()
|
|
}
|
|
return result
|
|
case []Host:
|
|
result := make([]map[string]interface{}, len(val))
|
|
for i, item := range val {
|
|
result[i] = item.Sanitized()
|
|
}
|
|
return result
|
|
case []StorageConfig:
|
|
result := make([]map[string]interface{}, len(val))
|
|
for i, item := range val {
|
|
result[i] = item.Sanitized()
|
|
}
|
|
return result
|
|
case []Collector:
|
|
result := make([]map[string]interface{}, len(val))
|
|
for i, item := range val {
|
|
result[i] = item.Sanitized()
|
|
}
|
|
return result
|
|
default:
|
|
return v
|
|
}
|
|
}
|