lib/tasks/metrics.rake (124 lines of code) (raw):
# frozen_string_literal: true
desc 'Execute all metrics tasks'
task :metrics do
include ReleaseTools::ParallelMethods
tasks = %w[
auto_build_pressure
auto_deploy_pressure
mirror_status
release_status
patch_release_pressure
]
errors = []
parallel_each(tasks) do |task|
Rake::Task["metrics:#{task}"].invoke
rescue StandardError => ex
ReleaseTools.logger.warn("Error updating metric", { task: task }, ex)
errors << ex
end
abort if errors.any?
end
namespace :metrics do
desc "Update auto-build pressure metric"
task :auto_build_pressure do
ReleaseTools::Metrics::AutoBuildPressure.new.execute
end
desc "Update auto-deploy pressure metric"
task :auto_deploy_pressure do
ReleaseTools::Metrics::AutoDeployPressure.new.execute
end
desc "Update mirror status metric"
task :mirror_status do
ReleaseTools::Metrics::MirrorStatus.new.execute
end
desc "Update release status metrics"
task :release_status do
ReleaseTools::Metrics::ReleaseMetricUpdater.new.execute
end
desc "Increment deployment_started_total for $DEPLOY_ENVIRONMENT environment"
task :deployment_started do
ReleaseTools::Tasks::Metrics::TrackDeploymentStarted.new.execute
end
desc "Increment deployment_failed_atleast_once for $DEPLOY_VERSION deploy version"
task :deployment_failed_atleast_once do
ReleaseTools::Tasks::Metrics::TrackDeploymentFailedAtleastOnce.new.execute
end
desc 'Track deployment metrics'
task :deployment_metrics, [:environment, :version] do |_, args|
env = args[:environment]
version = args[:version]
ReleaseTools::Tasks::Metrics::DeploymentMetrics::MergeRequestLeadTime.new.execute(env, version)
end
desc 'Track environment state'
task :environment_state, [:environment, :event] do |_, args|
env = args[:environment]
event = args[:event]
ReleaseTools::Tasks::Metrics::SetEnvironmentState.new(env, event).execute
end
desc 'Track locked state'
task :environment_lock_state, [:environment, :lock_reason] do |_, args|
env = args[:environment]
lock_reason = args[:lock_reason].presence
ReleaseTools::Tasks::Metrics::SetEnvironmentLockState.new(env, lock_reason).execute
end
desc "Increment deployment_completed_total for $DEPLOY_ENVIRONMENT environment"
task :deployment_completed do
ReleaseTools::Tasks::Metrics::TrackDeploymentCompleted.new.execute
end
desc "Update patch release pressure metric"
task :patch_release_pressure do
ReleaseTools::Metrics::PatchReleasePressure.new.execute
end
desc "Update pipeline and job duration metrics"
task :pipeline_and_job_duration, [:pipeline_url, :deploy_version] do |_, args|
pipeline_url = args[:pipeline_url]
deploy_version = args[:deploy_version]
ReleaseTools::PipelineTracer::MetricsService
.from_pipeline_url(pipeline_url, version: deploy_version, depth: 3)
.execute
end
desc "Set package state metric"
task :package_state do
ReleaseTools::Metrics::AutoDeployPackageState
.new
.execute
end
desc "Set package state metric for new packages"
task :building_package_state, [:event] do |_, args|
event = args[:event]
metric_obj = ReleaseTools::Metrics::AutoDeployBuildingPackageState.new
case event
when 'building'
metric_obj.package_building
when 'success'
metric_obj.package_built
when 'failed'
metric_obj.package_building_failed
when 'deployment_completed'
metric_obj.deployment_completed
else
raise "Unknown event: #{event}"
end
end
namespace :monthly_release do
task :open do
ReleaseTools::Metrics::MonthlyReleaseStatus.new(status: :open).execute
end
task :announced do
ReleaseTools::Metrics::MonthlyReleaseStatus.new(status: :announced).execute
end
task :tagged_rc do
ReleaseTools::Metrics::MonthlyReleaseStatus.new(status: :tagged_rc).execute
end
end
namespace :patch_release do
task :open do
ReleaseTools::Metrics::PatchReleaseStatus.new(status: :open).execute
end
task :warning do
ReleaseTools::Metrics::PatchReleaseStatus.new(status: :warning).execute
end
task :closed do
ReleaseTools::Metrics::PatchReleaseStatus.new(status: :closed).execute
end
end
end