@@ -8,29 +8,42 @@ module ApiClient
88 # Client contains the implementation for a Prometheus compatible api_client,
99 # With special labels for the cadvisor job.
1010 module Cadvisor
11+ # A client with special labels for cadvisor metrics
12+ class CadvisorClient < Client
13+ # Add labels to simple query variables.
14+ #
15+ # Example:
16+ # "cpu_usage" => "cpu_usage{labels...}"
17+ # "sum(cpu_usage)" => "sum(cpu_usage{labels...})"
18+ # "rate(cpu_usage[5m])" => "rate(cpu_usage{labels...}[5m])"
19+ #
20+ # Note:
21+ # Not supporting more complex queries.
22+ def update_query ( query , labels )
23+ query . sub ( /(?<r>\[ .+\] )?(?<f>[)])?$/ , "{#{ labels } }\\ k<r>\\ k<f>" )
24+ end
25+
26+ # Issues a get request to the low level client.
27+ # Update the query options to use specific labels
28+ def get ( command , options )
29+ options [ :query ] = update_query ( options [ :query ] , @labels )
30+ @client . get ( command , options )
31+ end
32+ end
33+
1134 # A client with special labels for node cadvisor metrics
12- class Node < Client
35+ class Node < CadvisorClient
1336 def initialize ( options = { } )
1437 instance = options [ :instance ]
1538
1639 @labels = "job=\" kubernetes-cadvisor\" ,instance=\" #{ instance } \" ," \
1740 'id="/"'
1841 super ( options )
1942 end
20-
21- def query ( options )
22- options [ :query ] = update_query ( options [ :query ] , @labels )
23- super ( options )
24- end
25-
26- def query_range ( options )
27- options [ :query ] = update_query ( options [ :query ] , @labels )
28- super ( options )
29- end
3043 end
3144
3245 # A client with special labels for pod cadvisor metrics
33- class Pod < Client
46+ class Pod < CadvisorClient
3447 def initialize ( options = { } )
3548 pod_name = options [ :pod_name ]
3649 namespace = options [ :namespace ] || 'default'
@@ -39,20 +52,10 @@ def initialize(options = {})
3952 "pod_name=\" #{ pod_name } \" ,container_name=\" POD\" "
4053 super ( options )
4154 end
42-
43- def query ( options )
44- options [ :query ] = update_query ( options [ :query ] , @labels )
45- super ( options )
46- end
47-
48- def query_range ( options )
49- options [ :query ] = update_query ( options [ :query ] , @labels )
50- super ( options )
51- end
5255 end
5356
5457 # A client with special labels for container cadvisor metrics
55- class Container < Client
58+ class Container < CadvisorClient
5659 def initialize ( options = { } )
5760 container_name = args [ :container_name ]
5861 pod_name = args [ :pod_name ]
@@ -62,16 +65,6 @@ def initialize(options = {})
6265 "pod_name=\" #{ pod_name } \" ,container_name=\" #{ container_name } \" "
6366 super ( options )
6467 end
65-
66- def query ( options )
67- options [ :query ] = update_query ( options [ :query ] , @labels )
68- super ( options )
69- end
70-
71- def query_range ( options )
72- options [ :query ] = update_query ( options [ :query ] , @labels )
73- super ( options )
74- end
7568 end
7669 end
7770 end
0 commit comments