Пример #1
0
    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()
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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