@uploadista/observability 0.0.3 → 0.0.4
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/.turbo/turbo-build.log +19 -2
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +736 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +735 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -14
- package/dist/index.js.map +1 -0
- package/package.json +4 -3
- package/tsdown.config.ts +11 -0
- package/dist/core/errors.d.ts +0 -8
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -108
- package/dist/core/index.d.ts +0 -8
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -8
- package/dist/core/layers.d.ts +0 -104
- package/dist/core/layers.d.ts.map +0 -1
- package/dist/core/layers.js +0 -110
- package/dist/core/logging.d.ts +0 -18
- package/dist/core/logging.d.ts.map +0 -1
- package/dist/core/logging.js +0 -41
- package/dist/core/metrics.d.ts +0 -37
- package/dist/core/metrics.d.ts.map +0 -1
- package/dist/core/metrics.js +0 -72
- package/dist/core/testing.d.ts +0 -43
- package/dist/core/testing.d.ts.map +0 -1
- package/dist/core/testing.js +0 -93
- package/dist/core/tracing.d.ts +0 -19
- package/dist/core/tracing.d.ts.map +0 -1
- package/dist/core/tracing.js +0 -43
- package/dist/core/utilities.d.ts +0 -11
- package/dist/core/utilities.d.ts.map +0 -1
- package/dist/core/utilities.js +0 -41
- package/dist/flow/errors.d.ts +0 -15
- package/dist/flow/errors.d.ts.map +0 -1
- package/dist/flow/errors.js +0 -66
- package/dist/flow/index.d.ts +0 -6
- package/dist/flow/index.d.ts.map +0 -1
- package/dist/flow/index.js +0 -6
- package/dist/flow/layers.d.ts +0 -40
- package/dist/flow/layers.d.ts.map +0 -1
- package/dist/flow/layers.js +0 -94
- package/dist/flow/metrics.d.ts +0 -52
- package/dist/flow/metrics.d.ts.map +0 -1
- package/dist/flow/metrics.js +0 -89
- package/dist/flow/testing.d.ts +0 -11
- package/dist/flow/testing.d.ts.map +0 -1
- package/dist/flow/testing.js +0 -27
- package/dist/flow/tracing.d.ts +0 -35
- package/dist/flow/tracing.d.ts.map +0 -1
- package/dist/flow/tracing.js +0 -42
- package/dist/service/metrics.d.ts +0 -23
- package/dist/service/metrics.d.ts.map +0 -1
- package/dist/service/metrics.js +0 -17
- package/dist/storage/azure.d.ts +0 -47
- package/dist/storage/azure.d.ts.map +0 -1
- package/dist/storage/azure.js +0 -89
- package/dist/storage/filesystem.d.ts +0 -47
- package/dist/storage/filesystem.d.ts.map +0 -1
- package/dist/storage/filesystem.js +0 -70
- package/dist/storage/gcs.d.ts +0 -47
- package/dist/storage/gcs.d.ts.map +0 -1
- package/dist/storage/gcs.js +0 -90
- package/dist/storage/index.d.ts +0 -5
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -5
- package/dist/storage/s3.d.ts +0 -47
- package/dist/storage/s3.d.ts.map +0 -1
- package/dist/storage/s3.js +0 -67
- package/dist/test-observability.d.ts +0 -12
- package/dist/test-observability.d.ts.map +0 -1
- package/dist/test-observability.js +0 -153
- package/dist/upload/errors.d.ts +0 -16
- package/dist/upload/errors.d.ts.map +0 -1
- package/dist/upload/errors.js +0 -107
- package/dist/upload/index.d.ts +0 -6
- package/dist/upload/index.d.ts.map +0 -1
- package/dist/upload/index.js +0 -6
- package/dist/upload/layers.d.ts +0 -32
- package/dist/upload/layers.d.ts.map +0 -1
- package/dist/upload/layers.js +0 -63
- package/dist/upload/metrics.d.ts +0 -46
- package/dist/upload/metrics.d.ts.map +0 -1
- package/dist/upload/metrics.js +0 -80
- package/dist/upload/testing.d.ts +0 -32
- package/dist/upload/testing.d.ts.map +0 -1
- package/dist/upload/testing.js +0 -52
- package/dist/upload/tracing.d.ts +0 -25
- package/dist/upload/tracing.d.ts.map +0 -1
- package/dist/upload/tracing.js +0 -35
package/dist/storage/azure.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { type Effect, Layer } from "effect";
|
|
2
|
-
import { type StorageMetrics } from "../core/metrics.js";
|
|
3
|
-
export declare const azureMetrics: {
|
|
4
|
-
uploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
5
|
-
activeUploadsGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
6
|
-
uploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
7
|
-
uploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
8
|
-
partUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
9
|
-
fileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
10
|
-
partSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
11
|
-
uploadRequestsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
12
|
-
uploadPartsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
13
|
-
uploadSuccessTotal: import("effect/Metric").Metric.Counter<number>;
|
|
14
|
-
uploadErrorsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
15
|
-
apiCallsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
16
|
-
};
|
|
17
|
-
export declare const AzureTracingLayer: Layer.Layer<{
|
|
18
|
-
serviceName: string;
|
|
19
|
-
}, never, never>;
|
|
20
|
-
export declare const trackAzureError: (operation: string, error: unknown, context?: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
21
|
-
export declare const AzureObservabilityLayer: Layer.Layer<{
|
|
22
|
-
serviceName: string;
|
|
23
|
-
}, never, never>;
|
|
24
|
-
export declare const withAzureUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
25
|
-
export declare const withAzureApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
26
|
-
export declare const withAzureTimingMetrics: <A, E, R>(metric: import("effect/Metric").Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
27
|
-
export declare const withAzureOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
|
|
28
|
-
export declare const withAzureSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
|
|
29
|
-
export declare const logAzureOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
|
|
30
|
-
export declare const logAzureUploadProgress: (uploadId: string, progress: {
|
|
31
|
-
uploadedBytes: number;
|
|
32
|
-
totalBytes: number;
|
|
33
|
-
partNumber?: number;
|
|
34
|
-
speed?: number;
|
|
35
|
-
}) => Effect.Effect<void, never, never>;
|
|
36
|
-
export declare const logAzureUploadCompletion: (uploadId: string, metrics: {
|
|
37
|
-
fileSize: number;
|
|
38
|
-
totalDurationMs: number;
|
|
39
|
-
partsCount?: number;
|
|
40
|
-
averagePartSize?: number;
|
|
41
|
-
throughputBps?: number;
|
|
42
|
-
retryCount?: number;
|
|
43
|
-
}) => Effect.Effect<void, never, never>;
|
|
44
|
-
export declare const logAzureContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
45
|
-
export declare const azureUploadRequestsTotal: import("effect/Metric").Metric.Counter<number>, azureUploadPartsTotal: import("effect/Metric").Metric.Counter<number>, azureUploadSuccessTotal: import("effect/Metric").Metric.Counter<number>, azureUploadErrorsTotal: import("effect/Metric").Metric.Counter<number>, azureApiCallsTotal: import("effect/Metric").Metric.Counter<number>, azureUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, azurePartUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, azureFileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, azurePartSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, azureActiveUploadsGauge: import("effect/Metric").Metric.Gauge<number>, azureUploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>, azureUploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
46
|
-
export type AzureMetrics = StorageMetrics;
|
|
47
|
-
//# sourceMappingURL=azure.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"azure.d.ts","sourceRoot":"","sources":["../../src/storage/azure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAW5C,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgB/E,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAAqC,CAAC;AAG/D,eAAO,MAAM,iBAAiB;;gBAA0C,CAAC;AAuDzE,eAAO,MAAM,eAAe,6GAI3B,CAAC;AAGF,eAAO,MAAM,uBAAuB;;gBAGnC,CAAC;AAMF,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5C,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BACsB,CAAC;AAEvD,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACzC,WAAW,MAAM,EACjB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BACoB,CAAC;AAErD,eAAO,MAAM,sBAAsB,+HAAoB,CAAC;AAExD,eAAO,MAAM,yBAAyB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC/C,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,WAAW,MAAM,2BAQhB,CAAC;AAGJ,eAAO,MAAM,aAAa,GACvB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,MAAM,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAChE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,6CAC+B,CAAC;AAGjE,eAAO,MAAM,iBAAiB,4HAA+C,CAAC;AAC9E,eAAO,MAAM,sBAAsB;;;;;uCAGlC,CAAC;AACF,eAAO,MAAM,wBAAwB;;;;;;;uCAGpC,CAAC;AACF,eAAO,MAAM,eAAe,0FAAiB,CAAC;AAG9C,eAAO,MACgB,wBAAwB,kDAC3B,qBAAqB,kDACnB,uBAAuB,kDACxB,sBAAsB,kDAC1B,kBAAkB,kDACR,4BAA4B,sJACxB,gCAAgC,sJAC1C,sBAAsB,sJACtB,sBAAsB,sJACrB,uBAAuB,gDACpB,0BAA0B,gDAC3B,yBAAyB,gDACjC,CAAC;AAGjB,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC"}
|
package/dist/storage/azure.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Layer } from "effect";
|
|
2
|
-
import { createStorageErrorTracker, } from "../core/errors.js";
|
|
3
|
-
import { logStorageOperation, logUploadCompletion, logUploadProgress, logWithContext, } from "../core/logging.js";
|
|
4
|
-
import { createStorageMetrics } from "../core/metrics.js";
|
|
5
|
-
import { createStorageTracingLayer, withStorageSpan } from "../core/tracing.js";
|
|
6
|
-
import { withApiMetrics, withStorageOperationMetrics, withTimingMetrics, withUploadMetrics, } from "../core/utilities.js";
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// Azure Blob Storage-Specific Observability
|
|
9
|
-
// ============================================================================
|
|
10
|
-
const STORAGE_TYPE = "azure";
|
|
11
|
-
// Azure-specific metrics
|
|
12
|
-
export const azureMetrics = createStorageMetrics(STORAGE_TYPE);
|
|
13
|
-
// Azure-specific tracing layer
|
|
14
|
-
export const AzureTracingLayer = createStorageTracingLayer(STORAGE_TYPE);
|
|
15
|
-
// Azure-specific error classification
|
|
16
|
-
const classifyAzureError = (error) => {
|
|
17
|
-
if (!error || typeof error !== "object")
|
|
18
|
-
return null;
|
|
19
|
-
const errorCode = "code" in error
|
|
20
|
-
? error.code
|
|
21
|
-
: "statusCode" in error
|
|
22
|
-
? error.statusCode
|
|
23
|
-
: undefined;
|
|
24
|
-
if (!errorCode)
|
|
25
|
-
return null;
|
|
26
|
-
// Azure-specific error codes
|
|
27
|
-
switch (errorCode) {
|
|
28
|
-
case "BlobNotFound":
|
|
29
|
-
case "ContainerNotFound":
|
|
30
|
-
case "InvalidBlobOrBlock":
|
|
31
|
-
return "client_error";
|
|
32
|
-
case "ContainerAlreadyExists":
|
|
33
|
-
case "BlobAlreadyExists":
|
|
34
|
-
return "client_error";
|
|
35
|
-
case "InvalidBlockId":
|
|
36
|
-
case "InvalidBlockList":
|
|
37
|
-
case "InvalidBlobType":
|
|
38
|
-
return "client_error";
|
|
39
|
-
case "RequestBodyTooLarge":
|
|
40
|
-
case "InvalidHeaderValue":
|
|
41
|
-
return "client_error";
|
|
42
|
-
case "AuthenticationFailed":
|
|
43
|
-
case "InvalidAuthenticationInfo":
|
|
44
|
-
return "authentication_error";
|
|
45
|
-
case "AccountIsDisabled":
|
|
46
|
-
return "authorization_error";
|
|
47
|
-
case "InsufficientAccountPermissions":
|
|
48
|
-
return "authorization_error";
|
|
49
|
-
case "OperationTimedOut":
|
|
50
|
-
case "ServerBusy":
|
|
51
|
-
case "InternalError":
|
|
52
|
-
return "server_error";
|
|
53
|
-
default:
|
|
54
|
-
// Check for HTTP status codes
|
|
55
|
-
if (typeof errorCode === "number") {
|
|
56
|
-
if (errorCode >= 500)
|
|
57
|
-
return "server_error";
|
|
58
|
-
if (errorCode === 429)
|
|
59
|
-
return "throttling_error";
|
|
60
|
-
if (errorCode === 403)
|
|
61
|
-
return "authorization_error";
|
|
62
|
-
if (errorCode === 401)
|
|
63
|
-
return "authentication_error";
|
|
64
|
-
if (errorCode >= 400)
|
|
65
|
-
return "client_error";
|
|
66
|
-
}
|
|
67
|
-
return null; // Fall back to generic classification
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
// Azure-specific error tracker
|
|
71
|
-
export const trackAzureError = createStorageErrorTracker(STORAGE_TYPE, azureMetrics, classifyAzureError);
|
|
72
|
-
// Azure-specific observability layer
|
|
73
|
-
export const AzureObservabilityLayer = Layer.mergeAll(AzureTracingLayer);
|
|
74
|
-
// ============================================================================
|
|
75
|
-
// Azure Utility Functions
|
|
76
|
-
// ============================================================================
|
|
77
|
-
export const withAzureUploadMetrics = (uploadId, effect) => withUploadMetrics(azureMetrics, uploadId, effect);
|
|
78
|
-
export const withAzureApiMetrics = (operation, effect) => withApiMetrics(azureMetrics, operation, effect);
|
|
79
|
-
export const withAzureTimingMetrics = withTimingMetrics;
|
|
80
|
-
export const withAzureOperationMetrics = (operation, uploadId, effect, fileSize) => withStorageOperationMetrics(azureMetrics, operation, uploadId, effect, fileSize);
|
|
81
|
-
// Azure-specific span wrapper
|
|
82
|
-
export const withAzureSpan = (operation, attributes) => (effect) => withStorageSpan(operation, STORAGE_TYPE, attributes)(effect);
|
|
83
|
-
// Azure-specific logging functions
|
|
84
|
-
export const logAzureOperation = logStorageOperation.bind(null, STORAGE_TYPE);
|
|
85
|
-
export const logAzureUploadProgress = logUploadProgress.bind(null, STORAGE_TYPE);
|
|
86
|
-
export const logAzureUploadCompletion = logUploadCompletion.bind(null, STORAGE_TYPE);
|
|
87
|
-
export const logAzureContext = logWithContext;
|
|
88
|
-
// Export metrics for external access
|
|
89
|
-
export const { uploadRequestsTotal: azureUploadRequestsTotal, uploadPartsTotal: azureUploadPartsTotal, uploadSuccessTotal: azureUploadSuccessTotal, uploadErrorsTotal: azureUploadErrorsTotal, apiCallsTotal: azureApiCallsTotal, uploadDurationHistogram: azureUploadDurationHistogram, partUploadDurationHistogram: azurePartUploadDurationHistogram, fileSizeHistogram: azureFileSizeHistogram, partSizeHistogram: azurePartSizeHistogram, activeUploadsGauge: azureActiveUploadsGauge, uploadThroughputGauge: azureUploadThroughputGauge, uploadLatencySummary: azureUploadLatencySummary, } = azureMetrics;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { type Effect, Layer } from "effect";
|
|
2
|
-
import { type StorageMetrics } from "../core/metrics.js";
|
|
3
|
-
export declare const filesystemMetrics: {
|
|
4
|
-
uploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
5
|
-
activeUploadsGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
6
|
-
uploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
7
|
-
uploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
8
|
-
partUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
9
|
-
fileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
10
|
-
partSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
11
|
-
uploadRequestsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
12
|
-
uploadPartsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
13
|
-
uploadSuccessTotal: import("effect/Metric").Metric.Counter<number>;
|
|
14
|
-
uploadErrorsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
15
|
-
apiCallsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
16
|
-
};
|
|
17
|
-
export declare const FilesystemTracingLayer: Layer.Layer<{
|
|
18
|
-
serviceName: string;
|
|
19
|
-
}, never, never>;
|
|
20
|
-
export declare const trackFilesystemError: (operation: string, error: unknown, context?: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
21
|
-
export declare const FilesystemObservabilityLayer: Layer.Layer<{
|
|
22
|
-
serviceName: string;
|
|
23
|
-
}, never, never>;
|
|
24
|
-
export declare const withFilesystemUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
25
|
-
export declare const withFilesystemApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
26
|
-
export declare const withFilesystemTimingMetrics: <A, E, R>(metric: import("effect/Metric").Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
27
|
-
export declare const withFilesystemOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
|
|
28
|
-
export declare const withFilesystemSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
|
|
29
|
-
export declare const logFilesystemOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
|
|
30
|
-
export declare const logFilesystemUploadProgress: (uploadId: string, progress: {
|
|
31
|
-
uploadedBytes: number;
|
|
32
|
-
totalBytes: number;
|
|
33
|
-
partNumber?: number;
|
|
34
|
-
speed?: number;
|
|
35
|
-
}) => Effect.Effect<void, never, never>;
|
|
36
|
-
export declare const logFilesystemUploadCompletion: (uploadId: string, metrics: {
|
|
37
|
-
fileSize: number;
|
|
38
|
-
totalDurationMs: number;
|
|
39
|
-
partsCount?: number;
|
|
40
|
-
averagePartSize?: number;
|
|
41
|
-
throughputBps?: number;
|
|
42
|
-
retryCount?: number;
|
|
43
|
-
}) => Effect.Effect<void, never, never>;
|
|
44
|
-
export declare const logFilesystemContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
45
|
-
export declare const filesystemUploadRequestsTotal: import("effect/Metric").Metric.Counter<number>, filesystemUploadPartsTotal: import("effect/Metric").Metric.Counter<number>, filesystemUploadSuccessTotal: import("effect/Metric").Metric.Counter<number>, filesystemUploadErrorsTotal: import("effect/Metric").Metric.Counter<number>, filesystemApiCallsTotal: import("effect/Metric").Metric.Counter<number>, filesystemUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, filesystemPartUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, filesystemFileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, filesystemPartSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, filesystemActiveUploadsGauge: import("effect/Metric").Metric.Gauge<number>, filesystemUploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>, filesystemUploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
46
|
-
export type FilesystemMetrics = StorageMetrics;
|
|
47
|
-
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/storage/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAW5C,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgB/E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAAqC,CAAC;AAGpE,eAAO,MAAM,sBAAsB;;gBAA0C,CAAC;AA0C9E,eAAO,MAAM,oBAAoB,6GAIhC,CAAC;AAGF,eAAO,MAAM,4BAA4B;;gBAGxC,CAAC;AAMF,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACjD,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BAC2B,CAAC;AAE5D,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9C,WAAW,MAAM,EACjB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BACyB,CAAC;AAE1D,eAAO,MAAM,2BAA2B,+HAAoB,CAAC;AAE7D,eAAO,MAAM,8BAA8B,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,WAAW,MAAM,2BAQhB,CAAC;AAGJ,eAAO,MAAM,kBAAkB,GAC5B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,MAAM,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAChE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,6CAC+B,CAAC;AAGjE,eAAO,MAAM,sBAAsB,4HAGlC,CAAC;AACF,eAAO,MAAM,2BAA2B;;;;;uCAGvC,CAAC;AACF,eAAO,MAAM,6BAA6B;;;;;;;uCAGzC,CAAC;AACF,eAAO,MAAM,oBAAoB,0FAAiB,CAAC;AAGnD,eAAO,MACgB,6BAA6B,kDAChC,0BAA0B,kDACxB,4BAA4B,kDAC7B,2BAA2B,kDAC/B,uBAAuB,kDACb,iCAAiC,sJAC7B,qCAAqC,sJAC/C,2BAA2B,sJAC3B,2BAA2B,sJAC1B,4BAA4B,gDACzB,+BAA+B,gDAChC,8BAA8B,gDACjC,CAAC;AAGtB,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { Layer } from "effect";
|
|
2
|
-
import { createStorageErrorTracker, } from "../core/errors.js";
|
|
3
|
-
import { logStorageOperation, logUploadCompletion, logUploadProgress, logWithContext, } from "../core/logging.js";
|
|
4
|
-
import { createStorageMetrics } from "../core/metrics.js";
|
|
5
|
-
import { createStorageTracingLayer, withStorageSpan } from "../core/tracing.js";
|
|
6
|
-
import { withApiMetrics, withStorageOperationMetrics, withTimingMetrics, withUploadMetrics, } from "../core/utilities.js";
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// Filesystem Storage-Specific Observability
|
|
9
|
-
// ============================================================================
|
|
10
|
-
const STORAGE_TYPE = "filesystem";
|
|
11
|
-
// Filesystem-specific metrics
|
|
12
|
-
export const filesystemMetrics = createStorageMetrics(STORAGE_TYPE);
|
|
13
|
-
// Filesystem-specific tracing layer
|
|
14
|
-
export const FilesystemTracingLayer = createStorageTracingLayer(STORAGE_TYPE);
|
|
15
|
-
// Filesystem-specific error classification
|
|
16
|
-
const classifyFilesystemError = (error) => {
|
|
17
|
-
if (!error || typeof error !== "object")
|
|
18
|
-
return null;
|
|
19
|
-
const errorCode = "code" in error ? error.code : undefined;
|
|
20
|
-
if (!errorCode)
|
|
21
|
-
return null;
|
|
22
|
-
// Node.js filesystem error codes
|
|
23
|
-
switch (errorCode) {
|
|
24
|
-
case "ENOENT": // File/directory not found
|
|
25
|
-
case "ENOTDIR": // Not a directory
|
|
26
|
-
return "client_error";
|
|
27
|
-
case "EEXIST": // File/directory already exists
|
|
28
|
-
return "client_error";
|
|
29
|
-
case "EISDIR": // Is a directory
|
|
30
|
-
return "client_error";
|
|
31
|
-
case "EINVAL": // Invalid argument
|
|
32
|
-
case "ENAMETOOLONG": // Filename too long
|
|
33
|
-
return "client_error";
|
|
34
|
-
case "EACCES": // Permission denied
|
|
35
|
-
case "EPERM": // Operation not permitted
|
|
36
|
-
return "authorization_error";
|
|
37
|
-
case "ENOSPC": // No space left on device
|
|
38
|
-
case "EDQUOT": // Disk quota exceeded
|
|
39
|
-
return "server_error";
|
|
40
|
-
case "EIO": // I/O error
|
|
41
|
-
case "EROFS": // Read-only filesystem
|
|
42
|
-
case "EMFILE": // Too many open files
|
|
43
|
-
case "ENFILE": // File table overflow
|
|
44
|
-
return "server_error";
|
|
45
|
-
case "EBUSY": // Device or resource busy
|
|
46
|
-
return "throttling_error";
|
|
47
|
-
default:
|
|
48
|
-
return null; // Fall back to generic classification
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
// Filesystem-specific error tracker
|
|
52
|
-
export const trackFilesystemError = createStorageErrorTracker(STORAGE_TYPE, filesystemMetrics, classifyFilesystemError);
|
|
53
|
-
// Filesystem-specific observability layer
|
|
54
|
-
export const FilesystemObservabilityLayer = Layer.mergeAll(FilesystemTracingLayer);
|
|
55
|
-
// ============================================================================
|
|
56
|
-
// Filesystem Utility Functions
|
|
57
|
-
// ============================================================================
|
|
58
|
-
export const withFilesystemUploadMetrics = (uploadId, effect) => withUploadMetrics(filesystemMetrics, uploadId, effect);
|
|
59
|
-
export const withFilesystemApiMetrics = (operation, effect) => withApiMetrics(filesystemMetrics, operation, effect);
|
|
60
|
-
export const withFilesystemTimingMetrics = withTimingMetrics;
|
|
61
|
-
export const withFilesystemOperationMetrics = (operation, uploadId, effect, fileSize) => withStorageOperationMetrics(filesystemMetrics, operation, uploadId, effect, fileSize);
|
|
62
|
-
// Filesystem-specific span wrapper
|
|
63
|
-
export const withFilesystemSpan = (operation, attributes) => (effect) => withStorageSpan(operation, STORAGE_TYPE, attributes)(effect);
|
|
64
|
-
// Filesystem-specific logging functions
|
|
65
|
-
export const logFilesystemOperation = logStorageOperation.bind(null, STORAGE_TYPE);
|
|
66
|
-
export const logFilesystemUploadProgress = logUploadProgress.bind(null, STORAGE_TYPE);
|
|
67
|
-
export const logFilesystemUploadCompletion = logUploadCompletion.bind(null, STORAGE_TYPE);
|
|
68
|
-
export const logFilesystemContext = logWithContext;
|
|
69
|
-
// Export metrics for external access
|
|
70
|
-
export const { uploadRequestsTotal: filesystemUploadRequestsTotal, uploadPartsTotal: filesystemUploadPartsTotal, uploadSuccessTotal: filesystemUploadSuccessTotal, uploadErrorsTotal: filesystemUploadErrorsTotal, apiCallsTotal: filesystemApiCallsTotal, uploadDurationHistogram: filesystemUploadDurationHistogram, partUploadDurationHistogram: filesystemPartUploadDurationHistogram, fileSizeHistogram: filesystemFileSizeHistogram, partSizeHistogram: filesystemPartSizeHistogram, activeUploadsGauge: filesystemActiveUploadsGauge, uploadThroughputGauge: filesystemUploadThroughputGauge, uploadLatencySummary: filesystemUploadLatencySummary, } = filesystemMetrics;
|
package/dist/storage/gcs.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { type Effect, Layer } from "effect";
|
|
2
|
-
import { type StorageMetrics } from "../core/metrics.js";
|
|
3
|
-
export declare const gcsMetrics: {
|
|
4
|
-
uploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
5
|
-
activeUploadsGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
6
|
-
uploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
7
|
-
uploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
8
|
-
partUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
9
|
-
fileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
10
|
-
partSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
11
|
-
uploadRequestsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
12
|
-
uploadPartsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
13
|
-
uploadSuccessTotal: import("effect/Metric").Metric.Counter<number>;
|
|
14
|
-
uploadErrorsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
15
|
-
apiCallsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
16
|
-
};
|
|
17
|
-
export declare const GCSTracingLayer: Layer.Layer<{
|
|
18
|
-
serviceName: string;
|
|
19
|
-
}, never, never>;
|
|
20
|
-
export declare const trackGCSError: (operation: string, error: unknown, context?: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
21
|
-
export declare const GCSObservabilityLayer: Layer.Layer<{
|
|
22
|
-
serviceName: string;
|
|
23
|
-
}, never, never>;
|
|
24
|
-
export declare const withGCSUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
25
|
-
export declare const withGCSApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
26
|
-
export declare const withGCSTimingMetrics: <A, E, R>(metric: import("effect/Metric").Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
27
|
-
export declare const withGCSOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
|
|
28
|
-
export declare const withGCSSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
|
|
29
|
-
export declare const logGCSOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
|
|
30
|
-
export declare const logGCSUploadProgress: (uploadId: string, progress: {
|
|
31
|
-
uploadedBytes: number;
|
|
32
|
-
totalBytes: number;
|
|
33
|
-
partNumber?: number;
|
|
34
|
-
speed?: number;
|
|
35
|
-
}) => Effect.Effect<void, never, never>;
|
|
36
|
-
export declare const logGCSUploadCompletion: (uploadId: string, metrics: {
|
|
37
|
-
fileSize: number;
|
|
38
|
-
totalDurationMs: number;
|
|
39
|
-
partsCount?: number;
|
|
40
|
-
averagePartSize?: number;
|
|
41
|
-
throughputBps?: number;
|
|
42
|
-
retryCount?: number;
|
|
43
|
-
}) => Effect.Effect<void, never, never>;
|
|
44
|
-
export declare const logGCSContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
45
|
-
export declare const gcsUploadRequestsTotal: import("effect/Metric").Metric.Counter<number>, gcsUploadPartsTotal: import("effect/Metric").Metric.Counter<number>, gcsUploadSuccessTotal: import("effect/Metric").Metric.Counter<number>, gcsUploadErrorsTotal: import("effect/Metric").Metric.Counter<number>, gcsApiCallsTotal: import("effect/Metric").Metric.Counter<number>, gcsUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, gcsPartUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, gcsFileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, gcsPartSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, gcsActiveUploadsGauge: import("effect/Metric").Metric.Gauge<number>, gcsUploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>, gcsUploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
46
|
-
export type GCSMetrics = StorageMetrics;
|
|
47
|
-
//# sourceMappingURL=gcs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gcs.d.ts","sourceRoot":"","sources":["../../src/storage/gcs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAW5C,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgB/E,eAAO,MAAM,UAAU;;;;;;;;;;;;;CAAqC,CAAC;AAG7D,eAAO,MAAM,eAAe;;gBAA0C,CAAC;AAwDvE,eAAO,MAAM,aAAa,6GAIzB,CAAC;AAGF,eAAO,MAAM,qBAAqB;;gBAGjC,CAAC;AAMF,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC1C,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BACoB,CAAC;AAErD,eAAO,MAAM,iBAAiB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACvC,WAAW,MAAM,EACjB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BACkB,CAAC;AAEnD,eAAO,MAAM,oBAAoB,+HAAoB,CAAC;AAEtD,eAAO,MAAM,uBAAuB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7C,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,WAAW,MAAM,2BAQhB,CAAC;AAGJ,eAAO,MAAM,WAAW,GACrB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,MAAM,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAChE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,6CAC+B,CAAC;AAGjE,eAAO,MAAM,eAAe,4HAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB;;;;;uCAA6C,CAAC;AAC/E,eAAO,MAAM,sBAAsB;;;;;;;uCAGlC,CAAC;AACF,eAAO,MAAM,aAAa,0FAAiB,CAAC;AAG5C,eAAO,MACgB,sBAAsB,kDACzB,mBAAmB,kDACjB,qBAAqB,kDACtB,oBAAoB,kDACxB,gBAAgB,kDACN,0BAA0B,sJACtB,8BAA8B,sJACxC,oBAAoB,sJACpB,oBAAoB,sJACnB,qBAAqB,gDAClB,wBAAwB,gDACzB,uBAAuB,gDACjC,CAAC;AAGf,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC"}
|
package/dist/storage/gcs.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Layer } from "effect";
|
|
2
|
-
import { createStorageErrorTracker, } from "../core/errors.js";
|
|
3
|
-
import { logStorageOperation, logUploadCompletion, logUploadProgress, logWithContext, } from "../core/logging.js";
|
|
4
|
-
import { createStorageMetrics } from "../core/metrics.js";
|
|
5
|
-
import { createStorageTracingLayer, withStorageSpan } from "../core/tracing.js";
|
|
6
|
-
import { withApiMetrics, withStorageOperationMetrics, withTimingMetrics, withUploadMetrics, } from "../core/utilities.js";
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// Google Cloud Storage-Specific Observability
|
|
9
|
-
// ============================================================================
|
|
10
|
-
const STORAGE_TYPE = "gcs";
|
|
11
|
-
// GCS-specific metrics
|
|
12
|
-
export const gcsMetrics = createStorageMetrics(STORAGE_TYPE);
|
|
13
|
-
// GCS-specific tracing layer
|
|
14
|
-
export const GCSTracingLayer = createStorageTracingLayer(STORAGE_TYPE);
|
|
15
|
-
// GCS-specific error classification
|
|
16
|
-
const classifyGCSError = (error) => {
|
|
17
|
-
if (!error || typeof error !== "object")
|
|
18
|
-
return null;
|
|
19
|
-
const errorCode = "code" in error ? error.code : "status" in error ? error.status : undefined;
|
|
20
|
-
if (!errorCode)
|
|
21
|
-
return null;
|
|
22
|
-
// GCS-specific error codes
|
|
23
|
-
switch (errorCode) {
|
|
24
|
-
case "NoSuchBucket":
|
|
25
|
-
case "NoSuchKey":
|
|
26
|
-
case "NoSuchUpload":
|
|
27
|
-
return "client_error";
|
|
28
|
-
case "BucketAlreadyOwnedByYou":
|
|
29
|
-
case "BucketNotEmpty":
|
|
30
|
-
return "client_error";
|
|
31
|
-
case "InvalidBucketName":
|
|
32
|
-
case "InvalidArgument":
|
|
33
|
-
case "InvalidPart":
|
|
34
|
-
case "InvalidPartOrder":
|
|
35
|
-
return "client_error";
|
|
36
|
-
case "EntityTooSmall":
|
|
37
|
-
case "EntityTooLarge":
|
|
38
|
-
return "client_error";
|
|
39
|
-
case "MalformedPolicy":
|
|
40
|
-
return "client_error";
|
|
41
|
-
case "Unauthorized":
|
|
42
|
-
case "AuthenticationRequired":
|
|
43
|
-
return "authentication_error";
|
|
44
|
-
case "Forbidden":
|
|
45
|
-
case "AccessDenied":
|
|
46
|
-
return "authorization_error";
|
|
47
|
-
case "TooManyRequests":
|
|
48
|
-
case "RateLimitExceeded":
|
|
49
|
-
return "throttling_error";
|
|
50
|
-
case "InternalError":
|
|
51
|
-
case "ServiceUnavailable":
|
|
52
|
-
case "BackendError":
|
|
53
|
-
return "server_error";
|
|
54
|
-
default:
|
|
55
|
-
// Check for HTTP status codes
|
|
56
|
-
if (typeof errorCode === "number") {
|
|
57
|
-
if (errorCode >= 500)
|
|
58
|
-
return "server_error";
|
|
59
|
-
if (errorCode === 429)
|
|
60
|
-
return "throttling_error";
|
|
61
|
-
if (errorCode === 403)
|
|
62
|
-
return "authorization_error";
|
|
63
|
-
if (errorCode === 401)
|
|
64
|
-
return "authentication_error";
|
|
65
|
-
if (errorCode >= 400)
|
|
66
|
-
return "client_error";
|
|
67
|
-
}
|
|
68
|
-
return null; // Fall back to generic classification
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
// GCS-specific error tracker
|
|
72
|
-
export const trackGCSError = createStorageErrorTracker(STORAGE_TYPE, gcsMetrics, classifyGCSError);
|
|
73
|
-
// GCS-specific observability layer
|
|
74
|
-
export const GCSObservabilityLayer = Layer.mergeAll(GCSTracingLayer);
|
|
75
|
-
// ============================================================================
|
|
76
|
-
// GCS Utility Functions
|
|
77
|
-
// ============================================================================
|
|
78
|
-
export const withGCSUploadMetrics = (uploadId, effect) => withUploadMetrics(gcsMetrics, uploadId, effect);
|
|
79
|
-
export const withGCSApiMetrics = (operation, effect) => withApiMetrics(gcsMetrics, operation, effect);
|
|
80
|
-
export const withGCSTimingMetrics = withTimingMetrics;
|
|
81
|
-
export const withGCSOperationMetrics = (operation, uploadId, effect, fileSize) => withStorageOperationMetrics(gcsMetrics, operation, uploadId, effect, fileSize);
|
|
82
|
-
// GCS-specific span wrapper
|
|
83
|
-
export const withGCSSpan = (operation, attributes) => (effect) => withStorageSpan(operation, STORAGE_TYPE, attributes)(effect);
|
|
84
|
-
// GCS-specific logging functions
|
|
85
|
-
export const logGCSOperation = logStorageOperation.bind(null, STORAGE_TYPE);
|
|
86
|
-
export const logGCSUploadProgress = logUploadProgress.bind(null, STORAGE_TYPE);
|
|
87
|
-
export const logGCSUploadCompletion = logUploadCompletion.bind(null, STORAGE_TYPE);
|
|
88
|
-
export const logGCSContext = logWithContext;
|
|
89
|
-
// Export metrics for external access
|
|
90
|
-
export const { uploadRequestsTotal: gcsUploadRequestsTotal, uploadPartsTotal: gcsUploadPartsTotal, uploadSuccessTotal: gcsUploadSuccessTotal, uploadErrorsTotal: gcsUploadErrorsTotal, apiCallsTotal: gcsApiCallsTotal, uploadDurationHistogram: gcsUploadDurationHistogram, partUploadDurationHistogram: gcsPartUploadDurationHistogram, fileSizeHistogram: gcsFileSizeHistogram, partSizeHistogram: gcsPartSizeHistogram, activeUploadsGauge: gcsActiveUploadsGauge, uploadThroughputGauge: gcsUploadThroughputGauge, uploadLatencySummary: gcsUploadLatencySummary, } = gcsMetrics;
|
package/dist/storage/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC"}
|
package/dist/storage/index.js
DELETED
package/dist/storage/s3.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { type Effect, Layer } from "effect";
|
|
2
|
-
import { type StorageMetrics } from "../core/metrics.js";
|
|
3
|
-
export declare const s3Metrics: {
|
|
4
|
-
uploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
5
|
-
activeUploadsGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
6
|
-
uploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>;
|
|
7
|
-
uploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
8
|
-
partUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
9
|
-
fileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
10
|
-
partSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>;
|
|
11
|
-
uploadRequestsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
12
|
-
uploadPartsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
13
|
-
uploadSuccessTotal: import("effect/Metric").Metric.Counter<number>;
|
|
14
|
-
uploadErrorsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
15
|
-
apiCallsTotal: import("effect/Metric").Metric.Counter<number>;
|
|
16
|
-
};
|
|
17
|
-
export declare const S3TracingLayer: Layer.Layer<{
|
|
18
|
-
serviceName: string;
|
|
19
|
-
}, never, never>;
|
|
20
|
-
export declare const trackS3Error: (operation: string, error: unknown, context?: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
21
|
-
export declare const S3ObservabilityLayer: Layer.Layer<{
|
|
22
|
-
serviceName: string;
|
|
23
|
-
}, never, never>;
|
|
24
|
-
export declare const withS3UploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
25
|
-
export declare const withS3ApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
26
|
-
export declare const withS3TimingMetrics: <A, E, R>(metric: import("effect/Metric").Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
27
|
-
export declare const withS3OperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
|
|
28
|
-
export declare const withS3Span: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
|
|
29
|
-
export declare const logS3Operation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
|
|
30
|
-
export declare const logS3UploadProgress: (uploadId: string, progress: {
|
|
31
|
-
uploadedBytes: number;
|
|
32
|
-
totalBytes: number;
|
|
33
|
-
partNumber?: number;
|
|
34
|
-
speed?: number;
|
|
35
|
-
}) => Effect.Effect<void, never, never>;
|
|
36
|
-
export declare const logS3UploadCompletion: (uploadId: string, metrics: {
|
|
37
|
-
fileSize: number;
|
|
38
|
-
totalDurationMs: number;
|
|
39
|
-
partsCount?: number;
|
|
40
|
-
averagePartSize?: number;
|
|
41
|
-
throughputBps?: number;
|
|
42
|
-
retryCount?: number;
|
|
43
|
-
}) => Effect.Effect<void, never, never>;
|
|
44
|
-
export declare const logS3Context: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
45
|
-
export declare const s3UploadRequestsTotal: import("effect/Metric").Metric.Counter<number>, s3UploadPartsTotal: import("effect/Metric").Metric.Counter<number>, s3UploadSuccessTotal: import("effect/Metric").Metric.Counter<number>, s3UploadErrorsTotal: import("effect/Metric").Metric.Counter<number>, s3ApiCallsTotal: import("effect/Metric").Metric.Counter<number>, s3UploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, s3PartUploadDurationHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, s3FileSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, s3PartSizeHistogram: import("effect/Metric").Metric<import("effect/MetricKeyType").MetricKeyType.Histogram, number, import("effect/MetricState").MetricState.Histogram>, s3ActiveUploadsGauge: import("effect/Metric").Metric.Gauge<number>, s3UploadThroughputGauge: import("effect/Metric").Metric.Gauge<number>, s3UploadLatencySummary: import("effect/Metric").Metric.Summary<number>;
|
|
46
|
-
export type S3Metrics = StorageMetrics;
|
|
47
|
-
//# sourceMappingURL=s3.d.ts.map
|
package/dist/storage/s3.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../src/storage/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAW5C,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgB/E,eAAO,MAAM,SAAS;;;;;;;;;;;;;CAAqC,CAAC;AAG5D,eAAO,MAAM,cAAc;;gBAA0C,CAAC;AAqCtE,eAAO,MAAM,YAAY,6GAIxB,CAAC;AAGF,eAAO,MAAM,oBAAoB;;gBAGhC,CAAC;AAMF,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACzC,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BACmB,CAAC;AAEpD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACtC,WAAW,MAAM,EACjB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BACiB,CAAC;AAElD,eAAO,MAAM,mBAAmB,+HAAoB,CAAC;AAErD,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5C,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,WAAW,MAAM,2BAE4D,CAAC;AAGhF,eAAO,MAAM,UAAU,GACpB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,MAAM,EAAE,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAChE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,6CAC+B,CAAC;AAGjE,eAAO,MAAM,cAAc,4HAA+C,CAAC;AAC3E,eAAO,MAAM,mBAAmB;;;;;uCAA6C,CAAC;AAC9E,eAAO,MAAM,qBAAqB;;;;;;;uCAGjC,CAAC;AACF,eAAO,MAAM,YAAY,0FAAiB,CAAC;AAG3C,eAAO,MACgB,qBAAqB,kDACxB,kBAAkB,kDAChB,oBAAoB,kDACrB,mBAAmB,kDACvB,eAAe,kDACL,yBAAyB,sJACrB,6BAA6B,sJACvC,mBAAmB,sJACnB,mBAAmB,sJAClB,oBAAoB,gDACjB,uBAAuB,gDACxB,sBAAsB,gDACjC,CAAC;AAGd,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC"}
|
package/dist/storage/s3.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Layer } from "effect";
|
|
2
|
-
import { createStorageErrorTracker, } from "../core/errors.js";
|
|
3
|
-
import { logStorageOperation, logUploadCompletion, logUploadProgress, logWithContext, } from "../core/logging.js";
|
|
4
|
-
import { createStorageMetrics } from "../core/metrics.js";
|
|
5
|
-
import { createStorageTracingLayer, withStorageSpan } from "../core/tracing.js";
|
|
6
|
-
import { withApiMetrics, withStorageOperationMetrics, withTimingMetrics, withUploadMetrics, } from "../core/utilities.js";
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// S3-Specific Observability
|
|
9
|
-
// ============================================================================
|
|
10
|
-
const STORAGE_TYPE = "s3";
|
|
11
|
-
// S3-specific metrics
|
|
12
|
-
export const s3Metrics = createStorageMetrics(STORAGE_TYPE);
|
|
13
|
-
// S3-specific tracing layer
|
|
14
|
-
export const S3TracingLayer = createStorageTracingLayer(STORAGE_TYPE);
|
|
15
|
-
// S3-specific error classification
|
|
16
|
-
const classifyS3Error = (error) => {
|
|
17
|
-
if (!error || typeof error !== "object")
|
|
18
|
-
return null;
|
|
19
|
-
const errorCode = "code" in error ? error.code : undefined;
|
|
20
|
-
if (!errorCode)
|
|
21
|
-
return null;
|
|
22
|
-
// S3-specific error codes
|
|
23
|
-
switch (errorCode) {
|
|
24
|
-
case "NoSuchKey":
|
|
25
|
-
case "NoSuchBucket":
|
|
26
|
-
case "NoSuchUpload":
|
|
27
|
-
return "client_error";
|
|
28
|
-
case "BucketAlreadyExists":
|
|
29
|
-
case "BucketNotEmpty":
|
|
30
|
-
return "client_error";
|
|
31
|
-
case "InvalidBucketName":
|
|
32
|
-
case "InvalidPart":
|
|
33
|
-
case "InvalidPartOrder":
|
|
34
|
-
return "client_error";
|
|
35
|
-
case "EntityTooSmall":
|
|
36
|
-
case "EntityTooLarge":
|
|
37
|
-
return "client_error";
|
|
38
|
-
case "ExpiredToken":
|
|
39
|
-
case "TokenRefreshRequired":
|
|
40
|
-
return "authentication_error";
|
|
41
|
-
case "RequestTimeTooSkewed":
|
|
42
|
-
case "SlowDown":
|
|
43
|
-
return "throttling_error";
|
|
44
|
-
default:
|
|
45
|
-
return null; // Fall back to generic classification
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
// S3-specific error tracker
|
|
49
|
-
export const trackS3Error = createStorageErrorTracker(STORAGE_TYPE, s3Metrics, classifyS3Error);
|
|
50
|
-
// S3-specific observability layer
|
|
51
|
-
export const S3ObservabilityLayer = Layer.mergeAll(S3TracingLayer);
|
|
52
|
-
// ============================================================================
|
|
53
|
-
// S3 Utility Functions
|
|
54
|
-
// ============================================================================
|
|
55
|
-
export const withS3UploadMetrics = (uploadId, effect) => withUploadMetrics(s3Metrics, uploadId, effect);
|
|
56
|
-
export const withS3ApiMetrics = (operation, effect) => withApiMetrics(s3Metrics, operation, effect);
|
|
57
|
-
export const withS3TimingMetrics = withTimingMetrics;
|
|
58
|
-
export const withS3OperationMetrics = (operation, uploadId, effect, fileSize) => withStorageOperationMetrics(s3Metrics, operation, uploadId, effect, fileSize);
|
|
59
|
-
// S3-specific span wrapper
|
|
60
|
-
export const withS3Span = (operation, attributes) => (effect) => withStorageSpan(operation, STORAGE_TYPE, attributes)(effect);
|
|
61
|
-
// S3-specific logging functions
|
|
62
|
-
export const logS3Operation = logStorageOperation.bind(null, STORAGE_TYPE);
|
|
63
|
-
export const logS3UploadProgress = logUploadProgress.bind(null, STORAGE_TYPE);
|
|
64
|
-
export const logS3UploadCompletion = logUploadCompletion.bind(null, STORAGE_TYPE);
|
|
65
|
-
export const logS3Context = logWithContext;
|
|
66
|
-
// Export metrics for external access
|
|
67
|
-
export const { uploadRequestsTotal: s3UploadRequestsTotal, uploadPartsTotal: s3UploadPartsTotal, uploadSuccessTotal: s3UploadSuccessTotal, uploadErrorsTotal: s3UploadErrorsTotal, apiCallsTotal: s3ApiCallsTotal, uploadDurationHistogram: s3UploadDurationHistogram, partUploadDurationHistogram: s3PartUploadDurationHistogram, fileSizeHistogram: s3FileSizeHistogram, partSizeHistogram: s3PartSizeHistogram, activeUploadsGauge: s3ActiveUploadsGauge, uploadThroughputGauge: s3UploadThroughputGauge, uploadLatencySummary: s3UploadLatencySummary, } = s3Metrics;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validation test for core observability infrastructure
|
|
3
|
-
*
|
|
4
|
-
* This test validates:
|
|
5
|
-
* 1. Layer creation and composition
|
|
6
|
-
* 2. Storage observability with metrics
|
|
7
|
-
* 3. Error classification
|
|
8
|
-
* 4. Tracing with spans
|
|
9
|
-
* 5. Structured logging
|
|
10
|
-
*/
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=test-observability.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-observability.d.ts","sourceRoot":"","sources":["../src/test-observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|