func()

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)
}