All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.lucidchart.piezo.JobHistoryModel.scala Maven / Gradle / Ivy

There is a newer version: 2.3.0
Show newest version
package com.lucidchart.piezo

import org.quartz.JobExecutionContext
import java.sql.Timestamp
import org.slf4j.LoggerFactory
import java.util.{Properties, Date}

case class JobRecord(
name:String,
group:String,
trigger_name:String,
trigger_group:String,
success:Int,
start:Date,
finish:Date
)

class JobHistoryModel(props: Properties) {
  val logger = LoggerFactory.getLogger(this.getClass)
  val connectionProvider = new ConnectionProvider(props)

  def addJob(context: JobExecutionContext, success:Boolean) {
    val connection = connectionProvider.getConnection
    try {
      val prepared = connection.prepareStatement("""INSERT INTO job_history(fire_instance_id, job_name, job_group, trigger_name, trigger_group, success, start, finish) VALUES(?, ?, ?, ?, ?, ?, ?, ?)""")
      prepared.setString(1, context.getFireInstanceId)
      prepared.setString(2, context.getTrigger.getJobKey.getName)
      prepared.setString(3, context.getTrigger.getJobKey.getGroup)
      prepared.setString(4, context.getTrigger.getKey.getName)
      prepared.setString(5, context.getTrigger.getKey.getGroup)
      prepared.setBoolean(6, success)
      prepared.setTimestamp(7, new Timestamp(context.getFireTime.getTime))
      prepared.setTimestamp(8, new Timestamp(context.getFireTime.getTime + context.getJobRunTime))
      prepared.executeUpdate()
    } catch {
      case e:Exception => logger.error("error in recording start of job",e)
    } finally {
      connection.close()
    } //TODO: close statement?
  }

  def deleteJobs(minStart: Long): Int = {
    val connection = connectionProvider.getConnection
    try {
      val prepared = connection.prepareStatement("""DELETE FROM job_history WHERE start < ?""")
      prepared.setTimestamp(1, new Timestamp(minStart))
      prepared.executeUpdate()
    } catch {
      case e:Exception =>
        logger.error("error deleting job histories",e)
        0
    } finally {
      connection.close()
    }
  }

  def getJob(name: String, group: String): List[JobRecord] = {
    val connection = connectionProvider.getConnection

    try {
      val prepared = connection.prepareStatement("""SELECT * FROM job_history WHERE job_name=? AND job_group=? ORDER BY start DESC LIMIT 100""")
      prepared.setString(1, name)
      prepared.setString(2, group)
      val rs = prepared.executeQuery();

      var result = List[JobRecord]()
      while(rs.next()) {
        result :+= new JobRecord(
          rs.getString("job_name"),
          rs.getString("job_group"),
          rs.getString("trigger_name"),
          rs.getString("trigger_group"),
          rs.getInt("success"),
          rs.getTimestamp("start"),
          rs.getTimestamp("finish")
        )
      }
      result
    } catch {
      case e: Exception => logger.error("error in retrieving jobs", e)
      List()
    } finally {
      connection.close()
    }
  }

  def getJobs(): List[JobRecord] = {
    val connection = connectionProvider.getConnection

    try {
      val prepared = connection.prepareStatement("""SELECT * FROM job_history ORDER BY start DESC LIMIT 100""")
      val rs = prepared.executeQuery()

      var result = List[JobRecord]()
      while(rs.next()) {
        result :+= new JobRecord(
          rs.getString("job_name"),
          rs.getString("job_group"),
          rs.getString("trigger_name"),
          rs.getString("trigger_group"),
          rs.getInt("success"),
          rs.getTimestamp("start"),
          rs.getTimestamp("finish")
        )
      }
      result
    } catch {
      case e: Exception => logger.error("error in retrieving jobs", e)
        List()
    } finally {
      connection.close()
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy