|
|
|
@ -44,47 +44,51 @@ export function GrafanaRuleQueryViewer({ |
|
|
|
|
const dsByUid = keyBy(Object.values(config.datasources), (ds) => ds.uid); |
|
|
|
|
const dataQueries = queries.filter((q) => !isExpressionQuery(q.model)); |
|
|
|
|
const expressions = queries.filter((q) => isExpressionQuery(q.model)); |
|
|
|
|
const styles = useStyles2(getExpressionViewerStyles); |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<Stack gap={2} direction="column"> |
|
|
|
|
<Stack gap={2}> |
|
|
|
|
{dataQueries.map(({ model, relativeTimeRange, refId, datasourceUid }, index) => { |
|
|
|
|
const dataSource = dsByUid[datasourceUid]; |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<QueryPreview |
|
|
|
|
key={index} |
|
|
|
|
refId={refId} |
|
|
|
|
isAlertCondition={condition === refId} |
|
|
|
|
model={model} |
|
|
|
|
relativeTimeRange={relativeTimeRange} |
|
|
|
|
evalTimeRange={evalTimeRanges[refId]} |
|
|
|
|
dataSource={dataSource} |
|
|
|
|
queryData={evalDataByQuery[refId]} |
|
|
|
|
onEvalTimeRangeChange={(timeRange) => onTimeRangeChange(refId, timeRange)} |
|
|
|
|
/> |
|
|
|
|
); |
|
|
|
|
})} |
|
|
|
|
</Stack> |
|
|
|
|
|
|
|
|
|
<Stack gap={1}> |
|
|
|
|
{expressions.map(({ model, relativeTimeRange, refId, datasourceUid }, index) => { |
|
|
|
|
const dataSource = dsByUid[datasourceUid]; |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
isExpressionQuery(model) && ( |
|
|
|
|
<ExpressionPreview |
|
|
|
|
<div className={styles.maxWidthContainer}> |
|
|
|
|
<Stack gap={2}> |
|
|
|
|
{dataQueries.map(({ model, relativeTimeRange, refId, datasourceUid }, index) => { |
|
|
|
|
const dataSource = dsByUid[datasourceUid]; |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
<QueryPreview |
|
|
|
|
key={index} |
|
|
|
|
refId={refId} |
|
|
|
|
isAlertCondition={condition === refId} |
|
|
|
|
model={model} |
|
|
|
|
relativeTimeRange={relativeTimeRange} |
|
|
|
|
evalTimeRange={evalTimeRanges[refId]} |
|
|
|
|
dataSource={dataSource} |
|
|
|
|
evalData={evalDataByQuery[refId]} |
|
|
|
|
queryData={evalDataByQuery[refId]} |
|
|
|
|
onEvalTimeRangeChange={(timeRange) => onTimeRangeChange(refId, timeRange)} |
|
|
|
|
/> |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
})} |
|
|
|
|
</Stack> |
|
|
|
|
); |
|
|
|
|
})} |
|
|
|
|
</Stack> |
|
|
|
|
</div> |
|
|
|
|
<div className={styles.maxWidthContainer}> |
|
|
|
|
<Stack gap={1}> |
|
|
|
|
{expressions.map(({ model, refId, datasourceUid }, index) => { |
|
|
|
|
const dataSource = dsByUid[datasourceUid]; |
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
isExpressionQuery(model) && ( |
|
|
|
|
<ExpressionPreview |
|
|
|
|
key={index} |
|
|
|
|
refId={refId} |
|
|
|
|
isAlertCondition={condition === refId} |
|
|
|
|
model={model} |
|
|
|
|
dataSource={dataSource} |
|
|
|
|
evalData={evalDataByQuery[refId]} |
|
|
|
|
/> |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
})} |
|
|
|
|
</Stack> |
|
|
|
|
</div> |
|
|
|
|
</Stack> |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
@ -389,6 +393,9 @@ const getExpressionViewerStyles = (theme: GrafanaTheme2) => { |
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
...common, |
|
|
|
|
maxWidthContainer: css` |
|
|
|
|
max-width: 100%; |
|
|
|
|
`,
|
|
|
|
|
container: css` |
|
|
|
|
padding: ${theme.spacing(1)}; |
|
|
|
|
display: flex; |
|
|
|
|