Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ui): TE-2363 allow user to opt in to be notified for historical anomalies when creating a subscription #1476

Merged
merged 3 commits into from
Jul 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright 2024 StarTree Inc
*
* Licensed under the StarTree Community License (the "License"); you may not use
* this file except in compliance with the License. You may obtain a copy of the
* License at http://www.startree.ai/legal/startree-community-license
*
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OF ANY KIND,
* either express or implied.
*
* See the License for the specific language governing permissions and limitations under
* the License.
*/
/*
There is a component similar to this but that is scoped to alert-wizard-v2 component.
Since this is a general purpose component we should shift that to here eventually.
Info icon should always be sitting a bit on the top side,
and should not be aligned with the rest of the element,
which is what is happening with the existing component.
*/
import React, { FunctionComponent } from "react";
import { InfoLabelProps } from "./info-label.interfaces";
import { Grid, Tooltip, Typography } from "@material-ui/core";
import InfoIconOutlined from "@material-ui/icons/InfoOutlined";

export const InfoLabel: FunctionComponent<InfoLabelProps> = ({
label,
tooltipText = "",
}) => {
Comment on lines +27 to +30

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should have similar component already?
how are we showing tooltips now?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have commented about this in top of this file

return (
<Grid container alignItems="center">
<Grid item lg={12} md={12} sm={12} xs={12}>
<Typography variant="body2">
{label}
{tooltipText && (
<Tooltip
arrow
interactive
placement="top"
title={
<Typography variant="caption">
{tooltipText}
</Typography>
}
>
<InfoIconOutlined
color="secondary"
fontSize="small"
/>
</Tooltip>
)}
</Typography>
</Grid>
</Grid>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright 2024 StarTree Inc
*
* Licensed under the StarTree Community License (the "License"); you may not use
* this file except in compliance with the License. You may obtain a copy of the
* License at http://www.startree.ai/legal/startree-community-license
*
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OF ANY KIND,
* either express or implied.
*
* See the License for the specific language governing permissions and limitations under
* the License.
*/
export interface InfoLabelProps {
label: string;
tooltipText?: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,19 @@ import {
CardContent,
CardHeader,
Grid,
Switch,
TextField,
} from "@material-ui/core";
import React, { FunctionComponent } from "react";
import { useTranslation } from "react-i18next";
import { CronEditor } from "../../../cron-editor-v1/cron-editor-v1.component";
import { InputSection } from "../../../form-basics/input-section/input-section.component";
import { PropertiesFormProps } from "./properties-form.interfaces";
import { InfoLabel } from "../../../info-label/info-label.component";

// Refer: SubscriptionGroupPropertiesForm
export const PropertiesForm: FunctionComponent<PropertiesFormProps> = ({
values: { name, cron },
values: { name, cron, notifyHistoricalAnomalies },
onChange,
customHeader,
}) => {
Expand All @@ -42,6 +44,12 @@ export const PropertiesForm: FunctionComponent<PropertiesFormProps> = ({
onChange((stateProp) => ({ ...stateProp, name }));
};

const handleUpdateNotifyHistoricAnomalies = (
notifyHistoricalAnomalies: boolean
): void => {
onChange((stateProp) => ({ ...stateProp, notifyHistoricalAnomalies }));
};

return (
<Grid item xs={12}>
<Card>
Expand Down Expand Up @@ -77,6 +85,26 @@ export const PropertiesForm: FunctionComponent<PropertiesFormProps> = ({
cron={cron}
handleUpdateCron={handleUpdateCron}
/>
<InputSection
inputComponent={
<Switch
defaultChecked={!!notifyHistoricalAnomalies}
onChange={(e) => {
handleUpdateNotifyHistoricAnomalies(
e.target.checked
);
}}
/>
}
labelComponent={
<InfoLabel
label={t("label.notifyHistoricalAnomalies")}
tooltipText={t(
"info.notifyHistoricalAnomalies"
)}
/>
}
/>
</CardContent>
</Card>
</Grid>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { SubscriptionGroup } from "../../../../rest/dto/subscription-group.inter
interface FormValues {
name: string;
cron: string;
notifyHistoricalAnomalies?: boolean;
}

export interface PropertiesFormProps {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ export const SubscriptionGroupDetails: FunctionComponent<SubscriptionGroupDetail
const propertiesFormValues = {
cron: subscriptionGroup.cron,
name: subscriptionGroup.name,
notifyHistoricalAnomalies: Boolean(
subscriptionGroup.notifyHistoricalAnomalies
),
};

return (
Expand Down
4 changes: 4 additions & 0 deletions thirdeye-ui/src/app/locale/languages/en-us.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
"unknown": "Unknown error occurred.",
"unknown-rca-algorithm": "Unknown error running the RCA algorithm."
},
"info": {
"notifyHistoricalAnomalies": "By default, notifications are only sent for anomalies detected on times greater than the alert creation time. If enabled, notifications will also be sent for anomalies detected on times less than the alert creation time."
},
"label": {
"1-minute": "1 Minute",
"15-minutes": "15 Minutes",
Expand Down Expand Up @@ -375,6 +378,7 @@
"none": "None",
"not-saved": "not saved",
"notifications": "notifications",
"notifyHistoricalAnomalies": "Notify Historical Anomalies",
"num-dimensions": "{{num}} dimensions",
"ok": "Ok",
"onboard": "Onboard",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export interface SubscriptionGroup {
owner: User;
notificationSchemes?: NotificationSchemes;
specs: NotificationSpec[];
notifyHistoricalAnomalies?: boolean; // optional as its only coming when this property is set
}

export enum SpecType {
Expand Down
Loading