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}
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
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
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))
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