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  }