예제 #1
0
파일: api.py 프로젝트: joylhx/Rally
    def workload_data_create(self, task_uuid, workload_uuid, chunk_order,
                             data):
        workload_data = models.WorkloadData(task_uuid=task_uuid,
                                            workload_uuid=workload_uuid)

        raw_data = data.get("raw", [])
        iter_count = len(raw_data)

        failed_iter_count = 0

        started_at = float("inf")
        finished_at = 0
        for d in raw_data:
            if d.get("error"):
                failed_iter_count += 1

            timestamp = d["timestamp"]
            duration = d["duration"]
            finished = timestamp + duration

            if timestamp < started_at:
                started_at = timestamp

            if finished > finished_at:
                finished_at = finished

        now = time.time()
        if started_at == float("inf"):
            started_at = now
        if finished_at == 0:
            finished_at = now

        workload_data.update({
            "task_uuid":
            task_uuid,
            "workload_uuid":
            workload_uuid,
            "chunk_order":
            chunk_order,
            "iteration_count":
            iter_count,
            "failed_iteration_count":
            failed_iter_count,
            "chunk_data": {
                "raw": raw_data
            },
            # TODO(ikhudoshyn)
            "chunk_size":
            0,
            "compressed_chunk_size":
            0,
            "started_at":
            dt.datetime.fromtimestamp(started_at),
            "finished_at":
            dt.datetime.fromtimestamp(finished_at)
        })
        workload_data.save()
        return workload_data
예제 #2
0
파일: api.py 프로젝트: akinsWin/rally
    def task_result_create(self, task_uuid, key, data):
        raw_data = data.get("raw", [])
        iter_count = len(raw_data)

        failed_iter_count = 0
        max_duration = 0
        min_duration = 0

        success = True

        for d in raw_data:
            if d.get("error"):
                failed_iter_count += 1

            duration = d.get("duration", 0)

            if duration > max_duration:
                max_duration = duration

            if min_duration and min_duration > duration:
                min_duration = duration

        sla = data.get("sla", [])
        # TODO(ikhudoshyn): if no SLA was specified and there are
        # failed iterations is it success?
        # NOTE(ikhudoshyn): we call it 'pass_sla'
        # for the sake of consistency with other models
        # so if no SLAs were specified, then we assume pass_sla == True
        success = all([s.get("success") for s in sla])

        now = timeutils.utcnow()
        delta = dt.timedelta(seconds=data.get("full_duration", 0))
        start = now - delta

        subtask = models.Subtask()
        subtask.update({"task_uuid": task_uuid})
        subtask.save()

        workload = models.Workload()
        workload.update({
            "task_uuid": task_uuid,
            "subtask_uuid": subtask.uuid,
            "name": key["name"],
            "position": key["pos"],
            "runner": key["kw"]["runner"],
            "runner_type": key["kw"]["runner"]["type"],
            "context": key["kw"].get("context", {}),
            "hooks": data.get("hooks", []),
            "sla": key["kw"].get("sla", {}),
            "args": key["kw"].get("args", {}),
            "sla_results": {"sla": sla},
            "context_execution": {},
            "load_duration": data.get("load_duration", 0),
            "full_duration": data.get("full_duration", 0),
            "min_duration": min_duration,
            "max_duration": max_duration,
            "total_iteration_count": iter_count,
            "failed_iteration_count": failed_iter_count,
            # TODO(ikhudoshyn)
            "start_time": start,
            "statistics": {},
            "pass_sla": success
        })
        workload.save()

        workload_data = models.WorkloadData()
        workload_data.update({
            "task_uuid": task_uuid,
            "workload_uuid": workload.uuid,
            "chunk_order": 0,
            "iteration_count": iter_count,
            "failed_iteration_count": failed_iter_count,
            "chunk_data": {"raw": raw_data},
            # TODO(ikhudoshyn)
            "chunk_size": 0,
            "compressed_chunk_size": 0,
            "started_at": start,
            "finished_at": now
        })

        # TODO(ikhudoshyn): create workload and workload data in
        # one transaction
        workload_data.save()

        # TODO(ikhudoshyn): if pass_sla is False,
        # then update task's and subtask's pass_sla

        # TODO(ikhudoshyn): update task.task_duration
        # and subtask.duration

        return self._make_old_task_result(workload, workload_data)