Skip to content

Commit f764fbc

Browse files
committed
feat: add revisions per consumer version and verifications per pact version to metrics
1 parent bea5951 commit f764fbc

File tree

2 files changed

+77
-5
lines changed

2 files changed

+77
-5
lines changed

lib/pact_broker/metrics/service.rb

+21-5
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,19 @@ def metrics
3434
pactVersions: {
3535
count: PactBroker::Pacts::PactVersion.count
3636
},
37-
pactRevisions: {
38-
counts: pact_revision_counts
37+
pactRevisionsPerConsumerVersion: {
38+
distribution: pact_revision_counts
3939
},
4040
verificationResults: {
4141
count: PactBroker::Domain::Verification.count,
42-
first: format_date_time(PactBroker::Domain::Verification.order(:id).first.created_at),
43-
last: format_date_time(PactBroker::Domain::Verification.order(:id).last.created_at)
42+
successCount: PactBroker::Domain::Verification.where(success: true).count,
43+
failureCount: PactBroker::Domain::Verification.where(success: false).count,
44+
distinctCount: PactBroker::Domain::Verification.distinct.select(:provider_version_id, :pact_version_id, :success).count,
45+
first: format_date_time(PactBroker::Domain::Verification.order(:id).first&.created_at),
46+
last: format_date_time(PactBroker::Domain::Verification.order(:id).last&.created_at),
47+
},
48+
verificationResultsPerPactVersion: {
49+
distribution: verification_distribution
4450
},
4551
pacticipantVersions: {
4652
count: PactBroker::Domain::Version.count
@@ -66,9 +72,19 @@ def metrics
6672
def pact_revision_counts
6773
query = "select revision_count as number_of_revisions, count(consumer_version_id) as consumer_version_count
6874
from (select consumer_version_id, count(*) as revision_count from pact_publications group by consumer_version_id) foo
69-
group by revision_count"
75+
group by revision_count
76+
order by 1"
7077
PactBroker::Pacts::PactPublication.db[query].all.each_with_object({}) { |row, hash| hash[row[:number_of_revisions]] = row[:consumer_version_count] }
7178
end
79+
80+
#
81+
def verification_distribution
82+
query = "select verification_count as number_of_verifications, count(*) as pact_version_count
83+
from (select pact_version_id, count(*) as verification_count from verifications group by pact_version_id) foo
84+
group by verification_count
85+
order by 1"
86+
PactBroker::Pacts::PactPublication.db[query].all.each_with_object({}) { |row, hash| hash[row[:number_of_verifications]] = row[:pact_version_count] }
87+
end
7288
end
7389
end
7490
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
require 'pact_broker/metrics/service'
2+
3+
module PactBroker
4+
module Metrics
5+
module Service
6+
describe "#metrics" do
7+
subject { Service.metrics }
8+
9+
describe "verificationResultsPerPactVersion" do
10+
before do
11+
td.create_pact_with_hierarchy
12+
.comment("this pact version will have 2 verifications")
13+
.create_verification
14+
.create_verification(number: 2)
15+
.revise_pact
16+
.comment("this pact version will have 1 verification")
17+
.create_verification
18+
.create_consumer_version
19+
.create_pact
20+
.comment("this pact will have 1 verification")
21+
.create_verification
22+
.create_consumer_version
23+
.create_pact
24+
.comment("this pact will have 1 verification")
25+
.create_verification
26+
end
27+
28+
let(:distribution) { subject[:verificationResultsPerPactVersion][:distribution] }
29+
30+
it "returns a distribution of verifications per pact version" do
31+
expect(distribution).to eq(1 => 3, 2 => 1)
32+
end
33+
end
34+
35+
describe "pactRevisionsPerPactPublication" do
36+
before do
37+
td.create_pact_with_hierarchy
38+
.comment("this consumer version will have 3 revisions")
39+
.revise_pact
40+
.revise_pact
41+
.create_consumer_version
42+
.create_pact
43+
.comment("this consumer version will have 1 revision")
44+
.revise_pact
45+
end
46+
47+
let(:distribution) { subject[:pactRevisionsPerConsumerVersion][:distribution] }
48+
49+
it "returns a distribution of pact revisions per consumer version" do
50+
expect(distribution).to eq(2 => 1, 3 => 1)
51+
end
52+
end
53+
end
54+
end
55+
end
56+
end

0 commit comments

Comments
 (0)