@vibesdotdev/integrations-digitalocean 0.0.0-stage → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +126 -0
- package/README.md +78 -2
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/inference.transport.impl.d.ts +5 -0
- package/dist/ai/inference.transport.impl.d.ts.map +1 -0
- package/dist/ai/inference.transport.impl.js +54 -0
- package/dist/ai/inference.transport.impl.js.map +1 -0
- package/dist/ai/provider.plugin.d.ts +6 -0
- package/dist/ai/provider.plugin.d.ts.map +1 -0
- package/dist/ai/provider.plugin.js +126 -0
- package/dist/ai/provider.plugin.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.d.ts +62 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.js +73 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/config/schemas/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.d.ts +2 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.js +2 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.d.ts +183 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.js +66 -0
- package/dist/ai/providers/cloud/frontier/digitalocean/provider.digitalocean.descriptor.js.map +1 -0
- package/dist/apps/api-client.d.ts +45 -0
- package/dist/apps/api-client.d.ts.map +1 -0
- package/dist/apps/api-client.js +47 -0
- package/dist/apps/api-client.js.map +1 -0
- package/dist/apps/build-spec.d.ts +44 -0
- package/dist/apps/build-spec.d.ts.map +1 -0
- package/dist/apps/build-spec.js +463 -0
- package/dist/apps/build-spec.js.map +1 -0
- package/dist/apps/deploy-client.d.ts +42 -0
- package/dist/apps/deploy-client.d.ts.map +1 -0
- package/dist/apps/deploy-client.js +300 -0
- package/dist/apps/deploy-client.js.map +1 -0
- package/dist/apps/index.d.ts +5 -0
- package/dist/apps/index.d.ts.map +1 -0
- package/dist/apps/index.js +4 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/types.d.ts +204 -0
- package/dist/apps/types.d.ts.map +1 -0
- package/dist/apps/types.js +13 -0
- package/dist/apps/types.js.map +1 -0
- package/dist/client/control-plane.d.ts +49 -0
- package/dist/client/control-plane.d.ts.map +1 -0
- package/dist/client/control-plane.js +85 -0
- package/dist/client/control-plane.js.map +1 -0
- package/dist/client/do-fetch.d.ts +41 -0
- package/dist/client/do-fetch.d.ts.map +1 -0
- package/dist/client/do-fetch.js +199 -0
- package/dist/client/do-fetch.js.map +1 -0
- package/dist/client/errors.d.ts +6 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +34 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/factory.d.ts +53 -0
- package/dist/client/factory.d.ts.map +1 -0
- package/dist/client/factory.js +220 -0
- package/dist/client/factory.js.map +1 -0
- package/dist/client/helpers.d.ts +5 -0
- package/dist/client/helpers.d.ts.map +1 -0
- package/dist/client/helpers.js +8 -0
- package/dist/client/helpers.js.map +1 -0
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +10 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/paginated.d.ts +19 -0
- package/dist/client/paginated.d.ts.map +1 -0
- package/dist/client/paginated.js +56 -0
- package/dist/client/paginated.js.map +1 -0
- package/dist/client/retry.d.ts +34 -0
- package/dist/client/retry.d.ts.map +1 -0
- package/dist/client/retry.js +53 -0
- package/dist/client/retry.js.map +1 -0
- package/dist/config/digitalocean.config.descriptor.d.ts +197 -0
- package/dist/config/digitalocean.config.descriptor.d.ts.map +1 -0
- package/dist/config/digitalocean.config.descriptor.js +59 -0
- package/dist/config/digitalocean.config.descriptor.js.map +1 -0
- package/dist/credentials/index.d.ts +38 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +56 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/databases/index.d.ts +82 -0
- package/dist/databases/index.d.ts.map +1 -0
- package/dist/databases/index.js +57 -0
- package/dist/databases/index.js.map +1 -0
- package/dist/digitalocean-friction.policy.d.ts +29 -0
- package/dist/digitalocean-friction.policy.d.ts.map +1 -0
- package/dist/digitalocean-friction.policy.js +21 -0
- package/dist/digitalocean-friction.policy.js.map +1 -0
- package/dist/digitalocean.plugin.d.ts +3 -0
- package/dist/digitalocean.plugin.d.ts.map +1 -0
- package/dist/digitalocean.plugin.js +27 -0
- package/dist/digitalocean.plugin.js.map +1 -0
- package/dist/droplets/index.d.ts +106 -0
- package/dist/droplets/index.d.ts.map +1 -0
- package/dist/droplets/index.js +227 -0
- package/dist/droplets/index.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/inference-control-plane/index.d.ts +63 -0
- package/dist/inference-control-plane/index.d.ts.map +1 -0
- package/dist/inference-control-plane/index.js +93 -0
- package/dist/inference-control-plane/index.js.map +1 -0
- package/dist/infra/billing.d.ts +26 -0
- package/dist/infra/billing.d.ts.map +1 -0
- package/dist/infra/billing.js +43 -0
- package/dist/infra/billing.js.map +1 -0
- package/dist/infra/credentials.d.ts +11 -0
- package/dist/infra/credentials.d.ts.map +1 -0
- package/dist/infra/credentials.js +15 -0
- package/dist/infra/credentials.js.map +1 -0
- package/dist/infra/deployment-provider/deploy-secrets.d.ts +10 -0
- package/dist/infra/deployment-provider/deploy-secrets.d.ts.map +1 -0
- package/dist/infra/deployment-provider/deploy-secrets.js +66 -0
- package/dist/infra/deployment-provider/deploy-secrets.js.map +1 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.d.ts +97 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.d.ts.map +1 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.js +242 -0
- package/dist/infra/deployment-provider/digitalocean-deployment-provider.impl.js.map +1 -0
- package/dist/infra/deployment-provider/image-publish.d.ts +39 -0
- package/dist/infra/deployment-provider/image-publish.d.ts.map +1 -0
- package/dist/infra/deployment-provider/image-publish.js +146 -0
- package/dist/infra/deployment-provider/image-publish.js.map +1 -0
- package/dist/infra/deployment-provider.descriptor.d.ts +34 -0
- package/dist/infra/deployment-provider.descriptor.d.ts.map +1 -0
- package/dist/infra/deployment-provider.descriptor.js +9 -0
- package/dist/infra/deployment-provider.descriptor.js.map +1 -0
- package/dist/infra/digitalocean-infra.plugin.d.ts +101 -0
- package/dist/infra/digitalocean-infra.plugin.d.ts.map +1 -0
- package/dist/infra/digitalocean-infra.plugin.js +283 -0
- package/dist/infra/digitalocean-infra.plugin.js.map +1 -0
- package/dist/infra/doks/clients.d.ts +183 -0
- package/dist/infra/doks/clients.d.ts.map +1 -0
- package/dist/infra/doks/clients.js +172 -0
- package/dist/infra/doks/clients.js.map +1 -0
- package/dist/infra/doks/digitalocean.d.ts +34 -0
- package/dist/infra/doks/digitalocean.d.ts.map +1 -0
- package/dist/infra/doks/digitalocean.js +267 -0
- package/dist/infra/doks/digitalocean.js.map +1 -0
- package/dist/infra/doks/service-release-schemas.d.ts +1037 -0
- package/dist/infra/doks/service-release-schemas.d.ts.map +1 -0
- package/dist/infra/doks/service-release-schemas.js +51 -0
- package/dist/infra/doks/service-release-schemas.js.map +1 -0
- package/dist/infra/doks/service-release.d.ts +415 -0
- package/dist/infra/doks/service-release.d.ts.map +1 -0
- package/dist/infra/doks/service-release.js +3201 -0
- package/dist/infra/doks/service-release.js.map +1 -0
- package/dist/infra/doks/worker.d.ts +14 -0
- package/dist/infra/doks/worker.d.ts.map +1 -0
- package/dist/infra/doks/worker.js +343 -0
- package/dist/infra/doks/worker.js.map +1 -0
- package/dist/infra/droplet.impl.d.ts +172 -0
- package/dist/infra/droplet.impl.d.ts.map +1 -0
- package/dist/infra/droplet.impl.js +379 -0
- package/dist/infra/droplet.impl.js.map +1 -0
- package/dist/infra/functions.impl.d.ts +123 -0
- package/dist/infra/functions.impl.d.ts.map +1 -0
- package/dist/infra/functions.impl.js +202 -0
- package/dist/infra/functions.impl.js.map +1 -0
- package/dist/infra/index.d.ts +15 -0
- package/dist/infra/index.d.ts.map +1 -0
- package/dist/infra/index.js +12 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/infra/inventory.d.ts +7 -0
- package/dist/infra/inventory.d.ts.map +1 -0
- package/dist/infra/inventory.js +259 -0
- package/dist/infra/inventory.js.map +1 -0
- package/dist/infra/kubernetes-log-stream.d.ts +5 -0
- package/dist/infra/kubernetes-log-stream.d.ts.map +1 -0
- package/dist/infra/kubernetes-log-stream.js +186 -0
- package/dist/infra/kubernetes-log-stream.js.map +1 -0
- package/dist/infra/kubernetes-logs.d.ts +33 -0
- package/dist/infra/kubernetes-logs.d.ts.map +1 -0
- package/dist/infra/kubernetes-logs.descriptor.d.ts +14 -0
- package/dist/infra/kubernetes-logs.descriptor.d.ts.map +1 -0
- package/dist/infra/kubernetes-logs.descriptor.js +28 -0
- package/dist/infra/kubernetes-logs.descriptor.js.map +1 -0
- package/dist/infra/kubernetes-logs.js +196 -0
- package/dist/infra/kubernetes-logs.js.map +1 -0
- package/dist/infra/utilization.d.ts +44 -0
- package/dist/infra/utilization.d.ts.map +1 -0
- package/dist/infra/utilization.js +108 -0
- package/dist/infra/utilization.js.map +1 -0
- package/dist/kubernetes/authority.d.ts +40 -0
- package/dist/kubernetes/authority.d.ts.map +1 -0
- package/dist/kubernetes/authority.js +90 -0
- package/dist/kubernetes/authority.js.map +1 -0
- package/dist/kubernetes/encoding.d.ts +4 -0
- package/dist/kubernetes/encoding.d.ts.map +1 -0
- package/dist/kubernetes/encoding.js +8 -0
- package/dist/kubernetes/encoding.js.map +1 -0
- package/dist/kubernetes/index.d.ts +105 -0
- package/dist/kubernetes/index.d.ts.map +1 -0
- package/dist/kubernetes/index.js +99 -0
- package/dist/kubernetes/index.js.map +1 -0
- package/dist/kubernetes/transport.d.ts +11 -0
- package/dist/kubernetes/transport.d.ts.map +1 -0
- package/dist/kubernetes/transport.js +27 -0
- package/dist/kubernetes/transport.js.map +1 -0
- package/dist/network/index.d.ts +24 -0
- package/dist/network/index.d.ts.map +1 -0
- package/dist/network/index.js +16 -0
- package/dist/network/index.js.map +1 -0
- package/dist/registry/index.d.ts +39 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +20 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/schemas/app-deployment.d.ts +1474 -0
- package/dist/schemas/app-deployment.d.ts.map +1 -0
- package/dist/schemas/app-deployment.js +156 -0
- package/dist/schemas/app-deployment.js.map +1 -0
- package/dist/schemas/app-platform.d.ts +755 -0
- package/dist/schemas/app-platform.d.ts.map +1 -0
- package/dist/schemas/app-platform.js +253 -0
- package/dist/schemas/app-platform.js.map +1 -0
- package/dist/schemas/cache-database.d.ts +210 -0
- package/dist/schemas/cache-database.d.ts.map +1 -0
- package/dist/schemas/cache-database.js +105 -0
- package/dist/schemas/cache-database.js.map +1 -0
- package/dist/schemas/control-plane.d.ts +456 -0
- package/dist/schemas/control-plane.d.ts.map +1 -0
- package/dist/schemas/control-plane.js +123 -0
- package/dist/schemas/control-plane.js.map +1 -0
- package/dist/schemas/credential-use.d.ts +714 -0
- package/dist/schemas/credential-use.d.ts.map +1 -0
- package/dist/schemas/credential-use.js +73 -0
- package/dist/schemas/credential-use.js.map +1 -0
- package/dist/schemas/doks-worker.d.ts +4071 -0
- package/dist/schemas/doks-worker.d.ts.map +1 -0
- package/dist/schemas/doks-worker.js +330 -0
- package/dist/schemas/doks-worker.js.map +1 -0
- package/dist/schemas/droplet.d.ts +110 -0
- package/dist/schemas/droplet.d.ts.map +1 -0
- package/dist/schemas/droplet.js +22 -0
- package/dist/schemas/droplet.js.map +1 -0
- package/dist/schemas/functions.d.ts +22 -0
- package/dist/schemas/functions.d.ts.map +1 -0
- package/dist/schemas/functions.js +25 -0
- package/dist/schemas/functions.js.map +1 -0
- package/dist/schemas/gitea-git-hosting.d.ts +20 -0
- package/dist/schemas/gitea-git-hosting.d.ts.map +1 -0
- package/dist/schemas/gitea-git-hosting.js +26 -0
- package/dist/schemas/gitea-git-hosting.js.map +1 -0
- package/dist/schemas/http.d.ts +2594 -0
- package/dist/schemas/http.d.ts.map +1 -0
- package/dist/schemas/http.js +4548 -0
- package/dist/schemas/http.js.map +1 -0
- package/dist/schemas/infra-kinds.d.ts +113 -0
- package/dist/schemas/infra-kinds.d.ts.map +1 -0
- package/dist/schemas/infra-kinds.js +93 -0
- package/dist/schemas/infra-kinds.js.map +1 -0
- package/dist/schemas/kubernetes-responses.d.ts +457 -0
- package/dist/schemas/kubernetes-responses.d.ts.map +1 -0
- package/dist/schemas/kubernetes-responses.js +681 -0
- package/dist/schemas/kubernetes-responses.js.map +1 -0
- package/dist/schemas/kubernetes.d.ts +143 -0
- package/dist/schemas/kubernetes.d.ts.map +1 -0
- package/dist/schemas/kubernetes.js +68 -0
- package/dist/schemas/kubernetes.js.map +1 -0
- package/dist/schemas/logs.d.ts +15 -0
- package/dist/schemas/logs.d.ts.map +1 -0
- package/dist/schemas/logs.js +11 -0
- package/dist/schemas/logs.js.map +1 -0
- package/dist/schemas/object-storage.d.ts +167 -0
- package/dist/schemas/object-storage.d.ts.map +1 -0
- package/dist/schemas/object-storage.js +124 -0
- package/dist/schemas/object-storage.js.map +1 -0
- package/dist/schemas/service-settings.d.ts +9 -0
- package/dist/schemas/service-settings.d.ts.map +1 -0
- package/dist/schemas/service-settings.js +21 -0
- package/dist/schemas/service-settings.js.map +1 -0
- package/dist/schemas/utilization.d.ts +57 -0
- package/dist/schemas/utilization.d.ts.map +1 -0
- package/dist/schemas/utilization.js +58 -0
- package/dist/schemas/utilization.js.map +1 -0
- package/dist/schemas/worker-status.d.ts +22 -0
- package/dist/schemas/worker-status.d.ts.map +1 -0
- package/dist/schemas/worker-status.js +14 -0
- package/dist/schemas/worker-status.js.map +1 -0
- package/dist/schemas/worker.d.ts +125 -0
- package/dist/schemas/worker.d.ts.map +1 -0
- package/dist/schemas/worker.js +129 -0
- package/dist/schemas/worker.js.map +1 -0
- package/dist/secrets/app-platform/app-credentials.impl.d.ts +14 -0
- package/dist/secrets/app-platform/app-credentials.impl.d.ts.map +1 -0
- package/dist/secrets/app-platform/app-credentials.impl.js +237 -0
- package/dist/secrets/app-platform/app-credentials.impl.js.map +1 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.d.ts +11 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.d.ts.map +1 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.js +26 -0
- package/dist/secrets/container-registry/image-publish-settings.descriptor.js.map +1 -0
- package/dist/secrets/doks-secret.descriptor.d.ts +18 -0
- package/dist/secrets/doks-secret.descriptor.d.ts.map +1 -0
- package/dist/secrets/doks-secret.descriptor.js +35 -0
- package/dist/secrets/doks-secret.descriptor.js.map +1 -0
- package/dist/secrets/doks-secret.impl.d.ts +98 -0
- package/dist/secrets/doks-secret.impl.d.ts.map +1 -0
- package/dist/secrets/doks-secret.impl.js +451 -0
- package/dist/secrets/doks-secret.impl.js.map +1 -0
- package/dist/secrets/index.d.ts +4 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +4 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/secrets-backend-doks.plugin.d.ts +3 -0
- package/dist/secrets/secrets-backend-doks.plugin.d.ts.map +1 -0
- package/dist/secrets/secrets-backend-doks.plugin.js +35 -0
- package/dist/secrets/secrets-backend-doks.plugin.js.map +1 -0
- package/dist/storage/index.d.ts +50 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +92 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/spaces-keys.d.ts +25 -0
- package/dist/storage/spaces-keys.d.ts.map +1 -0
- package/dist/storage/spaces-keys.js +32 -0
- package/dist/storage/spaces-keys.js.map +1 -0
- package/package.json +172 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/infra/inventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type VibesRuntime } from '@vibesdotdev/kernel';
|
|
2
|
+
import { type WorkerLogRequest, type ActiveLogStream } from '@vibesdotdev/infra-core/kinds';
|
|
3
|
+
/** The vendor-owned kubectl adapter; execution and environment remain runtime-owned. */
|
|
4
|
+
export declare function streamKubernetesLogs(runtime: VibesRuntime, input: WorkerLogRequest): Promise<ActiveLogStream>;
|
|
5
|
+
//# sourceMappingURL=kubernetes-log-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-log-stream.d.ts","sourceRoot":"","sources":["../../src/infra/kubernetes-log-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,YAAY,EACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEN,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,MAAM,+BAA+B,CAAC;AAEvC,wFAAwF;AACxF,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,gBAAgB,GACrB,OAAO,CAAC,eAAe,CAAC,CA+K1B"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { CapabilityError, CaughtFailureSchema, composeChildEnv, settle } from '@vibesdotdev/kernel';
|
|
2
|
+
import { getRuntimeExecution } from '@vibesdotdev/kernel/execution';
|
|
3
|
+
import { WorkerLogRequestSchema } from '@vibesdotdev/infra-core/kinds';
|
|
4
|
+
/** The vendor-owned kubectl adapter; execution and environment remain runtime-owned. */
|
|
5
|
+
export async function streamKubernetesLogs(runtime, input) {
|
|
6
|
+
const parsed = WorkerLogRequestSchema.safeParse(input);
|
|
7
|
+
if (!parsed.success) {
|
|
8
|
+
throw new CapabilityError('Invalid Kubernetes log request', 'INVALID_INPUT', {
|
|
9
|
+
reason: 'invalid-worker-log-request',
|
|
10
|
+
cause: parsed.error
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const request = parsed.data;
|
|
14
|
+
const args = ['-n', request.namespace, 'logs', request.resource, `--tail=${request.tail ?? 200}`];
|
|
15
|
+
if (request.since !== undefined)
|
|
16
|
+
args.push(`--since=${request.since}`);
|
|
17
|
+
if (request.container !== undefined)
|
|
18
|
+
args.push('-c', request.container);
|
|
19
|
+
if (request.timestamps)
|
|
20
|
+
args.push('--timestamps');
|
|
21
|
+
if (request.previous)
|
|
22
|
+
args.push('--previous');
|
|
23
|
+
if (request.follow)
|
|
24
|
+
args.push('--follow');
|
|
25
|
+
const execution = await getRuntimeExecution(runtime);
|
|
26
|
+
const spawned = await settle(() => execution.spawn({
|
|
27
|
+
command: 'kubectl',
|
|
28
|
+
args,
|
|
29
|
+
env: composeChildEnv(runtime, {
|
|
30
|
+
inheritEnv: ['KUBECONFIG', 'SSH_AUTH_SOCK'],
|
|
31
|
+
env: request.kubeconfig ? { KUBECONFIG: request.kubeconfig } : {}
|
|
32
|
+
}),
|
|
33
|
+
envMode: 'replace',
|
|
34
|
+
stdin: 'ignore',
|
|
35
|
+
stdout: 'pipe',
|
|
36
|
+
stderr: 'pipe',
|
|
37
|
+
killTree: true
|
|
38
|
+
}));
|
|
39
|
+
if (!spawned.ok) {
|
|
40
|
+
throw new CapabilityError('Kubernetes log spawn failed', 'INTERNAL', {
|
|
41
|
+
reason: 'kubernetes-log-spawn-failed',
|
|
42
|
+
cause: spawned.cause
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const child = spawned.value;
|
|
46
|
+
const readers = [child.stdout, child.stderr].flatMap((stream) => stream ? [stream.getReader()] : []);
|
|
47
|
+
const activeReaders = new Set(readers);
|
|
48
|
+
let controller;
|
|
49
|
+
let closed = false;
|
|
50
|
+
let cancelled = false;
|
|
51
|
+
let failure;
|
|
52
|
+
let processFailure;
|
|
53
|
+
let failed = false;
|
|
54
|
+
let stopTask;
|
|
55
|
+
const done = Promise.withResolvers();
|
|
56
|
+
const close = () => {
|
|
57
|
+
if (closed)
|
|
58
|
+
return;
|
|
59
|
+
closed = true;
|
|
60
|
+
controller.close();
|
|
61
|
+
};
|
|
62
|
+
const recordFailure = (error) => {
|
|
63
|
+
if (!failed) {
|
|
64
|
+
failed = true;
|
|
65
|
+
failure =
|
|
66
|
+
error instanceof CapabilityError
|
|
67
|
+
? error
|
|
68
|
+
: new CapabilityError('Kubernetes log stream failed', 'INTERNAL', {
|
|
69
|
+
reason: 'kubernetes-log-stream-failed',
|
|
70
|
+
cause: error
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const stop = () => {
|
|
75
|
+
if (!stopTask) {
|
|
76
|
+
stopTask = (async () => {
|
|
77
|
+
const results = await Promise.allSettled([
|
|
78
|
+
Promise.resolve().then(() => child.kill('SIGKILL')),
|
|
79
|
+
...Array.from(activeReaders, (reader) => Promise.resolve().then(() => reader.cancel()))
|
|
80
|
+
]);
|
|
81
|
+
for (const result of results)
|
|
82
|
+
if (result.status === 'rejected')
|
|
83
|
+
recordFailure(CaughtFailureSchema.parse(result.reason));
|
|
84
|
+
})();
|
|
85
|
+
}
|
|
86
|
+
return stopTask;
|
|
87
|
+
};
|
|
88
|
+
const cancel = async () => {
|
|
89
|
+
if (!closed) {
|
|
90
|
+
cancelled = true;
|
|
91
|
+
close();
|
|
92
|
+
void stop();
|
|
93
|
+
}
|
|
94
|
+
await done.promise;
|
|
95
|
+
};
|
|
96
|
+
const abort = () => {
|
|
97
|
+
void settle(cancel);
|
|
98
|
+
};
|
|
99
|
+
const signals = [request.signal, runtime.lifecycle.signal].filter((signal) => !!signal);
|
|
100
|
+
const output = new ReadableStream({
|
|
101
|
+
start(value) {
|
|
102
|
+
controller = value;
|
|
103
|
+
},
|
|
104
|
+
cancel() {
|
|
105
|
+
closed = true;
|
|
106
|
+
cancelled = true;
|
|
107
|
+
void stop();
|
|
108
|
+
return done.promise;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
for (const signal of signals)
|
|
112
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
113
|
+
if (signals.some((signal) => signal.aborted))
|
|
114
|
+
abort();
|
|
115
|
+
const pumps = readers.map(async (reader) => {
|
|
116
|
+
try {
|
|
117
|
+
const result = await settle(async () => {
|
|
118
|
+
while (true) {
|
|
119
|
+
const chunk = await reader.read();
|
|
120
|
+
if (chunk.done)
|
|
121
|
+
break;
|
|
122
|
+
if (!closed)
|
|
123
|
+
controller.enqueue(chunk.value);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
if (!result.ok && !cancelled) {
|
|
127
|
+
recordFailure(result.cause);
|
|
128
|
+
void stop();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
activeReaders.delete(reader);
|
|
133
|
+
reader.releaseLock();
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
const exited = (async () => {
|
|
137
|
+
const result = await settle(() => child.exited);
|
|
138
|
+
if (!result.ok) {
|
|
139
|
+
processFailure =
|
|
140
|
+
result.cause instanceof CapabilityError
|
|
141
|
+
? result.cause
|
|
142
|
+
: new CapabilityError('Kubernetes log stream failed', 'INTERNAL', {
|
|
143
|
+
reason: 'kubernetes-log-stream-failed',
|
|
144
|
+
cause: result.cause
|
|
145
|
+
});
|
|
146
|
+
void stop();
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (!cancelled && (result.value.code !== 0 || result.value.signal !== null)) {
|
|
150
|
+
processFailure = new CapabilityError('Kubernetes log process failed', 'INTERNAL', {
|
|
151
|
+
reason: 'kubernetes-log-process-failed',
|
|
152
|
+
cause: result.value,
|
|
153
|
+
details: {
|
|
154
|
+
namespace: request.namespace,
|
|
155
|
+
resource: request.resource,
|
|
156
|
+
exitCode: result.value.code,
|
|
157
|
+
signal: result.value.signal
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
void stop();
|
|
161
|
+
}
|
|
162
|
+
})();
|
|
163
|
+
void (async () => {
|
|
164
|
+
await Promise.all([...pumps, exited]);
|
|
165
|
+
await stopTask;
|
|
166
|
+
if (processFailure)
|
|
167
|
+
recordFailure(processFailure);
|
|
168
|
+
for (const signal of signals)
|
|
169
|
+
signal.removeEventListener('abort', abort);
|
|
170
|
+
if (failed) {
|
|
171
|
+
if (!closed) {
|
|
172
|
+
closed = true;
|
|
173
|
+
controller.error(failure);
|
|
174
|
+
}
|
|
175
|
+
done.reject(failure);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
close();
|
|
179
|
+
done.resolve();
|
|
180
|
+
}
|
|
181
|
+
})();
|
|
182
|
+
// A caller may consume output before it starts awaiting completion.
|
|
183
|
+
void settle(() => done.promise);
|
|
184
|
+
return { output, completion: done.promise, cancel };
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=kubernetes-log-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-log-stream.js","sourceRoot":"","sources":["../../src/infra/kubernetes-log-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `infra/logs` for DOKS clusters.
|
|
3
|
+
*
|
|
4
|
+
* `vibes infra logs` could read 34 Cloudflare sources and nothing running on
|
|
5
|
+
* Kubernetes. On 2026-09-08 that gap was measured from the other side: the only
|
|
6
|
+
* cluster logging stack in the account (Loki + Promtail on `exemplar-staging`)
|
|
7
|
+
* covered 3 of its own 7 nodes and 0 of production's, and had spent three
|
|
8
|
+
* months shipping nothing but its own namespaces' logs. Production workloads —
|
|
9
|
+
* `gitd`, `git-gateway`, `vibes-build-controller`, both realm federators — had
|
|
10
|
+
* no queryable log surface at all.
|
|
11
|
+
*
|
|
12
|
+
* This reads pod logs straight from the cluster API server through a
|
|
13
|
+
* short-lived DOKS-minted kubeconfig, so there is no agent to deploy, no log
|
|
14
|
+
* store to run, and no second copy of the data to pay for. The tradeoff is
|
|
15
|
+
* honest and worth naming: the retention is the node's, not ours. Kubernetes
|
|
16
|
+
* keeps only what kubelet has not rotated away, so this answers "what is this
|
|
17
|
+
* workload saying now" and cannot answer "what did it say last week".
|
|
18
|
+
*
|
|
19
|
+
* `sourceName` selects workloads as `namespace` or `namespace/podPrefix`;
|
|
20
|
+
* empty means every namespace the credential can read.
|
|
21
|
+
*/
|
|
22
|
+
import type { VibesRuntime } from '@vibesdotdev/kernel';
|
|
23
|
+
import type { InfraLogsDescriptor, LogsImplementation } from '@vibesdotdev/infra-core/kinds';
|
|
24
|
+
import { type KubernetesApi, type KubernetesFetchImpl } from '../kubernetes/authority.ts';
|
|
25
|
+
/** One log line, flattened to the shape `vibes infra logs` renders. */
|
|
26
|
+
export type { KubernetesLogRow } from '../schemas/logs.ts';
|
|
27
|
+
export declare function createDigitalOceanKubernetesLogsImplementation(runtime: VibesRuntime, descriptor: InfraLogsDescriptor, options?: {
|
|
28
|
+
environment?: unknown;
|
|
29
|
+
fetchImpl?: KubernetesFetchImpl;
|
|
30
|
+
/** Pre-built API, for tests and for callers that already hold a connection. */
|
|
31
|
+
api?: KubernetesApi;
|
|
32
|
+
}): LogsImplementation;
|
|
33
|
+
//# sourceMappingURL=kubernetes-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-logs.d.ts","sourceRoot":"","sources":["../../src/infra/kubernetes-logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EACX,mBAAmB,EAGnB,kBAAkB,EAClB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEN,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,MAAM,4BAA4B,CAAC;AAGpC,uEAAuE;AACvE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAsD3D,wBAAgB,8CAA8C,CAC7D,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,mBAAmB,EAC/B,OAAO,CAAC,EAAE;IACT,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,+EAA+E;IAC/E,GAAG,CAAC,EAAE,aAAa,CAAC;CACpB,GACC,kBAAkB,CAuJpB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default DOKS logs descriptor — registered at plugin load so
|
|
3
|
+
* `runtime.assets('infra/logs').descriptors()` lists a Kubernetes source the
|
|
4
|
+
* moment the DigitalOcean infra plugin loads, exactly as
|
|
5
|
+
* `cloudflare.logs.descriptor` does for Workers.
|
|
6
|
+
*
|
|
7
|
+
* `sources` stays empty on purpose. Which pods exist is cluster state, not
|
|
8
|
+
* declaration, and it changes between two invocations of the same command —
|
|
9
|
+
* the adapter reads it from the API server at query time.
|
|
10
|
+
*/
|
|
11
|
+
import type { InfraLogsDescriptor } from '@vibesdotdev/infra-core/kinds';
|
|
12
|
+
declare const descriptor: InfraLogsDescriptor;
|
|
13
|
+
export default descriptor;
|
|
14
|
+
//# sourceMappingURL=kubernetes-logs.descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-logs.descriptor.d.ts","sourceRoot":"","sources":["../../src/infra/kubernetes-logs.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,QAAA,MAAM,UAAU,EAAE,mBAejB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default DOKS logs descriptor — registered at plugin load so
|
|
3
|
+
* `runtime.assets('infra/logs').descriptors()` lists a Kubernetes source the
|
|
4
|
+
* moment the DigitalOcean infra plugin loads, exactly as
|
|
5
|
+
* `cloudflare.logs.descriptor` does for Workers.
|
|
6
|
+
*
|
|
7
|
+
* `sources` stays empty on purpose. Which pods exist is cluster state, not
|
|
8
|
+
* declaration, and it changes between two invocations of the same command —
|
|
9
|
+
* the adapter reads it from the API server at query time.
|
|
10
|
+
*/
|
|
11
|
+
const descriptor = {
|
|
12
|
+
kind: 'infra/logs',
|
|
13
|
+
id: 'doks-logs',
|
|
14
|
+
name: 'DigitalOcean Kubernetes Logs',
|
|
15
|
+
description: 'Pod logs read from a DOKS cluster API server through a short-lived kubeconfig',
|
|
16
|
+
tags: ['worker-logs'],
|
|
17
|
+
adapter: 'doks-logs',
|
|
18
|
+
adapterConfig: {
|
|
19
|
+
apiToken: { source: 'secret', key: 'DIGITALOCEAN_API_TOKEN' }
|
|
20
|
+
},
|
|
21
|
+
sources: [],
|
|
22
|
+
// Node-local retention: kubelet rotates, and nothing here copies logs
|
|
23
|
+
// anywhere. Declaring a hot/cold window would promise storage that does
|
|
24
|
+
// not exist.
|
|
25
|
+
alerts: []
|
|
26
|
+
};
|
|
27
|
+
export default descriptor;
|
|
28
|
+
//# sourceMappingURL=kubernetes-logs.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-logs.descriptor.js","sourceRoot":"","sources":["../../src/infra/kubernetes-logs.descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,UAAU,GAAwB;IACvC,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,8BAA8B;IACpC,WAAW,EAAE,+EAA+E;IAC5F,IAAI,EAAE,CAAC,aAAa,CAAC;IACrB,OAAO,EAAE,WAAW;IACpB,aAAa,EAAE;QACd,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,wBAAwB,EAAE;KAC7D;IACD,OAAO,EAAE,EAAE;IACX,sEAAsE;IACtE,wEAAwE;IACxE,aAAa;IACb,MAAM,EAAE,EAAE;CACV,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `infra/logs` for DOKS clusters.
|
|
3
|
+
*
|
|
4
|
+
* `vibes infra logs` could read 34 Cloudflare sources and nothing running on
|
|
5
|
+
* Kubernetes. On 2026-09-08 that gap was measured from the other side: the only
|
|
6
|
+
* cluster logging stack in the account (Loki + Promtail on `exemplar-staging`)
|
|
7
|
+
* covered 3 of its own 7 nodes and 0 of production's, and had spent three
|
|
8
|
+
* months shipping nothing but its own namespaces' logs. Production workloads —
|
|
9
|
+
* `gitd`, `git-gateway`, `vibes-build-controller`, both realm federators — had
|
|
10
|
+
* no queryable log surface at all.
|
|
11
|
+
*
|
|
12
|
+
* This reads pod logs straight from the cluster API server through a
|
|
13
|
+
* short-lived DOKS-minted kubeconfig, so there is no agent to deploy, no log
|
|
14
|
+
* store to run, and no second copy of the data to pay for. The tradeoff is
|
|
15
|
+
* honest and worth naming: the retention is the node's, not ours. Kubernetes
|
|
16
|
+
* keeps only what kubelet has not rotated away, so this answers "what is this
|
|
17
|
+
* workload saying now" and cannot answer "what did it say last week".
|
|
18
|
+
*
|
|
19
|
+
* `sourceName` selects workloads as `namespace` or `namespace/podPrefix`;
|
|
20
|
+
* empty means every namespace the credential can read.
|
|
21
|
+
*/
|
|
22
|
+
import { KubernetesLogConfigSchema, KubernetesLogPodListSchema } from "../schemas/kubernetes.js";
|
|
23
|
+
import { streamKubernetesLogs } from "./kubernetes-log-stream.js";
|
|
24
|
+
import { DigitalOceanKubernetesClient } from "../kubernetes/index.js";
|
|
25
|
+
import { createKubernetesApi } from "../kubernetes/authority.js";
|
|
26
|
+
import { createDigitalOceanProviderControlPlaneClient } from "./credentials.js";
|
|
27
|
+
/** Namespaces whose logs are the cluster's own plumbing, not a workload's. */
|
|
28
|
+
const SYSTEM_NAMESPACES = new Set(['kube-system', 'kube-public', 'kube-node-lease']);
|
|
29
|
+
/**
|
|
30
|
+
* A line is an error if it says so. Deliberately conservative: over-matching
|
|
31
|
+
* would make `--status error` useless, and a caller who wants everything can
|
|
32
|
+
* search instead.
|
|
33
|
+
*/
|
|
34
|
+
const ERROR_PATTERN = /\b(error|fatal|panic|exception|traceback)\b/i;
|
|
35
|
+
function isErrorLine(message) {
|
|
36
|
+
return ERROR_PATTERN.test(message);
|
|
37
|
+
}
|
|
38
|
+
/** Split `namespace/podPrefix` into its parts; empty selects the whole cluster. */
|
|
39
|
+
function parseSourceName(sourceName) {
|
|
40
|
+
const trimmed = sourceName.trim().replace(/^\/+|\/+$/g, '');
|
|
41
|
+
if (!trimmed)
|
|
42
|
+
return {};
|
|
43
|
+
const [namespace, ...rest] = trimmed.split('/');
|
|
44
|
+
const podPrefix = rest.join('/');
|
|
45
|
+
return { namespace, podPrefix: podPrefix || undefined };
|
|
46
|
+
}
|
|
47
|
+
/** Kubernetes only accepts whole seconds of lookback. */
|
|
48
|
+
function sinceSecondsFor(from, to) {
|
|
49
|
+
return Math.max(1, Math.ceil((to - from) / 1000));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* `--timestamps` prefixes every line with an RFC3339 stamp. A line that has
|
|
53
|
+
* none is kept with the query's own upper bound rather than dropped: a missing
|
|
54
|
+
* timestamp is a formatting detail, not a reason to lose the message.
|
|
55
|
+
*/
|
|
56
|
+
function splitTimestamp(line, fallback) {
|
|
57
|
+
const match = line.match(/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)\s(.*)$/s);
|
|
58
|
+
return match
|
|
59
|
+
? { timestamp: match[1], message: match[2] }
|
|
60
|
+
: { timestamp: fallback, message: line };
|
|
61
|
+
}
|
|
62
|
+
const NOT_SUPPORTED = 'The DOKS log adapter reads pod logs from the cluster API server. It has no ' +
|
|
63
|
+
'invocation model, so websocket tails, analytics, and error rates are not available; ' +
|
|
64
|
+
'use a historical query (--from/--to, --search, --status error) instead.';
|
|
65
|
+
export function createDigitalOceanKubernetesLogsImplementation(runtime, descriptor, options) {
|
|
66
|
+
const clusterRef = KubernetesLogConfigSchema.parse(descriptor.adapterConfig ?? {});
|
|
67
|
+
let apiPromise;
|
|
68
|
+
async function api() {
|
|
69
|
+
if (options?.api)
|
|
70
|
+
return options.api;
|
|
71
|
+
if (!apiPromise) {
|
|
72
|
+
apiPromise = (async () => {
|
|
73
|
+
const controlPlane = await createDigitalOceanProviderControlPlaneClient(runtime);
|
|
74
|
+
return createKubernetesApi({
|
|
75
|
+
runtime,
|
|
76
|
+
kubernetes: new DigitalOceanKubernetesClient(controlPlane),
|
|
77
|
+
cluster: { id: clusterRef.clusterId, name: clusterRef.clusterName },
|
|
78
|
+
fetchImpl: options?.fetchImpl ? options.fetchImpl : undefined
|
|
79
|
+
});
|
|
80
|
+
})();
|
|
81
|
+
}
|
|
82
|
+
return apiPromise;
|
|
83
|
+
}
|
|
84
|
+
async function listPods(connection, selector) {
|
|
85
|
+
const path = selector.namespace
|
|
86
|
+
? `/api/v1/namespaces/${encodeURIComponent(selector.namespace)}/pods`
|
|
87
|
+
: '/api/v1/pods';
|
|
88
|
+
const response = await connection.request(path, { method: 'GET' }, true);
|
|
89
|
+
if (!response)
|
|
90
|
+
return [];
|
|
91
|
+
const body = KubernetesLogPodListSchema.parse(await response.json());
|
|
92
|
+
const targets = [];
|
|
93
|
+
for (const item of body.items ?? []) {
|
|
94
|
+
const pod = item.metadata?.name;
|
|
95
|
+
const namespace = item.metadata?.namespace;
|
|
96
|
+
if (!pod || !namespace)
|
|
97
|
+
continue;
|
|
98
|
+
if (!selector.namespace && SYSTEM_NAMESPACES.has(namespace))
|
|
99
|
+
continue;
|
|
100
|
+
if (selector.podPrefix && !pod.startsWith(selector.podPrefix))
|
|
101
|
+
continue;
|
|
102
|
+
const containers = (item.spec?.containers ?? [])
|
|
103
|
+
.map((container) => container.name)
|
|
104
|
+
.filter((name) => Boolean(name));
|
|
105
|
+
if (containers.length > 0)
|
|
106
|
+
targets.push({ namespace, pod, containers });
|
|
107
|
+
}
|
|
108
|
+
return targets;
|
|
109
|
+
}
|
|
110
|
+
async function readContainerLog(connection, target, container, sinceSeconds, tailLines, fallbackTimestamp) {
|
|
111
|
+
const query = new URLSearchParams({
|
|
112
|
+
container,
|
|
113
|
+
timestamps: 'true',
|
|
114
|
+
sinceSeconds: String(sinceSeconds),
|
|
115
|
+
tailLines: String(tailLines)
|
|
116
|
+
});
|
|
117
|
+
const response = await connection.request(`/api/v1/namespaces/${encodeURIComponent(target.namespace)}/pods/${encodeURIComponent(target.pod)}/log?${query}`, { method: 'GET' }, true);
|
|
118
|
+
if (!response)
|
|
119
|
+
return [];
|
|
120
|
+
const text = await response.text();
|
|
121
|
+
return text
|
|
122
|
+
.split('\n')
|
|
123
|
+
.filter((line) => line.trim().length > 0)
|
|
124
|
+
.map((line) => {
|
|
125
|
+
const { timestamp, message } = splitTimestamp(line, fallbackTimestamp);
|
|
126
|
+
return {
|
|
127
|
+
timestamp,
|
|
128
|
+
cluster: connection.cluster.name,
|
|
129
|
+
namespace: target.namespace,
|
|
130
|
+
pod: target.pod,
|
|
131
|
+
container,
|
|
132
|
+
message,
|
|
133
|
+
outcome: isErrorLine(message) ? 'error' : 'ok'
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
streamLogs: (request) => streamKubernetesLogs(runtime, request),
|
|
139
|
+
async queryLogs(sourceName, queryOptions) {
|
|
140
|
+
const connection = await api();
|
|
141
|
+
const selector = parseSourceName(sourceName);
|
|
142
|
+
const targets = await listPods(connection, selector);
|
|
143
|
+
const sinceSeconds = sinceSecondsFor(queryOptions.from, queryOptions.to);
|
|
144
|
+
const limit = queryOptions.limit ?? 100;
|
|
145
|
+
const fallbackTimestamp = new Date(queryOptions.to).toISOString();
|
|
146
|
+
const perContainer = await Promise.all(targets.flatMap((target) => target.containers.map((container) => readContainerLog(connection, target, container, sinceSeconds, limit, fallbackTimestamp))));
|
|
147
|
+
const needle = queryOptions.needle;
|
|
148
|
+
const needleMatcher = needle
|
|
149
|
+
? needle.isRegex
|
|
150
|
+
? new RegExp(needle.value, needle.matchCase ? '' : 'i')
|
|
151
|
+
: undefined
|
|
152
|
+
: undefined;
|
|
153
|
+
let rows = perContainer.flat().filter((row) => {
|
|
154
|
+
const stamp = Date.parse(row.timestamp);
|
|
155
|
+
// A row whose timestamp will not parse is kept: `sinceSeconds`
|
|
156
|
+
// already bounded it server-side.
|
|
157
|
+
if (Number.isFinite(stamp) && (stamp < queryOptions.from || stamp > queryOptions.to))
|
|
158
|
+
return false;
|
|
159
|
+
if (!needle)
|
|
160
|
+
return true;
|
|
161
|
+
if (needleMatcher)
|
|
162
|
+
return needleMatcher.test(row.message);
|
|
163
|
+
return needle.matchCase
|
|
164
|
+
? row.message.includes(needle.value)
|
|
165
|
+
: row.message.toLowerCase().includes(needle.value.toLowerCase());
|
|
166
|
+
});
|
|
167
|
+
rows.sort((a, b) => (a.timestamp < b.timestamp ? 1 : a.timestamp > b.timestamp ? -1 : 0));
|
|
168
|
+
const total = rows.length;
|
|
169
|
+
rows = rows.slice(0, limit);
|
|
170
|
+
return {
|
|
171
|
+
events: rows,
|
|
172
|
+
rows,
|
|
173
|
+
count: rows.length,
|
|
174
|
+
facts: { cluster: connection.cluster.name, podsRead: targets.length },
|
|
175
|
+
// The denominator, so a truncated answer never reads as a complete one.
|
|
176
|
+
matchedBeforeLimit: total
|
|
177
|
+
};
|
|
178
|
+
},
|
|
179
|
+
async tailLogs() {
|
|
180
|
+
throw new Error(NOT_SUPPORTED);
|
|
181
|
+
},
|
|
182
|
+
async stopTail() {
|
|
183
|
+
throw new Error(NOT_SUPPORTED);
|
|
184
|
+
},
|
|
185
|
+
async listTails() {
|
|
186
|
+
throw new Error(NOT_SUPPORTED);
|
|
187
|
+
},
|
|
188
|
+
async getAnalytics() {
|
|
189
|
+
throw new Error(NOT_SUPPORTED);
|
|
190
|
+
},
|
|
191
|
+
async getErrorRate() {
|
|
192
|
+
throw new Error(NOT_SUPPORTED);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=kubernetes-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-logs.js","sourceRoot":"","sources":["../../src/infra/kubernetes-logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { DigitalOceanControlPlaneClient } from '../client/control-plane.ts';
|
|
2
|
+
export declare class DigitalOceanUtilizationClient {
|
|
3
|
+
private readonly client;
|
|
4
|
+
private readonly now;
|
|
5
|
+
constructor(client: DigitalOceanControlPlaneClient, now?: () => Date);
|
|
6
|
+
private metric;
|
|
7
|
+
report(windowHours?: number): Promise<{
|
|
8
|
+
provider: string;
|
|
9
|
+
collectedAt: string;
|
|
10
|
+
windowHours: number;
|
|
11
|
+
nodes: {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
fixedPool: boolean;
|
|
15
|
+
metrics: {
|
|
16
|
+
name: string;
|
|
17
|
+
sampleCount: number;
|
|
18
|
+
semantics: "unverified";
|
|
19
|
+
reason: string;
|
|
20
|
+
rawArithmeticMean?: number | undefined;
|
|
21
|
+
}[];
|
|
22
|
+
evidenceStatus: "unsupported" | "measured" | "partial";
|
|
23
|
+
errors: string[];
|
|
24
|
+
pool?: string | undefined;
|
|
25
|
+
}[];
|
|
26
|
+
apps: {
|
|
27
|
+
name: string;
|
|
28
|
+
components: {
|
|
29
|
+
name: string;
|
|
30
|
+
kind: string;
|
|
31
|
+
autoscaling: boolean;
|
|
32
|
+
evidenceStatus: "unsupported";
|
|
33
|
+
reason: string;
|
|
34
|
+
instanceSize?: string | undefined;
|
|
35
|
+
instanceCount?: number | undefined;
|
|
36
|
+
}[];
|
|
37
|
+
}[];
|
|
38
|
+
errors: {
|
|
39
|
+
source: string;
|
|
40
|
+
message: string;
|
|
41
|
+
}[];
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=utilization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilization.d.ts","sourceRoot":"","sources":["../../src/infra/utilization.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAsBjF,qBAAa,6BAA6B;IAExC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,MAAM,EAAE,8BAA8B,EACtC,GAAG,aAAmB;YAE1B,MAAM;IAOd,MAAM,CAAC,WAAW,SAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0G9B"}
|