Skip to content

Commit 05670fa

Browse files
authored
Merge pull request #7 from yaacov/add-support-for-group-collect
Add support for group collect
2 parents 84c4d3d + 80d8efb commit 05670fa

File tree

8 files changed

+499
-299
lines changed

8 files changed

+499
-299
lines changed

.rubocop.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ Style/TrailingCommaInLiteral:
1414
Metrics/AbcSize:
1515
Max: 18
1616

17+
Metrics/MethodLength:
18+
Max: 23
19+
1720
Metrics/BlockLength:
1821
Exclude:
1922
- 'spec/**/*.rb'

lib/prometheus/api_client/cadvisor.rb

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,14 @@ class Node < CadvisorClient
3636
def initialize(options = {})
3737
instance = options[:instance]
3838

39-
@labels = "job=\"kubernetes-cadvisor\",instance=\"#{instance}\"," \
40-
'id="/"'
39+
# if no instance is given, assume we want data on all nodes
40+
@labels = if instance
41+
'job="kubernetes-cadvisor",id="/",' \
42+
"instance=\"#{instance}\""
43+
else
44+
'job="kubernetes-cadvisor",id="/"'
45+
end
46+
4147
super(options)
4248
end
4349
end
@@ -48,8 +54,14 @@ def initialize(options = {})
4854
pod_name = options[:pod_name]
4955
namespace = options[:namespace] || 'default'
5056

51-
@labels = "job=\"kubernetes-cadvisor\",namespace=\"#{namespace}\"," \
52-
"pod_name=\"#{pod_name}\",container_name=\"POD\""
57+
# if no pod_name is given, assume we want data on all pods
58+
@labels = if pod_name
59+
'job="kubernetes-cadvisor",container_name="POD",' \
60+
"pod_name=\"#{pod_name}\",namespace=\"#{namespace}\""
61+
else
62+
'job="kubernetes-cadvisor",container_name="POD"'
63+
end
64+
5365
super(options)
5466
end
5567
end
@@ -61,8 +73,15 @@ def initialize(options = {})
6173
pod_name = options[:pod_name]
6274
namespace = options[:namespace] || 'default'
6375

64-
@labels = "job=\"kubernetes-cadvisor\",namespace=\"#{namespace}\"," \
65-
"pod_name=\"#{pod_name}\",container_name=\"#{container_name}\""
76+
# if no container_name is given, assume we want data on all containers
77+
@labels = if container_name
78+
'job="kubernetes-cadvisor",' \
79+
"namespace=\"#{namespace}\",pod_name=\"#{pod_name}\"," \
80+
"container_name=\"#{container_name}\""
81+
else
82+
'job="kubernetes-cadvisor",container_name!="POD"'
83+
end
84+
6685
super(options)
6786
end
6887
end

spec/prometheus/api_client/cadvisor_spec.rb

Lines changed: 70 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@
1111

1212
describe Prometheus::ApiClient::Cadvisor do
1313
token = 'toSecret'
14-
url = 'https://prometheus.example.com:443'
14+
url = 'https://prometheus.example.com'
15+
1516
instance = 'example.com'
16-
pod_name = 'prometheus'
17-
container_name = 'hawkular'
17+
pod_name = 'prometheus-1552260379-fq410'
18+
container_name = 'prometheus'
1819

