in agent/logging/agent_envoy_management_proxy.go [167:226]
func (envoyHandler *EnvoyLoggingHandler) LoggingHandler(response http.ResponseWriter, request *http.Request) {
if !envoyHandler.Limiter.Allow() {
responseCode := http.StatusTooManyRequests
http.Error(response, http.StatusText(responseCode), responseCode)
return
}
if envoyHandler.pendingReset {
log.Debugf("There is a pending reset to log level %s",
envoyHandler.AgentConfig.EnvoyLogLevel)
// This is a no-op until that pending reset happens
responseCode := http.StatusNotModified
http.Error(response, http.StatusText(responseCode), responseCode)
return
}
envoyHandler.request = request
envoyHandler.response = &response
if !envoyHandler.validateEnableLoggingRequest() {
return
}
// Examine the queryParameters, sanitize, and then operate
logLevel := envoyHandler.queryParameters.Get(QUERY_KEY)
if len(logLevel) > 5 {
http.Error(*envoyHandler.response, "Invalid log level specified", http.StatusBadRequest)
return
}
if logLevel == envoyHandler.AgentConfig.EnvoyLogLevel {
// This is a no-op also. snapshot log level is the desired log level
responseCode := http.StatusNotModified
http.Error(response, http.StatusText(responseCode), responseCode)
return
}
previousLogLevel, err := envoyHandler.changeLoggerLevels(logLevel)
var responseBody string
if err != nil {
responseBody = fmt.Sprintf("Unable to set logging level to [%s]\n", logLevel)
response.WriteHeader(http.StatusInternalServerError)
} else {
responseBody = fmt.Sprintf("Setting logging level from [%s] to [%s]\n",
previousLogLevel, logLevel)
response.WriteHeader(http.StatusOK)
// TOOD: Need to cancel the reset if the process restarts after
// the loglevel has changed.
envoyHandler.resetLogLevel()
}
log.Debug(responseBody)
io.WriteString(response, responseBody)
}