func createOtelAuditEvent()

in http/server/otelaudit/otelaudit_helper.go [69:116]


func createOtelAuditEvent(logger *slog.Logger, statusCode int, req *http.Request, otelConfig *OtelConfig, errorMsg string) (msgs.Msg, error) {
	host, _, err := net.SplitHostPort(req.RemoteAddr)
	if err != nil {
		logger.Error("failed to split host and port", "error", err)
		return msgs.Msg{}, err
	}
	addr, err := msgs.ParseAddr(host)
	if err != nil {
		logger.Error("failed to parse address", "error", err)
		return msgs.Msg{}, err
	}

	tr := map[string][]msgs.TargetResourceEntry{
		"ResourceType": {
			{
				Name:   req.RequestURI,
				Region: req.Header.Get("Region"), // Assume the region is in the header
			},
		},
	}

	parsedURL, parseErr := url.Parse(req.URL.String())
	if parseErr != nil {
		logger.Error("error parsing request URL", "error", parseErr)
		return msgs.Msg{}, parseErr
	}
	reqURL := logging.TrimURL(*parsedURL)
	methodInfo := logging.GetMethodInfo(req.Method, reqURL)
	record := msgs.Record{
		CallerIpAddress:              addr,
		CallerIdentities:             getCallerIdentities(req),
		OperationCategories:          []msgs.OperationCategory{getOperationCategory(methodInfo, otelConfig.CustomOperationCategories)},
		OperationCategoryDescription: getOperationCategoryDescription(methodInfo, otelConfig.CustomOperationDescs),
		TargetResources:              tr,
		CallerAccessLevels:           []string{"NA"},
		OperationAccessLevel:         otelConfig.OperationAccessLevel,
		OperationName:                methodInfo,
		CallerAgent:                  req.UserAgent(),
		OperationType:                getOperationType(req.Method),
		OperationResult:              getOperationResult(statusCode),
		OperationResultDescription:   getOperationResultDescription(statusCode, errorMsg),
	}

	return msgs.Msg{
		Type:   msgs.ControlPlane,
		Record: record,
	}, nil
}