Commit a8cec955 authored by Sean McGivern's avatar Sean McGivern

Merge branch 'feature/gb/ci-pipeline-size-histogram' into 'master'

Add pipeline size by pipeline size histogram metric

See merge request gitlab-org/gitlab!33162
parents b200b7da 84820bb6
...@@ -43,6 +43,7 @@ The following metrics are available: ...@@ -43,6 +43,7 @@ The following metrics are available:
| `gitlab_cache_operation_duration_seconds` | Histogram | 10.2 | Cache access time | | | `gitlab_cache_operation_duration_seconds` | Histogram | 10.2 | Cache access time | |
| `gitlab_cache_operations_total` | Counter | 12.2 | Cache operations by controller/action | `controller`, `action`, `operation` | | `gitlab_cache_operations_total` | Counter | 12.2 | Cache operations by controller/action | `controller`, `action`, `operation` |
| `gitlab_ci_pipeline_creation_duration_seconds` | Histogram | 13.0 | Time in seconds it takes to create a CI/CD pipeline | | | `gitlab_ci_pipeline_creation_duration_seconds` | Histogram | 13.0 | Time in seconds it takes to create a CI/CD pipeline | |
| `gitlab_ci_pipeline_size_builds` | Histogram | 13.1 | Total number of builds within a pipeline grouped by a pipeline source | `source` |
| `job_waiter_started_total` | Counter | 12.9 | Number of batches of jobs started where a web request is waiting for the jobs to complete | `worker` | | `job_waiter_started_total` | Counter | 12.9 | Number of batches of jobs started where a web request is waiting for the jobs to complete | `worker` |
| `job_waiter_timeouts_total` | Counter | 12.9 | Number of batches of jobs that timed out where a web request is waiting for the jobs to complete | `worker` | | `job_waiter_timeouts_total` | Counter | 12.9 | Number of batches of jobs that timed out where a web request is waiting for the jobs to complete | `worker` |
| `gitlab_database_transaction_seconds` | Histogram | 12.1 | Time spent in database transactions, in seconds | | | `gitlab_database_transaction_seconds` | Histogram | 12.1 | Time spent in database transactions, in seconds | |
......
...@@ -77,19 +77,18 @@ module Gitlab ...@@ -77,19 +77,18 @@ module Gitlab
bridge&.parent_pipeline bridge&.parent_pipeline
end end
def duration_histogram def metrics
strong_memoize(:duration_histogram) do @metrics ||= Chain::Metrics.new
name = :gitlab_ci_pipeline_creation_duration_seconds
comment = 'Pipeline creation duration'
labels = {}
buckets = [0.01, 0.05, 0.1, 0.5, 1.0, 2.0, 5.0, 20.0, 50.0, 240.0]
Gitlab::Metrics.histogram(name, comment, labels, buckets)
end
end end
def observe_creation_duration(duration) def observe_creation_duration(duration)
duration_histogram.observe({}, duration.seconds) metrics.pipeline_creation_duration_histogram
.observe({}, duration.seconds)
end
def observe_pipeline_size(pipeline)
metrics.pipeline_size_histogram
.observe({ source: pipeline.source.to_s }, pipeline.total_size)
end end
end end
end end
......
# frozen_string_literal: true
module Gitlab
module Ci
module Pipeline
module Chain
class Metrics
include Gitlab::Utils::StrongMemoize
def pipeline_creation_duration_histogram
strong_memoize(:pipeline_creation_duration_histogram) do
name = :gitlab_ci_pipeline_creation_duration_seconds
comment = 'Pipeline creation duration'
labels = {}
buckets = [0.01, 0.05, 0.1, 0.5, 1.0, 2.0, 5.0, 20.0, 50.0, 240.0]
::Gitlab::Metrics.histogram(name, comment, labels, buckets)
end
end
def pipeline_size_histogram
strong_memoize(:pipeline_size_histogram) do
name = :gitlab_ci_pipeline_size_builds
comment = 'Pipeline size'
labels = { source: nil }
buckets = [0, 1, 5, 10, 20, 50, 100, 200, 500, 1000]
::Gitlab::Metrics.histogram(name, comment, labels, buckets)
end
end
end
end
end
end
end
...@@ -27,6 +27,7 @@ module Gitlab ...@@ -27,6 +27,7 @@ module Gitlab
yield @pipeline, self if block_given? yield @pipeline, self if block_given?
@command.observe_creation_duration(Time.now - @start) @command.observe_creation_duration(Time.now - @start)
@command.observe_pipeline_size(@pipeline)
end end
end end
......
...@@ -56,11 +56,24 @@ describe Gitlab::Ci::Pipeline::Chain::Sequence do ...@@ -56,11 +56,24 @@ describe Gitlab::Ci::Pipeline::Chain::Sequence do
end end
it 'adds sequence duration to duration histogram' do it 'adds sequence duration to duration histogram' do
allow(command).to receive(:duration_histogram).and_return(histogram) allow(command.metrics)
.to receive(:pipeline_creation_duration_histogram)
.and_return(histogram)
subject.build! subject.build!
expect(histogram).to have_received(:observe) expect(histogram).to have_received(:observe)
end end
it 'records pipeline size by pipeline source in a histogram' do
allow(command.metrics)
.to receive(:pipeline_size_histogram)
.and_return(histogram)
subject.build!
expect(histogram).to have_received(:observe)
.with({ source: 'push' }, 0)
end
end end
end end
...@@ -77,6 +77,18 @@ describe Ci::CreatePipelineService do ...@@ -77,6 +77,18 @@ describe Ci::CreatePipelineService do
pipeline pipeline
end end
it 'records pipeline size in a prometheus histogram' do
histogram = spy('pipeline size histogram')
allow(Gitlab::Ci::Pipeline::Chain::Metrics)
.to receive(:new).and_return(histogram)
execute_service
expect(histogram).to have_received(:observe)
.with({ source: 'push' }, 5)
end
context 'when merge requests already exist for this source branch' do context 'when merge requests already exist for this source branch' do
let(:merge_request_1) do let(:merge_request_1) do
create(:merge_request, source_branch: 'feature', target_branch: "master", source_project: project) create(:merge_request, source_branch: 'feature', target_branch: "master", source_project: project)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment