import {z} from 'zod' export type GcpMetricsIntegrationLabelContext = 'RESOURCE_LABELS' | 'METRIC_LABELS' | 'METADATA_SYSTEM_LABELS' | 'METADATA_USER_LABELS'; export type Configv1GcpMetricsIntegrationFilter = {context?: GcpMetricsIntegrationLabelContext | undefined, name?: string | undefined, value_glob?: string | undefined}; export type Configv1GcpMetricsIntegrationAggregation = 'MEAN' | 'MIN' | 'MAX' | 'SUM' | 'COUNT'; export type GcpMetricsIntegrationRollupRuleLabel = {context?: GcpMetricsIntegrationLabelContext | undefined, name?: string | undefined}; export type GcpMetricsIntegrationRollupRuleLabelPolicy = {keep?: Array | undefined}; export type Configv1GcpMetricsIntegrationRollupRule = {aggregation?: Configv1GcpMetricsIntegrationAggregation | undefined, label_policy?: GcpMetricsIntegrationRollupRuleLabelPolicy | undefined, metric_name?: string | undefined}; export type GcpMetricsIntegrationMetricGroup = {filters?: Array | undefined, prefixes?: Array | undefined, project_id?: string | undefined, rollup_rules?: Array | undefined}; export type Configv1GcpMetricsIntegrationServiceAccount = {client_email?: string | undefined}; export type Configv1GcpMetricsIntegration = {created_at?: string | undefined, metric_groups?: Array | undefined, name: string, service_account?: Configv1GcpMetricsIntegrationServiceAccount | undefined, slug?: string | undefined, updated_at?: string | undefined}; export type ConfigV1UpdateGcpMetricsIntegrationBody = {create_if_missing?: boolean | undefined, dry_run?: boolean | undefined, gcp_metrics_integration?: Configv1GcpMetricsIntegration | undefined}; export type UpdateApiApiV1ConfigGcpMetricsIntegrationsSlugArgs = {slug: string, body: ConfigV1UpdateGcpMetricsIntegrationBody}; export type UpdateApiApiV1ConfigGcpMetricsIntegrationsSlugOptions = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const gcpMetricsIntegrationLabelContext = z.enum(["RESOURCE_LABELS", "METRIC_LABELS", "METADATA_SYSTEM_LABELS", "METADATA_USER_LABELS"]); export const configv1GcpMetricsIntegrationFilter = z.object({context: gcpMetricsIntegrationLabelContext.optional(), name: z.string().optional(), value_glob: z.string().optional()}); export const configv1GcpMetricsIntegrationAggregation = z.enum(["MEAN", "MIN", "MAX", "SUM", "COUNT"]); export const gcpMetricsIntegrationRollupRuleLabel = z.object({context: gcpMetricsIntegrationLabelContext.optional(), name: z.string().optional()}); export const gcpMetricsIntegrationRollupRuleLabelPolicy = z.object({keep: z.array(gcpMetricsIntegrationRollupRuleLabel).optional()}); export const configv1GcpMetricsIntegrationRollupRule = z.object({aggregation: configv1GcpMetricsIntegrationAggregation.optional(), label_policy: gcpMetricsIntegrationRollupRuleLabelPolicy.optional(), metric_name: z.string().optional()}); export const gcpMetricsIntegrationMetricGroup = z.object({filters: z.array(configv1GcpMetricsIntegrationFilter).optional(), prefixes: z.array(z.string()).optional(), project_id: z.string().optional(), rollup_rules: z.array(configv1GcpMetricsIntegrationRollupRule).optional()}); export const configv1GcpMetricsIntegrationServiceAccount = z.object({client_email: z.string().optional()}); export const configv1GcpMetricsIntegration = z.object({created_at: z.string().optional(), metric_groups: z.array(gcpMetricsIntegrationMetricGroup).optional(), name: z.string(), service_account: configv1GcpMetricsIntegrationServiceAccount.optional(), slug: z.string().optional(), updated_at: z.string().optional()}); export const configv1UpdateGcpMetricsIntegrationResponse = z.object({gcp_metrics_integration: configv1GcpMetricsIntegration.optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * PUT /api/v1/config/gcp-metrics-integrations/{slug} */ export const updateApiApiV1ConfigGcpMetricsIntegrationsSlug = async (args: UpdateApiApiV1ConfigGcpMetricsIntegrationsSlugArgs, options?: UpdateApiApiV1ConfigGcpMetricsIntegrationsSlugOptions) => { const {baseUrl = "https://tenant.chronosphere.io", fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (ApiKeyAuth !== undefined) headers.set("API-Token", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/config/gcp-metrics-integrations/${encodeURIComponent(String(args.slug))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(configv1UpdateGcpMetricsIntegrationResponse, await res.json()) };