Exemple #1
0
    def GET(self, framework=None, target=None, datacenter=None):

        workers = []

        with self.database.session() as session:
            worker_objects = session.query(Worker).filter(Worker.deleted == False).order_by(Worker.id.asc())

            if framework is not None:
                worker_objects = worker_objects.filter(Worker.framework == framework)

            if target is not None:
                worker_objects = worker_objects.filter(Worker.target == target)

            if datacenter is not None:
                worker_objects = worker_objects.filter(Worker.datacenter == datacenter)

            for worker in worker_objects:
                data = {'id': worker.id,
                        'target': worker.target,
                        'framework': worker.framework,
                        'datacenter': worker.datacenter,
                        'tags': worker.tags,
                        'created_at': unix_time_millis(worker.created_at),
                        'updated_at': unix_time_millis(worker.updated_at)}

                workers.append(data)

        return {"workers": workers}
Exemple #2
0
    def GET(self, job_id):

        with self.database.session() as session:
            job = session.query(Job).filter(Job.id == job_id).first()

            if job is None:
                raise cherrypy.HTTPError(404, "Unknown Job ID "+job_id)

            data = {'id': job.id,
                    'name': job.name,
                    'status': job.status.value,
                    'datacenter': job.datacenter,
                    'targets': [],
                    'created_at': unix_time_millis(job.created_at),
                    'updated_at': unix_time_millis(job.updated_at)}

            for job_target in job.targets:
                target_data = {
                    'target': job_target.worker.target,
                    'tasks': []
                }
                if job_target.tags is not None:
                    target_data['tags'] = job_target.tags
                for task in job_target.tasks:
                    task_data = {
                        'id': task.id,
                        'status': task.status.value
                    }
                    target_data['tasks'].append(task_data)
                data['targets'].append(target_data)

            if job.stopped_at is not None:
                data['stopped_at'] = unix_time_millis(job.stopped_at)

            return data
Exemple #3
0
 def validate_token(self, token):
     with self.database.session() as session:
         token = session.query(Token).filter(Token.token == token).first()
         if token is None:
             return False
         if unix_time_millis(token.updated_at) < \
                 unix_time_millis(datetime.datetime.now() - datetime.timedelta(hours=3)):
             return False
     return True
Exemple #4
0
    def get_token(self, username, force=False):
        with self.database.session() as session:
            assignment = session.query(UserAssignment).filter(UserAssignment.username == username).first()
            if assignment.token is None:
                assignment.token = Token()

            if assignment.token.token is None or unix_time_millis(assignment.token.updated_at) < \
                    unix_time_millis(datetime.datetime.now() - datetime.timedelta(hours=3)) or force:
                token = base64.b64encode(hashlib.sha256(str(random.getrandbits(256))).digest(),
                                         random.choice(['rA', 'aZ', 'gQ', 'hH', 'hG', 'aR', 'DD'])).rstrip('==')
                assignment.token.token = token

            token = assignment.token
            session.add(token)
            session.commit()
            return token.token, unix_time_millis(token.updated_at + datetime.timedelta(hours=3))
Exemple #5
0
    def GET(self, task_id=None, job_id=None, page=1):

        if task_id is None:
            tasks = []

            per_page = 20
            offset = (int(page) - 1) * per_page

            with self.database.session() as session:
                task_objects = session.query(Task).join(JobTarget, Task.job_target_id == JobTarget.id)

                if job_id is not None:
                    task_objects = task_objects.filter(JobTarget.job_id == job_id)

                task_objects = task_objects.order_by(Task.id.desc()).limit(per_page).offset(offset)

                for task in task_objects:
                    data = {'id': task.id,
                            'name': task.name,
                            'status': task.status.value,
                            'actions': [],
                            'created_at': unix_time_millis(task.created_at),
                            'updated_at': unix_time_millis(task.updated_at)}

                    for action in task.actions:
                        action_data = {'processor': action.processor}
                        if action.arguments is not None:
                            action_data['arguments'] = action.arguments
                        data['actions'].append(action_data)

                    if task.stopped_at is not None:
                        data['stopped_at'] = unix_time_millis(task.stopped_at)

                    tasks.append(data)

            return {"tasks": tasks}
        else:

            with self.database.session() as session:
                task = session.query(Task).filter(Task.id == task_id).first()

                if task is None:
                    return {}

                data = {'id': task.id,
                        'name': task.name,
                        'status': task.status.value,
                        'actions': [],
                        'created_at': unix_time_millis(task.created_at),
                        'updated_at': unix_time_millis(task.updated_at)}

                for action in task.actions:
                    action_data = {'processor': action.processor}
                    if action.arguments is not None:
                        action_data['arguments'] = action.arguments
                    data['actions'].append(action_data)

                if task.stopped_at is not None:
                    data['stopped_at'] = unix_time_millis(task.stopped_at)

                return data