Skip to content

Commit 8f4be5d

Browse files
author
Manaswini Ragamouni
committed
Read max triggers limit from backend setting
Fetch plugins.alerting.monitor.max_triggers cluster setting instead of using hardcoded MAX_TRIGGERS constant. Falls back to default of 10 if the setting cannot be retrieved. Signed-off-by: Manaswini Ragamouni <ragamanu@amazon.com> Resolves opensearch-project/alerting#468 Signed-off-by: Manaswini Ragamouni <ragamanu@amazon.com>
1 parent 7469f74 commit 8f4be5d

File tree

5 files changed

+28
-10
lines changed

5 files changed

+28
-10
lines changed

.github/workflows/cypress-workflow.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ on:
88
- "**"
99
env:
1010
OPENSEARCH_DASHBOARDS_VERSION: 'main'
11+
OPENSEARCH_VERSION: '3.0.0-SNAPSHOT'
1112
ALERTING_PLUGIN_BRANCH: 'main'
1213
jobs:
1314
tests:
@@ -47,7 +48,7 @@ jobs:
4748
- name: Run Opensearch with plugin
4849
run: |
4950
cd alerting
50-
./gradlew :alerting:run &
51+
./gradlew :alerting:run -Dopensearch.version=${{ env.OPENSEARCH_VERSION }} &
5152
timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9200)" != "200" ]]; do sleep 5; done'
5253
- name: Checkout OpenSearch Dashboards
5354
uses: actions/checkout@v2

