47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
|
package ratelimit
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
|
||
|
"golang.org/x/text/cases"
|
||
|
"golang.org/x/text/language"
|
||
|
)
|
||
|
|
||
|
// Reference:
|
||
|
// https://github.com/getsentry/relay/blob/0424a2e017d193a93918053c90cdae9472d164bf/relay-common/src/constants.rs#L116-L127
|
||
|
|
||
|
// Category classifies supported payload types that can be ingested by Sentry
|
||
|
// and, therefore, rate limited.
|
||
|
type Category string
|
||
|
|
||
|
// Known rate limit categories. As a special case, the CategoryAll applies to
|
||
|
// all known payload types.
|
||
|
const (
|
||
|
CategoryAll Category = ""
|
||
|
CategoryError Category = "error"
|
||
|
CategoryTransaction Category = "transaction"
|
||
|
)
|
||
|
|
||
|
// knownCategories is the set of currently known categories. Other categories
|
||
|
// are ignored for the purpose of rate-limiting.
|
||
|
var knownCategories = map[Category]struct{}{
|
||
|
CategoryAll: {},
|
||
|
CategoryError: {},
|
||
|
CategoryTransaction: {},
|
||
|
}
|
||
|
|
||
|
// String returns the category formatted for debugging.
|
||
|
func (c Category) String() string {
|
||
|
switch c {
|
||
|
case "":
|
||
|
return "CategoryAll"
|
||
|
default:
|
||
|
caser := cases.Title(language.English)
|
||
|
rv := "Category"
|
||
|
for _, w := range strings.Fields(string(c)) {
|
||
|
rv += caser.String(w)
|
||
|
}
|
||
|
return rv
|
||
|
}
|
||
|
}
|