github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/boom/application/applications/monitoring/config/config.go (about) 1 package config 2 3 import ( 4 "strings" 5 6 toolsetslatest "github.com/caos/orbos/internal/operator/boom/api/latest" 7 8 lokiinfo "github.com/caos/orbos/internal/operator/boom/application/applications/logspersisting/info" 9 prometheusinfo "github.com/caos/orbos/internal/operator/boom/application/applications/metricspersisting/info" 10 ) 11 12 var ( 13 DashboardsDirectoryPath string = "../../dashboards" 14 ) 15 16 type Datasource struct { 17 Name string 18 Type string 19 Url string 20 Access string 21 IsDefault bool 22 } 23 24 type Provider struct { 25 ConfigMaps []string 26 Folder string 27 } 28 29 type Config struct { 30 Deploy bool 31 Datasources []*Datasource 32 DashboardProviders []*Provider 33 Ini map[string]interface{} 34 } 35 36 func New(spec *toolsetslatest.ToolsetSpec) *Config { 37 dashboardProviders := make([]*Provider, 0) 38 if spec.Monitoring != nil && spec.Monitoring.DashboardProviders != nil { 39 for _, provider := range spec.Monitoring.DashboardProviders { 40 confProvider := &Provider{ 41 ConfigMaps: provider.ConfigMaps, 42 Folder: provider.Folder, 43 } 44 dashboardProviders = append(dashboardProviders, confProvider) 45 } 46 } 47 48 datasources := make([]*Datasource, 0) 49 if spec.Monitoring != nil && spec.Monitoring.Datasources != nil { 50 for _, datasource := range spec.Monitoring.Datasources { 51 confDatasource := &Datasource{ 52 Name: datasource.Name, 53 Type: datasource.Type, 54 Url: datasource.Url, 55 Access: datasource.Access, 56 IsDefault: datasource.IsDefault, 57 } 58 datasources = append(datasources, confDatasource) 59 } 60 } 61 62 conf := &Config{ 63 DashboardProviders: dashboardProviders, 64 Datasources: datasources, 65 } 66 if spec.Monitoring != nil { 67 conf.Deploy = spec.Monitoring.Deploy 68 } 69 70 providers := getGrafanaDashboards(DashboardsDirectoryPath, spec) 71 72 for _, provider := range providers { 73 conf.AddDashboardProvider(provider) 74 } 75 76 if spec.MetricCollection != nil && spec.MetricsPersisting != nil && spec.MetricCollection.Deploy && spec.MetricsPersisting.Deploy { 77 serviceName := strings.Join([]string{prometheusinfo.GetInstanceName(), "prometheus"}, "-") 78 datasourceProm := strings.Join([]string{"http://", serviceName, ".", prometheusinfo.GetNamespace(), ":9090"}, "") 79 conf.AddDatasourceURL(serviceName, "prometheus", datasourceProm) 80 } 81 82 if spec.LogsPersisting != nil && spec.LogsPersisting.Deploy { 83 serviceName := lokiinfo.GetName().String() 84 datasourceLoki := strings.Join([]string{"http://", serviceName, ".", lokiinfo.GetNamespace(), ":3100"}, "") 85 conf.AddDatasourceURL(serviceName, "loki", datasourceLoki) 86 } 87 88 return conf 89 } 90 91 func (c *Config) AddDashboardProvider(provider *Provider) { 92 c.DashboardProviders = append(c.DashboardProviders, provider) 93 } 94 95 func (c *Config) AddDatasourceURL(name, datatype, url string) { 96 c.Datasources = append(c.Datasources, &Datasource{ 97 Name: name, 98 Type: datatype, 99 Url: url, 100 Access: "proxy", 101 }) 102 }