def create_transfer(started, finished, vm):
    return TransferLog(started=started,
                       finished=finished,
                       vm=vm,
                       id='123',
                       job_id='before_1',
                       direction='UPLOAD',
                       file_id='transferred.txt')
Example #2
0
    def test_should_fail_if_download_instead_of_upload(self):
        dag = self._prepare_file_transfer_dag()
        dag.id = '1'

        tasks = [
            TaskLog(id='before_1', workflow='1', task_id='before', started=0.0, finished=10.0,
                vm=1, result='OK'),
            TaskLog(id='after_1', workflow='1', task_id='after', started=13.0, finished=18.0,
                vm=1, result='OK')]

        transfers = [
            TransferLog(id='123', job_id='before_1', vm=1, started=10.0, finished=12.0,
                direction='DOWNLOAD', file_id='transferred.txt'),
            TransferLog(id='234', job_id='after_1', vm=1, started=12.0, finished=13.0,
                direction='DOWNLOAD', file_id='transferred.txt')]

        result = order_validator.validate_transfers(dag, tasks, transfers)
        self.assertFalse(result.is_valid)
Example #3
0
    def test_should_pass_if_transfers_are_ok(self):
        dag = self._prepare_file_transfer_dag()
        dag.id = '1'

        tasks = [
            TaskLog(id='before_1', workflow='1', task_id='before', started=0.0, finished=10.0,
                vm=1, result='OK'),
            TaskLog(id='after_1', workflow='1', task_id='after', started=13.0, finished=18.0,
                vm=1, result='OK')]

        transfers = [
            TransferLog(id='123', job_id='before_1', vm=1, started=10.0, finished=12.0,
                direction='UPLOAD', file_id='transferred.txt'),
            TransferLog(id='234', job_id='after_1', vm=1, started=12.0, finished=13.0,
                direction='DOWNLOAD', file_id='transferred.txt')]

        result = order_validator.validate_transfers(dag, tasks, transfers)
        self.assertTrue(result.is_valid)
        self.assertListEqual([], 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