Production Patterns
Pattern 1: Auto-Refresh Dashboard
From the real Host Health Monitor โ polls every 30 seconds:
import { queryExecutionClient } from "@dynatrace-sdk/client-query";
export function useDql(query: string) {
const [data, setData] = useState([]);
const [loading, setLoading] = useState(true);
const run = useCallback(() => {
queryExecutionClient
.queryExecute({ body: { query, requestTimeoutMilliseconds: 30000, maxResultRecords: 1000 } })
.then((res) => { setData(res.result?.records ?? []); setLoading(false); })
.catch(() => setLoading(false));
}, [query]);
useEffect(() => {
run();
const id = setInterval(run, 30_000);
return () => clearInterval(id);
}, [run]);
return { data, loading };
}
Pattern 2: SLO Status Cards
const SloStatus = () => {
const { data, loading } = useDql(
`fetch dt.davis.slo | fields slo.name, slo.status, slo.target, slo.evaluatedPercentage | limit 5`
);
if (loading) return <ProgressCircle />;
return (
<Flex gap={12} flexWrap="wrap">
{data.map((s: any, i: number) => {
const pct = s["slo.evaluatedPercentage"];
const ok = pct >= s["slo.target"];
return (
<Flex key={i} flexDirection="column" alignItems="center" padding={12}
style={{ background: "var(--dt-colors-surface-default)", borderRadius: 8 }}>
<Text>{s["slo.name"]}</Text>
<Heading level={3} style={{ color: ok ? "var(--dt-colors-charts-categorical-color-06)"
: "var(--dt-colors-charts-categorical-color-12)" }}>
{Number(pct).toFixed(2)}%
</Heading>
</Flex>
);
})}
</Flex>
);
};
Pattern 3: Problem List
const ProblemList = () => {
const { data, loading } = useDql(
`fetch events, from:now()-7d | filter event.kind == "DAVIS_PROBLEM"
| fields timestamp, display_id, event.name, event.status
| sort timestamp desc | limit 10`
);
if (loading) return <ProgressCircle />;
if (!data.length) return <Text>No problems in the last 7 days โ</Text>;
return (
<Flex flexDirection="column" gap={4}>
{data.map((p: any, i: number) => (
<Flex key={i} gap={8} padding={8}
style={{ background: "var(--dt-colors-surface-default)", borderRadius: 4 }}>
<Text style={{ fontFamily: "monospace" }}>{p.display_id}</Text>
<Text style={{ flex: 1 }}>{p["event.name"]}</Text>
<Text style={{ color: p["event.status"] === "ACTIVE"
? "var(--dt-colors-charts-categorical-color-12)" : undefined }}>
{p["event.status"]}
</Text>
</Flex>
))}
</Flex>
);
};
What Was Covered
Module Skill What You Can Build
โโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
00-03 Foundations Scaffold, build, deploy, run DOOM
04-07 Data and UI Query Grail, render tables and charts
08-11 Advanced App Functions, intents, workflows, deploy
12-14 Boss Level Multi-tab production apps
๐ Try it: Pick a real operational problem your team faces โ design a custom app that solves it. Start with a Notebook prototype (DQL queries + markdown), then convert each section into an app component. Ship it in a day.