lib/release_tools/deployments/blockers_metrics.rb (81 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module Deployments
class BlockersMetrics
include ::SemanticLogger::Loggable
def initialize
@client = Metrics::Client.new
@fetcher = ReleaseTools::Deployments::BlockerIssueFetcher.new
end
def execute
return unless Feature.enabled?(:deployment_blockers_metrics)
@fetcher.fetch
blockers = @fetcher.deployment_blockers
calculator = ReleaseTools::Deployments::BlockersCalculator.new(blockers)
blocker_types = calculator.blocker_types
root_cause_list.each do |root_cause|
blocked_time = blocker_types[root_cause] || { gprd: 0, gstg: 0, count: 0 }
log_blocker_metric(root_cause, blocked_time)
create_metric_for(root_cause, blocked_time)
end
end
private
attr_reader :client
def week
@fetcher.start_time.strftime('%Y-%m-%d')
end
def root_cause_list
[
"RootCause::Broken-Security-Mirror",
"RootCause::Config-Change",
"RootCause::DB-Migration",
"RootCause::Dev-Instance",
"RootCause::External-Dependency",
"RootCause::Feature-Flag",
"RootCause::Flaky-Test",
"RootCause::Indeterminate",
"RootCause::Known-Software-Issue",
"RootCause::Native-Traffic",
"RootCause::Needed",
"RootCause::Ops-Instance",
"RootCause::Release-Compatibility",
"RootCause::Saturation",
"RootCause::Software-Change",
"RootCause::SPoF",
"Change-request"
]
end
def create_metric_for(root_cause, blocked_time)
hours_gprd_blocked = blocked_time[:gprd]
hours_gstg_blocked = blocked_time[:gstg]
blockers_per_category = blocked_time[:count]
client.set(
'deployment_blocker_count',
blockers_per_category,
labels: "#{root_cause},#{week}"
)
client.set(
'deployment_hours_blocked',
hours_gprd_blocked,
labels: "#{root_cause},gprd,#{week}"
)
client.set(
'deployment_hours_blocked',
hours_gstg_blocked,
labels: "#{root_cause},gstg,#{week}"
)
end
def log_blocker_metric(root_cause, blocked_time)
logger.info(
"Setting deployment blockers metric for #{root_cause}",
blockers_per_category: blocked_time[:count],
hours_gprd_blocked: blocked_time[:gprd],
hours_gstg_blocked: blocked_time[:gstg],
labels: {
root_cause: root_cause,
week: week
}
)
end
end
end
end