def update_job(self, data: (dict, ExportdJob), request_user: User, event_start=True) -> str: """ Update new ExportdJob Object Args: data: init data request_user: current user, to detect who triggered event event_start: Controls whether an event should be started Returns: Public ID of the ExportdJob in database """ if isinstance(data, dict): update_object = ExportdJob(**data) elif isinstance(data, ExportdJob): update_object = data else: raise ExportdJobManagerUpdateError(f'Could not update job with ID: {data.get_public_id()}') update_object.last_execute_date = datetime.utcnow() ack = self._update( collection=ExportdJob.COLLECTION, public_id=update_object.get_public_id(), data=update_object.to_database() ) if self._event_queue and event_start: event = Event("cmdb.exportd.updated", {"id": update_object.get_public_id(), "active": update_object.scheduling["event"]["active"] and update_object.get_active(), "user_id": request_user.get_public_id()}) self._event_queue.put(event) return ack.acknowledged
def worker(job: ExportdJob, request_user: UserModel): from flask import make_response as make_res from cmdb.exportd.exporter_base import ExportdManagerBase from cmdb.event_management.event import Event try: event = Event( "cmdb.exportd.run_manual", { "id": job.get_public_id(), "user_id": request_user.get_public_id(), "event": 'manuel' }) content = ExportdManagerBase(job, object_manager, log_manager, event).execute( request_user.public_id, request_user.get_display_name(), False) response = make_res(content.data, content.status) response.headers['Content-Type'] = '%s; charset=%s' % ( content.mimetype, content.charset) return response except Exception as err: LOGGER.error(err) return abort(404)
def insert_job(self, data: (ExportdJob, dict)) -> int: """ Insert new ExportdJob Object Args: data: init data Returns: Public ID of the new ExportdJob in database """ if isinstance(data, dict): try: new_object = ExportdJob(**data) except CMDBError as e: raise ExportdJobManagerInsertError(e) elif isinstance(data, ExportdJob): new_object = data try: ack = self.dbm.insert( collection=ExportdJob.COLLECTION, data=new_object.to_database() ) if self._event_queue: event = Event("cmdb.exportd.added", {"id": new_object.get_public_id(), "active": new_object.scheduling["event"]["active"] and new_object.get_active(), "user_id": new_object.get_author_id()}) self._event_queue.put(event) except CMDBError as e: raise ExportdJobManagerInsertError(e) return ack
def add_job(request_user: UserModel): from bson import json_util add_data_dump = json.dumps(request.json) try: new_job_data = json.loads(add_data_dump, object_hook=json_util.object_hook) new_job_data['public_id'] = exportd_manager.get_new_id( ExportdJob.COLLECTION) new_job_data['last_execute_date'] = datetime.utcnow() new_job_data['author_id'] = request_user.get_public_id() new_job_data['author_name'] = request_user.get_display_name() new_job_data['state'] = ExecuteState.SUCCESSFUL.name except TypeError as e: LOGGER.warning(e) abort(400) try: job_instance = ExportdJob(**new_job_data) except CMDBError as e: LOGGER.debug(e) return abort(400) try: ack = exportd_manager.insert_job(job_instance) except ExportdJobManagerInsertError: return abort(500) # Generate new insert log try: log_params = { 'job_id': job_instance.get_public_id(), 'state': True, 'user_id': request_user.get_public_id(), 'user_name': request_user.get_display_name(), 'event': LogAction.CREATE.name, 'message': '', } log_manager.insert_log(action=LogAction.CREATE, log_type=ExportdJobLog.__name__, **log_params) except LogManagerInsertError as err: LOGGER.error(err) resp = make_response(ack) return resp
def update_job(request_user: UserModel): from bson import json_util add_data_dump = json.dumps(request.json) new_job_data = None try: new_job_data = json.loads(add_data_dump, object_hook=json_util.object_hook) except TypeError as e: LOGGER.warning(e) abort(400) try: state = new_job_data["state"] update_job_instance = ExportdJob(**new_job_data) except CMDBError: return abort(400) try: exportd_manager.update_job(update_job_instance, request_user, False) except ExportdJobManagerUpdateError: return abort(500) # Generate new insert log if state not in ExecuteState.RUNNING.name: try: log_params = { 'job_id': update_job_instance.get_public_id(), 'state': True, 'user_id': request_user.get_public_id(), 'user_name': request_user.get_display_name(), 'event': LogAction.EDIT.name, 'message': '', } log_manager.insert_log(action=LogAction.EDIT, log_type=ExportdJobLog.__name__, **log_params) except LogManagerInsertError as err: LOGGER.error(err) resp = make_response(update_job_instance) return resp