Esempio n. 1
0
    def record_metering_data(self, context, data):
        """This method is triggered when metering data is
        cast from an agent.
        """
        # We may have receive only one counter on the wire
        if not isinstance(data, list):
            data = [data]

        for meter in data:
            LOG.info('metering data %s for %s @ %s: %s', meter['counter_name'],
                     meter['resource_id'],
                     meter.get('timestamp',
                               'NO TIMESTAMP'), meter['counter_volume'])
            if publisher_meter.verify_signature(
                    meter, cfg.CONF.publisher_meter.metering_secret):
                try:
                    # Convert the timestamp to a datetime instance.
                    # Storage engines are responsible for converting
                    # that value to something they can store.
                    if meter.get('timestamp'):
                        ts = timeutils.parse_isotime(meter['timestamp'])
                        meter['timestamp'] = timeutils.normalize_time(ts)
                    self.storage_conn.record_metering_data(meter)
                except Exception as err:
                    LOG.error('Failed to record metering data: %s', err)
                    LOG.exception(err)
            else:
                LOG.warning(
                    'message signature invalid, discarding message: %r', meter)
Esempio n. 2
0
    def record_metering_data(self, context, data):
        """This method is triggered when metering data is
        cast from an agent.
        """
        # We may have receive only one counter on the wire
        if not isinstance(data, list):
            data = [data]

        for meter in data:
            LOG.info('metering data %s for %s @ %s: %s',
                     meter['counter_name'],
                     meter['resource_id'],
                     meter.get('timestamp', 'NO TIMESTAMP'),
                     meter['counter_volume'])
            if publisher_meter.verify_signature(
                    meter,
                    cfg.CONF.publisher_meter.metering_secret):
                try:
                    # Convert the timestamp to a datetime instance.
                    # Storage engines are responsible for converting
                    # that value to something they can store.
                    if meter.get('timestamp'):
                        ts = timeutils.parse_isotime(meter['timestamp'])
                        meter['timestamp'] = timeutils.normalize_time(ts)
                    self.storage_conn.record_metering_data(meter)
                except Exception as err:
                    LOG.error('Failed to record metering data: %s', err)
                    LOG.exception(err)
            else:
                LOG.warning(
                    'message signature invalid, discarding message: %r',
                    meter)
Esempio n. 3
0
def test_verify_signature_nested():
    data = {
        'a': 'A',
        'b': 'B',
        'nested': {
            'a': 'A',
            'b': 'B',
        },
    }
    data['message_signature'] = meter.compute_signature(data, 'not-so-secret')
    assert meter.verify_signature(data, 'not-so-secret')
def test_verify_signature_nested():
    data = {'a': 'A',
            'b': 'B',
            'nested': {'a': 'A',
                       'b': 'B',
                       },
            }
    data['message_signature'] = meter.compute_signature(
        data,
        'not-so-secret')
    assert meter.verify_signature(data, 'not-so-secret')
Esempio n. 5
0
def test_verify_signature_nested_json():
    data = {
        'a': 'A',
        'b': 'B',
        'nested': {
            'a': 'A',
            'b': 'B',
            'c': ('c', ),
            'd': ['d']
        },
    }
    data['message_signature'] = meter.compute_signature(data, 'not-so-secret')
    jsondata = jsonutils.loads(jsonutils.dumps(data))
    assert meter.verify_signature(jsondata, 'not-so-secret')
def test_verify_signature_nested_json():
    data = {'a': 'A',
            'b': 'B',
            'nested': {'a': 'A',
                       'b': 'B',
                       'c': ('c',),
                       'd': ['d']
                       },
            }
    data['message_signature'] = meter.compute_signature(
        data,
        'not-so-secret')
    jsondata = jsonutils.loads(jsonutils.dumps(data))
    assert meter.verify_signature(jsondata, 'not-so-secret')
Esempio n. 7
0
def test_verify_signature_incorrect():
    data = {'a': 'A', 'b': 'B', 'message_signature': 'Not the same'}
    assert not meter.verify_signature(data, 'not-so-secret')
Esempio n. 8
0
def test_verify_signature_unsigned():
    data = {'a': 'A', 'b': 'B'}
    assert not meter.verify_signature(data, 'not-so-secret')
Esempio n. 9
0
def test_verify_signature_signed():
    data = {'a': 'A', 'b': 'B'}
    sig1 = meter.compute_signature(data, 'not-so-secret')
    data['message_signature'] = sig1
    assert meter.verify_signature(data, 'not-so-secret')
Esempio n. 10
0
def test_verify_signature_incorrect():
    data = {'a': 'A', 'b': 'B',
            'message_signature': 'Not the same'}
    assert not meter.verify_signature(data, 'not-so-secret')
Esempio n. 11
0
def test_verify_signature_unsigned():
    data = {'a': 'A', 'b': 'B'}
    assert not meter.verify_signature(data, 'not-so-secret')
Esempio n. 12
0
def test_verify_signature_signed():
    data = {'a': 'A', 'b': 'B'}
    sig1 = meter.compute_signature(data, 'not-so-secret')
    data['message_signature'] = sig1
    assert meter.verify_signature(data, 'not-so-secret')