Merge "Add jobs api for bp add-mysql-support-for-freezer"
This commit is contained in:
commit
650a99ce04
|
@ -515,6 +515,215 @@ def replace_action(user_id, action_id, doc, project_id):
|
|||
return action_id
|
||||
|
||||
|
||||
def delete_job(user_id, job_id, project_id):
|
||||
session = get_db_session()
|
||||
query = model_query(session, models.Job, project_id=project_id)
|
||||
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
|
||||
result = query.all()
|
||||
if 1 == len(result):
|
||||
try:
|
||||
result[0].delete(session=session)
|
||||
except Exception as e:
|
||||
session.close()
|
||||
raise freezer_api_exc.StorageEngineError(
|
||||
message='mysql operation failed {0}'.format(e))
|
||||
LOG.info('Job delete, job_id: {0} deleted'.format(job_id))
|
||||
else:
|
||||
LOG.info('Action delete, job_id: {0} not found'.
|
||||
format(job_id))
|
||||
session.close()
|
||||
return job_id
|
||||
|
||||
|
||||
def add_job(user_id, doc, project_id):
|
||||
job_doc = utils.JobDoc.create(doc, project_id, user_id)
|
||||
|
||||
job_id = job_doc.get('job_id')
|
||||
existing = get_job(project_id=project_id, user_id=user_id,
|
||||
job_id=job_id)
|
||||
if existing:
|
||||
raise freezer_api_exc.\
|
||||
DocumentExists(message='Job already registered with ID {0}'.
|
||||
format(job_id))
|
||||
|
||||
job = models.Job()
|
||||
jobvalue = {}
|
||||
jobvalue['id'] = job_id
|
||||
jobvalue['project_id'] = project_id
|
||||
jobvalue['user_id'] = user_id
|
||||
jobvalue['schedule'] = json_utils.\
|
||||
json_encode(job_doc.pop('job_schedule', ''))
|
||||
jobvalue['client_id'] = job_doc.get('client_id', '')
|
||||
jobvalue['session_id'] = job_doc.pop('session_id', '')
|
||||
jobvalue['session_tag'] = job_doc.pop('session_tag', 0)
|
||||
jobvalue['description'] = job_doc.pop('description', '')
|
||||
jobvalue['job_actions'] = json_utils.\
|
||||
json_encode(job_doc.pop('job_actions', ''))
|
||||
job.update(jobvalue)
|
||||
|
||||
session = get_db_session()
|
||||
with session.begin():
|
||||
try:
|
||||
job.save(session=session)
|
||||
except Exception as e:
|
||||
session.close()
|
||||
raise freezer_api_exc.StorageEngineError(
|
||||
message='mysql operation failed {0}'.format(e))
|
||||
|
||||
LOG.info('Job registered, job_id: {0}'.format(job_id))
|
||||
|
||||
return job_id
|
||||
|
||||
|
||||
def get_job(project_id, user_id, job_id):
|
||||
session = get_db_session()
|
||||
with session.begin():
|
||||
try:
|
||||
query = model_query(session, models.Job, project_id=project_id)
|
||||
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
|
||||
result = query.all()
|
||||
except Exception as e:
|
||||
raise freezer_api_exc.StorageEngineError(
|
||||
message='mysql operation failed {0}'.format(e))
|
||||
|
||||
session.close()
|
||||
values = {}
|
||||
if 1 == len(result):
|
||||
values['job_id'] = result[0].get('id')
|
||||
values['project_id'] = result[0].get('project_id')
|
||||
values['user_id'] = result[0].get('user_id')
|
||||
values['job_schedule'] = json_utils.\
|
||||
json_decode(result[0].get('schedule'))
|
||||
values['client_id'] = result[0].get('client_id')
|
||||
values['session_id'] = result[0].get('session_id')
|
||||
values['session_tag'] = result[0].get('session_tag')
|
||||
values['description'] = result[0].get('description')
|
||||
values['job_actions'] = json_utils.\
|
||||
json_decode(result[0].get('job_actions'))
|
||||
return values
|
||||
|
||||
|
||||
def search_job(project_id, user_id, offset=0,
|
||||
limit=10, search=None):
|
||||
|
||||
search = search or {}
|
||||
jobs = []
|
||||
session = get_db_session()
|
||||
query = model_query(session, models.Job, project_id=project_id)
|
||||
query = query.filter_by(user_id=user_id)
|
||||
|
||||
result = query.all()
|
||||
|
||||
for job in result:
|
||||
jobmap = {}
|
||||
jobmap['job_id'] = job.get('id')
|
||||
jobmap['project_id'] = job.get('project_id')
|
||||
jobmap['user_id'] = job.get('user_id')
|
||||
jobmap['job_schedule'] = json_utils.json_decode(job.get('schedule'))
|
||||
jobmap['client_id'] = job.get('client_id')
|
||||
jobmap['session_id'] = job.get('session_id')
|
||||
jobmap['session_tag'] = job.get('session_tag')
|
||||
jobmap['description'] = job.get('description')
|
||||
jobmap['job_actions'] = json_utils.json_decode(
|
||||
job.get('job_actions'))
|
||||
|
||||
jobs.append(jobmap)
|
||||
|
||||
session.close()
|
||||
return jobs
|
||||
|
||||
|
||||
def update_job(user_id, job_id, patch_doc, project_id):
|
||||
valid_patch = utils.JobDoc.create_patch(patch_doc)
|
||||
|
||||
values = {}
|
||||
for key in valid_patch.keys():
|
||||
if key == 'job_schedule':
|
||||
values['schedule'] = json_utils.\
|
||||
json_encode(valid_patch.get(key, None))
|
||||
elif key == 'job_actions':
|
||||
values[key] = json_utils.json_encode(valid_patch.get(key, None))
|
||||
else:
|
||||
values[key] = valid_patch.get(key, None)
|
||||
|
||||
session = get_db_session()
|
||||
with session.begin():
|
||||
try:
|
||||
query = model_query(session, models.Job, project_id=project_id)
|
||||
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
|
||||
result = query.update(values)
|
||||
except Exception as e:
|
||||
session.close()
|
||||
raise freezer_api_exc.StorageEngineError(
|
||||
message='mysql operation failed {0}'.format(e))
|
||||
|
||||
session.close()
|
||||
|
||||
if not result:
|
||||
raise freezer_api_exc.DocumentNotFound(
|
||||
message='Job not registered with ID'
|
||||
' {0}'.format(job_id))
|
||||
else:
|
||||
LOG.info('job updated, job_id: {0}'.format(job_id))
|
||||
return 0
|
||||
|
||||
|
||||
def replace_job(user_id, job_id, doc, project_id):
|
||||
|
||||
valid_doc = utils.JobDoc.update(doc, user_id, job_id, project_id)
|
||||
values = {}
|
||||
valuesnew = {}
|
||||
bCreate = False
|
||||
|
||||
values['id'] = job_id
|
||||
values['project_id'] = project_id
|
||||
values['user_id'] = user_id
|
||||
values['schedule'] = json_utils.\
|
||||
json_encode(valid_doc.pop('job_schedule', None))
|
||||
values['client_id'] = valid_doc.get('client_id', None)
|
||||
values['session_id'] = valid_doc.pop('session_id', None)
|
||||
values['session_tag'] = valid_doc.pop('session_tag', None)
|
||||
values['description'] = valid_doc.pop('description', None)
|
||||
values['job_actions'] = json_utils.\
|
||||
json_encode(valid_doc.pop('job_actions', None))
|
||||
|
||||
for key in values:
|
||||
if values[key] is not None:
|
||||
valuesnew[key] = values[key]
|
||||
|
||||
session = get_db_session()
|
||||
with session.begin():
|
||||
try:
|
||||
query = model_query(session, models.Job, project_id=project_id)
|
||||
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
|
||||
result = query.update(valuesnew)
|
||||
if not result:
|
||||
bCreate = True
|
||||
except Exception as e:
|
||||
session.close()
|
||||
raise freezer_api_exc.StorageEngineError(
|
||||
message='mysql operation failed {0}'.format(e))
|
||||
|
||||
session.close()
|
||||
|
||||
if bCreate:
|
||||
job = models.Job()
|
||||
job.update(valuesnew)
|
||||
session = get_db_session()
|
||||
with session.begin():
|
||||
try:
|
||||
job.save(session=session)
|
||||
except Exception as e:
|
||||
session.close()
|
||||
raise freezer_api_exc.\
|
||||
StorageEngineError(message='mysql operation failed {0}'.
|
||||
format(e))
|
||||
session.close()
|
||||
|
||||
LOG.info('job replaced, job_id: {0}'.format(job_id))
|
||||
return job_id
|
||||
|
||||
|
||||
def get_backup(project_id, user_id, backup_id):
|
||||
session = get_db_session()
|
||||
with session.begin():
|
||||
|
|
Loading…
Reference in New Issue