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