def test_should_sum_vm_hours(self):
        vms = [
            VMLog(started=0.0, finished=SECS_IN_HOUR, id=1, **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=0.0, finished=SECS_IN_HOUR, id=2, **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=0.0, finished=SECS_IN_HOUR, id=3, **IRRELEVANT_VM_ATTRIBUTES)]

        settings = ExperimentSettings(budget=2999.0, vm_cost_per_hour=1000.0, deadline=DEFAULT_DEADLINE)

        result = constraints_validator.validate(vms, settings)

        self.assertFalse(result.is_valid)
    def test_should_pass_when_vms_terminated_equally_with_deadline(self):
        vms = [
            VMLog(started=0.0, finished=13.0, id=1, **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=14.0, finished=20.0, id=2, **IRRELEVANT_VM_ATTRIBUTES)]

        settings = ExperimentSettings(deadline=20.0, budget=DEFAULT_BUDGET, vm_cost_per_hour=DEFAULT_VM_COST)

        result = constraints_validator.validate(vms, settings)

        self.assertTrue(result.is_valid)
        self.assertEqual([], result.errors)
    def test_should_fail_if_vms_cost_exceeded_budget(self):
        vms = [
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=1,
                  price_for_billing_unit=1000.0,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        settings = ExperimentSettings(budget=333.0,
                                      deadline=DEFAULT_DEADLINE,
                                      pricing_model=SIMPLE_PRICING_MODEL,
                                      billing_time_in_seconds=SECS_IN_HOUR,
                                      first_billing_time_in_seconds=None)

        result = constraints_validator.validate(vms, settings)

        self.assertFalse(result.is_valid)

        # first billing time is enough to exeed budget
        vms = [
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=1,
                  price_for_billing_unit=100.0,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        settings = ExperimentSettings(budget=333.0,
                                      deadline=DEFAULT_DEADLINE,
                                      pricing_model=GOOGLE_PRICING_MODEL,
                                      billing_time_in_seconds=360,
                                      first_billing_time_in_seconds=1800)

        result = constraints_validator.validate(vms, settings)

        self.assertFalse(result.is_valid)

        # budget is exeeded after first_billing_time
        vms = [
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=1,
                  price_for_billing_unit=40.0,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        result = constraints_validator.validate(vms, settings)

        self.assertFalse(result.is_valid)
    def test_should_pass_when_vms_cost_was_equal_to_budget(self):
        vms = [
            VMLog(started=0.0, finished=SECS_IN_HOUR, id=1, **IRRELEVANT_VM_ATTRIBUTES)]

        settings = ExperimentSettings(budget=1000.0, vm_cost_per_hour=1000.0, deadline=DEFAULT_DEADLINE)

        result = constraints_validator.validate(vms, settings)

        self.assertTrue(result.is_valid)
    def test_should_fail_when_vms_terminated_after_deadline(self):
        vms = [
            VMLog(started=14.0, finished=22.0, id=1, **IRRELEVANT_VM_ATTRIBUTES)]

        settings = ExperimentSettings(deadline=20.0, budget=DEFAULT_BUDGET, vm_cost_per_hour=DEFAULT_VM_COST)

        result = constraints_validator.validate(vms, settings)

        self.assertFalse(result.is_valid)
        self.assertLessEqual(1, len(result.errors))
    def test_should_sum_vm_billing_units(self):
        vms = [
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=1,
                  price_for_billing_unit=1000.0,
                  **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=2,
                  price_for_billing_unit=1000.0,
                  **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=3,
                  price_for_billing_unit=1000.0,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        settings = ExperimentSettings(budget=2999.0,
                                      deadline=DEFAULT_DEADLINE,
                                      pricing_model=SIMPLE_PRICING_MODEL,
                                      billing_time_in_seconds=SECS_IN_HOUR,
                                      first_billing_time_in_seconds=None)

        result = constraints_validator.validate(vms, settings)

        self.assertFalse(result.is_valid)

        vms = [
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=1,
                  price_for_billing_unit=10.0,
                  **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=2,
                  price_for_billing_unit=10.0,
                  **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=3,
                  price_for_billing_unit=10.0,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        settings = ExperimentSettings(
            budget=2999.0,
            deadline=DEFAULT_DEADLINE,
            pricing_model=GOOGLE_PRICING_MODEL,
            billing_time_in_seconds=SECS_IN_HOUR / 100,
            first_billing_time_in_seconds=SECS_IN_HOUR / 10)

        result = constraints_validator.validate(vms, settings)

        self.assertFalse(result.is_valid)
    def test_should_pass_when_vms_cost_was_within_budget(self):
        vms = [
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=1,
                  price_for_billing_unit=1000.0,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        settings = ExperimentSettings(budget=1234.0,
                                      deadline=DEFAULT_DEADLINE,
                                      pricing_model=SIMPLE_PRICING_MODEL,
                                      billing_time_in_seconds=SECS_IN_HOUR,
                                      first_billing_time_in_seconds=None)

        result = constraints_validator.validate(vms, settings)

        self.assertTrue(result.is_valid)

        vms = [
            VMLog(started=0.0,
                  finished=SECS_IN_HOUR,
                  id=1,
                  price_for_billing_unit=20.0,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        settings = ExperimentSettings(budget=1234.0,
                                      deadline=DEFAULT_DEADLINE,
                                      pricing_model=GOOGLE_PRICING_MODEL,
                                      billing_time_in_seconds=60,
                                      first_billing_time_in_seconds=600)

        result = constraints_validator.validate(vms, settings)

        self.assertTrue(result.is_valid)
    def test_should_pass_when_vms_terminated_equally_with_deadline(self):
        vms = [
            VMLog(started=0.0,
                  finished=13.0,
                  id=1,
                  price_for_billing_unit=DEFAULT_VM_COST,
                  **IRRELEVANT_VM_ATTRIBUTES),
            VMLog(started=14.0,
                  finished=20.0,
                  id=2,
                  price_for_billing_unit=DEFAULT_VM_COST,
                  **IRRELEVANT_VM_ATTRIBUTES)
        ]

        settings = ExperimentSettings(deadline=20.0,
                                      budget=DEFAULT_BUDGET,
                                      pricing_model=SIMPLE_PRICING_MODEL,
                                      billing_time_in_seconds=SECS_IN_HOUR,
                                      first_billing_time_in_seconds=None)

        result = constraints_validator.validate(vms, settings)

        self.assertTrue(result.is_valid)
        self.assertEqual([], result.errors)
def read_log(file_content):
    lines = file_content.splitlines()
    current_line = 0

    deadline, budget, vm_cost_per_hour = map(float,
                                             lines[current_line].split())
    current_line += 1

    settings = ExperimentSettings(deadline, budget, vm_cost_per_hour)

    vm_number = int(lines[current_line])
    current_line += 1

    vms = {}

    for i in xrange(0, vm_number):
        vm_info = lines[current_line].split()

        vm = VMLog(id=vm_info[0],
                   started=float_or_none(vm_info[1]),
                   finished=float_or_none(vm_info[2]))
        vms[vm.id] = vm

        current_line += 1

    workflows_number = int(lines[current_line])
    current_line += 1

    workflows = {}

    for i in xrange(0, workflows_number):
        workflow_info = lines[current_line].split()
        workflow = Workflow(id=workflow_info[0],
                            priority=int(workflow_info[1]),
                            filename=workflow_info[2])
        workflows[workflow.id] = workflow
        current_line += 1

    tasks_number = int(lines[current_line])
    current_line += 1

    tasks = []

    for i in xrange(0, tasks_number):
        task_info = lines[current_line].split()
        task = TaskLog(id=task_info[0],
                       workflow=task_info[1],
                       task_id=task_info[2],
                       vm=task_info[3],
                       started=float_or_none(task_info[4]),
                       finished=float_or_none(task_info[5]),
                       result=task_info[6])
        tasks.append(task)
        current_line += 1

    transfers_number = int(lines[current_line])
    current_line += 1

    transfers = []

    for i in xrange(0, transfers_number):
        transfer_info = lines[current_line].split()
        transfer = TransferLog(id=transfer_info[0],
                               vm=transfer_info[1],
                               started=float_or_none(transfer_info[2]),
                               finished=float_or_none(transfer_info[3]),
                               direction=transfer_info[4],
                               job_id=transfer_info[5],
                               file_id=transfer_info[6])
        transfers.append(transfer)
        current_line += 1

    execution_log = ExecutionLog()

    execution_log.settings = settings

    for task in tasks:
        execution_log.add_event(EventType.TASK, task)

    for transfer in transfers:
        execution_log.add_event(EventType.TRANSFER, transfer)

    for vm in vms.values():
        execution_log.add_event(EventType.VM, vm)

    for workflow in workflows.values():
        execution_log.add_workflow(workflow)

    return execution_log
def create_vm(started, finished, id):
    return VMLog(started=started, finished=finished, id=id)
Пример #11
0
def create_vm(started, finished, id, cores, price_for_billing_unit):
    return VMLog(started=started,
                 finished=finished,
                 id=id,
                 cores=cores,
                 price_for_billing_unit=price_for_billing_unit)
Пример #12
0
def create_vm(started, finished, id, cores):
    return VMLog(started=started, finished=finished, id=id, cores=cores)