execute

in lib/release_tools/tasks/metrics/deployment_metrics/merge_request_lead_time.rb [13:58]


          def execute(env, version)
            product_version = ProductVersion.from_package_version(version)
            if product_version.nil?
              logger.warn("Product version not found", version: version)
              return nil
            end

            sha = product_version[Project::GitlabEe.metadata_project_name].sha

            
            deployments = find_deployments(env, sha, 'success')

            if deployments.empty?
              logger.warn("Deployments not found", product_version: product_version.version)
              return nil
            end

            deployments.each do |deployment|
              merge_requests = get_merge_requests(Project::GitlabEe, deployment.id)
              env, stage = parse_env(deployment.environment.name)

              merge_requests.each do |mr|
                deployed_at = Time.parse(deployment.updated_at)
                merged_at = Time.parse(mr.merged_at)

                lead_time = deployed_at.to_i - merged_at.to_i
                adjusted_lead_time = get_adjusted_lead_time(deployed_at, merged_at)

                logger.info(
                  "Recorded MR lead time metric",
                  environment: env,
                  stage: stage,
                  id: mr.iid,
                  title: mr.title,
                  web_url: mr.web_url,
                  version: version
                )

                next if SharedStatus.dry_run?

                metric.set("deployment_merge_request_lead_time_seconds", lead_time, labels: "#{env},#{stage},#{deployment.iid},#{mr.iid},#{version}")
                metric.set("deployment_merge_request_adjusted_lead_time_seconds", adjusted_lead_time, labels: "#{env},#{stage},#{deployment.iid},#{mr.iid},#{version}")
              end
            end
          end