package pkg import ( "errors" "strings" ) type RequestLogProfile struct { ProfileCommon LogRequestLoggingErrors string `json:"log_request_logging_errors"` LogResponseByDefault string `json:"log_response_by_default"` LogResponseLoggingErrors string `json:"log_response_logging_errors"` ProxyCloseOnError string `json:"proxy_close_on_error"` ProxyRespondOnLoggingerror string `json:"proxy_respond_on_logging_error"` ProxyResponse string `json:"proxy_response"` RequestLogErrorPool string `json:"request_log_error_pool"` RequestLogErrorProtocol string `json:"request_log_error_protocol"` RequestLogErrorTemplate string `json:"request_log_error_template"` RequestLogPool string `json:"request_log_pool"` RequestLogProtocol string `json:"request_log_protocol"` RequestLogTemplate string `json:"request_log_template"` RequestLogging string `json:"request_logging"` ResponseLogErrorPool string `json:"response_log_error_pool"` ResponseLogErrorProtocol string `json:"response_log_error_protocol"` ResponseLogErrorTemplate string `json:"response_log_error_template"` ResponseLogPool string `json:"response_log_pool"` ResponseLogProtocol string `json:"response_log_protocol"` ResponseLogTemplate string `json:"response_log_template"` ResponseLogging string `json:"response_logging"` } func ParseRequestLog(raw string) (*RequestLogProfile, error) { p := new(RequestLogProfile) split := strings.Split(raw, "\n") if !strings.Contains(split[0], "ltm profile request-log") { return nil, errors.New("not a request-log profile") } p.ProfileCommon = parseCommon(raw) for _, line := range split { f := strings.Fields(line) switch strings.ToLower(f[0]) { case "log-request-logging-errors": p.LogRequestLoggingErrors = strings.Join(f[1:], " ") case "log-response-by-default": p.LogResponseByDefault = strings.Join(f[1:], " ") case "log-response-logging-errors": p.LogResponseLoggingErrors = strings.Join(f[1:], " ") case "proxy-close-on-error": p.ProxyCloseOnError = strings.Join(f[1:], " ") case "proxy-respond-on-logging-error": p.ProxyRespondOnLoggingerror = strings.Join(f[1:], " ") case "proxy-response": p.ProxyResponse = strings.Join(f[1:], " ") case "request-log-error-pool": p.RequestLogErrorPool = strings.Join(f[1:], " ") case "request-log-error-protocol": p.RequestLogErrorProtocol = strings.Join(f[1:], " ") case "request-log-error-template": p.RequestLogErrorTemplate = strings.Join(f[1:], " ") case "request-log-pool": p.RequestLogPool = strings.Join(f[1:], " ") case "request-log-protocol": p.RequestLogProtocol = strings.Join(f[1:], " ") case "request-log-template": p.RequestLogTemplate = strings.Join(f[1:], " ") case "request-logging": p.RequestLogging = strings.Join(f[1:], " ") case "response-log-error-pool": p.ResponseLogErrorPool = strings.Join(f[1:], " ") case "response-log-error-protocol": p.ResponseLogErrorProtocol = strings.Join(f[1:], " ") case "response-log-error-template": p.ResponseLogErrorTemplate = strings.Join(f[1:], " ") case "response-log-pool": p.ResponseLogPool = strings.Join(f[1:], " ") case "response-log-protocol": p.ResponseLogProtocol = strings.Join(f[1:], " ") case "response-log-template": p.ResponseLogTemplate = strings.Join(f[1:], " ") case "response-logging": p.ResponseLogging = strings.Join(f[1:], " ") } } return p, nil }