Ejemplo n.º 1
0
    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])
Ejemplo n.º 2
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)
Ejemplo n.º 3
0
    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)