Esempio n. 1
0
 def test_get_generic(self):
   vm_group = mock.Mock(spec=VMGroup)
   vm_group.name.return_value = "Fake VM Group"
   vm_group._scenario = mock.Mock(spec=Scenario)
   vm_group._scenario.id = "854982789152076068"
   expected_query_str = (
     "irate("
     "node_network_receive_bytes_total{"
     "device=\"eth0\", "
     "scenario_id=\"854982789152076068\", "
     "vm_group=\"Fake VM Group\""
     "}"
     "[30s])"
   )
   p = prometheus.PrometheusAdapter()
   query_input = (
     "irate("
     "node_network_receive_bytes_total{"
     "device=\"eth0\", "
     "__curie_filter_scenario__, "
     "__curie_filter_vm_group__"
     "}"
     "[30s])"
   )
   with mock.patch.object(p, "query_range") as mock_query_range:
     mock_query_range.return_value = "this_is_fake_data"
     data = p.get_generic(vm_group, start=1510076387, end=1510076487,
                          query=query_input)
     self.assertEqual("this_is_fake_data", data)
     mock_query_range.assert_called_once_with(
       expected_query_str, 1510076387, 1510076487, step=None)
Esempio n. 2
0
 def test_get_avg_latency(self):
   vm_group = mock.Mock(spec=VMGroup)
   vm_group.name.return_value = "Fake VM Group"
   vm_group._scenario = mock.Mock(spec=Scenario)
   vm_group._scenario.id = "854982789152076068"
   expected_query_str = (
     "("
     "sum("
     "irate(node_disk_read_time_seconds_total{"
     "scenario_id=\"854982789152076068\", "
     "vm_group=\"Fake VM Group\"}[30s]) + "
     "irate(node_disk_write_time_seconds_total{"
     "scenario_id=\"854982789152076068\", "
     "vm_group=\"Fake VM Group\"}[30s])) "
     "by(instance) / "
     "("
     "sum("
     "irate(node_disk_reads_completed_total{"
     "scenario_id=\"854982789152076068\", "
     "vm_group=\"Fake VM Group\"}[30s]) + "
     "irate(node_disk_writes_completed_total{"
     "scenario_id=\"854982789152076068\", "
     "vm_group=\"Fake VM Group\"}[30s])) "
     "by(instance) > 5"
     ")"
     ") * 1000000.0")
   p = prometheus.PrometheusAdapter()
   with mock.patch.object(p, "query_range") as mock_query_range:
     mock_query_range.return_value = "this_is_fake_data"
     data = p.get_avg_disk_latency(vm_group, start=1510076387, end=1510076487)
     self.assertEqual("this_is_fake_data", data)
     mock_query_range.assert_called_once_with(
       expected_query_str, 1510076387, 1510076487, step=None)
Esempio n. 3
0
 def test_query_range_error_400_json_valid(self, mock_requests):
   mock_response = mock.Mock(spec=requests.Response)
   mock_response.status_code = 400
   mock_response.json.return_value = {"error": "OMGWTFBBQ"}
   mock_requests.get.return_value = mock_response
   p = prometheus.PrometheusAdapter()
   with self.assertRaises(prometheus.PrometheusAPIError) as ar:
     p.query_range("this_is_the_query", 1510076387, 1510076487)
   self.assertEqual("Failed to query_range: 'OMGWTFBBQ'", str(ar.exception))
Esempio n. 4
0
 def test_query_range_error_400_json_invalid(self, mock_requests):
   mock_response = mock.Mock(spec=requests.Response)
   mock_response.status_code = 400
   mock_response.json.side_effect = ValueError("This ain't JSON, fella.")
   mock_requests.get.return_value = mock_response
   p = prometheus.PrometheusAdapter()
   with self.assertRaises(prometheus.PrometheusAPIError) as ar:
     p.query_range("this_is_the_query", 1510076387, 1510076487)
   self.assertEqual("Failed to query_range: %r" % mock_response,
                    str(ar.exception))
Esempio n. 5
0
 def test_query_range_error_200_json_invalid(self, mock_requests):
   mock_response = mock.Mock(spec=requests.Response)
   mock_response.status_code = 200
   mock_response.json.side_effect = ValueError("This ain't JSON, fella.")
   mock_response.text = "{\"I hope I didn't miss a closing brace somewhere\""
   mock_requests.get.return_value = mock_response
   p = prometheus.PrometheusAdapter()
   with self.assertRaises(prometheus.PrometheusAPIError) as ar:
     p.query_range("this_is_the_query", 1510076387, 1510076487)
   self.assertEqual("Received status code 200, but JSON could not be "
                    "decoded: '{\"I hope I didn\\\'t miss a closing brace "
                    "somewhere\"'", str(ar.exception))
Esempio n. 6
0
 def test_get_disk_octets_aggregate_unsupported(self):
   vm_group = mock.Mock(spec=VMGroup)
   vm_group._scenario = mock.Mock(spec=Scenario)
   vm_group._scenario.id = "854982789152076068"
   p = prometheus.PrometheusAdapter()
   with mock.patch.object(p, "query_range") as mock_query_range:
     mock_query_range.return_value = "this_is_fake_data"
     with self.assertRaises(ValueError) as ar:
       p.get_disk_octets(vm_group, start=1510076387, end=1510076487,
                         agg_func="meaner")
     self.assertEqual("Unsupported aggregation function 'meaner'",
                      str(ar.exception))
     mock_query_range.assert_not_called()
