| 1 | import * as Effect from "effect/Effect"; |
| 2 | import * as Layer from "effect/Layer"; |
| 3 | import { |
| 4 | makeAmpWorkspaceHttpBinding, |
| 5 | toPromDuration, |
| 6 | toPromTime, |
| 7 | } from "./BindingHttp.ts"; |
| 8 | import type { |
| 9 | PrometheusInstantResult, |
| 10 | PrometheusRangeResult, |
| 11 | } from "./PrometheusTypes.ts"; |
| 12 | import { |
| 13 | QueryMetrics, |
| 14 | type QueryMetricsClient, |
| 15 | type QueryMetricsRequest, |
| 16 | type QueryRangeRequest, |
| 17 | } from "./QueryMetrics.ts"; |
| 18 | |
| 19 | export const QueryMetricsHttp = Layer.effect( |
| 20 | QueryMetrics, |
| 21 | makeAmpWorkspaceHttpBinding({ |
| 22 | name: "QueryMetrics", |
| 23 | iamActions: ["aps:QueryMetrics"], |
| 24 | makeClient: (send): QueryMetricsClient => ({ |
| 25 | query: (request: QueryMetricsRequest) => |
| 26 | send({ |
| 27 | method: "POST", |
| 28 | path: "api/v1/query", |
| 29 | form: { |
| 30 | query: request.query, |
| 31 | time: |
| 32 | request.time !== undefined ? toPromTime(request.time) : undefined, |
| 33 | timeout: |
| 34 | request.timeout !== undefined |
| 35 | ? toPromDuration(request.timeout) |
| 36 | : undefined, |
| 37 | }, |
| 38 | }).pipe(Effect.map((data) => data as PrometheusInstantResult)), |
| 39 | queryRange: (request: QueryRangeRequest) => |
| 40 | send({ |
| 41 | method: "POST", |
| 42 | path: "api/v1/query_range", |
| 43 | form: { |
| 44 | query: request.query, |
| 45 | start: toPromTime(request.start), |
| 46 | end: toPromTime(request.end), |
| 47 | step: toPromDuration(request.step), |
| 48 | timeout: |
| 49 | request.timeout !== undefined |
| 50 | ? toPromDuration(request.timeout) |
| 51 | : undefined, |
| 52 | }, |
| 53 | }).pipe(Effect.map((data) => data as PrometheusRangeResult)), |
| 54 | }), |
| 55 | }), |
| 56 | ); |