def test_deserialize_to_str(self): adapter = MessageAdapter() adapter.deserialize_from_str(self.serialized_data_str()) self.assertEqual(adapter.signature, 'fake_signature') self.assertEqual(adapter.host_name, 'fake_host_name') self.assertEqual(adapter.host_records[0].value, '10') self.assertEqual(adapter.inst_records[0].value, '20')
def test_add_host_record(self): adapter = MessageAdapter() self.assertEqual(len(adapter.host_records), 0) adapter.add_host_record(timestamp=self.timestamp(), meter_name='fake_meter_name', value='10', duration=0) self.assertEqual(len(adapter.host_records), 1) self.assertEqual(adapter.host_records[0].value, '10')
def test_add_inst_record(self): adapter = MessageAdapter() self.assertEqual(len(adapter.inst_records), 0) adapter.add_inst_record(project_id='fake_project_id', user_id='fake_user_id', inst_id='fake_inst_id', timestamp=self.timestamp(), meter_name='fake_meter_name', value='20', duration=0) self.assertEqual(len(adapter.inst_records), 1) self.assertEqual(adapter.inst_records[0].value, '20')
def _send(self, envelope): """ Create message signature and send envelop to broker """ messageAdapter = MessageAdapter(envelope.message) sig = createSignature(str(messageAdapter), self.shared_secret) envelope.signature = sig self.producer.send(exchange=self.exchange, routing_key=self.routing_key, message=envelope.serialize_to_str())
def serialized_data_str(self): adapter = MessageAdapter() adapter.signature = 'fake_signature' adapter.host_name = 'fake_host_name' adapter.add_host_record(timestamp=self.timestamp(), meter_name='fake_meter_name', value='10', duration=0) adapter.add_inst_record(project_id='fake_project_id', user_id='fake_user_id', inst_id='fake_inst_id', timestamp=self.timestamp(), meter_name='fake_meter_name', value='20', duration=0) return adapter.serialize_to_str()
def test_serialize_to_str(self): adapter = MessageAdapter() adapter.signature = 'fake_signature' adapter.host_name = 'fake_host_name' adapter.add_host_record(timestamp=self.timestamp(), meter_name='fake_meter_name', value='10', duration=0) adapter.add_inst_record(project_id='fake_project_id', user_id='fake_user_id', inst_id='fake_inst_id', timestamp=self.timestamp(), meter_name='fake_meter_name', value='20', duration=0) self.assertEqual(isinstance(adapter.serialize_to_str(), str), True)
def _collector_callback(self, params): envelope = EnvelopeAdapter() # check whether incorrectly formatted message try: envelope.deserialize_from_str(params) except: return message = MessageAdapter(envelope.message) # validate signature if not validateSignature(str(message), self.shared_secret, envelope.signature): return self.db.session_open() # load all meters now to avoid queries later meters = self.db.load(Meter) meter_dict = {} for meter in meters: meter_dict[meter.name] = meter # insert host if it does not exist yet hosts = self.db.load(Host, {'name': message.host_name}, limit=1) if not hosts: host = Host(name=message.host_name) self.db.save(host) self.db.commit() else: host = hosts[0] # insert all host records for r in message.host_records: if r.meter_name not in meter_dict: _logger.warning('Unknown meter_name "%s"' % r.meter_name) continue try: record = MeterRecord(meter_id=meter_dict[r.meter_name].id, host_id=host.id, user_id=None, resource_id=None, project_id=None, value=r.value, duration=r.duration, timestamp=r.timestamp) self.db.save(record) _logger.debug("New %s" % record) # update host activity record_timestamp = self._str_to_datetime(r.timestamp) if not host.activity or record_timestamp > host.activity: host.activity = record_timestamp except Exception as e: _logger.exception(e) # insert all instance records for r in message.inst_records: if r.meter_name not in meter_dict: _logger.warning('Unknown meter_name "%s"' % r.meter_name) continue try: # @[fbahr] - TODO: `self.known_instances` grows over time # towards inf. - clean-up? if not r.inst_id in self.known_instances: self.known_instances[r.inst_id] = self._metadata( uuid=r.inst_id) r.project_id, r.user_id = self.known_instances[r.inst_id] # insert project if it does not exist yet projects = self.db.load(Project, {'uuid': r.project_id}, limit=1) if not projects: project = Project(uuid=r.project_id, created_at=self._str_to_datetime( r.timestamp)) self.db.save(project) self.db.commit() else: project = projects[0] record = MeterRecord(meter_id=meter_dict[r.meter_name].id, host_id=host.id, user_id=r.user_id, resource_id=r.inst_id, project_id=r.project_id, value=r.value, duration=r.duration, timestamp=r.timestamp) self.db.save(record) _logger.debug("New %s" % record) # update host and project activity record_timestamp = self._str_to_datetime(r.timestamp) if not host.activity or record_timestamp > host.activity: host.activity = record_timestamp if not project.updated_at or record_timestamp > project.updated_at: project.updated_at = record_timestamp except Exception as e: _logger.exception(e) try: self.db.commit() except Exception as e: self.db.rollback() _logger.exception(e) self.db.session_close()
def test_setattr(self): adapter = MessageAdapter() adapter.signature = 'fake_signature' self.assertEqual(adapter._adaptee.signature, 'fake_signature')
def test_getattr(self): adapter = MessageAdapter() adapter.host_name = 'fake_host_name' self.assertEqual(adapter.host_name, 'fake_host_name')
def test_init_message(self): msg = BulkMessage() adapter = MessageAdapter(msg) self.assertEqual(adapter._adaptee, msg)
def test_init_empty(self): adapter = MessageAdapter() if MessageAdapterTestCases.python_version < 270: self.assertTrue(adapter._adaptee is not None) else: self.assertIsNotNone(adapter._adaptee)