Esempio n. 7
0
 def test_query_range_start_end_float_floor(self, mock_requests):
   data_return_value = {"some_data"}
   mock_response = mock.Mock(spec=requests.Response)
   mock_response.status_code = 200
   mock_response.json.return_value = {"data": data_return_value}
   mock_requests.get.return_value = mock_response
   p = prometheus.PrometheusAdapter()
   p.query_range("this_is_the_query", 1510076387.9, 1510076487.9)
   mock_requests.get.assert_called_once_with(
     "http://localhost:9090/api/v1/query_range",
     params={"query": "this_is_the_query",
             "start": "2017-11-07T17:39:47Z",
             "end": "2017-11-07T17:41:27Z",
             "step": "5s"})
Esempio n. 8
0
 def test_query_range_start_end_tz_None(self, mock_requests, mock_datetime):
   data_return_value = {"some_data"}
   mock_response = mock.Mock(spec=requests.Response)
   mock_response.status_code = 200
   mock_response.json.return_value = {"data": data_return_value}
   mock_requests.get.return_value = mock_response
   now = datetime(2017, 11, 07, 17, 39, 47)
   mock_datetime.utcnow.return_value = now
   p = prometheus.PrometheusAdapter()
   p.query_range("this_is_the_query", None, None)
   mock_requests.get.assert_called_once_with(
     "http://localhost:9090/api/v1/query_range",
     params={"query": "this_is_the_query",
             "start": "2017-11-07T17:39:47Z",
             "end": "2017-11-07T17:39:47Z",
             "step": "5s"})
Esempio n. 9
0
 def get_result_pbs(self):
     """
 Produce the results for a given VM Group.
 """
     if not self.scenario.prometheus_address:
         log.debug("Unable to get protobufs from VMGroupResult: "
                   "scenario.prometheus_address not configured")
         return []
     host, port = self.scenario.prometheus_address.split(":")
     prometheus_adapter = prometheus.PrometheusAdapter(host=host, port=port)
     if self.workload_mask:
         run_start = self.workload_mask.iogen().get_workload_start_time()
         run_end = self.workload_mask.iogen().get_workload_end_time()
     else:
         run_start = self.scenario.phase_start_time_secs(Phase.RUN)
         run_end = self.scenario.phase_start_time_secs(Phase.TEARDOWN)
     if not run_start:
         return []
     if self.result_type == "iops":
         data = prometheus_adapter.get_disk_ops(self.vm_group,
                                                run_start,
                                                run_end,
                                                agg_func=self.aggregate,
                                                step=self.step)
     elif self.result_type == "bandwidth":
         data = prometheus_adapter.get_disk_octets(self.vm_group,
                                                   run_start,
                                                   run_end,
                                                   agg_func=self.aggregate,
                                                   step=self.step)
     elif self.result_type == "latency":
         data = prometheus_adapter.get_avg_disk_latency(
             self.vm_group,
             run_start,
             run_end,
             agg_func=self.aggregate,
             step=self.step)
     elif self.result_type == "generic":
         data = prometheus_adapter.get_generic(self.vm_group,
                                               run_start,
                                               run_end,
                                               query=self.kwargs["query"],
                                               agg_func=self.aggregate,
                                               step=self.step)
     else:
         raise ValueError("Unexpected result_type %r" % self.result_type)
     return self.series_list_to_result_pbs(prometheus.to_series_list(data))
Esempio n. 10
0
 def test_query_range_start_end_tz_datetime(self, mock_requests):
   data_return_value = {"some_data"}
   mock_response = mock.Mock(spec=requests.Response)
   mock_response.status_code = 200
   mock_response.json.return_value = {"data": data_return_value}
   mock_requests.get.return_value = mock_response
   p = prometheus.PrometheusAdapter()
   eastern = pytz.timezone("US/Eastern")
   p.query_range(
     "this_is_the_query",
     eastern.localize(datetime(2017, 11, 07, 12, 39, 47)),
     eastern.localize(datetime(2017, 11, 07, 12, 41, 27)))
   mock_requests.get.assert_called_once_with(
     "http://localhost:9090/api/v1/query_range",
     params={"query": "this_is_the_query",
             "start": "2017-11-07T17:39:47Z",
             "end": "2017-11-07T17:41:27Z",
             "step": "5s"})
Esempio n. 11
0
 def test_get_disk_octets_aggregate_mean(self):
   vm_group = mock.Mock(spec=VMGroup)
   vm_group.name.return_value = "Fake VM Group"
   vm_group._scenario = mock.Mock(spec=Scenario)
   vm_group._scenario.id = "854982789152076068"
   expected_query_str = (
     "avg("
     "sum("
     "irate(node_disk_read_bytes_total{"
     "scenario_id=\"854982789152076068\", "
     "vm_group=\"Fake VM Group\"}[30s]) + "
     "irate(node_disk_written_bytes_total{"
     "scenario_id=\"854982789152076068\", "
     "vm_group=\"Fake VM Group\"}[30s])) "
     "by(instance)) "
     "by(vm_group)")
   p = prometheus.PrometheusAdapter()
   with mock.patch.object(p, "query_range") as mock_query_range:
     mock_query_range.return_value = "this_is_fake_data"
     data = p.get_disk_octets(vm_group, start=1510076387, end=1510076487,
                              agg_func="mean")
     self.assertEqual("this_is_fake_data", data)
     mock_query_range.assert_called_once_with(
       expected_query_str, 1510076387, 1510076487, step=None)
Esempio n. 12
0
 def test_init_override(self):
   p = prometheus.PrometheusAdapter(host="fake_host", port=12345,
                                    protocol="https")
   self.assertEqual("https://fake_host:12345/api/v1/", p.base_url)
Esempio n. 13
0
 def test_init_defaults(self):
   p = prometheus.PrometheusAdapter()
   self.assertEqual("localhost", p.host)
   self.assertEqual(9090, p.port)
   self.assertEqual("http://localhost:9090/api/v1/", p.base_url)