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
}