Edits history of script submission #22355 for ' Find Monitors (datadog)'

  • bunnative
    One script reply has been approved by the moderators
    Ap­pro­ved
    //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