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

com.lucidchart.piezo.admin.controllers.TriggerHelper.scala Maven / Gradle / Ivy

The newest version!
package com.lucidchart.piezo.admin.controllers

import com.lucidchart.piezo.{TriggerMonitoringModel, TriggerMonitoringPriority}
import com.lucidchart.piezo.admin.models.TriggerType
import scala.jdk.CollectionConverters._

import org.quartz.TriggerKey
import org.quartz.{CronTrigger, SimpleTrigger}
import org.quartz.impl.matchers.GroupMatcher
import org.quartz.Scheduler
import org.quartz.Trigger
import play.api.libs.json._


import scala.collection.mutable

object TriggerHelper {
  def getTriggersByGroup(scheduler: Scheduler): mutable.Buffer[(String, List[TriggerKey])] = {
    val triggersByGroup =
      for (groupName <- scheduler.getTriggerGroupNames.asScala) yield {
        val triggers: List[TriggerKey] = scheduler.getTriggerKeys(GroupMatcher.triggerGroupEquals(groupName)).asScala.toList
        val sortedTriggers: List[TriggerKey] = triggers.sortBy(triggerKey => triggerKey.getName)
        (groupName, sortedTriggers)
      }
    triggersByGroup.sortBy(groupList => groupList._1)
  }

  def writesTrigger(monitoringModel: TriggerMonitoringModel): Writes[Trigger] = Writes { trigger =>
    val triggerKey = trigger.getKey
    val triggerType = TriggerType(trigger)
    val schedule = triggerType match {
      case TriggerType.Cron => {
        val cronTrigger = trigger.asInstanceOf[CronTrigger]
        Json.obj("cron" ->
          Json.obj(
            "cronExpression" -> cronTrigger.getCronExpression
          )
        )

      }
      case TriggerType.Simple => {
        val simpleTrigger = trigger.asInstanceOf[SimpleTrigger]
        Json.obj(
          "simple" -> Json.obj(
            "repeatInterval" -> simpleTrigger.getRepeatInterval,
            "repeatCount" -> simpleTrigger.getRepeatCount
          )
        )
      }
      case _ => Json.obj()
    }

    val (monitoringPriority, maxSecondsInError, monitoringTeam) = monitoringModel.getTriggerMonitoringRecord(
      trigger.getKey,
    ).map { monitoringRecord =>
      (monitoringRecord.priority, monitoringRecord.maxSecondsInError, monitoringRecord.monitoringTeam)
    }.getOrElse((TriggerMonitoringPriority.Low, 300, None))
    val jobDataMap = trigger.getJobDataMap
    val job = trigger.getJobKey
    Json.obj(
      "triggerType" -> triggerType.toString,
      "jobGroup" -> job.getGroup,
      "jobName" -> job.getName,
      "group" -> triggerKey.getGroup,
      "name" -> triggerKey.getName,
      "description" -> trigger.getDescription,
      "job-data-map" -> JsObject(jobDataMap.getKeys.toSeq.map(key => key -> JsString(jobDataMap.getString(key)))),
      "triggerMonitoringPriority" -> monitoringPriority.name,
      "triggerMaxErrorTime" -> maxSecondsInError,
      "triggerMonitoringTeam" -> monitoringTeam,
    ) ++ schedule
  }

  def writesTriggerSeq(monitoringModel: TriggerMonitoringModel) = Writes.seq(writesTrigger(monitoringModel))
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy