func()

in agent/logging/agent_envoy_management_proxy.go [46:100]


func (envoyHandler *EnvoyLoggingHandler) changeLoggerLevels(logLevel string) (string, error) {

	envoyLoggingUrl := fmt.Sprintf("%s://%s:%d%s?level=%s",
		envoyHandler.AgentConfig.EnvoyServerScheme,
		envoyHandler.AgentConfig.EnvoyServerHostName,
		envoyHandler.AgentConfig.EnvoyServerAdminPort,
		envoyHandler.AgentConfig.EnvoyLoggingUrl,
		logLevel)
	log.Debugf("Handler Using Envoy url for logging change [%s]\n", envoyLoggingUrl)

	httpClient, err := client.CreateRetryableHttpClientForEnvoyServer(envoyHandler.AgentConfig)
	if err != nil {
		log.Errorf("Unable to create Retryable Http Client: %v", err)
		return "", err
	}
	req, _ := client.CreateRetryableAgentRequest(http.MethodPost, envoyLoggingUrl, nil)
	res, err := httpClient.Do(req)
	if err != nil {
		log.Errorf("Unable to update the logging level: %s", err)
		return "", err
	}

	defer res.Body.Close()

	if res.StatusCode != http.StatusOK {
		log.Errorf("Setting the new logging level failed [response %d - %s]",
			res.StatusCode, res.Status)
		return "", errors.New("unable to set logging level")
	}

	// Parse the response and confirm that there is only one level set for all modules
	responseData, err := ioutil.ReadAll(res.Body)
	if err != nil {
		log.Warnf("Unable to read response from Envoy: %s", err)
		// We did get a 200 back so ¯\_(ツ)_/¯
	}

	responseContent := string(responseData)
	if len(responseContent) > 0 {
		var statusCodes map[string]int = make(map[string]int)
		for _, line := range strings.Split(responseContent, "\n") {
			line = strings.TrimSpace(line)
			if len(line) > 0 && !strings.HasPrefix(line, "active loggers") {
				module_level := strings.Split(line, ":")
				log.Debugf("Module [%v]\n", module_level)
				statusCodes[strings.TrimSpace(module_level[1])]++
			}
		}

		if statusCodes[logLevel] == 0 {
			log.Warnf("All log levels were not able to be modified to [%s]", logLevel)
		}
	}
	return envoyHandler.AgentConfig.EnvoyLogLevel, nil
}