webui/internal/service/config/config.go (62 lines of code) (raw):
package config
import (
"fmt"
"net/url"
"github.com/kubeskoop/webconsole/internal/config"
)
const (
metricsDashboardURL = "/d/%s/%s?orgId=1&theme=light&from=now-15m&to=now&refresh=10s"
podDashboardUID = "ddn87hjw7bdhcd"
podDashboardName = "skoop-exporter-pods"
nodeDashboardUID = "bdn87gdt1emtcb"
nodeDashboardName = "skoop-exporter-nodes"
)
type DashboardConfig struct {
PodDashboardURL string
NodeDashboardURL string
}
var Service Svc
type Svc interface {
SetDashboardConfig(config DashboardConfig) error
GetDashboardConfig() (DashboardConfig, error)
}
func init() {
svc, err := newDefaultService()
if err != nil {
panic(err)
}
Service = svc
}
type defaultService struct {
config DashboardConfig
}
func newDefaultService() (*defaultService, error) {
cfg := DashboardConfig{}
if config.Global.Grafana.Endpoint != "" {
if config.Global.Grafana.Proxy {
cfg.PodDashboardURL = fmt.Sprintf("/grafana%s", fmt.Sprintf(metricsDashboardURL, podDashboardUID, podDashboardName))
cfg.NodeDashboardURL = fmt.Sprintf("/grafana%s", fmt.Sprintf(metricsDashboardURL, nodeDashboardUID, nodeDashboardName))
} else {
u, err := url.JoinPath(config.Global.Grafana.Endpoint, fmt.Sprintf(metricsDashboardURL, podDashboardUID, podDashboardName))
if err != nil {
return nil, err
}
cfg.PodDashboardURL = u
u, err = url.JoinPath(config.Global.Grafana.Endpoint, fmt.Sprintf(metricsDashboardURL, nodeDashboardUID, nodeDashboardName))
if err != nil {
return nil, err
}
cfg.NodeDashboardURL = u
}
}
return &defaultService{
config: cfg,
}, nil
}
func (d *defaultService) SetDashboardConfig(config DashboardConfig) error {
d.config = config
return nil
}
func (d *defaultService) GetDashboardConfig() (DashboardConfig, error) {
return d.config, nil
}