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')
Exemple #2
0
 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')
Exemple #4
0
 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')
Exemple #6
0
 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')
Exemple #7
0
 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())
Exemple #8
0
 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()
Exemple #9
0
 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 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)
Exemple #12
0
    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')
Exemple #14
0
 def test_getattr(self):
     adapter = MessageAdapter()
     adapter.host_name = 'fake_host_name'
     self.assertEqual(adapter.host_name, 'fake_host_name')
Exemple #15
0
 def test_setattr(self):
     adapter = MessageAdapter()
     adapter.signature = 'fake_signature'
     self.assertEqual(adapter._adaptee.signature, 'fake_signature')
Exemple #16
0
 def test_init_message(self):
     msg = BulkMessage()
     adapter = MessageAdapter(msg)
     self.assertEqual(adapter._adaptee, msg)
Exemple #17
0
 def test_init_empty(self):
     adapter = MessageAdapter()
     if MessageAdapterTestCases.python_version < 270:
         self.assertTrue(adapter._adaptee is not None)
     else:
         self.assertIsNotNone(adapter._adaptee)
 def test_getattr(self):
     adapter = MessageAdapter()
     adapter.host_name = 'fake_host_name'
     self.assertEqual(adapter.host_name, 'fake_host_name')