def ReadCronJobRun(self, job_id, run_id, cursor=None): """Reads a single cron job run from the db.""" query = ("SELECT run, UNIX_TIMESTAMP(write_time) FROM cron_job_runs " "WHERE job_id = %s AND run_id = %s") num_runs = cursor.execute( query, [job_id, db_utils.CronJobRunIDToInt(run_id)]) if num_runs == 0: raise db.UnknownCronJobRunError( "Run with job id %s and run id %s not found." % (job_id, run_id)) return self._CronJobRunFromRow(cursor.fetchall()[0])
def WriteCronJobRun(self, run_object, cursor=None): """Stores a cron job run object in the database.""" query = ("INSERT INTO cron_job_runs " "(job_id, run_id, write_time, run) " "VALUES (%s, %s, FROM_UNIXTIME(%s), %s) " "ON DUPLICATE KEY UPDATE " "run=VALUES(run), write_time=VALUES(write_time)") write_time_str = mysql_utils.RDFDatetimeToTimestamp( rdfvalue.RDFDatetime.Now()) try: cursor.execute(query, [ run_object.cron_job_id, db_utils.CronJobRunIDToInt(run_object.run_id), write_time_str, run_object.SerializeToBytes(), ]) except MySQLdb.IntegrityError as e: raise db.UnknownCronJobError("CronJob with id %s not found." % run_object.cron_job_id, cause=e)
def UpdateCronJob(self, cronjob_id, last_run_status=db.Database.unchanged, last_run_time=db.Database.unchanged, current_run_id=db.Database.unchanged, state=db.Database.unchanged, forced_run_requested=db.Database.unchanged, cursor=None): """Updates run information for an existing cron job.""" updates = [] args = [] if last_run_status != db.Database.unchanged: updates.append("last_run_status=%s") args.append(int(last_run_status)) if last_run_time != db.Database.unchanged: updates.append("last_run_time=FROM_UNIXTIME(%s)") args.append(mysql_utils.RDFDatetimeToTimestamp(last_run_time)) if current_run_id != db.Database.unchanged: updates.append("current_run_id=%s") args.append(db_utils.CronJobRunIDToInt(current_run_id)) if state != db.Database.unchanged: updates.append("state=%s") args.append(state.SerializeToBytes()) if forced_run_requested != db.Database.unchanged: updates.append("forced_run_requested=%s") args.append(forced_run_requested) if not updates: return query = "UPDATE cron_jobs SET " query += ", ".join(updates) query += " WHERE job_id=%s" res = cursor.execute(query, args + [cronjob_id]) if res != 1: raise db.UnknownCronJobError("CronJob with id %s not found." % cronjob_id)