Skip to content

Commit e1574b1

Browse files
committed
Add new_metric method to newrelic provider
1 parent 1722e33 commit e1574b1

File tree

3 files changed

+59
-14
lines changed

3 files changed

+59
-14
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ new_relic.get_app(12345)
3030
new_relic.get_metrics(12345)
3131
# Get Metrics list with a filter (Apdex)
3232
new_relic.get_metrics(12345, "Apdex")
33+
# Get Metric Values from 2019-02-01T01:00:00+00:00 to 2019-02-14T11:03:20+00:00
34+
new_relic.get_metric(244202213, ["WebTransaction"], ["average_response_time"], "2019-02-01T01:00:00+00:00", "2019-02-14T11:03:20+00:00", False)
3335
```
3436

3537
Misc

pyumetric/provider/newrelic.py

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def get_apps(self):
3333
else:
3434
raise NewRelicApiException("Error, Invalid status code %d" % (request.status_code))
3535
except Exception as e:
36-
raise NewRelicApiException(e)
36+
raise NewRelicApiException(str(e))
3737

3838
def get_app(self, app_id):
3939

@@ -51,16 +51,16 @@ def get_app(self, app_id):
5151
else:
5252
raise NewRelicApiException("Error, Invalid status code %d" % (request.status_code))
5353
except Exception as e:
54-
raise NewRelicApiException(e)
54+
raise NewRelicApiException(str(e))
5555

56-
def get_metrics(self, app_id, metric_name=None):
56+
def get_metrics(self, app_id, name=None):
5757

5858
if app_id is None or app_id == "":
5959
raise NewRelicInvalidParameterException("NewRelic application id is required!")
6060

61-
data = ''
62-
if metric_name is not None and metric_name.strip() != "":
63-
data = "name=%s" % (metric_name)
61+
data = {}
62+
if name is not None and name.strip() != "":
63+
data["name"] = name
6464

6565
try:
6666
request = requests.get(
@@ -73,17 +73,52 @@ def get_metrics(self, app_id, metric_name=None):
7373
else:
7474
raise NewRelicApiException("Error, Invalid status code %d" % (request.status_code))
7575
except Exception as e:
76-
raise NewRelicApiException(e)
76+
raise NewRelicApiException(str(e))
7777

78-
def get_metric(self, app_id, metric_name):
78+
def get_metric(self, app_id, names=[], values=[], start=None, end=None, summarize=False):
7979

8080
if app_id is None or app_id == "":
8181
raise NewRelicInvalidParameterException("NewRelic application id is required!")
8282

83-
if metric_name is None or metric_name == "":
84-
raise NewRelicInvalidParameterException("NewRelic metric name is required!")
83+
if len(names) == 0:
84+
raise NewRelicInvalidParameterException("NewRelic application metric name(s) is required!")
8585

86-
raise NotImplementedError("NewRelic get_metric method not implemented yet!")
86+
if len(values) == 0:
87+
raise NewRelicInvalidParameterException("NewRelic application metric value(s) is required!")
88+
89+
data = {}
90+
data["names[]"] = []
91+
data["values[]"] = []
92+
93+
for name in names:
94+
data["names[]"].append(name)
95+
96+
for value in values:
97+
data["values[]"].append(value)
98+
99+
if start is not None:
100+
data["from"] = start
101+
102+
if end is not None:
103+
data["to"] = end
104+
105+
if summarize:
106+
data["summarize"] = "true"
107+
else:
108+
data["summarize"] = "false"
109+
110+
try:
111+
request = requests.get(
112+
self.__metric_info_endpoint.format(url=self.__api_url, version=self.__api_version, app_id=app_id),
113+
headers=self.get_headers(),
114+
data=data
115+
)
116+
if request.status_code == 200:
117+
return request
118+
else:
119+
raise NewRelicApiException("Error, Invalid status code %d" % (request.status_code))
120+
except Exception as e:
121+
raise NewRelicApiException(str(e))
87122

88123
def get_headers(self):
89124
if self.api_key.strip() == "":

tests/unit/provider/test_newrelic.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,21 @@ def test_get_metrics_error(self, mock_get):
5858
self.assertRaises(NewRelicApiException, lambda: nr.get_metrics(456))
5959
self.assertRaises(NewRelicInvalidParameterException, lambda: nr.get_metrics(""))
6060

61+
@patch('requests.get')
62+
def test_get_metric_with_name_value(self, mock_get):
63+
mock_get.return_value.status_code = 200
64+
nr = NewRelic_Provider("123")
65+
response = nr.get_metric(456, ["WebTransaction"], ["average_response_time"], "2019-02-01T01:00:00+00:00", "2019-02-14T11:03:20+00:00", True)
66+
self.assertEqual(response.status_code, 200)
67+
6168
@patch('requests.get')
6269
def test_get_metric_error(self, mock_get):
6370
mock_get.return_value.status_code = 500
6471
nr = NewRelic_Provider("123")
65-
self.assertRaises(NewRelicInvalidParameterException, lambda: nr.get_metric("", ""))
66-
self.assertRaises(NewRelicInvalidParameterException, lambda: nr.get_metric(456, ""))
67-
self.assertRaises(NotImplementedError, lambda: nr.get_metric(456, "Apdex"))
72+
self.assertRaises(NewRelicInvalidParameterException, lambda: nr.get_metric("", ["WebTransaction"], ["average_response_time"]))
73+
self.assertRaises(NewRelicInvalidParameterException, lambda: nr.get_metric(456, [], ["average_response_time"]))
74+
self.assertRaises(NewRelicInvalidParameterException, lambda: nr.get_metric(456, ["WebTransaction"], []))
75+
self.assertRaises(NewRelicApiException, lambda: nr.get_metric(456, ["WebTransaction"], ["average_response_time"]))
6876

6977
def test_get_headers(self):
7078
nr = NewRelic_Provider("123")

0 commit comments

Comments
 (0)