public/pages/CreateTrigger/containers/ConfigureTriggers/ConfigureTriggers.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ import TriggerEmptyPrompt from '../../components/TriggerEmptyPrompt';
2020
import { MAX_TRIGGERS } from '../../../MonitorDetails/containers/Triggers/Triggers';
2121
import DefineTrigger from '../DefineTrigger';
2222
import { MONITOR_TYPE, SEARCH_TYPE } from '../../../../utils/constants';
23+
import { MAX_TRIGGERS_SETTING } from '../../../utils/constants';
2324
import { getPathsPerDataType } from '../../../CreateMonitor/containers/DefineMonitor/utils/mappings';
2425
import monitorToFormik from '../../../CreateMonitor/containers/CreateMonitor/utils/monitorToFormik';
2526
import { buildRequest } from '../../../CreateMonitor/containers/DefineMonitor/utils/searchRequests';
26-
import { backendErrorNotification, inputLimitText } from '../../../../utils/helpers';
27+
import { backendErrorNotification, inputLimitText, getClusterSetting } from '../../../../utils/helpers';
2728
import DefineDocumentLevelTrigger from '../DefineDocumentLevelTrigger/DefineDocumentLevelTrigger';
2829
import {
2930
buildClusterMetricsRequest,
@@ -51,6 +52,7 @@ class ConfigureTriggers extends React.Component {
5152
triggerEmptyPrompt: this.prepareTriggerEmptyPrompt(),
5253
currentSubmitCount: 0,
5354
accordionsOpen,
55+
maxTriggers: MAX_TRIGGERS,
5456
TriggerContainer: props.flyoutMode
5557
? (props) => <EnhancedAccordion {...props} />
5658
: ({ children }) => <>{children}</>,
@@ -65,6 +67,13 @@ class ConfigureTriggers extends React.Component {
6567

6668
componentDidMount() {
6769
this.monitorSetupByType();
70+
this.fetchMaxTriggers();
71+
}
72+
73+
async fetchMaxTriggers() {
74+
const { httpClient } = this.props;
75+
const maxTriggers = await getClusterSetting(httpClient, MAX_TRIGGERS_SETTING, MAX_TRIGGERS);
76+
this.setState({ maxTriggers: parseInt(maxTriggers, 10) });
6877
}
6978

7079
componentDidUpdate(prevProps) {
@@ -132,7 +141,7 @@ class ConfigureTriggers extends React.Component {
132141
prepareAddTriggerButton = () => {
133142
const { monitorValues, triggerArrayHelpers, triggerValues } = this.props;
134143
const disableAddTriggerButton =
135-
_.get(triggerValues, 'triggerDefinitions', []).length >= MAX_TRIGGERS;
144+
_.get(triggerValues, 'triggerDefinitions', []).length >= this.state.maxTriggers;
136145
return (
137146
<AddTriggerButton
138147
arrayHelpers={triggerArrayHelpers}
@@ -440,7 +449,7 @@ class ConfigureTriggers extends React.Component {
440449
const { ContentPanelStructure } = this.state;
441450
const numOfTriggers = _.get(triggerValues, 'triggerDefinitions', []).length;
442451
const displayAddTriggerButton = numOfTriggers > 0;
443-
const disableAddTriggerButton = numOfTriggers >= MAX_TRIGGERS;
452+
const disableAddTriggerButton = numOfTriggers >= this.state.maxTriggers;
444453
const monitorType = monitorValues.monitor_type;
445454
const isComposite = monitorType === MONITOR_TYPE.COMPOSITE_LEVEL;
446455

@@ -477,7 +486,7 @@ class ConfigureTriggers extends React.Component {
477486
monitorType={monitorType}
478487
/>
479488
<EuiSpacer size={'s'} />
480-
{inputLimitText(numOfTriggers, MAX_TRIGGERS, 'trigger', 'triggers')}
489+
{inputLimitText(numOfTriggers, this.state.maxTriggers, 'trigger', 'triggers')}
481490
</div>
482491
) : null}
483492
</ContentPanelStructure>

public/pages/CreateTrigger/containers/ConfigureTriggers/ConfigureTriggersPpl.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ import AddTriggerButtonPpl from '../../components/AddTriggerButton/AddTriggerBut
1111
import TriggerEmptyPrompt from '../../components/TriggerEmptyPrompt';
1212
import { MAX_TRIGGERS } from '../../../MonitorDetails/containers/Triggers/Triggers';
1313
import monitorToFormik from '../../../CreateMonitor/containers/CreateMonitor/utils/monitorToFormik';
14-
import { backendErrorNotification, inputLimitText } from '../../../../utils/helpers';
14+
import { backendErrorNotification, inputLimitText, getClusterSetting } from '../../../../utils/helpers';
1515
import EnhancedAccordion from '../../../../components/FeatureAnywhereContextMenu/EnhancedAccordion';
1616
import { getDataSourceQueryObj } from '../../../../../public/pages/utils/helpers';
17+
import { MAX_TRIGGERS_SETTING } from '../../../utils/constants';
1718
import DefineTriggerPpl from '../DefineTrigger/DefineTriggerPpl';
1819
import {
1920
addTimeFilterToQuery,
@@ -133,6 +134,7 @@ class ConfigureTriggersPpl extends React.Component {
133134
executeResponse: null,
134135
previewError: null,
135136
accordionsOpen,
137+
maxTriggers: MAX_TRIGGERS,
136138
TriggerContainer: props.flyoutMode
137139
? (p) => <EnhancedAccordion {...p} />
138140
: ({ children }) => <>{children}</>,
@@ -142,12 +144,19 @@ class ConfigureTriggersPpl extends React.Component {
142144

143145
componentDidMount() {
144146
this.onRunExecute(this.props.monitorValues);
147+
this.fetchMaxTriggers();
148+
}
149+
150+
async fetchMaxTriggers() {
151+
const { httpClient } = this.props;
152+
const maxTriggers = await getClusterSetting(httpClient, MAX_TRIGGERS_SETTING, MAX_TRIGGERS);
153+
this.setState({ maxTriggers: parseInt(maxTriggers, 10) });
145154
}
146155

147156
prepareAddTriggerButton = () => {
148157
const { monitorValues, triggerArrayHelpers, triggerValues } = this.props;
149158
const disableAddTriggerButton =
150-
_.get(triggerValues, 'triggerDefinitions', []).length >= MAX_TRIGGERS;
159+
_.get(triggerValues, 'triggerDefinitions', []).length >= this.state.maxTriggers;
151160
return (
152161
<AddTriggerButtonPpl arrayHelpers={triggerArrayHelpers} disabled={disableAddTriggerButton} />
153162
);
@@ -363,7 +372,7 @@ class ConfigureTriggersPpl extends React.Component {
363372
{!flyoutMode && hasTriggers && (
364373
<>
365374
<EuiSpacer size="m" />
366-
{inputLimitText(numTriggers, MAX_TRIGGERS, 'trigger', 'triggers')}
375+
{inputLimitText(numTriggers, this.state.maxTriggers, 'trigger', 'triggers')}
367376
</>
368377
)}
369378
</ContentPanelStructure>

public/pages/MonitorDetails/containers/Triggers/TriggersPpl.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import ContentPanel from '../../../../components/ContentPanel';
1212
import { DEFAULT_EMPTY_DATA } from '../../../../utils/constants';
1313
import { formatDuration } from '../../../CreateMonitor/containers/CreateMonitor/utils/pplAlertingHelpers';
1414

15-
const MAX_TRIGGERS = 10;
16-
1715
const formatTriggerMode = (mode) => {
1816
if (!mode) return DEFAULT_EMPTY_DATA;
1917
switch (mode) {

public/pages/utils/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { BehaviorSubject } from 'rxjs';
88
import { DataSourceOption } from "../../../../../src/plugins/data_source_management/public";
99

1010
export const COMMENTS_ENABLED_SETTING = "plugins.alerting.comments_enabled";
11+
export const MAX_TRIGGERS_SETTING = "plugins.alerting.monitor.max_triggers";
1112
const LocalCluster: DataSourceOption = {
1213
label: i18n.translate("dataSource.localCluster", {
1314
defaultMessage: "Local cluster",

0 commit comments

Comments
 (0)