Skip to content

Commit 9a1c465

Browse files
committed
refactor(target,operators): renamed Target into TargetOperators and associate all possible operators for the given target
1 parent 6516ff0 commit 9a1c465

File tree

3 files changed

+19
-18
lines changed

3 files changed

+19
-18
lines changed

app/models/AlertRepository.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ object AlertRepository {
119119
val operatorConfiguration = (triggerCreate.operator - "name").toString()
120120

121121
// Find which target corresponds to the given target value, if no target is found, an exception is raised and the transaction rolled back
122-
val targetModel = Target.findTargetTypeForTargetValue(triggerCreate.target, possibleTargets).ensuring(_.isDefined, s"Invalid target value ${triggerCreate.target}").get
122+
val targetModel = TargetOperators.findTargetTypeForTargetValue(triggerCreate.target, possibleTargets).ensuring(_.isDefined, s"Invalid target value ${triggerCreate.target}").get
123123

124124
SQL"""
125125
INSERT INTO trigger (trigger_id, operator_id, alert_id, target_id, target_value, operator_configuration, "createdAt", "updatedAt")

app/models/Target.scala renamed to app/models/TargetOperators.scala

+10-9
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,25 @@ package models
33
import play.api.libs.json.{Format, Json}
44

55
/**
6-
* Represents a target-operator pair, for example "data.foo" with operator "threshold_min"
6+
* Represents a target and the operators that can be applied to it,
7+
* for example "data.foo" with operators "equal", "threshold_min", "threshold_max", etc.
78
* @param target Target data or metadata field (e.g. "data.foo")
8-
* @param operator Associated operator
9+
* @param operators Associated operators
910
*/
10-
case class Target(target: String, operator: OperatorModel)
11+
case class TargetOperators(target: String, operators: Seq[OperatorModel])
1112

12-
object Target {
13-
implicit val jsonFormat: Format[Target] = Json.format[Target]
13+
object TargetOperators {
14+
implicit val jsonFormat: Format[TargetOperators] = Json.format[TargetOperators]
1415

1516
/**
16-
* Shortcut for calling Target(Target.substituteWildcard(..., ...), operator)
17+
* Shortcut for calling Target(Target.substituteWildcard(..., ...), operators)
1718
* @param wildcardTargetId
1819
* @param targetField
19-
* @param operator
20+
* @param operators
2021
* @return
2122
*/
22-
def withWildcardTargetId(wildcardTargetId: String, targetField: String, operator: OperatorModel): Target = {
23-
Target(Target.substituteWildcard(wildcardTargetId, targetField), operator)
23+
def withWildcardTargetId(wildcardTargetId: String, targetField: String, operators: Seq[OperatorModel]): TargetOperators = {
24+
TargetOperators(TargetOperators.substituteWildcard(wildcardTargetId, targetField), operators)
2425
}
2526

2627
def findTargetTypeForTargetValue(targetValue: String, targetTypes: Seq[TargetModel]): Option[TargetModel] = {

app/models/TargetRepository.scala

+8-8
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ object TargetRepository {
1515
* @param dataFields Data fields (e.g. "foo", "bar")
1616
* @return
1717
*/
18-
def getByTargetFields(dataFields: Seq[String]): Seq[Target] = DB.withConnection {
18+
def getByTargetFields(dataFields: Seq[String]): Seq[TargetOperators] = DB.withConnection {
1919
implicit connection =>
20-
getTargetsAndOperators() map {
20+
getTargetsAndOperators().toSeq map {
2121
// If the target is a wildcard, associate that target for all given dataFields
22-
case (TargetModel(target_id, true), operator) =>
23-
dataFields.map(dataField => Target.withWildcardTargetId(target_id, dataField, operator))
22+
case (TargetModel(target_id, true), operators) =>
23+
dataFields.map(dataField => TargetOperators.withWildcardTargetId(target_id, dataField, operators))
2424

2525
// If the target is not a wildcard (e.g. "data"), use it as-is
26-
case (TargetModel(target_id, false), operator) =>
27-
Seq(Target(target_id, operator))
26+
case (TargetModel(target_id, false), operators) =>
27+
Seq(TargetOperators(target_id, operators))
2828
} flatten
2929
}
3030

@@ -37,11 +37,11 @@ object TargetRepository {
3737
* @param connection SQL connection
3838
* @return
3939
*/
40-
def getTargetsAndOperators()(implicit connection: Connection): Seq[(TargetModel, OperatorModel)] = {
40+
def getTargetsAndOperators()(implicit connection: Connection): Map[TargetModel, Seq[OperatorModel]] = {
4141
SQL"""
4242
SELECT * FROM target
4343
JOIN operator_target USING(target_id)
4444
JOIN operator USING(operator_id)
45-
""" as(((TargetModel.simple ~ OperatorModel.simple) map flatten) *)
45+
""" as(((TargetModel.simple ~ OperatorModel.simple) map flatten) *) groupBy(_._1) mapValues(_.unzip._2)
4646
}
4747
}

0 commit comments

Comments
 (0)