otelcollector/shared/configmap/mp/tomlparser-debug-mode.go (90 lines of code) (raw):

package configmapsettings import ( "fmt" "os" "strings" "io/fs" "github.com/pelletier/go-toml" "gopkg.in/yaml.v2" ) const ( loggingPrefix = "debug-mode-config" ) // ConfigureDebugModeSettings reads debug mode settings from a config map, // sets default values if necessary, writes environment variables to a file, // and modifies a YAML configuration file based on debug mode settings. func ConfigureDebugModeSettings() error { configMapSettings, err := parseConfigMapForDebugSettings() if err != nil || configMapSettings == nil { return fmt.Errorf("Error: %v", err) } enabled := populateSettingValuesFromConfigMap(configMapSettings) configSchemaVersion := os.Getenv("AZMON_AGENT_CFG_SCHEMA_VERSION") if configSchemaVersion != "" && strings.TrimSpace(configSchemaVersion) == "v1" { if _, err := os.Stat(configMapDebugMountPath); os.IsNotExist(err) { fmt.Printf("Unsupported/missing config schema version - '%s', using defaults, please use supported schema version\n", configSchemaVersion) } } file, err := os.Create(debugModeEnvVarPath) if err != nil { return fmt.Errorf("Exception while opening file for writing prometheus-collector config environment variables: %v\n", err) } defer file.Close() //if os.Getenv("OS_TYPE") != "" && strings.ToLower(os.Getenv("OS_TYPE")) == "linux" { //file.WriteString(fmt.Sprintf("export DEBUG_MODE_ENABLED=%v\n", defaultEnabled)) //} else { file.WriteString(fmt.Sprintf("DEBUG_MODE_ENABLED=%v\n", enabled)) fmt.Printf("Setting debug mode environment variable: %v\n", enabled) //} if enabled { controllerType := os.Getenv("CONTROLLER_TYPE") if controllerType != "" && controllerType == "ReplicaSet" { fmt.Println("Setting prometheus in the exporter metrics for service pipeline since debug mode is enabled ...") var config OtelConfig content, err := os.ReadFile(replicaSetCollectorConfig) if err != nil { return fmt.Errorf("Exception while setting prometheus in the exporter metrics for service pipeline when debug mode is enabled - %v\n", err) } err = yaml.Unmarshal(content, &config) if err != nil { return fmt.Errorf("Exception while setting prometheus in the exporter metrics for service pipeline when debug mode is enabled - %v\n", err) } config.Service.Pipelines.Metrics.Exporters = []interface{}{"otlp", "prometheus"} if os.Getenv("CCP_METRICS_ENABLED") != "true" { config.Service.Pipelines.MetricsTelemetry.Receivers = []interface{}{"prometheus"} config.Service.Pipelines.MetricsTelemetry.Exporters = []interface{}{"prometheus/telemetry"} config.Service.Pipelines.MetricsTelemetry.Processors = []interface{}{"filter/telemetry"} } cfgYamlWithDebugModeSettings, err := yaml.Marshal(config) if err != nil { return fmt.Errorf("Exception while setting prometheus in the exporter metrics for service pipeline when debug mode is enabled - %v\n", err) } err = os.WriteFile(replicaSetCollectorConfig, []byte(cfgYamlWithDebugModeSettings), fs.FileMode(0644)) if err != nil { return fmt.Errorf("Exception while setting prometheus in the exporter metrics for service pipeline when debug mode is enabled - %v\n", err) } fmt.Println("Done setting prometheus in the exporter metrics for service pipeline.") } } return nil } func parseConfigMapForDebugSettings() (map[string]interface{}, error) { // Check if config map file exists file, err := os.Open(configMapDebugMountPath) if err != nil { return nil, fmt.Errorf("configmap section not mounted, using defaults") } defer file.Close() if data, err := os.ReadFile(configMapDebugMountPath); err == nil { parsedConfig := make(map[string]interface{}) if err := toml.Unmarshal(data, &parsedConfig); err == nil { return parsedConfig, nil } else { return nil, fmt.Errorf("exception while parsing config map for debug mode: %v, using defaults, please check config map for errors", err) } } else { return nil, fmt.Errorf("error reading config map file: %v", err) } } func populateSettingValuesFromConfigMap(parsedConfig map[string]interface{}) bool { enabled := false if val, ok := parsedConfig["enabled"]; ok { enabled = val.(bool) fmt.Printf("Using configmap setting for debug mode: %v\n", enabled) } else { fmt.Printf("Debug mode configmap does not have enabled value, using default value: %v\n", enabled) } return enabled }