def test_bad_meter_definition_skip(self, LOG):
     cfg = yaml.dump(
         {'metric': [dict(name="good_test_1",
                          event_type="test.create",
                          type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id"),
                     dict(name="bad_test_2", type="bad_type",
                          event_type="bar.create",
                          unit="foo", volume="bar",
                          resource_id="bea70e51c7340cb9d555b15cbfcaec23"),
                     dict(name="good_test_3",
                          event_type="test.create",
                          type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id")]})
     data = self.__setup_meter_def_file(cfg)
     meter_loaded = notifications.load_definitions(data)
     self.assertEqual(2, len(meter_loaded))
     LOG.error.assert_called_with(
         "Error loading meter definition : "
         "Invalid type bad_type specified")
 def test_bad_meter_definition_skip(self, LOG):
     cfg = yaml.dump(
         {'metric': [dict(name="good_test_1",
                          event_type="test.create",
                          type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id"),
                     dict(name="bad_test_2", type="bad_type",
                          event_type="bar.create",
                          unit="foo", volume="bar",
                          resource_id="bea70e51c7340cb9d555b15cbfcaec23"),
                     dict(name="good_test_3",
                          event_type="test.create",
                          type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id")]})
     data = self.__setup_meter_def_file(cfg)
     meter_loaded = notifications.load_definitions(data)
     self.assertEqual(2, len(meter_loaded))
     LOG.error.assert_called_with(
         "Error loading meter definition : "
         "Invalid type bad_type specified")
 def test_multi_meter_payload(self):
     cfg = yaml.dump({
         'metric': [
             dict(name="payload.measurements.[*].metric.[*].name",
                  event_type="objectstore.http.request",
                  type="delta",
                  unit="payload.measurements.[*].metric.[*].unit",
                  volume="payload.measurements.[*].result",
                  resource_id="payload.target_id",
                  project_id="payload.initiator.project_id",
                  multi="name")
         ]
     })
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(MIDDLEWARE_EVENT))
     self.assertEqual(2, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('storage.objects.outgoing.bytes', s1['name'])
     self.assertEqual(28, s1['volume'])
     self.assertEqual('B', s1['unit'])
     s2 = c[1].as_dict()
     self.assertEqual('storage.objects.incoming.bytes', s2['name'])
     self.assertEqual(1, s2['volume'])
     self.assertEqual('B', s2['unit'])
 def test_multi_meter_payload_all_multi(self):
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.[*].counter_name",
                     event_type="full.sample",
                     type="$.payload.[*].counter_type",
                     unit="$.payload.[*].counter_unit",
                     volume="$.payload.[*].counter_volume",
                     resource_id="$.payload.[*].resource_id",
                     project_id="$.payload.[*].project_id",
                     user_id="$.payload.[*].user_id",
                     lookup=['name', 'type', 'unit', 'volume',
                             'resource_id', 'project_id', 'user_id'])]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(FULL_MULTI_MSG))
     self.assertEqual(2, len(c))
     msg = FULL_MULTI_MSG['payload']
     for idx, val in enumerate(c):
         s1 = val.as_dict()
         self.assertEqual(msg[idx]['counter_name'], s1['name'])
         self.assertEqual(msg[idx]['counter_volume'], s1['volume'])
         self.assertEqual(msg[idx]['counter_unit'], s1['unit'])
         self.assertEqual(msg[idx]['counter_type'], s1['type'])
         self.assertEqual(msg[idx]['resource_id'], s1['resource_id'])
         self.assertEqual(msg[idx]['project_id'], s1['project_id'])
         self.assertEqual(msg[idx]['user_id'], s1['user_id'])
 def test_multi_meter_payload_all_multi(self):
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.[*].counter_name",
                     event_type="full.sample",
                     type="$.payload.[*].counter_type",
                     unit="$.payload.[*].counter_unit",
                     volume="$.payload.[*].counter_volume",
                     resource_id="$.payload.[*].resource_id",
                     project_id="$.payload.[*].project_id",
                     user_id="$.payload.[*].user_id",
                     lookup=['name', 'type', 'unit', 'volume',
                             'resource_id', 'project_id', 'user_id'])]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(FULL_MULTI_MSG))
     self.assertEqual(2, len(c))
     msg = FULL_MULTI_MSG['payload']
     for idx, val in enumerate(c):
         s1 = val.as_dict()
         self.assertEqual(msg[idx]['counter_name'], s1['name'])
         self.assertEqual(msg[idx]['counter_volume'], s1['volume'])
         self.assertEqual(msg[idx]['counter_unit'], s1['unit'])
         self.assertEqual(msg[idx]['counter_type'], s1['type'])
         self.assertEqual(msg[idx]['resource_id'], s1['resource_id'])
         self.assertEqual(msg[idx]['project_id'], s1['project_id'])
         self.assertEqual(msg[idx]['user_id'], s1['user_id'])
 def test_custom_metadata(self):
     cfg = yaml.dump({
         'metric': [
             dict(name="test1",
                  event_type="test.*",
                  type="delta",
                  unit="B",
                  volume="$.payload.volume",
                  resource_id="$.payload.resource_id",
                  project_id="$.payload.project_id",
                  metadata={
                      'proj': '$.payload.project_id',
                      'dict': '$.payload.resource_metadata'
                  })
         ]
     })
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     meta = {
         'proj': s1['project_id'],
         'dict': NOTIFICATION['payload']['resource_metadata']
     }
     self.assertEqual(meta, s1['resource_metadata'])
 def test_multiple_meter(self):
     cfg = yaml.dump({
         'metric': [
             dict(name="test1",
                  event_type="test.create",
                  type="delta",
                  unit="B",
                  volume="$.payload.volume",
                  resource_id="$.payload.resource_id",
                  project_id="$.payload.project_id"),
             dict(name="test2",
                  event_type="test.create",
                  type="delta",
                  unit="B",
                  volume="$.payload.volume",
                  resource_id="$.payload.resource_id",
                  project_id="$.payload.project_id")
         ]
     })
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     data = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(2, len(data))
     expected_names = ['test1', 'test2']
     for s in data:
         self.assertTrue(s.as_dict()['name'] in expected_names)
 def test_regex_match_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.*",
                     type="delta",
                     unit="B",
                     volume="$.payload.volume",
                     resource_id="$.payload.resource_id",
                     project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
 def test_regex_match_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.*",
                     type="delta",
                     unit="B",
                     volume="$.payload.volume",
                     resource_id="$.payload.resource_id",
                     project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
 def test_multi_meter_payload_none(self):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements']
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     lookup="name")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(0, len(c))
 def test_multi_meter_payload_none(self):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements']
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     lookup="name")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(0, len(c))
 def test_prefix_expr_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name='compute.node.cpu.frequency',
                     event_type="compute.metrics.update",
                     type='gauge',
                     unit="ns",
                     volume="$.payload.metrics[?(@.name='cpu.frequency')]"
                            ".value",
                     resource_id="'prefix-' + $.payload.nodename")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(METRICS_UPDATE))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('compute.node.cpu.frequency', s1['name'])
     self.assertEqual(1600, s1['volume'])
     self.assertEqual("prefix-tianst.sh.intel.com",
                      s1['resource_id'])
 def test_multi_meter_payload_invalid_short(self, LOG):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements'][0]['result']
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     lookup=["name", "unit", "volume"])]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(0, len(c))
     LOG.warning.assert_called_with('Not all fetched meters contain "%s" '
                                    'field', 'volume')
 def test_default_metadata(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.*",
                     type="delta",
                     unit="B",
                     volume="$.payload.volume",
                     resource_id="$.payload.resource_id",
                     project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     meta = NOTIFICATION['payload'].copy()
     meta['host'] = NOTIFICATION['publisher_id']
     meta['event_type'] = NOTIFICATION['event_type']
     self.assertEqual(meta, s1['resource_metadata'])
 def test_custom_timestamp_expr_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name='compute.node.cpu.frequency',
                     event_type="compute.metrics.update",
                     type='gauge',
                     unit="ns",
                     volume="$.payload.metrics[?(@.name='cpu.frequency')]"
                            ".value",
                     resource_id="'prefix-' + $.payload.nodename",
                     timestamp="$.payload.metrics"
                               "[?(@.name='cpu.frequency')].timestamp")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(METRICS_UPDATE))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('compute.node.cpu.frequency', s1['name'])
     self.assertEqual("2013-07-29T06:51:34.472416", s1['timestamp'])
 def test_jsonpath_values_parsed(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.create",
                     type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('test1', s1['name'])
     self.assertEqual(1.0, s1['volume'])
     self.assertEqual('bea70e51c7340cb9d555b15cbfcaec23', s1['resource_id'])
     self.assertEqual('30be1fc9a03c4e94ab05c403a8a377f2', s1['project_id'])
 def test_default_metadata(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.*",
                     type="delta",
                     unit="B",
                     volume="$.payload.volume",
                     resource_id="$.payload.resource_id",
                     project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     meta = NOTIFICATION['payload'].copy()
     meta['host'] = NOTIFICATION['publisher_id']
     meta['event_type'] = NOTIFICATION['event_type']
     self.assertEqual(meta, s1['resource_metadata'])
 def test_prefix_expr_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name='compute.node.cpu.frequency',
                     event_type="compute.metrics.update",
                     type='gauge',
                     unit="ns",
                     volume="$.payload.metrics[?(@.name='cpu.frequency')]"
                            ".value",
                     resource_id="'prefix-' + $.payload.nodename")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(METRICS_UPDATE))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('compute.node.cpu.frequency', s1['name'])
     self.assertEqual(1600, s1['volume'])
     self.assertEqual("prefix-tianst.sh.intel.com",
                      s1['resource_id'])
 def test_multi_meter_payload_invalid_short(self, LOG):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements'][0]['result']
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     lookup=["name", "unit", "volume"])]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(0, len(c))
     LOG.warning.assert_called_with('Not all fetched meters contain "%s" '
                                    'field', 'volume')
 def test_jsonpath_values_parsed(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.create",
                     type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('test1', s1['name'])
     self.assertEqual(1.0, s1['volume'])
     self.assertEqual('bea70e51c7340cb9d555b15cbfcaec23', s1['resource_id'])
     self.assertEqual('30be1fc9a03c4e94ab05c403a8a377f2', s1['project_id'])
 def test_custom_timestamp_expr_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name='compute.node.cpu.frequency',
                     event_type="compute.metrics.update",
                     type='gauge',
                     unit="ns",
                     volume="$.payload.metrics[?(@.name='cpu.frequency')]"
                            ".value",
                     resource_id="'prefix-' + $.payload.nodename",
                     timestamp="$.payload.metrics"
                               "[?(@.name='cpu.frequency')].timestamp")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(METRICS_UPDATE))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('compute.node.cpu.frequency', s1['name'])
     self.assertEqual("2013-07-29T06:51:34.472416", s1['timestamp'])
 def test_custom_metadata(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.*",
                     type="delta",
                     unit="B",
                     volume="$.payload.volume",
                     resource_id="$.payload.resource_id",
                     project_id="$.payload.project_id",
                     metadata={'proj': '$.payload.project_id',
                               'dict': '$.payload.resource_metadata'})]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     meta = {'proj': s1['project_id'],
             'dict': NOTIFICATION['payload']['resource_metadata']}
     self.assertEqual(meta, s1['resource_metadata'])
 def test_arithmetic_expr_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name='compute.node.cpu.percent',
                     event_type="compute.metrics.update",
                     type='gauge',
                     unit="percent",
                     volume="$.payload.metrics["
                            "?(@.name='cpu.percent')].value"
                            " * 100",
                     resource_id="$.payload.host + '_'"
                                 " + $.payload.nodename")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(METRICS_UPDATE))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('compute.node.cpu.percent', s1['name'])
     self.assertEqual(2.7501485834103514, s1['volume'])
     self.assertEqual("tianst_tianst.sh.intel.com",
                      s1['resource_id'])
 def test_custom_timestamp(self):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements'][1]
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     multi="name",
                     timestamp='$.payload.eventTime')]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual(MIDDLEWARE_EVENT['payload']['eventTime'],
                      s1['timestamp'])
 def test_multi_meter_payload_single(self):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements'][1]
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     lookup=["name", "unit"])]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('storage.objects.outgoing.bytes', s1['name'])
     self.assertEqual(28, s1['volume'])
     self.assertEqual('B', s1['unit'])
 def test_multi_meter_payload_single(self):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements'][1]
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     lookup=["name", "unit"])]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('storage.objects.outgoing.bytes', s1['name'])
     self.assertEqual(28, s1['volume'])
     self.assertEqual('B', s1['unit'])
 def test_custom_timestamp(self):
     event = copy.deepcopy(MIDDLEWARE_EVENT)
     del event['payload']['measurements'][1]
     cfg = yaml.dump(
         {'metric': [dict(name="$.payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="$.payload.measurements.[*].metric.[*].unit",
                     volume="$.payload.measurements.[*].result",
                     resource_id="$.payload.target_id",
                     project_id="$.payload.initiator.project_id",
                     multi="name",
                     timestamp='$.payload.eventTime')]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(event))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual(MIDDLEWARE_EVENT['payload']['eventTime'],
                      s1['timestamp'])
 def test_arithmetic_expr_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name='compute.node.cpu.percent',
                     event_type="compute.metrics.update",
                     type='gauge',
                     unit="percent",
                     volume="$.payload.metrics["
                            "?(@.name='cpu.percent')].value"
                            " * 100",
                     resource_id="$.payload.host + '_'"
                                 " + $.payload.nodename")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(METRICS_UPDATE))
     self.assertEqual(1, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('compute.node.cpu.percent', s1['name'])
     self.assertEqual(2.7501485834103514, s1['volume'])
     self.assertEqual("tianst_tianst.sh.intel.com",
                      s1['resource_id'])
 def test_multi_meter_payload(self):
     cfg = yaml.dump(
         {'metric': [dict(name="payload.measurements.[*].metric.[*].name",
                     event_type="objectstore.http.request",
                     type="delta",
                     unit="payload.measurements.[*].metric.[*].unit",
                     volume="payload.measurements.[*].result",
                     resource_id="payload.target_id",
                     project_id="payload.initiator.project_id",
                     multi="name")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(MIDDLEWARE_EVENT))
     self.assertEqual(2, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('storage.objects.outgoing.bytes', s1['name'])
     self.assertEqual(28, s1['volume'])
     self.assertEqual('B', s1['unit'])
     s2 = c[1].as_dict()
     self.assertEqual('storage.objects.incoming.bytes', s2['name'])
     self.assertEqual(1, s2['volume'])
     self.assertEqual('B', s2['unit'])
 def test_multiple_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.create",
                     type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id"),
                     dict(name="test2",
                          event_type="test.create",
                          type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     data = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(2, len(data))
     expected_names = ['test1', 'test2']
     for s in data:
         self.assertTrue(s.as_dict()['name'] in expected_names)
 def test_multiple_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.create",
                     type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id"),
                     dict(name="test2",
                          event_type="test.create",
                          type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(2, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('test2', s1['name'])
     s2 = c[1].as_dict()
     self.assertEqual('test1', s2['name'])
 def test_multiple_meter(self):
     cfg = yaml.dump(
         {'metric': [dict(name="test1",
                     event_type="test.create",
                     type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id"),
                     dict(name="test2",
                          event_type="test.create",
                          type="delta",
                          unit="B",
                          volume="$.payload.volume",
                          resource_id="$.payload.resource_id",
                          project_id="$.payload.project_id")]})
     self.handler.definitions = notifications.load_definitions(
         self.__setup_meter_def_file(cfg))
     c = list(self.handler.process_notification(NOTIFICATION))
     self.assertEqual(2, len(c))
     s1 = c[0].as_dict()
     self.assertEqual('test2', s1['name'])
     s2 = c[1].as_dict()
     self.assertEqual('test1', s2['name'])