Skip to content

Commit

Permalink
fix: add unit tests. change timezone to UTC
Browse files Browse the repository at this point in the history
Signed-off-by: vikhy-aws <[email protected]>
  • Loading branch information
vikhy-aws committed Jan 6, 2025
1 parent e02770d commit 2baec50
Show file tree
Hide file tree
Showing 2 changed files with 174 additions and 7 deletions.
14 changes: 8 additions & 6 deletions public/pages/CreateTrigger/utils/helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ export const getTriggerContext = (executeResponse, monitor, values, triggerIndex
let trigger = formikToTrigger(values, _.get(monitor, 'ui_metadata', {}));
if (_.isArray(trigger) && triggerIndex >= 0) trigger = trigger[triggerIndex];

console.log("Values: ", JSON.stringify(values));

return {
// Backend only supports, UTC timezone.
// Don't use user's local timezone.
periodStart: moment.utc(_.get(executeResponse, 'period_start', Date.now())).format(),
periodEnd: moment.utc(_.get(executeResponse, 'period_end', Date.now())).format(),
periodStart: moment.utc(_.get(executeResponse, 'period_start', Date.now())).tz(getTimeZone()).format(),
periodEnd: moment.utc(_.get(executeResponse, 'period_end', Date.now())).tz(getTimeZone()).format(),
results: [_.get(executeResponse, 'input_results.results[0]')].filter((result) => !!result),
trigger: trigger,
alert: null,
Expand Down Expand Up @@ -124,6 +124,8 @@ export const conditionToExpressions = (condition = '', monitors) => {
};

export function getTimeZone() {
const detectedTimeZone = getUISettings().get('dateFormat:tz', 'Browser');
return detectedTimeZone === 'Browser' ? (moment.tz.guess() || moment.format('Z')) : detectedTimeZone;
// TODO: Include support to configure timezones rather than using the default UTC as requested here - https://github.com/opensearch-project/alerting/issues/1744
// const detectedTimeZone = getUISettings().get('dateFormat:tz', 'Browser');
// return detectedTimeZone === 'Browser' ? (moment.tz.guess() || moment.format('Z')) : detectedTimeZone;
return "UTC";
}
167 changes: 166 additions & 1 deletion public/pages/CreateTrigger/utils/helper.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

import _ from 'lodash';
import { getDefaultScript } from './helper';
import { getDefaultScript, getTriggerContext, getTimeZone } from './helper';
import { MONITOR_TYPE } from '../../../utils/constants';
import {
FORMIK_INITIAL_DOC_LEVEL_SCRIPT,
Expand All @@ -14,6 +14,8 @@ import {
API_TYPES,
DEFAULT_CLUSTER_METRICS_SCRIPT,
} from '../../CreateMonitor/components/ClusterMetricsMonitor/utils/clusterMetricsMonitorConstants';
import moment from 'moment-timezone';
import { formikToTrigger } from '../containers/CreateTrigger/utils/formikToTrigger';

describe('CreateTrigger/utils/helper', () => {
describe('getDefaultScript', () => {
Expand Down Expand Up @@ -81,4 +83,167 @@ describe('CreateTrigger/utils/helper', () => {
});
});
});

describe('getTriggerContext', () => {
test("Should return a proper trigger context", () => {
const mockMonitor = {
"name": "Test",
"type": "monitor",
"monitor_type": "query_level_monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 1,
"unit": "MINUTES"
}
},
"inputs": [
{
"search": {
"indices": [
"opensearch_dashboards_sample_data_ecommerce"
],
"query": {
"size": 0,
"aggregations": {},
"query": {
"bool": {
"filter": [
{
"range": {
"order_date": {
"gte": "{{period_end}}||-1h",
"lte": "{{period_end}}",
"format": "epoch_millis"
}
}
}
]
}
}
}
}
}
],
"triggers": [],
"ui_metadata": {
"schedule": {
"timezone": null,
"frequency": "interval",
"period": {
"interval": 1,
"unit": "MINUTES"
},
"daily": 0,
"weekly": {
"mon": false,
"tue": false,
"wed": false,
"thur": false,
"fri": false,
"sat": false,
"sun": false
},
"monthly": {
"type": "day",
"day": 1
},
"cronExpression": "0 */1 * * *"
},
"monitor_type": "query_level_monitor",
"search": {
"searchType": "graph",
"timeField": "order_date",
"aggregations": [],
"groupBy": [],
"bucketValue": 1,
"bucketUnitOfTime": "h",
"filters": []
}
}
};
const mockInputResults = {
results: [
{
"_shards": {
"total": 1,
"failed": 0,
"successful": 1,
"skipped": 0
},
"hits": {
"hits": [],
"total": {
"value": 33,
"relation": "eq"
},
"max_score": null
},
"took": 3,
"timed_out": false,
"aggregations": {
"over": {
"buckets": [
{
"key_as_string": "2025-01-06T08:00:00.000-08:00",
"doc_count": 8,
"key": 1736179200000
},
{
"key_as_string": "2025-01-06T09:00:00.000-08:00",
"doc_count": 4,
"key": 1736182800000
},
{
"key_as_string": "2025-01-06T10:00:00.000-08:00",
"doc_count": 8,
"key": 1736186400000
},
{
"key_as_string": "2025-01-06T11:00:00.000-08:00",
"doc_count": 7,
"key": 1736190000000
},
{
"key_as_string": "2025-01-06T12:00:00.000-08:00",
"doc_count": 5,
"key": 1736193600000
},
{
"key_as_string": "2025-01-06T13:00:00.000-08:00",
"doc_count": 1,
"key": 1736197200000
}
]
}
}
}
]
};
const mockExecuteResponse = {
period_start: "2025-01-06T21:11:41Z",
period_end: "2025-01-06T21:12:41Z",
input_results: mockInputResults,
};
const mockValues = {
name: "Test",
severity: "1",
condition: {
script: "ctx.results[0].hits.total.value > 10000"
}
};
const mockTrigger = formikToTrigger(mockValues, _.get(mockMonitor, 'ui_metadata', {}));
if (_.isArray(mockTrigger) && triggerIndex >= 0) mockTrigger = mockTrigger[triggerIndex];
const result = getTriggerContext(mockExecuteResponse, mockMonitor, mockValues);
expect(result).toEqual({
periodStart: moment.utc(_.get(mockExecuteResponse, 'period_start', Date.now())).tz(getTimeZone()).format(),
periodEnd: moment.utc(_.get(mockExecuteResponse, 'period_end', Date.now())).tz(getTimeZone()).format(),
results: [_.get(mockExecuteResponse, 'input_results.results[0]')].filter((result) => !!result),
trigger: mockTrigger,
alert: null,
error: null,
monitor: mockMonitor
});
});
});
});

0 comments on commit 2baec50

Please sign in to comment.