func GenerateLogConfig()

in util/common/logs.go [144:203]


func GenerateLogConfig(numberMonitoredLogs int, filePath string) error {
	if numberMonitoredLogs == 0 || filePath == "" {
		return errors.New("number of monitored logs or file path is empty")
	}

	type LogInfo struct {
		FilePath        string `json:"file_path"`
		LogGroupName    string `json:"log_group_name"`
		LogStreamName   string `json:"log_stream_name"`
		RetentionInDays int    `json:"retention_in_days"`
		Timezone        string `json:"timezone"`
	}

	var cfgFileData map[string]interface{}
	// For metrics and traces, we will keep the default config while log will be appended dynamically
	file, err := os.OpenFile(filePath, os.O_RDWR, 0644)
	if err != nil {
		return err
	}
	defer file.Close()

	fileBytes, err := io.ReadAll(file)
	if err != nil {
		return err
	}

	err = json.Unmarshal(fileBytes, &cfgFileData)
	if err != nil {
		return err
	}

	var logFiles []LogInfo
	tempFolder := getTempFolder()

	for i := 0; i < numberMonitoredLogs; i++ {
		logFiles = append(logFiles, LogInfo{
			FilePath:        fmt.Sprintf("%s/test%d.log", tempFolder, i+1),
			LogGroupName:    "{instance_id}",
			LogStreamName:   fmt.Sprintf("test%d.log", i+1),
			RetentionInDays: 1,
			Timezone:        "UTC",
		})
	}

	log.Printf("Writing config file with %d logs to %v", numberMonitoredLogs, filePath)

	cfgFileData["logs"].(map[string]interface{})["logs_collected"].(map[string]interface{})["files"].(map[string]interface{})["collect_list"] = logFiles

	finalConfig, err := json.MarshalIndent(cfgFileData, "", " ")
	if err != nil {
		return err
	}

	err = os.WriteFile(filePath, finalConfig, 0644)
	if err != nil {
		return err
	}

	return nil
}