1 | |
2 | type Digitalocean = { |
3 | token: string; |
4 | }; |
5 | |
6 | * Create Alert Policy |
7 | * To create a new alert, send a POST request to `/v2/monitoring/alerts`. |
8 | */ |
9 | export async function main( |
10 | auth: Digitalocean, |
11 | body: { |
12 | alerts: { email: string[]; slack: { channel: string; url: string }[] }; |
13 | compare: "GreaterThan" | "LessThan"; |
14 | description: string; |
15 | enabled: false | true; |
16 | entities: string[]; |
17 | tags: string[]; |
18 | type: |
19 | | "v1/insights/droplet/load_1" |
20 | | "v1/insights/droplet/load_5" |
21 | | "v1/insights/droplet/load_15" |
22 | | "v1/insights/droplet/memory_utilization_percent" |
23 | | "v1/insights/droplet/disk_utilization_percent" |
24 | | "v1/insights/droplet/cpu" |
25 | | "v1/insights/droplet/disk_read" |
26 | | "v1/insights/droplet/disk_write" |
27 | | "v1/insights/droplet/public_outbound_bandwidth" |
28 | | "v1/insights/droplet/public_inbound_bandwidth" |
29 | | "v1/insights/droplet/private_outbound_bandwidth" |
30 | | "v1/insights/droplet/private_inbound_bandwidth" |
31 | | "v1/insights/lbaas/avg_cpu_utilization_percent" |
32 | | "v1/insights/lbaas/connection_utilization_percent" |
33 | | "v1/insights/lbaas/droplet_health" |
34 | | "v1/insights/lbaas/tls_connections_per_second_utilization_percent" |
35 | | "v1/insights/lbaas/increase_in_http_error_rate_percentage_5xx" |
36 | | "v1/insights/lbaas/increase_in_http_error_rate_percentage_4xx" |
37 | | "v1/insights/lbaas/increase_in_http_error_rate_count_5xx" |
38 | | "v1/insights/lbaas/increase_in_http_error_rate_count_4xx" |
39 | | "v1/insights/lbaas/high_http_request_response_time" |
40 | | "v1/insights/lbaas/high_http_request_response_time_50p" |
41 | | "v1/insights/lbaas/high_http_request_response_time_95p" |
42 | | "v1/insights/lbaas/high_http_request_response_time_99p" |
43 | | "v1/dbaas/alerts/load_15_alerts" |
44 | | "v1/dbaas/alerts/memory_utilization_alerts" |
45 | | "v1/dbaas/alerts/disk_utilization_alerts" |
46 | | "v1/dbaas/alerts/cpu_alerts"; |
47 | value: number; |
48 | window: "5m" | "10m" | "30m" | "1h"; |
49 | }, |
50 | ) { |
51 | const url = new URL(`https://api.digitalocean.com/v2/monitoring/alerts`); |
52 |
|
53 | const response = await fetch(url, { |
54 | method: "POST", |
55 | headers: { |
56 | "Content-Type": "application/json", |
57 | Authorization: "Bearer " + auth.token, |
58 | }, |
59 | body: JSON.stringify(body), |
60 | }); |
61 | if (!response.ok) { |
62 | const text = await response.text(); |
63 | throw new Error(`${response.status} ${text}`); |
64 | } |
65 | return await response.json(); |
66 | } |
67 |
|