1920
describe 'Node' do
2021
it 'reads metrics' do
21-
VCR.use_cassette('prometheus/api_client/cadvisor_node') do # , record: :new_episodes) do
22+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
2223
prometheus = Prometheus::ApiClient::Cadvisor::Node.new(
2324
instance: instance,
2425
url: url,
@@ -28,15 +29,32 @@
2829

2930
response = prometheus.query(
3031
query: 'sum(container_cpu_usage_seconds_total)',
31-
time: '2017-08-07T06:10:30.781Z',
32+
time: '2017-08-20T06:10:30.781Z',
33+
)
34+
35+
expect(response).to be_a(Hash)
36+
end
37+
end
38+
39+
it 'reads metrics for all nodes' do
40+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
41+
prometheus = Prometheus::ApiClient::Cadvisor::Node.new(
42+
url: url,
43+
credentials: { token: token },
44+
options: { verify_ssl: OpenSSL::SSL::VERIFY_NONE },
45+
)
46+
47+
response = prometheus.query(
48+
query: 'sum(container_cpu_usage_seconds_total)',
49+
time: '2017-08-20T06:10:30.781Z',
3250
)
3351

3452
expect(response).to be_a(Hash)
3553
end
3654
end
3755

3856
it 'reads metrics range' do
39-
VCR.use_cassette('prometheus/api_client/cadvisor_node') do # , record: :new_episodes) do
57+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
4058
prometheus = Prometheus::ApiClient::Cadvisor::Node.new(
4159
instance: instance,
4260
url: url,
@@ -46,8 +64,8 @@
4664

4765
response = prometheus.query_range(
4866
query: 'sum(container_cpu_usage_seconds_total)',
49-
start: '2017-08-07T06:10:30.781Z',
50-
end: '2017-08-07T06:14:30.781Z',
67+
start: '2017-08-20T06:10:30.781Z',
68+
end: '2017-08-20T06:40:30.781Z',
5169
step: '120s',
5270
)
5371

@@ -58,7 +76,7 @@
5876

5977
describe 'Pod' do
6078
it 'reads metrics' do
61-
VCR.use_cassette('prometheus/api_client/cadvisor_pod') do # , record: :new_episodes) do
79+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
6280
prometheus = Prometheus::ApiClient::Cadvisor::Pod.new(
6381
pod_name: pod_name,
6482
url: url,
@@ -68,15 +86,32 @@
6886

6987
response = prometheus.query(
7088
query: 'sum(container_cpu_usage_seconds_total)',
71-
time: '2017-08-07T06:10:30.781Z',
89+
time: '2017-08-20T06:10:30.781Z',
90+
)
91+
92+
expect(response).to be_a(Hash)
93+
end
94+
end
95+
96+
it 'reads metrics for all pods' do
97+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
98+
prometheus = Prometheus::ApiClient::Cadvisor::Pod.new(
99+
url: url,
100+
credentials: { token: token },
101+
options: { verify_ssl: OpenSSL::SSL::VERIFY_NONE },
102+
)
103+
104+
response = prometheus.query(
105+
query: 'sum(container_cpu_usage_seconds_total)',
106+
time: '2017-08-20T06:10:30.781Z',
72107
)
73108

74109
expect(response).to be_a(Hash)
75110
end
76111
end
77112

78113
it 'reads metrics range' do
79-
VCR.use_cassette('prometheus/api_client/cadvisor_pod') do # , record: :new_episodes) do
114+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
80115
prometheus = Prometheus::ApiClient::Cadvisor::Pod.new(
81116
pod_name: pod_name,
82117
url: url,
@@ -86,8 +121,8 @@
86121

87122
response = prometheus.query_range(
88123
query: 'sum(container_cpu_usage_seconds_total)',
89-
start: '2017-08-07T06:10:30.781Z',
90-
end: '2017-08-07T06:14:30.781Z',
124+
start: '2017-08-20T06:10:30.781Z',
125+
end: '2017-08-20T06:40:30.781Z',
91126
step: '120s',
92127
)
93128

@@ -98,7 +133,7 @@
98133

99134
describe 'Container' do
100135
it 'reads metrics' do
101-
VCR.use_cassette('prometheus/api_client/cadvisor_container') do # , record: :new_episodes) do
136+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
102137
prometheus = Prometheus::ApiClient::Cadvisor::Container.new(
103138
container_name: container_name,
104139
pod_name: pod_name,
@@ -109,15 +144,32 @@
109144

110145
response = prometheus.query(
111146
query: 'sum(container_cpu_usage_seconds_total)',
112-
time: '2017-08-07T06:10:30.781Z',
147+
time: '2017-08-20T06:10:30.781Z',
148+
)
149+
150+
expect(response).to be_a(Hash)
151+
end
152+
end
153+
154+
it 'reads metrics for all containers' do
155+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
156+
prometheus = Prometheus::ApiClient::Cadvisor::Container.new(
157+
url: url,
158+
credentials: { token: token },
159+
options: { verify_ssl: OpenSSL::SSL::VERIFY_NONE },
160+
)
161+
162+
response = prometheus.query(
163+
query: 'sum(container_cpu_usage_seconds_total)',
164+
time: '2017-08-20T06:10:30.781Z',
113165
)
114166

115167
expect(response).to be_a(Hash)
116168
end
117169
end
118170

119171
it 'reads metrics range' do
120-
VCR.use_cassette('prometheus/api_client/cadvisor_container') do # , record: :new_episodes) do
172+
VCR.use_cassette('prometheus/api_client/cadvisor') do # , record: :new_episodes) do
121173
prometheus = Prometheus::ApiClient::Cadvisor::Container.new(
122174
container_name: container_name,
123175
pod_name: pod_name,
@@ -128,8 +180,8 @@
128180

129181
response = prometheus.query_range(
130182
query: 'sum(container_cpu_usage_seconds_total)',
131-
start: '2017-08-07T06:10:30.781Z',
132-
end: '2017-08-07T06:14:30.781Z',
183+
start: '2017-08-20T06:10:30.781Z',
184+
end: '2017-08-20T06:40:30.781Z',
133185
step: '120s',
134186
)
135187

0 commit comments

Comments
 (0)