mirror of
https://github.com/hanzoai/telemetry.git
synced 2026-10-30 20:01:49 +00:00
#### Description Continuation of https://github.com/open-telemetry/opentelemetry-collector/pull/11085. <!-- Issue number if applicable --> #### Link to tracking issue Fixes https://github.com/open-telemetry/opentelemetry-collector/issues/7047 --------- Co-authored-by: Tyler Helmuth <[email protected]> Co-authored-by: Evan Bradley <[email protected]>
65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package statusconversion // import "go.opentelemetry.io/collector/consumer/consumererror/internal/statusconversion"
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
func GetHTTPStatusCodeFromStatus(s *status.Status) int {
|
|
// See https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specification.md#failures
|
|
// to see if a code is retryable.
|
|
// See https://github.com/open-telemetry/opentelemetry-proto/blob/main/docs/specification.md#failures-1
|
|
// to see a list of retryable http status codes.
|
|
switch s.Code() {
|
|
// Retryable
|
|
case codes.Canceled, codes.DeadlineExceeded, codes.Aborted, codes.OutOfRange, codes.Unavailable, codes.DataLoss:
|
|
return http.StatusServiceUnavailable
|
|
// Retryable
|
|
case codes.ResourceExhausted:
|
|
return http.StatusTooManyRequests
|
|
// Not Retryable
|
|
case codes.InvalidArgument:
|
|
return http.StatusBadRequest
|
|
// Not Retryable
|
|
case codes.Unauthenticated:
|
|
return http.StatusUnauthorized
|
|
// Not Retryable
|
|
case codes.PermissionDenied:
|
|
return http.StatusForbidden
|
|
// Not Retryable
|
|
case codes.Unimplemented:
|
|
return http.StatusNotFound
|
|
// Not Retryable
|
|
default:
|
|
return http.StatusInternalServerError
|
|
}
|
|
}
|
|
|
|
func NewStatusFromMsgAndHTTPCode(errMsg string, statusCode int) *status.Status {
|
|
var c codes.Code
|
|
// Mapping based on https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md
|
|
// 429 mapping to ResourceExhausted and 400 mapping to StatusBadRequest are exceptions.
|
|
switch statusCode {
|
|
case http.StatusBadRequest:
|
|
c = codes.InvalidArgument
|
|
case http.StatusUnauthorized:
|
|
c = codes.Unauthenticated
|
|
case http.StatusForbidden:
|
|
c = codes.PermissionDenied
|
|
case http.StatusNotFound:
|
|
c = codes.Unimplemented
|
|
case http.StatusTooManyRequests:
|
|
c = codes.ResourceExhausted
|
|
case http.StatusBadGateway, http.StatusServiceUnavailable, http.StatusGatewayTimeout:
|
|
c = codes.Unavailable
|
|
default:
|
|
c = codes.Unknown
|
|
}
|
|
return status.New(c, errMsg)
|
|
}
|