32 lines
999 B
Ruby
32 lines
999 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Metrics
|
|
module Middleware
|
|
class PathTraversalCheck
|
|
DURATION_APDEX_NAME = :path_traversal_check_request
|
|
DURATION_APDEX_FEATURE_CATEGORY = { feature_category: :not_owned }.freeze
|
|
DURATION_APDEX_SLI_DEFINITION = [
|
|
DURATION_APDEX_NAME,
|
|
[
|
|
DURATION_APDEX_FEATURE_CATEGORY.merge(request_rejected: true),
|
|
DURATION_APDEX_FEATURE_CATEGORY.merge(request_rejected: false)
|
|
]
|
|
].freeze
|
|
DURATION_APDEX_THRESHOLD = 0.001.seconds
|
|
|
|
def self.initialize_slis!
|
|
Gitlab::Metrics::Sli::Apdex.initialize_sli(*DURATION_APDEX_SLI_DEFINITION)
|
|
end
|
|
|
|
def self.increment(labels:, duration:)
|
|
::Gitlab::Metrics::Sli::Apdex[DURATION_APDEX_NAME].increment(
|
|
labels: labels.merge(DURATION_APDEX_FEATURE_CATEGORY),
|
|
success: duration <= DURATION_APDEX_THRESHOLD
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|