Skip to content

Commit

Permalink
Add missing ctx variables
Browse files Browse the repository at this point in the history
- Issue opensearch-project/alerting#200

Signed-off-by: Petar Partlov <p.partlov@paysend.com>
  • Loading branch information
Petar Partlov committed Nov 10, 2022
1 parent 5fd25b0 commit 7cba7ae
Show file tree
Hide file tree
Showing 10 changed files with 94 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,11 @@ data class BucketLevelTrigger(
NAME_FIELD to name,
SEVERITY_FIELD to severity,
ACTIONS_FIELD to actions.map { it.asTemplateArg() },
PARENT_BUCKET_PATH to getParentBucketPath()
PARENT_BUCKET_PATH to getParentBucketPath(),
DocumentLevelTrigger.CONDITION_FIELD to mapOf<String, Any>(
"$SCRIPT_FIELD.$SOURCE_FIELD" to bucketSelector.script.idOrCode,
"$SCRIPT_FIELD.$LANG_FIELD" to bucketSelector.script.lang
)
)
}

Expand All @@ -81,6 +85,9 @@ data class BucketLevelTrigger(
const val BUCKET_LEVEL_TRIGGER_FIELD = "bucket_level_trigger"
const val CONDITION_FIELD = "condition"
const val PARENT_BUCKET_PATH = "parentBucketPath"
const val SCRIPT_FIELD = "script"
const val SOURCE_FIELD = "source"
const val LANG_FIELD = "lang"

val XCONTENT_REGISTRY = NamedXContentRegistry.Entry(
Trigger::class.java, ParseField(BUCKET_LEVEL_TRIGGER_FIELD),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ data class DocLevelMonitorInput(
sin.readList(::DocLevelQuery) // docLevelQueries
)

fun asTemplateArg(): Map<String, Any?> {
override fun asTemplateArg(): Map<String, Any> {
return mapOf(
DESCRIPTION_FIELD to description,
INDICES_FIELD to indices,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,11 @@ data class DocumentLevelTrigger(
ID_FIELD to id,
NAME_FIELD to name,
SEVERITY_FIELD to severity,
ACTIONS_FIELD to actions.map { it.asTemplateArg() }
ACTIONS_FIELD to actions.map { it.asTemplateArg() },
CONDITION_FIELD to mapOf<String, Any>(
"$SCRIPT_FIELD.$SOURCE_FIELD" to condition.idOrCode,
"$SCRIPT_FIELD.$LANG_FIELD" to condition.lang
)
)
}

Expand All @@ -78,6 +82,8 @@ data class DocumentLevelTrigger(
const val CONDITION_FIELD = "condition"
const val SCRIPT_FIELD = "script"
const val QUERY_IDS_FIELD = "query_ids"
const val SOURCE_FIELD = "source"
const val LANG_FIELD = "lang"

val XCONTENT_REGISTRY = NamedXContentRegistry.Entry(
Trigger::class.java, ParseField(DOCUMENT_LEVEL_TRIGGER_FIELD),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,7 @@ interface Input : BaseModel {
}

fun name(): String

/** Returns a representation of the schedule suitable for passing into painless and mustache scripts. */
fun asTemplateArg(): Map<String, Any> = emptyMap()
}
14 changes: 12 additions & 2 deletions src/main/kotlin/org/opensearch/commons/alerting/model/Monitor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,18 @@ data class Monitor(
}

/** Returns a representation of the monitor suitable for passing into painless and mustache scripts. */
fun asTemplateArg(): Map<String, Any> {
return mapOf(_ID to id, _VERSION to version, NAME_FIELD to name, ENABLED_FIELD to enabled)
fun asTemplateArg(): Map<String, Any?> {
return mapOf(
_ID to id,
_VERSION to version,
NAME_FIELD to name,
ENABLED_FIELD to enabled,
MONITOR_TYPE_FIELD to monitorType.toString(),
ENABLED_TIME_FIELD to enabledTime?.toEpochMilli(),
LAST_UPDATE_TIME_FIELD to lastUpdateTime.toEpochMilli(),
SCHEDULE_FIELD to schedule.asTemplateArg(),
INPUTS_FIELD to inputs.map { it.asTemplateArg() }
)
}

fun toXContentWithUser(builder: XContentBuilder, params: ToXContent.Params): XContentBuilder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,11 @@ data class QueryLevelTrigger(
fun asTemplateArg(): Map<String, Any> {
return mapOf(
ID_FIELD to id, NAME_FIELD to name, SEVERITY_FIELD to severity,
ACTIONS_FIELD to actions.map { it.asTemplateArg() }
ACTIONS_FIELD to actions.map { it.asTemplateArg() },
DocumentLevelTrigger.CONDITION_FIELD to mapOf<String, Any>(
"$SCRIPT_FIELD.$SOURCE_FIELD" to condition.idOrCode,
"$SCRIPT_FIELD.$LANG_FIELD" to condition.lang
)
)
}

Expand All @@ -75,6 +79,9 @@ data class QueryLevelTrigger(
const val QUERY_LEVEL_TRIGGER_FIELD = "query_level_trigger"
const val CONDITION_FIELD = "condition"
const val SCRIPT_FIELD = "script"
const val SOURCE_FIELD = "source"
const val LANG_FIELD = "lang"


val XCONTENT_REGISTRY = NamedXContentRegistry.Entry(
Trigger::class.java, ParseField(QUERY_LEVEL_TRIGGER_FIELD),
Expand Down
15 changes: 15 additions & 0 deletions src/main/kotlin/org/opensearch/commons/alerting/model/Schedule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ sealed class Schedule : BaseModel {
abstract fun getPeriodEndingAt(endTime: Instant?): Pair<Instant, Instant>

abstract fun runningOnTime(lastExecutionTime: Instant?): Boolean

/** Returns a representation of the schedule suitable for passing into painless and mustache scripts. */
abstract fun asTemplateArg(): Map<String, Any>
}

/**
Expand Down Expand Up @@ -254,6 +257,12 @@ data class CronSchedule(
out.writeString(expression)
out.writeZoneId(timezone)
}

override fun asTemplateArg(): Map<String, Any> =
mapOf(
"$CRON_FIELD.$EXPRESSION_FIELD" to expression,
"$CRON_FIELD.$TIMEZONE_FIELD" to timezone.toString()
)
}

data class IntervalSchedule(
Expand Down Expand Up @@ -351,4 +360,10 @@ data class IntervalSchedule(
out.writeInt(interval)
out.writeEnum(unit)
}

override fun asTemplateArg(): Map<String, Any> =
mapOf(
"$PERIOD_FIELD.$INTERVAL_FIELD" to interval,
"$PERIOD_FIELD.$UNIT_FIELD" to unit.toString()
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,10 @@ data class SearchInput(val indices: List<String>, val query: SearchSourceBuilder
return SearchInput(sin)
}
}

override fun asTemplateArg(): Map<String, Any> =
mapOf(
"$SEARCH_FIELD.$INDICES_FIELD" to indices,
"$SEARCH_FIELD.$QUERY_FIELD" to query.toString()
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,11 @@ data class Action(
}

fun asTemplateArg(): Map<String, Any> {
return mapOf(NAME_FIELD to name)
return mapOf(
ID_FIELD to id,
NAME_FIELD to name,
DESTINATION_ID_FIELD to destinationId
)
}

@Throws(IOException::class)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.opensearch.commons.alerting.model

import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.opensearch.commons.alerting.randomQueryLevelMonitor
import org.opensearch.commons.alerting.util.IndexUtils

class MonitorsTest {

@Test
fun `test monitor asTemplateArgs`() {
val monitor = randomQueryLevelMonitor()

val templateArgs = monitor.asTemplateArg()

assertEquals(monitor.id, templateArgs[IndexUtils._ID], "Template arg field 'id' doesn't match")
assertEquals(
monitor.version, templateArgs[IndexUtils._VERSION], "Template arg field 'version' doesn't match"
)
assertEquals(monitor.name, templateArgs[Monitor.NAME_FIELD], "Template arg field 'name' doesn't match")
assertEquals(
monitor.enabled, templateArgs[Monitor.ENABLED_FIELD], "Template arg field 'enabled' doesn't match"
)
assertEquals(
monitor.monitorType.toString(), templateArgs[Monitor.MONITOR_TYPE_FIELD],
"Template arg field 'monitoryType' doesn't match"
)
}
}

0 comments on commit 7cba7ae

Please sign in to comment.