def setUp(self): self.splunk_venture = Venture( name='Splunk unknown usage', venture_id=666, symbol='splunk_unknown_usage', ) self.splunk_venture.save() venture1 = Venture(name='venture1', venture_id=111, symbol='venture1') venture1.save() venture2 = Venture(name='venture2', venture_id=222, symbol='venture2') venture2.save() self.device1 = Device(name='test_host1', device_id=1) self.device1.save() self.device2 = Device(name='test_host2', device_id=2) self.device2.save() daily_device1 = DailyDevice( date=datetime.datetime.today(), name='test_host1', pricing_venture=venture1, pricing_device=self.device1, ) daily_device1.save() daily_device2 = DailyDevice( date=datetime.datetime.today(), name='test_host2', pricing_venture=venture2, pricing_device=self.device2, ) daily_device2.save()
class TestSplunkPluginTest(TestCase): """ Splunk costs Test Case """ def setUp(self): self.splunk_venture = Venture( name='Splunk unknown usage', venture_id=666, symbol='splunk_unknown_usage', ) self.splunk_venture.save() venture1 = Venture(name='venture1', venture_id=111, symbol='venture1') venture1.save() venture2 = Venture(name='venture2', venture_id=222, symbol='venture2') venture2.save() self.device1 = Device(name='test_host1', device_id=1) self.device1.save() self.device2 = Device(name='test_host2', device_id=2) self.device2.save() daily_device1 = DailyDevice( date=datetime.datetime.today(), name='test_host1', pricing_venture=venture1, pricing_device=self.device1, ) daily_device1.save() daily_device2 = DailyDevice( date=datetime.datetime.today(), name='test_host2', pricing_venture=venture2, pricing_device=self.device2, ) daily_device2.save() def test_set_usages(self): """ OpenStack usages Test Case """ # fake setting need to run plugin settings.SPLUNK_HOST = 'test' settings.SPLUNK_USER = '******' settings.SPLUNK_PASSWORD = '******' with mock.patch('ralph_pricing.plugins.splunk.Splunk') as Splunk: Splunk.side_effect = MockSplunk splunk_runner(today=datetime.date.today()) usage_device1 = DailyUsage.objects.get(pricing_device=self.device1) usage_device2 = DailyUsage.objects.get(pricing_device=self.device2) usage_splunk_venture = DailyUsage.objects.get( pricing_venture=self.splunk_venture, ) self.assertEqual(usage_device1.value, 10318.234132) self.assertEqual(usage_device2.value, 1326.640829) self.assertEqual(usage_splunk_venture.value, 1048.363416) def test_fail_plugin(self): """ Testing not configured plugin """ with mock.patch('ralph_pricing.plugins.splunk.Splunk') as Splunk: Splunk.side_effect = MockSplunk status, message, arg = splunk_runner( today=datetime.datetime.today(), ) self.assertFalse(status)
def update_assets(data, date): created = False if not data['ralph_id']: return False try: old_device = Device.objects.exclude(device_id=data['ralph_id'], ).get( asset_id=data['asset_id'], ) except Device.DoesNotExist: pass else: old_device.asset_id = None old_device.save() try: device = Device.objects.get(device_id=data['ralph_id']) except Device.DoesNotExist: created = True device = Device() device.device_id = data['ralph_id'] device.asset_id = data['asset_id'] device.slots = data['slots'] device.sn = data['sn'] device.barcode = data['barcode'] device.save() daily, daily_created = DailyDevice.objects.get_or_create( date=date, pricing_device=device, ) daily.price = data['price'] daily.deprecation_rate = data['deprecation_rate'] daily.is_deprecated = data['is_deprecated'] daily.save() return created
def update_assets(data, date): created = False if not data['ralph_id']: return False try: old_device = Device.objects.exclude( device_id=data['ralph_id'], ).get( asset_id=data['asset_id'], ) except Device.DoesNotExist: pass else: old_device.asset_id = None old_device.save() try: device = Device.objects.get(device_id=data['ralph_id']) except Device.DoesNotExist: created = True device = Device() device.device_id = data['ralph_id'] device.asset_id = data['asset_id'] device.slots = data['slots'] device.sn = data['sn'] device.barcode = data['barcode'] device.save() daily, daily_created = DailyDevice.objects.get_or_create( date=date, pricing_device=device, ) daily.price = data['price'] daily.deprecation_rate = data['deprecation_rate'] daily.is_deprecated = data['is_deprecated'] daily.save() return created
def update_assets(data, date, usages): """ Updates single asset. Creates asset (Device object for backward compatibility) if not exists, then creates daily snapshot of this device. Only assets with assigned device and warehouse are processed! """ created = False if not data['ralph_id']: return False if not data['warehouse_id']: logger.warning( 'Empty warehouse_id for asset with ralph_id {0}', data['ralph_id'] ) return False try: warehouse = Warehouse.objects.get( id=data['warehouse_id'], ) except Warehouse.DoesNotExist: logger.warning( 'Invalid warehouse_id ({0}) for asset with ralph_id {1}', data['warehouse_id'], data['ralph_id'], ) return False # clear previous asset assignments # (only if current device_is != previous device_id) try: old_device = Device.objects.exclude( device_id=data['ralph_id'], ).get( asset_id=data['asset_id'], ) except Device.DoesNotExist: pass else: old_device.asset_id = None old_device.save() # get or create asset try: device = Device.objects.get(asset_id=data['asset_id']) except Device.DoesNotExist: try: device = Device.objects.get(sn=data['sn']) except Device.DoesNotExist: created = True device = Device() device.device_id = data['ralph_id'] # device info device.asset_id = data['asset_id'] device.slots = data['slots'] device.sn = data['sn'] device.barcode = data['barcode'] device.is_blade = data['is_blade'] device.save() # daily device 'snapshot' daily_device, daily_device_created = DailyDevice.objects.get_or_create( date=date, pricing_device=device, ) if data.get('venture_id') is not None: venture, venture_created = Venture.objects.get_or_create( venture_id=data['venture_id'], ) daily_device.pricing_venture = venture else: logger.warning('Asset {0} has no venture'.format(data['asset_id'])) return False daily_device.price = data['price'] daily_device.deprecation_rate = data['deprecation_rate'] daily_device.is_deprecated = data['is_deprecated'] daily_device.save() # cores count usage update_usage( data['cores_count'], date, daily_device.pricing_venture, warehouse, usages['core'], device, ) # power consumption usage update_usage( data['power_consumption'], date, daily_device.pricing_venture, warehouse, usages['power_consumption'], device, ) # height of device usage update_usage( data['height_of_device'], date, daily_device.pricing_venture, warehouse, usages['collocation'], device, ) return created