diff --git a/web/src/pages/Alerting/Message/components/AlertChartCard.jsx b/web/src/pages/Alerting/Message/components/AlertChartCard.jsx
index 06ea9ad3..f9b1b178 100644
--- a/web/src/pages/Alerting/Message/components/AlertChartCard.jsx
+++ b/web/src/pages/Alerting/Message/components/AlertChartCard.jsx
@@ -37,8 +37,8 @@ export default ({msgItem, range})=>{
"indices": resource.objects,
"time_field": resource.time_field,
"raw_filter": resource.raw_filter,
- })
- }, [JSON.stringify(rule)])
+ }, created, updated)
+ }, [JSON.stringify(rule), updated, created])
const highlightRange = useMemo(() => {
if (!created || created === updated) return undefined;
diff --git a/web/src/pages/Alerting/Message/components/MessageDetail.jsx b/web/src/pages/Alerting/Message/components/MessageDetail.jsx
index ea2bf3ca..3fc11c11 100644
--- a/web/src/pages/Alerting/Message/components/MessageDetail.jsx
+++ b/web/src/pages/Alerting/Message/components/MessageDetail.jsx
@@ -46,10 +46,13 @@ const MessageDetail = (props) => {
if (messageDetail?.status == "recovered") {
endTimestamp = moment(messageDetail.updated).valueOf();
}
+
+ const duration = moment(messageDetail.updated).valueOf() - moment(messageDetail.created).valueOf()
+
setTimeRange({
...timeRange,
- min: moment(startTimestamp).format(),
- max: moment(endTimestamp).format("YYYY-MM-DDTHH:mm:ss.SSS"),
+ min: moment(startTimestamp).subtract(duration, 'ms').format("YYYY-MM-DDTHH:mm:ss.SSS"),
+ max: moment(endTimestamp).add(duration, 'ms').format("YYYY-MM-DDTHH:mm:ss.SSS"),
});
}
@@ -70,7 +73,10 @@ const MessageDetail = (props) => {
{messageDetail?.status ? : null}
diff --git a/web/src/pages/Alerting/Rule/components/RuleDetail.jsx b/web/src/pages/Alerting/Rule/components/RuleDetail.jsx
index bb3fc0bb..23dba42c 100644
--- a/web/src/pages/Alerting/Rule/components/RuleDetail.jsx
+++ b/web/src/pages/Alerting/Rule/components/RuleDetail.jsx
@@ -37,11 +37,13 @@ import { hasAuthority } from "@/utils/authority";
import DatePicker from "@/common/src/DatePicker";
import { getLocale } from "umi/locale";
import { getTimezone } from "@/utils/utils";
+import moment from "moment";
const { Title } = Typography;
-export const buildWidgetByRule = (rule, queries) => {
+export const buildWidgetByRule = (rule, queries, created, updated) => {
if (!rule) return;
+
const { metrics = {} } = rule;
const { format_type = "num" } = metrics;
const formatMapping = {
@@ -62,8 +64,20 @@ export const buildWidgetByRule = (rule, queries) => {
try {
query = JSON.stringify(queries.raw_filter);
} catch (error) {}
+
+ const number = parseInt(metrics.bucket_size);
+ const unit = metrics.bucket_size?.replace(`${number}`, '')
+ let bucketSize = metrics.bucket_size
+ if (unit) {
+ const duration = moment(updated).valueOf() - moment(created).valueOf()
+ const ms = moment.duration(number, unit).asMilliseconds()
+ if (duration <= 2 * ms) {
+ bucketSize = `${ms / 1000 / 2}s`
+ }
+ }
+
const config = {
- bucket_size: metrics.bucket_size,
+ bucket_size: bucketSize,
format: formatMapping[format_type],
group_labels: metrics.bucket_label ? [metrics.bucket_label] : undefined,
series: [
@@ -183,7 +197,7 @@ const RuleDetail = (props) => {
indices: ruleDetail.resource_objects,
time_field: ruleDetail.resource_time_field,
raw_filter: ruleDetail.resource_raw_filter,
- });
+ }, ruleDetail?.created, ruleDetail?.updated);
}, [ruleDetail]);
return (
diff --git a/web/src/pages/DataManagement/View/Widget/WidgetBody/Chart.jsx b/web/src/pages/DataManagement/View/Widget/WidgetBody/Chart.jsx
index c3335165..8333ecfa 100644
--- a/web/src/pages/DataManagement/View/Widget/WidgetBody/Chart.jsx
+++ b/web/src/pages/DataManagement/View/Widget/WidgetBody/Chart.jsx
@@ -102,6 +102,7 @@ export default (props) => {
}
if (isTimeSeries && !range) {
+ setLoading(false)
return;
}
let newRange;