http/client/azuresdk/policy/policy.go (74 lines of code) (raw):

package policy import ( log "log/slog" "net/http" "time" "github.com/Azure/aks-middleware/http/common/logging" armPolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy" azcorePolicy "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "google.golang.org/grpc/codes" ) type LoggingPolicy struct { logger log.Logger } func NewLoggingPolicy(logger log.Logger) *LoggingPolicy { return &LoggingPolicy{logger: logger} } func (p *LoggingPolicy) Do(req *azcorePolicy.Request) (*http.Response, error) { startTime := time.Now() resp, err := req.Next() logging.LogRequest(logging.LogRequestParams{ Logger: &p.logger, StartTime: startTime, Request: req.Raw(), Response: resp, Error: err, }) return resp, err } func (p *LoggingPolicy) Clone() azcorePolicy.Policy { return &LoggingPolicy{logger: p.logger} } func GetDefaultArmClientOptions(logger *log.Logger) *armPolicy.ClientOptions { logOptions := new(azcorePolicy.LogOptions) retryOptions := new(azcorePolicy.RetryOptions) retryOptions.MaxRetries = 5 clientOptions := new(azcorePolicy.ClientOptions) clientOptions.Logging = *logOptions clientOptions.Retry = *retryOptions armClientOptions := new(armPolicy.ClientOptions) armClientOptions.ClientOptions = *clientOptions loggingPolicy := NewLoggingPolicy(*logger) armClientOptions.PerCallPolicies = append(armClientOptions.PerCallPolicies, loggingPolicy) return armClientOptions } // Based off of gRPC standard here: https://chromium.googlesource.com/external/github.com/grpc/grpc/+/refs/tags/v1.21.4-pre1/doc/statuscodes.md func ConvertHTTPStatusToGRPCError(httpStatusCode int) codes.Code { var code codes.Code switch httpStatusCode { case http.StatusOK, http.StatusCreated, http.StatusAccepted: code = codes.OK case http.StatusBadRequest: code = codes.InvalidArgument case http.StatusGatewayTimeout: code = codes.DeadlineExceeded case http.StatusUnauthorized: code = codes.Unauthenticated case http.StatusForbidden: code = codes.PermissionDenied case http.StatusNotFound: code = codes.NotFound case http.StatusConflict: code = codes.Aborted case http.StatusTooManyRequests: code = codes.ResourceExhausted case http.StatusInternalServerError: code = codes.Internal case http.StatusNotImplemented: code = codes.Unimplemented case http.StatusServiceUnavailable: code = codes.Unavailable default: code = codes.Unknown } return code }