diff --git a/src/main/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequest.kt b/src/main/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequest.kt index 08ddaa3a..cd5e6230 100644 --- a/src/main/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequest.kt +++ b/src/main/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequest.kt @@ -65,7 +65,12 @@ class IndexMonitorRequest : ActionRequest { private fun hasDocLeveMonitorInput() = monitor.inputs.isNotEmpty() && monitor.inputs[0] is DocLevelMonitorInput private fun isDocLevelMonitor() = - monitor.monitorType.isNotBlank() && Monitor.MonitorType.valueOf(this.monitor.monitorType.uppercase(Locale.ROOT)) == Monitor.MonitorType.DOC_LEVEL_MONITOR + monitor.monitorType.isNotBlank() && isMonitorOfStandardType(monitor.monitorType) && Monitor.MonitorType.valueOf(this.monitor.monitorType.uppercase(Locale.ROOT)) == Monitor.MonitorType.DOC_LEVEL_MONITOR + + private fun isMonitorOfStandardType(monitorType: String): Boolean { + val standardMonitorTypes = Monitor.MonitorType.values().map { it.value.uppercase(Locale.ROOT) }.toSet() + return standardMonitorTypes.contains(monitorType.uppercase(Locale.ROOT)) + } @Throws(IOException::class) override fun writeTo(out: StreamOutput) { diff --git a/src/test/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequestTests.kt b/src/test/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequestTests.kt index 5caf2f60..f3f54e10 100644 --- a/src/test/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequestTests.kt +++ b/src/test/kotlin/org/opensearch/commons/alerting/action/IndexMonitorRequestTests.kt @@ -161,6 +161,25 @@ class IndexMonitorRequestTests { ) } + @Test + fun `test remote monitor with wildcard index pattern`() { + val monitor = randomDocumentLevelMonitor().copy( + monitorType = "ti_doc_level_monitor", + inputs = listOf(DocLevelMonitorInput(indices = listOf("valid, test*", "test*"), queries = emptyList())) + ) + val req = IndexMonitorRequest( + "1234", + 1L, + 2L, + WriteRequest.RefreshPolicy.IMMEDIATE, + RestRequest.Method.POST, + monitor + ) + + val validationException = req.validate() + Assertions.assertNull(validationException) + } + @Test fun `test doc level monitor with regex index pattern`() { val monitor = randomDocumentLevelMonitor().copy(