Skip to content

Commit 8495853

Browse files
authored
feat: add get_label_names helper (#267)
* feat: add get_label_names helper * test: get_label_names
1 parent 39c5710 commit 8495853

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

prometheus_api_client/prometheus_connect.py

+28
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,34 @@ def all_metrics(self, params: dict = None):
105105
self._all_metrics = self.get_label_values(label_name="__name__", params=params)
106106
return self._all_metrics
107107

108+
def get_label_names(self, params: dict = None):
109+
"""
110+
Get a list of all labels.
111+
112+
:param params: (dict) Optional dictionary containing GET parameters to be
113+
sent along with the API request, such as "start", "end" or "match[]".
114+
:returns: (list) A list of labels from the specified prometheus host
115+
:raises:
116+
(RequestException) Raises an exception in case of a connection error
117+
(PrometheusApiClientException) Raises in case of non 200 response status code
118+
"""
119+
params = params or {}
120+
response = self._session.get(
121+
"{0}/api/v1/labels".format(self.url),
122+
verify=self.ssl_verification,
123+
headers=self.headers,
124+
params=params,
125+
auth=self.auth,
126+
)
127+
128+
if response.status_code == 200:
129+
labels = response.json()["data"]
130+
else:
131+
raise PrometheusApiClientException(
132+
"HTTP Status Code {} ({!r})".format(response.status_code, response.content)
133+
)
134+
return labels
135+
108136
def get_label_values(self, label_name: str, params: dict = None):
109137
"""
110138
Get a list of all values for the label.

tests/test_prometheus_connect.py

+14
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ def test_retry_on_error(self): # noqa D102
135135
with self.assertRaises(requests.exceptions.RetryError, msg="too many 400 error responses"):
136136
pc.custom_query("BOOM.BOOM!#$%")
137137

138+
def test_get_label_names_method(self): # noqa D102
139+
labels = self.pc.get_label_names(params={"match[]": "up"})
140+
self.assertEqual(len(labels), 4)
141+
self.assertEqual(labels, ["__name__", "env", "instance", "job"])
142+
138143

139144
class TestPrometheusConnectWithMockedNetwork(BaseMockedNetworkTestcase):
140145
"""Network is blocked in this testcase, see base class."""
@@ -211,6 +216,15 @@ def test_all_metrics_method(self): # noqa D102
211216
request = handler.requests[0]
212217
self.assertEqual(request.path_url, "/api/v1/label/__name__/values")
213218

219+
def test_get_label_names_method(self): # noqa D102
220+
all_metrics_payload = {"status": "success", "data": ["value1", "value2"]}
221+
222+
with self.mock_response(all_metrics_payload) as handler:
223+
self.assertTrue(len(self.pc.get_label_names()))
224+
self.assertEqual(handler.call_count, 1)
225+
request = handler.requests[0]
226+
self.assertEqual(request.path_url, "/api/v1/labels")
227+
214228
def test_get_label_values_method(self): # noqa D102
215229
all_metrics_payload = {"status": "success", "data": ["value1", "value2"]}
216230

0 commit comments

Comments
 (0)