//native
type Datadog = {
apiKey: string;
appKey: string;
apiBase: string;
};
/**
* Find Monitors
* Search for monitors and return every match (following pagination). Leave
* `query` empty to return all monitors, or pass a Datadog monitor search
* query such as `type:metric` or `env:production`.
*/
export async function main(dd_auth: Datadog, query: string = "") {
const monitors = [];
for await (const monitor of searchToEnd(dd_auth, query)) {
monitors.push(monitor);
}
return monitors;
}
async function* searchToEnd(dd_auth: Datadog, query: string) {
let page = 0;
let pageCount = 1;
while (page < pageCount) {
const url = new URL(`${dd_auth.apiBase}/api/v1/monitor/search`);
if (query !== "") {
url.searchParams.append("query", query);
}
url.searchParams.append("page", String(page));
const response = await fetch(url, {
method: "GET",
headers: {
"DD-API-KEY": dd_auth.apiKey,
"DD-APPLICATION-KEY": dd_auth.appKey,
Accept: "application/json",
},
});
if (!response.ok) {
throw new Error(`${response.status} ${await response.text()}`);
}
const result = await response.json();
for (const monitor of result.monitors ?? []) {
yield monitor;
}
pageCount = result.metadata?.page_count ?? 1;
page++;
}
}
Submitted by hugo989 7 days ago