@uploadista/observability 0.0.18-beta.10 → 0.0.18-beta.12

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/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- let e=require(`effect`),t=require(`@opentelemetry/exporter-metrics-otlp-http`),n=require(`@opentelemetry/exporter-trace-otlp-http`),r=require(`@effect/opentelemetry`),i=require(`@opentelemetry/sdk-trace-base`);const a=e=>{if(!e||typeof e!=`object`)return`unknown_error`;let t=`code`in e?e.code:void 0,n=`name`in e?e.name:void 0,r=e instanceof Error?e.message.toLowerCase():``;return t===`NetworkError`||t===`ECONNRESET`||t===`ENOTFOUND`||t===`ETIMEDOUT`||r.indexOf(`network`)>=0||r.indexOf(`timeout`)>=0?`network_error`:t===`InvalidAccessKeyId`||t===`SignatureDoesNotMatch`||t===`TokenRefreshRequired`||t===`AuthenticationFailed`||n===`AuthenticationError`||r.indexOf(`authentication`)>=0||r.indexOf(`unauthorized`)>=0?`authentication_error`:t===`AccessDenied`||t===`AccountProblem`||t===`Forbidden`||n===`AuthorizationError`||r.indexOf(`forbidden`)>=0||r.indexOf(`permission`)>=0?`authorization_error`:t===`SlowDown`||t===`RequestTimeTooSkewed`||t===`TooManyRequests`||n===`ThrottlingError`||r.indexOf(`throttl`)>=0||r.indexOf(`rate limit`)>=0?`throttling_error`:t===`InternalError`||t===`ServiceUnavailable`||t===`InternalServerError`||n===`ServerError`||r.indexOf(`server error`)>=0||r.indexOf(`service unavailable`)>=0?`server_error`:t===`InvalidRequest`||t===`MalformedXML`||t===`RequestEntityTooLarge`||t===`BadRequest`||n===`ClientError`||r.indexOf(`bad request`)>=0||r.indexOf(`invalid`)>=0?`client_error`:`unknown_error`},o=(e,t)=>e=>{if(t){let n=t(e);if(n!==null)return n}return a(e)},s=(t,n,r,i,o={},s=a)=>e.Effect.gen(function*(){let a=s(i);yield*n.uploadErrorsTotal.pipe(e.Metric.tagged(`operation`,r),e.Metric.tagged(`error_category`,a))(e.Effect.succeed(1));let c={storage_type:t,operation:r,error_category:a,error_type:typeof i,error_message:i instanceof Error?i.message:String(i),error_code:i&&typeof i==`object`&&`code`in i?i.code:void 0,error_name:i&&typeof i==`object`&&`name`in i?i.name:void 0,...o};yield*e.Effect.logError(`${t.toUpperCase()} ${r} failed`).pipe(e.Effect.annotateLogs(c))}),c=(e,t,n)=>{let r=o(e,n);return(n,i,a={})=>s(e,t,n,i,a,r)};function l(){let e=typeof process<`u`?process.env.OTEL_EXPORTER_OTLP_HEADERS:void 0;if(!e)return;let t={},n=e.split(`,`);for(let e of n){let[n,...r]=e.split(`=`);n&&r.length>0&&(t[n.trim()]=r.join(`=`).trim())}return Object.keys(t).length>0?t:void 0}function u(e,t){if(t)return t;if(typeof process<`u`){let t=e===`traces`?process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT;if(t)return t;if(process.env.OTEL_EXPORTER_OTLP_ENDPOINT)return process.env.OTEL_EXPORTER_OTLP_ENDPOINT}return`http://localhost:4318`}function ee(e={}){let t=u(`traces`,e.endpoint),r=e.headers??l(),i=e.timeoutMillis??5e3;return new n.OTLPTraceExporter({url:`${t}/v1/traces`,headers:r,timeoutMillis:i})}function te(e={}){let n=u(`metrics`,e.endpoint),r=e.headers??l(),i=e.timeoutMillis??5e3;return new t.OTLPMetricExporter({url:`${n}/v1/metrics`,headers:r,timeoutMillis:i})}function d(){if(typeof process<`u`){let e=process.env.UPLOADISTA_OBSERVABILITY_ENABLED;if(e!==void 0)return e.toLowerCase()!==`false`&&e!==`0`}return!0}function f(e=`uploadista`){return typeof process<`u`&&process.env.OTEL_SERVICE_NAME?process.env.OTEL_SERVICE_NAME:e}function ne(){if(typeof process>`u`)return{};let e=process.env.OTEL_RESOURCE_ATTRIBUTES;if(!e)return{};let t={},n=e.split(`,`);for(let e of n){let[n,...r]=e.split(`=`);n&&r.length>0&&(t[n.trim()]=r.join(`=`).trim())}return t}var p=class extends e.Context.Tag(`Observability`)(){},m=class extends e.Context.Tag(`StorageObservability`)(){},h=class extends e.Context.Tag(`UploadObservability`)(){},g=class extends e.Context.Tag(`FlowObservability`)(){};const re=(t,n=!0)=>e.Layer.succeed(p,{serviceName:t,enabled:n}),ie=(t,n,r=!0)=>e.Layer.succeed(m,{serviceName:`uploadista-${t}-store`,storageType:t,metrics:n,enabled:r}),_=(t=!0)=>e.Layer.succeed(h,{serviceName:`uploadista-upload-server`,enabled:t,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}}),v=(t=!0)=>e.Layer.succeed(g,{serviceName:`uploadista-flow-engine`,enabled:t,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}}),ae=re(`uploadista-disabled`,!1),oe=e=>ie(e,{},!1),se=_(!1),ce=v(!1),y=e.Effect.gen(function*(){let t=yield*e.Effect.serviceOption(p);return e.Option.match(t,{onNone:()=>!1,onSome:e=>e.enabled})}),le=t=>e.Effect.gen(function*(){if(yield*y){let n=yield*t;return e.Option.some(n)}return e.Option.none()}),b=(t,n)=>e.Effect.log(t).pipe(e.Effect.annotateLogs(n)),x=(e,t,n)=>b(`Upload progress`,{storage_type:e,upload_id:t,uploaded_bytes:n.uploadedBytes,total_bytes:n.totalBytes,progress_percentage:Math.round(n.uploadedBytes/n.totalBytes*100),...n.partNumber&&{part_number:n.partNumber},...n.speed&&{upload_speed_bps:n.speed}}),S=(e,t,n,r)=>b(`${e.toUpperCase()} ${t}`,{storage_type:e,operation:t,upload_id:n,...r}),C=(e,t,n)=>{let r=n.throughputBps?n.throughputBps/(1024*1024):0;return b(`${e.toUpperCase()} upload completed`,{storage_type:e,upload_id:t,file_size_bytes:n.fileSize,file_size_mb:Math.round(n.fileSize/(1024*1024)*100)/100,total_duration_ms:n.totalDurationMs,total_duration_seconds:Math.round(n.totalDurationMs/1e3*100)/100,throughput_bps:n.throughputBps,throughput_mbps:Math.round(r*100)/100,...n.partsCount&&{parts_count:n.partsCount},...n.averagePartSize&&{average_part_size_bytes:n.averagePartSize,average_part_size_mb:Math.round(n.averagePartSize/(1024*1024)*100)/100},...n.retryCount&&{retry_count:n.retryCount}})},ue=t=>({uploadRequestsTotal:e.Metric.counter(`${t}_upload_requests_total`,{description:`Total number of upload requests for ${t}`}),uploadPartsTotal:e.Metric.counter(`${t}_upload_parts_total`,{description:`Total number of individual parts uploaded for ${t}`}),uploadSuccessTotal:e.Metric.counter(`${t}_upload_success_total`,{description:`Total number of successful uploads for ${t}`}),uploadErrorsTotal:e.Metric.counter(`${t}_upload_errors_total`,{description:`Total number of upload errors for ${t}`}),apiCallsTotal:e.Metric.counter(`${t}_api_calls_total`,{description:`Total number of API calls for ${t}`})}),w=t=>({uploadDurationHistogram:e.Metric.histogram(`${t}_upload_duration_seconds`,e.MetricBoundaries.exponential({start:.01,factor:2,count:20}),`Duration of upload operations in seconds for ${t}`),partUploadDurationHistogram:e.Metric.histogram(`${t}_part_upload_duration_seconds`,e.MetricBoundaries.exponential({start:.001,factor:2,count:15}),`Duration of individual part uploads in seconds for ${t}`),fileSizeHistogram:e.Metric.histogram(`${t}_file_size_bytes`,e.MetricBoundaries.exponential({start:1024,factor:2,count:25}),`Size of uploaded files in bytes for ${t}`),partSizeHistogram:e.Metric.histogram(`${t}_part_size_bytes`,e.MetricBoundaries.linear({start:5242880,width:1048576,count:20}),`Size of upload parts in bytes for ${t}`)}),T=t=>({activeUploadsGauge:e.Metric.gauge(`${t}_active_uploads`,{description:`Number of currently active uploads for ${t}`}),uploadThroughputGauge:e.Metric.gauge(`${t}_upload_throughput_bytes_per_second`,{description:`Current upload throughput in bytes per second for ${t}`})}),E=t=>({uploadLatencySummary:e.Metric.summary({name:`${t}_upload_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Upload latency percentiles for ${t}`})}),D=e=>({...ue(e),...w(e),...T(e),...E(e)}),O=t=>{let n=D(t),r={serviceName:`test-${t}-store`,storageType:t,metrics:n,enabled:!0};return e.Layer.succeed(m,r)},de=()=>{let t={serviceName:`test-upload-server`,enabled:!0,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}};return e.Layer.succeed(h,t)},fe=()=>{let t={serviceName:`test-flow-engine`,enabled:!0,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}};return e.Layer.succeed(g,t)},pe=t=>e.Effect.gen(function*(){let n=yield*t;return yield*e.Metric.snapshot,n}),me=t=>e.Effect.gen(function*(){yield*e.Metric.snapshot;let n=yield*t;return yield*e.Metric.snapshot,n}),he=(e=`test-storage`)=>({storageObservability:O(e),uploadObservability:de(),flowObservability:fe()}),ge=(t,n=`test-storage`)=>{let r=he(n);return t.pipe(e.Effect.provide(r.storageObservability),e.Effect.provide(r.uploadObservability),e.Effect.provide(r.flowObservability))},_e=e.Context.GenericTag(`TracingService`),ve=t=>{let n=t?.serviceName??`uploadista-storage`;return e.Layer.succeed(_e,{serviceName:n})},k=e=>ve({serviceName:`uploadista-${e}-store`}),A=(t,n,r)=>i=>i.pipe(e.Effect.withSpan(`${n}-${t}`,{attributes:{"storage.type":n,operation:t,...r}})),ye=r.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new i.BatchSpanProcessor(new i.ConsoleSpanExporter)})),be=r.NodeSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new i.BatchSpanProcessor(new i.ConsoleSpanExporter)})),xe=r.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage-workers`},spanProcessor:new i.BatchSpanProcessor(new i.ConsoleSpanExporter)}));function j(e={}){return new i.BatchSpanProcessor(ee(),{maxQueueSize:e.maxQueueSize??512,maxExportBatchSize:e.maxExportBatchSize??512,scheduledDelayMillis:e.scheduledDelayMillis??5e3,exportTimeoutMillis:e.exportTimeoutMillis??5e3})}function M(e={}){let t=e.serviceName??f(`uploadista`),n=ne(),r=e.resourceAttributes??{};return{serviceName:t,...n,...r}}const Se=r.NodeSdk.layer(()=>d()?{resource:M(),spanProcessor:j()}:{resource:M()});function Ce(e={}){return r.NodeSdk.layer(()=>d()?{resource:M(e),spanProcessor:j(e)}:{resource:M(e)})}const we=r.WebSdk.layer(()=>d()?{resource:M(),spanProcessor:j()}:{resource:M()});function Te(e={}){return r.WebSdk.layer(()=>d()?{resource:M(e),spanProcessor:j(e)}:{resource:M(e)})}const Ee=r.WebSdk.layer(()=>{let e={serviceName:f(`uploadista-workers`)};return d()?{resource:M(e),spanProcessor:j(e)}:{resource:M(e)}});function De(e={}){return r.WebSdk.layer(()=>{let t={serviceName:f(`uploadista-workers`),...e};return d()?{resource:M(t),spanProcessor:j(t)}:{resource:M(t)}})}const N=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.uploadRequestsTotal.pipe(e.Metric.tagged(`upload_id`,n))(e.Effect.succeed(1))),e.Effect.tapError(()=>t.uploadErrorsTotal.pipe(e.Metric.tagged(`upload_id`,n))(e.Effect.succeed(1))),e.Effect.tap(()=>t.uploadSuccessTotal.pipe(e.Metric.tagged(`upload_id`,n))(e.Effect.succeed(1)))),P=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.apiCallsTotal.pipe(e.Metric.tagged(`operation`,n))(e.Effect.succeed(1)))),F=(t,n)=>e.Effect.gen(function*(){let r=yield*e.Effect.sync(()=>Date.now()),i=yield*n,a=((yield*e.Effect.sync(()=>Date.now()))-r)/1e3;return yield*t(e.Effect.succeed(a)),i}),I=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.fileSizeHistogram(e.Effect.succeed(n)))),Oe=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.partSizeHistogram(e.Effect.succeed(n)))),L=(t,n)=>n.pipe(e.Effect.tap(()=>t.activeUploadsGauge(e.Effect.succeed(1))),e.Effect.ensuring(t.activeUploadsGauge(e.Effect.succeed(-1)))),R=(t,n,r)=>e.Effect.gen(function*(){let i=yield*e.Effect.sync(()=>Date.now()),a=yield*r,o=((yield*e.Effect.sync(()=>Date.now()))-i)/1e3,s=o>0?n/o:0;return yield*t.uploadThroughputGauge(e.Effect.succeed(s)),a}),z=(e,t,n,r,i)=>{let a=r.pipe(n=>P(e,t,n),t=>N(e,n,t),t=>F(e.uploadDurationHistogram,t),t=>L(e,t));return i!==void 0&&(a=a.pipe(t=>I(e,i,t),t=>R(e,i,t))),a},B=()=>({flowStartedTotal:e.Metric.counter(`flow_started_total`,{description:`Total number of flows started`}),flowCompletedTotal:e.Metric.counter(`flow_completed_total`,{description:`Total number of flows completed successfully`}),flowFailedTotal:e.Metric.counter(`flow_failed_total`,{description:`Total number of flows that failed`}),flowPausedTotal:e.Metric.counter(`flow_paused_total`,{description:`Total number of flows that were paused`}),flowResumedTotal:e.Metric.counter(`flow_resumed_total`,{description:`Total number of flows that were resumed`}),nodeExecutedTotal:e.Metric.counter(`node_executed_total`,{description:`Total number of nodes executed`}),nodeSuccessTotal:e.Metric.counter(`node_success_total`,{description:`Total number of nodes executed successfully`}),nodeFailedTotal:e.Metric.counter(`node_failed_total`,{description:`Total number of nodes that failed`}),nodeSkippedTotal:e.Metric.counter(`node_skipped_total`,{description:`Total number of nodes skipped (conditional)`}),flowDurationHistogram:e.Metric.histogram(`flow_duration_seconds`,e.MetricBoundaries.exponential({start:.1,factor:2,count:20}),`Duration of complete flow execution in seconds`),nodeDurationHistogram:e.Metric.histogram(`node_duration_seconds`,e.MetricBoundaries.exponential({start:.01,factor:2,count:18}),`Duration of individual node execution in seconds`),flowNodeCountHistogram:e.Metric.histogram(`flow_node_count`,e.MetricBoundaries.linear({start:1,width:5,count:20}),`Number of nodes in a flow`),parallelNodesHistogram:e.Metric.histogram(`parallel_nodes_count`,e.MetricBoundaries.linear({start:1,width:2,count:15}),`Number of nodes executed in parallel`),activeFlowsGauge:e.Metric.gauge(`active_flows`,{description:`Number of currently active flows`}),activeNodesGauge:e.Metric.gauge(`active_nodes`,{description:`Number of currently executing nodes`}),pausedFlowsGauge:e.Metric.gauge(`paused_flows`,{description:`Number of currently paused flows`}),flowLatencySummary:e.Metric.summary({name:`flow_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Flow execution latency percentiles`}),nodeLatencySummary:e.Metric.summary({name:`node_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Node execution latency percentiles`}),circuitBreakerOpenTotal:e.Metric.counter(`circuit_breaker_open_total`,{description:`Total number of times circuit breakers transitioned to open state`}),circuitBreakerCloseTotal:e.Metric.counter(`circuit_breaker_close_total`,{description:`Total number of times circuit breakers transitioned to closed state`}),circuitBreakerRejectedTotal:e.Metric.counter(`circuit_breaker_rejected_total`,{description:`Total number of requests rejected because circuit breaker is open`}),circuitBreakerHalfOpenTotal:e.Metric.counter(`circuit_breaker_half_open_total`,{description:`Total number of times circuit breakers transitioned to half-open state`}),circuitBreakerStateGauge:e.Metric.gauge(`circuit_breaker_state`,{description:`Current circuit breaker state (0=closed, 1=open, 2=half-open)`}),circuitBreakerFailuresGauge:e.Metric.gauge(`circuit_breaker_failures`,{description:`Number of failures currently in the circuit breaker sliding window`})}),ke=B(),V=e=>{if(!e||typeof e!=`object`)return`unknown_flow_error`;let t=`code`in e?e.code:void 0;if(!t)return`unknown_flow_error`;switch(t){case`FLOW_VALIDATION_ERROR`:case`FLOW_INVALID_INPUT`:case`FLOW_INVALID_OUTPUT`:return`flow_validation_error`;case`FLOW_NODE_NOT_FOUND`:case`FLOW_EDGE_INVALID`:return`node_not_found_error`;case`FLOW_NODE_EXECUTION_FAILED`:case`FLOW_NODE_ERROR`:return`node_execution_error`;case`FLOW_TIMEOUT`:return`flow_timeout_error`;case`FLOW_CANCELLED`:case`ABORTED`:return`flow_cancelled_error`;default:return`unknown_flow_error`}},Ae=t=>{let n=B(),r=V(t);return e.Effect.gen(function*(){yield*e.Metric.increment(n.flowFailedTotal),yield*e.Effect.logError(`Flow execution failed`).pipe(e.Effect.annotateLogs({"error.category":r,"error.message":String(t)}))})},je=(t,n,r)=>{let i=B(),a=V(r);return e.Effect.gen(function*(){yield*e.Metric.increment(i.nodeFailedTotal),yield*e.Effect.logError(`Node execution failed`).pipe(e.Effect.annotateLogs({"node.id":t,"node.type":n,"error.category":a,"error.message":String(r)}))})},H=(t=`uploadista-flow-engine`)=>{let n=B();return e.Layer.succeed(g,{serviceName:t,enabled:!0,metrics:{flowStarted:e.Metric.increment(n.flowStartedTotal),flowCompleted:e.Metric.increment(n.flowCompletedTotal),flowFailed:e.Metric.increment(n.flowFailedTotal),nodeExecuted:e.Metric.increment(n.nodeExecutedTotal)}})},Me=H(),Ne=v(!1),Pe=e.Effect.gen(function*(){return(yield*g).metrics}),Fe=t=>{let n=B();return e.Effect.gen(function*(){let r=Date.now(),i=yield*t,a=(Date.now()-r)/1e3;return yield*e.Metric.update(n.flowDurationHistogram,a),yield*e.Metric.update(n.flowLatencySummary,a),i}).pipe(e.Effect.withSpan(`flow-execution`))},Ie=(t,n,r)=>{let i=B();return e.Effect.gen(function*(){let t=Date.now(),n=yield*r,a=(Date.now()-t)/1e3;return yield*e.Metric.update(i.nodeDurationHistogram,a),yield*e.Metric.update(i.nodeLatencySummary,a),n}).pipe(e.Effect.withSpan(`node-${n}`,{attributes:{"node.id":t,"node.type":n}}))},Le=t=>{let n=B();return e.Effect.gen(function*(){return yield*e.Metric.increment(n.activeFlowsGauge),yield*e.Effect.acquireUseRelease(e.Effect.void,()=>t,()=>e.Metric.set(n.activeFlowsGauge,-1))})},Re=t=>{let n=B();return e.Effect.gen(function*(){return yield*e.Metric.increment(n.activeNodesGauge),yield*e.Effect.acquireUseRelease(e.Effect.void,()=>t,()=>e.Metric.set(n.activeNodesGauge,-1))})},U=()=>{let t={serviceName:`test-flow-engine`,enabled:!0,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}};return e.Layer.succeed(g,t)},ze=t=>t.pipe(e.Effect.provide(U())),Be=(t,n)=>r=>r.pipe(e.Effect.withSpan(`flow-${t}`,{attributes:{"flow.operation":t,...n}})),Ve=t=>e.Effect.annotateCurrentSpan({"flow.id":t.flowId??`unknown`,"flow.name":t.flowName??`unknown`,"flow.job_id":t.jobId??`unknown`,"flow.node_count":t.nodeCount?.toString()??`0`,"flow.storage_id":t.storageId??`unknown`}),He=t=>e.Effect.annotateCurrentSpan({"node.id":t.nodeId,"node.type":t.nodeType,"node.name":t.nodeName??`unknown`,"node.flow_id":t.flowId??`unknown`,"node.job_id":t.jobId??`unknown`}),Ue=t=>e.Effect.annotateCurrentSpan({"execution.order":t.executionOrder?.join(`,`)??``,"execution.current_index":t.currentIndex?.toString()??`0`,"execution.total_nodes":t.totalNodes?.toString()??`0`,"execution.parallel_count":t.parallelCount?.toString()??`0`}),We=(t,n,r)=>i=>i.pipe(e.Effect.withSpan(`circuit-breaker-${t}`,{attributes:{"circuit_breaker.node_type":t,"circuit_breaker.state":n,...r}})),Ge=t=>e.Effect.annotateCurrentSpan({"circuit_breaker.node_type":t.nodeType,"circuit_breaker.state":t.state,"circuit_breaker.failure_count":t.failureCount?.toString()??`0`,"circuit_breaker.failure_threshold":t.failureThreshold?.toString()??`5`,"circuit_breaker.reset_timeout":t.resetTimeout?.toString()??`30000`,"circuit_breaker.decision":t.decision??`unknown`}),Ke=t=>e.Effect.annotateCurrentSpan({"circuit_breaker.event":`state_change`,"circuit_breaker.node_type":t.nodeType,"circuit_breaker.previous_state":t.previousState,"circuit_breaker.new_state":t.newState,"circuit_breaker.failure_count":t.failureCount?.toString()??`0`,"circuit_breaker.timestamp":t.timestamp?.toString()??Date.now().toString()});var W=class extends e.Context.Tag(`MetricsService`)(){};const qe=e.Layer.succeed(W,{recordUpload:(t,n)=>e.Effect.void}),G=`azure`,K=D(G),Je=k(G),Ye=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:`statusCode`in e?e.statusCode:void 0;if(!t)return null;switch(t){case`BlobNotFound`:case`ContainerNotFound`:case`InvalidBlobOrBlock`:return`client_error`;case`ContainerAlreadyExists`:case`BlobAlreadyExists`:return`client_error`;case`InvalidBlockId`:case`InvalidBlockList`:case`InvalidBlobType`:return`client_error`;case`RequestBodyTooLarge`:case`InvalidHeaderValue`:return`client_error`;case`AuthenticationFailed`:case`InvalidAuthenticationInfo`:return`authentication_error`;case`AccountIsDisabled`:return`authorization_error`;case`InsufficientAccountPermissions`:return`authorization_error`;case`OperationTimedOut`:case`ServerBusy`:case`InternalError`:return`server_error`;default:if(typeof t==`number`){if(t>=500)return`server_error`;if(t===429)return`throttling_error`;if(t===403)return`authorization_error`;if(t===401)return`authentication_error`;if(t>=400)return`client_error`}return null}},Xe=c(G,K,Ye),Ze=e.Layer.mergeAll(Je),Qe=(e,t)=>N(K,e,t),$e=(e,t)=>P(K,e,t),et=F,tt=(e,t,n,r)=>z(K,e,t,n,r),nt=(e,t)=>n=>A(e,G,t)(n),rt=S.bind(null,G),it=x.bind(null,G),at=C.bind(null,G),ot=b,{uploadRequestsTotal:st,uploadPartsTotal:ct,uploadSuccessTotal:lt,uploadErrorsTotal:ut,apiCallsTotal:dt,uploadDurationHistogram:ft,partUploadDurationHistogram:pt,fileSizeHistogram:mt,partSizeHistogram:ht,activeUploadsGauge:gt,uploadThroughputGauge:_t,uploadLatencySummary:vt}=K,q=`filesystem`,J=D(q),yt=k(q),bt=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:void 0;if(!t)return null;switch(t){case`ENOENT`:case`ENOTDIR`:return`client_error`;case`EEXIST`:return`client_error`;case`EISDIR`:return`client_error`;case`EINVAL`:case`ENAMETOOLONG`:return`client_error`;case`EACCES`:case`EPERM`:return`authorization_error`;case`ENOSPC`:case`EDQUOT`:return`server_error`;case`EIO`:case`EROFS`:case`EMFILE`:case`ENFILE`:return`server_error`;case`EBUSY`:return`throttling_error`;default:return null}},xt=c(q,J,bt),St=e.Layer.mergeAll(yt),Ct=(e,t)=>N(J,e,t),wt=(e,t)=>P(J,e,t),Tt=F,Et=(e,t,n,r)=>z(J,e,t,n,r),Dt=(e,t)=>n=>A(e,q,t)(n),Ot=S.bind(null,q),kt=x.bind(null,q),At=C.bind(null,q),jt=b,{uploadRequestsTotal:Mt,uploadPartsTotal:Nt,uploadSuccessTotal:Pt,uploadErrorsTotal:Ft,apiCallsTotal:It,uploadDurationHistogram:Lt,partUploadDurationHistogram:Rt,fileSizeHistogram:zt,partSizeHistogram:Bt,activeUploadsGauge:Vt,uploadThroughputGauge:Ht,uploadLatencySummary:Ut}=J,Wt=`gcs`,Y=D(`gcs`),Gt=k(`gcs`),Kt=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:`status`in e?e.status:void 0;if(!t)return null;switch(t){case`NoSuchBucket`:case`NoSuchKey`:case`NoSuchUpload`:return`client_error`;case`BucketAlreadyOwnedByYou`:case`BucketNotEmpty`:return`client_error`;case`InvalidBucketName`:case`InvalidArgument`:case`InvalidPart`:case`InvalidPartOrder`:return`client_error`;case`EntityTooSmall`:case`EntityTooLarge`:return`client_error`;case`MalformedPolicy`:return`client_error`;case`Unauthorized`:case`AuthenticationRequired`:return`authentication_error`;case`Forbidden`:case`AccessDenied`:return`authorization_error`;case`TooManyRequests`:case`RateLimitExceeded`:return`throttling_error`;case`InternalError`:case`ServiceUnavailable`:case`BackendError`:return`server_error`;default:if(typeof t==`number`){if(t>=500)return`server_error`;if(t===429)return`throttling_error`;if(t===403)return`authorization_error`;if(t===401)return`authentication_error`;if(t>=400)return`client_error`}return null}},qt=c(`gcs`,Y,Kt),Jt=e.Layer.mergeAll(Gt),Yt=(e,t)=>N(Y,e,t),Xt=(e,t)=>P(Y,e,t),Zt=F,Qt=(e,t,n,r)=>z(Y,e,t,n,r),$t=(e,t)=>n=>A(e,`gcs`,t)(n),en=S.bind(null,`gcs`),tn=x.bind(null,`gcs`),nn=C.bind(null,`gcs`),rn=b,{uploadRequestsTotal:an,uploadPartsTotal:on,uploadSuccessTotal:sn,uploadErrorsTotal:cn,apiCallsTotal:ln,uploadDurationHistogram:un,partUploadDurationHistogram:dn,fileSizeHistogram:fn,partSizeHistogram:pn,activeUploadsGauge:mn,uploadThroughputGauge:hn,uploadLatencySummary:gn}=Y,_n=`s3`,X=D(`s3`),Z=k(`s3`),vn=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:void 0;if(!t)return null;switch(t){case`NoSuchKey`:case`NoSuchBucket`:case`NoSuchUpload`:return`client_error`;case`BucketAlreadyExists`:case`BucketNotEmpty`:return`client_error`;case`InvalidBucketName`:case`InvalidPart`:case`InvalidPartOrder`:return`client_error`;case`EntityTooSmall`:case`EntityTooLarge`:return`client_error`;case`ExpiredToken`:case`TokenRefreshRequired`:return`authentication_error`;case`RequestTimeTooSkewed`:case`SlowDown`:return`throttling_error`;default:return null}},yn=c(`s3`,X,vn),bn=e.Layer.mergeAll(Z),xn=(e,t)=>N(X,e,t),Sn=(e,t)=>P(X,e,t),Cn=F,wn=(e,t,n,r)=>z(X,e,t,n,r),Tn=(e,t)=>n=>A(e,`s3`,t)(n),En=S.bind(null,`s3`),Dn=x.bind(null,`s3`),On=C.bind(null,`s3`),kn=b,{uploadRequestsTotal:An,uploadPartsTotal:jn,uploadSuccessTotal:Mn,uploadErrorsTotal:Nn,apiCallsTotal:Pn,uploadDurationHistogram:Fn,partUploadDurationHistogram:In,fileSizeHistogram:Ln,partSizeHistogram:Rn,activeUploadsGauge:zn,uploadThroughputGauge:Bn,uploadLatencySummary:Vn}=X,Q=e=>{if(!e||typeof e!=`object`)return`unknown_error`;let t=`code`in e?e.code:void 0,n=`name`in e?e.name:void 0,r=e instanceof Error?e.message.toLowerCase():``;return t===`ABORTED`||n===`AbortError`||r.includes(`abort`)?`abort_error`:t===`FILE_TOO_LARGE`||t===`LIMIT_FILE_SIZE`||t===`RequestEntityTooLarge`||r.includes(`too large`)||r.includes(`size limit`)||r.includes(`max size`)?`size_limit_error`:t===`INVALID_FILE`||t===`INVALID_METADATA`||t===`VALIDATION_ERROR`||r.includes(`validation`)||r.includes(`invalid`)?`validation_error`:t===`NetworkError`||t===`ECONNRESET`||t===`ENOTFOUND`||t===`ETIMEDOUT`||r.includes(`network`)||r.includes(`timeout`)?`network_error`:t===`UNAUTHORIZED`||t===`AuthenticationFailed`||n===`AuthenticationError`||r.includes(`authentication`)||r.includes(`unauthorized`)?`authentication_error`:t===`FORBIDDEN`||t===`AccessDenied`||n===`AuthorizationError`||r.includes(`forbidden`)||r.includes(`permission`)?`authorization_error`:t===`FILE_WRITE_ERROR`||t===`STORAGE_ERROR`||r.includes(`storage`)||r.includes(`write error`)?`storage_error`:`unknown_error`},Hn=(t,n,r,i={})=>e.Effect.gen(function*(){let a=Q(r);yield*t.uploadFailedTotal.pipe(e.Metric.tagged(`operation`,n),e.Metric.tagged(`error_category`,a))(e.Effect.succeed(1));let o={operation:n,error_category:a,error_type:typeof r,error_message:r instanceof Error?r.message:String(r),error_code:r&&typeof r==`object`&&`code`in r?String(r.code):void 0,error_name:r&&typeof r==`object`&&`name`in r?String(r.name):void 0,...i};yield*e.Effect.logError(`Upload ${n} failed`).pipe(e.Effect.annotateLogs(o))}),Un=e=>t=>{if(e){let n=e(t);if(n!==null)return n}return Q(t)},$=()=>({uploadCreatedTotal:e.Metric.counter(`upload_created_total`,{description:`Total number of uploads created`}),uploadCompletedTotal:e.Metric.counter(`upload_completed_total`,{description:`Total number of uploads completed successfully`}),uploadFailedTotal:e.Metric.counter(`upload_failed_total`,{description:`Total number of uploads that failed`}),chunkUploadedTotal:e.Metric.counter(`chunk_uploaded_total`,{description:`Total number of chunks uploaded`}),uploadFromUrlTotal:e.Metric.counter(`upload_from_url_total`,{description:`Total number of URL-based uploads`}),uploadFromUrlSuccessTotal:e.Metric.counter(`upload_from_url_success_total`,{description:`Total number of successful URL-based uploads`}),uploadFromUrlFailedTotal:e.Metric.counter(`upload_from_url_failed_total`,{description:`Total number of failed URL-based uploads`}),uploadDurationHistogram:e.Metric.histogram(`upload_duration_seconds`,e.MetricBoundaries.exponential({start:.01,factor:2,count:20}),`Duration of complete upload operations in seconds`),chunkUploadDurationHistogram:e.Metric.histogram(`chunk_upload_duration_seconds`,e.MetricBoundaries.exponential({start:.001,factor:2,count:15}),`Duration of individual chunk uploads in seconds`),uploadFileSizeHistogram:e.Metric.histogram(`upload_file_size_bytes`,e.MetricBoundaries.exponential({start:1024,factor:2,count:25}),`Size of uploaded files in bytes`),chunkSizeHistogram:e.Metric.histogram(`chunk_size_bytes`,e.MetricBoundaries.linear({start:262144,width:262144,count:20}),`Size of uploaded chunks in bytes`),activeUploadsGauge:e.Metric.gauge(`active_uploads`,{description:`Number of currently active uploads`}),uploadThroughputGauge:e.Metric.gauge(`upload_throughput_bytes_per_second`,{description:`Current upload throughput in bytes per second`}),uploadLatencySummary:e.Metric.summary({name:`upload_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Upload operation latency percentiles`}),chunkLatencySummary:e.Metric.summary({name:`chunk_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Chunk upload latency percentiles`})}),Wn=$(),Gn=(t=`uploadista-upload-server`)=>{let n=$();return e.Layer.succeed(h,{serviceName:t,enabled:!0,metrics:{uploadCreated:e.Effect.succeed(n.uploadCreatedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t))),uploadCompleted:e.Effect.succeed(n.uploadCompletedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t))),uploadFailed:e.Effect.succeed(n.uploadFailedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t))),chunkUploaded:e.Effect.succeed(n.chunkUploadedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t)))}})},Kn=Gn(),qn=_(!1),Jn=e.Effect.gen(function*(){return(yield*h).metrics}),Yn=t=>{let n=$();return e.Effect.gen(function*(){let r=Date.now(),i=yield*t,a=(Date.now()-r)/1e3;return yield*e.Metric.update(n.uploadDurationHistogram,a),i}).pipe(e.Effect.withSpan(`upload-operation`))},Xn=t=>{let n=$();return e.Effect.gen(function*(){let r=Date.now(),i=yield*t,a=(Date.now()-r)/1e3;return yield*e.Metric.update(n.chunkUploadDurationHistogram,a),i}).pipe(e.Effect.withSpan(`chunk-upload`))},Zn=e.Layer.succeed(h,{serviceName:`uploadista-upload-server-test`,enabled:!0,metrics:{uploadCreated:()=>Promise.resolve(),uploadCompleted:()=>Promise.resolve(),uploadFailed:()=>Promise.resolve(),chunkUploaded:()=>Promise.resolve()}}),Qn=()=>$(),$n=()=>{let e=Qn(),t=[`uploadCreatedTotal`,`uploadCompletedTotal`,`uploadFailedTotal`,`chunkUploadedTotal`,`uploadFromUrlTotal`,`uploadFromUrlSuccessTotal`,`uploadFromUrlFailedTotal`,`uploadDurationHistogram`,`chunkUploadDurationHistogram`,`uploadFileSizeHistogram`,`chunkSizeHistogram`,`activeUploadsGauge`,`uploadThroughputGauge`,`uploadLatencySummary`,`chunkLatencySummary`].filter(t=>!(t in e));if(t.length>0)throw Error(`Missing required metrics: ${t.join(`, `)}`);return!0},er=(t,n)=>r=>r.pipe(e.Effect.withSpan(`upload-${t}`,{attributes:{"upload.operation":t,...n}})),tr=t=>e.Effect.annotateCurrentSpan({"upload.id":t.uploadId??`unknown`,"upload.file_name":t.fileName??`unknown`,"upload.file_size":t.fileSize?.toString()??`0`,"upload.storage_id":t.storageId??`unknown`,"upload.mime_type":t.mimeType??`unknown`}),nr=t=>e.Effect.annotateCurrentSpan({"chunk.upload_id":t.uploadId,"chunk.size":t.chunkSize.toString(),"chunk.offset":t.offset.toString(),"chunk.total_size":t.totalSize?.toString()??`0`,"chunk.progress":t.totalSize&&t.totalSize>0?(t.offset/t.totalSize*100).toFixed(2):`0`});exports.AzureObservabilityLayer=Ze,exports.AzureTracingLayer=Je,exports.FilesystemObservabilityLayer=St,exports.FilesystemTracingLayer=yt,exports.FlowObservability=g,exports.FlowObservabilityDisabled=ce,exports.FlowObservabilityLive=Me,exports.GCSObservabilityLayer=Jt,exports.GCSTracingLayer=Gt,exports.MetricsService=W,exports.NoOpMetricsServiceLive=qe,exports.NodeSdkLive=be,exports.Observability=p,exports.ObservabilityDisabled=ae,exports.OtlpNodeSdkLive=Se,exports.OtlpWebSdkLive=we,exports.OtlpWorkersSdkLive=Ee,exports.S3ObservabilityLayer=bn,exports.S3TracingLayer=Z,exports.StorageObservability=m,exports.StorageObservabilityDisabled=oe,exports.TracingService=_e,exports.UploadObservability=h,exports.UploadObservabilityDisabled=se,exports.UploadObservabilityLive=Kn,exports.UploadObservabilityTest=Zn,exports.WebSdkLive=ye,exports.WorkersSdkLive=xe,exports.annotateCircuitBreakerStateChange=Ke,exports.azureActiveUploadsGauge=gt,exports.azureApiCallsTotal=dt,exports.azureFileSizeHistogram=mt,exports.azureMetrics=K,exports.azurePartSizeHistogram=ht,exports.azurePartUploadDurationHistogram=pt,exports.azureUploadDurationHistogram=ft,exports.azureUploadErrorsTotal=ut,exports.azureUploadLatencySummary=vt,exports.azureUploadPartsTotal=ct,exports.azureUploadRequestsTotal=st,exports.azureUploadSuccessTotal=lt,exports.azureUploadThroughputGauge=_t,exports.captureMetrics=pe,exports.classifyFlowError=V,exports.classifyStorageError=a,exports.classifyUploadError=Q,exports.createFlowMetrics=B,exports.createOtlpMetricExporter=te,exports.createOtlpNodeSdkLayer=Ce,exports.createOtlpTraceExporter=ee,exports.createOtlpWebSdkLayer=Te,exports.createOtlpWorkersSdkLayer=De,exports.createStorageErrorClassifier=o,exports.createStorageErrorTracker=c,exports.createStorageMetrics=D,exports.createStorageTracingLayer=k,exports.createTestFixture=he,exports.createTracingLayer=ve,exports.createUploadErrorClassifier=Un,exports.createUploadGauges=T,exports.createUploadHistograms=w,exports.createUploadMetrics=ue,exports.createUploadServerMetrics=$,exports.createUploadSummaries=E,exports.filesystemActiveUploadsGauge=Vt,exports.filesystemApiCallsTotal=It,exports.filesystemFileSizeHistogram=zt,exports.filesystemMetrics=J,exports.filesystemPartSizeHistogram=Bt,exports.filesystemPartUploadDurationHistogram=Rt,exports.filesystemUploadDurationHistogram=Lt,exports.filesystemUploadErrorsTotal=Ft,exports.filesystemUploadLatencySummary=Ut,exports.filesystemUploadPartsTotal=Nt,exports.filesystemUploadRequestsTotal=Mt,exports.filesystemUploadSuccessTotal=Pt,exports.filesystemUploadThroughputGauge=Ht,exports.flowMetrics=ke,exports.gcsActiveUploadsGauge=mn,exports.gcsApiCallsTotal=ln,exports.gcsFileSizeHistogram=fn,exports.gcsMetrics=Y,exports.gcsPartSizeHistogram=pn,exports.gcsPartUploadDurationHistogram=dn,exports.gcsUploadDurationHistogram=un,exports.gcsUploadErrorsTotal=cn,exports.gcsUploadLatencySummary=gn,exports.gcsUploadPartsTotal=on,exports.gcsUploadRequestsTotal=an,exports.gcsUploadSuccessTotal=sn,exports.gcsUploadThroughputGauge=hn,exports.getFlowMetrics=Pe,exports.getOtlpEndpoint=u,exports.getServiceName=f,exports.getTestMetrics=Qn,exports.getUploadMetrics=Jn,exports.isObservabilityEnabled=y,exports.isOtlpExportEnabled=d,exports.logAzureContext=ot,exports.logAzureOperation=rt,exports.logAzureUploadCompletion=at,exports.logAzureUploadProgress=it,exports.logFilesystemContext=jt,exports.logFilesystemOperation=Ot,exports.logFilesystemUploadCompletion=At,exports.logFilesystemUploadProgress=kt,exports.logGCSContext=rn,exports.logGCSOperation=en,exports.logGCSUploadCompletion=nn,exports.logGCSUploadProgress=tn,exports.logS3Context=kn,exports.logS3Operation=En,exports.logS3UploadCompletion=On,exports.logS3UploadProgress=Dn,exports.logStorageOperation=S,exports.logUploadCompletion=C,exports.logUploadProgress=x,exports.logWithContext=b,exports.makeFlowObservabilityLayer=v,exports.makeFlowObservabilityLive=H,exports.makeObservabilityLayer=re,exports.makeStorageObservabilityLayer=ie,exports.makeTestFlowObservability=fe,exports.makeTestFlowObservabilityUtil=U,exports.makeTestStorageObservability=O,exports.makeTestUploadObservability=de,exports.makeUploadObservabilityLayer=_,exports.makeUploadObservabilityLive=Gn,exports.parseOtlpHeaders=l,exports.parseResourceAttributes=ne,exports.runWithTestFlowObservability=ze,exports.runWithTestObservability=ge,exports.s3ActiveUploadsGauge=zn,exports.s3ApiCallsTotal=Pn,exports.s3FileSizeHistogram=Ln,exports.s3Metrics=X,exports.s3PartSizeHistogram=Rn,exports.s3PartUploadDurationHistogram=In,exports.s3UploadDurationHistogram=Fn,exports.s3UploadErrorsTotal=Nn,exports.s3UploadLatencySummary=Vn,exports.s3UploadPartsTotal=jn,exports.s3UploadRequestsTotal=An,exports.s3UploadSuccessTotal=Mn,exports.s3UploadThroughputGauge=Bn,exports.trackActiveFlow=Le,exports.trackActiveNode=Re,exports.trackAzureError=Xe,exports.trackFileSize=I,exports.trackFilesystemError=xt,exports.trackFlowError=Ae,exports.trackGCSError=qt,exports.trackNodeError=je,exports.trackPartSize=Oe,exports.trackS3Error=yn,exports.trackStorageError=s,exports.trackUploadError=Hn,exports.uploadServerMetrics=Wn,exports.validateMetricsExist=$n,exports.whenObservabilityEnabled=le,exports.withActiveUploadTracking=L,exports.withApiMetrics=P,exports.withAzureApiMetrics=$e,exports.withAzureOperationMetrics=tt,exports.withAzureSpan=nt,exports.withAzureTimingMetrics=et,exports.withAzureUploadMetrics=Qe,exports.withChunkContext=nr,exports.withChunkDuration=Xn,exports.withCircuitBreakerContext=Ge,exports.withCircuitBreakerSpan=We,exports.withExecutionContext=Ue,exports.withFilesystemApiMetrics=wt,exports.withFilesystemOperationMetrics=Et,exports.withFilesystemSpan=Dt,exports.withFilesystemTimingMetrics=Tt,exports.withFilesystemUploadMetrics=Ct,exports.withFlowContext=Ve,exports.withFlowDuration=Fe,exports.withFlowSpan=Be,exports.withGCSApiMetrics=Xt,exports.withGCSOperationMetrics=Qt,exports.withGCSSpan=$t,exports.withGCSTimingMetrics=Zt,exports.withGCSUploadMetrics=Yt,exports.withMetricTracking=me,exports.withNodeContext=He,exports.withNodeDuration=Ie,exports.withS3ApiMetrics=Sn,exports.withS3OperationMetrics=wn,exports.withS3Span=Tn,exports.withS3TimingMetrics=Cn,exports.withS3UploadMetrics=xn,exports.withStorageOperationMetrics=z,exports.withStorageSpan=A,exports.withThroughputTracking=R,exports.withTimingMetrics=F,exports.withUploadContext=tr,exports.withUploadDuration=Yn,exports.withUploadMetrics=N,exports.withUploadSpan=er;
1
+ let e=require(`effect`),t=require(`@opentelemetry/exporter-metrics-otlp-http`),n=require(`@opentelemetry/exporter-trace-otlp-http`),r=require(`@effect/opentelemetry`),i=require(`@opentelemetry/sdk-trace-base`);const a=e=>{if(!e||typeof e!=`object`)return`unknown_error`;let t=`code`in e?e.code:void 0,n=`name`in e?e.name:void 0,r=e instanceof Error?e.message.toLowerCase():``;return t===`NetworkError`||t===`ECONNRESET`||t===`ENOTFOUND`||t===`ETIMEDOUT`||r.indexOf(`network`)>=0||r.indexOf(`timeout`)>=0?`network_error`:t===`InvalidAccessKeyId`||t===`SignatureDoesNotMatch`||t===`TokenRefreshRequired`||t===`AuthenticationFailed`||n===`AuthenticationError`||r.indexOf(`authentication`)>=0||r.indexOf(`unauthorized`)>=0?`authentication_error`:t===`AccessDenied`||t===`AccountProblem`||t===`Forbidden`||n===`AuthorizationError`||r.indexOf(`forbidden`)>=0||r.indexOf(`permission`)>=0?`authorization_error`:t===`SlowDown`||t===`RequestTimeTooSkewed`||t===`TooManyRequests`||n===`ThrottlingError`||r.indexOf(`throttl`)>=0||r.indexOf(`rate limit`)>=0?`throttling_error`:t===`InternalError`||t===`ServiceUnavailable`||t===`InternalServerError`||n===`ServerError`||r.indexOf(`server error`)>=0||r.indexOf(`service unavailable`)>=0?`server_error`:t===`InvalidRequest`||t===`MalformedXML`||t===`RequestEntityTooLarge`||t===`BadRequest`||n===`ClientError`||r.indexOf(`bad request`)>=0||r.indexOf(`invalid`)>=0?`client_error`:`unknown_error`},o=(e,t)=>e=>{if(t){let n=t(e);if(n!==null)return n}return a(e)},s=(t,n,r,i,o={},s=a)=>e.Effect.gen(function*(){let a=s(i);yield*n.uploadErrorsTotal.pipe(e.Metric.tagged(`operation`,r),e.Metric.tagged(`error_category`,a))(e.Effect.succeed(1));let c={storage_type:t,operation:r,error_category:a,error_type:typeof i,error_message:i instanceof Error?i.message:String(i),error_code:i&&typeof i==`object`&&`code`in i?i.code:void 0,error_name:i&&typeof i==`object`&&`name`in i?i.name:void 0,...o};yield*e.Effect.logError(`${t.toUpperCase()} ${r} failed`).pipe(e.Effect.annotateLogs(c))}),c=(e,t,n)=>{let r=o(e,n);return(n,i,a={})=>s(e,t,n,i,a,r)};function l(){let e=typeof process<`u`?process.env.OTEL_EXPORTER_OTLP_HEADERS:void 0;if(!e)return;let t={},n=e.split(`,`);for(let e of n){let[n,...r]=e.split(`=`);n&&r.length>0&&(t[n.trim()]=r.join(`=`).trim())}return Object.keys(t).length>0?t:void 0}function u(e,t){if(t)return t;if(typeof process<`u`){let t=e===`traces`?process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT;if(t)return t;if(process.env.OTEL_EXPORTER_OTLP_ENDPOINT)return process.env.OTEL_EXPORTER_OTLP_ENDPOINT}return`http://localhost:4318`}function ee(e={}){let t=u(`traces`,e.endpoint),r=e.headers??l(),i=e.timeoutMillis??3e4;return new n.OTLPTraceExporter({url:`${t}/v1/traces`,headers:r,timeoutMillis:i})}function te(e={}){let n=u(`metrics`,e.endpoint),r=e.headers??l(),i=e.timeoutMillis??3e4;return new t.OTLPMetricExporter({url:`${n}/v1/metrics`,headers:r,timeoutMillis:i})}function d(){if(typeof process<`u`){let e=process.env.UPLOADISTA_OBSERVABILITY_ENABLED;if(e!==void 0)return e.toLowerCase()!==`false`&&e!==`0`}return!0}function f(e=`uploadista`){return typeof process<`u`&&process.env.OTEL_SERVICE_NAME?process.env.OTEL_SERVICE_NAME:e}function ne(){if(typeof process>`u`)return{};let e=process.env.OTEL_RESOURCE_ATTRIBUTES;if(!e)return{};let t={},n=e.split(`,`);for(let e of n){let[n,...r]=e.split(`=`);n&&r.length>0&&(t[n.trim()]=r.join(`=`).trim())}return t}var p=class extends e.Context.Tag(`Observability`)(){},m=class extends e.Context.Tag(`StorageObservability`)(){},h=class extends e.Context.Tag(`UploadObservability`)(){},g=class extends e.Context.Tag(`FlowObservability`)(){};const re=(t,n=!0)=>e.Layer.succeed(p,{serviceName:t,enabled:n}),ie=(t,n,r=!0)=>e.Layer.succeed(m,{serviceName:`uploadista-${t}-store`,storageType:t,metrics:n,enabled:r}),_=(t=!0)=>e.Layer.succeed(h,{serviceName:`uploadista-upload-server`,enabled:t,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}}),v=(t=!0)=>e.Layer.succeed(g,{serviceName:`uploadista-flow-engine`,enabled:t,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}}),ae=re(`uploadista-disabled`,!1),oe=e=>ie(e,{},!1),se=_(!1),ce=v(!1),y=e.Effect.gen(function*(){let t=yield*e.Effect.serviceOption(p);return e.Option.match(t,{onNone:()=>!1,onSome:e=>e.enabled})}),le=t=>e.Effect.gen(function*(){if(yield*y){let n=yield*t;return e.Option.some(n)}return e.Option.none()}),b=(t,n)=>e.Effect.log(t).pipe(e.Effect.annotateLogs(n)),x=(e,t,n)=>b(`Upload progress`,{storage_type:e,upload_id:t,uploaded_bytes:n.uploadedBytes,total_bytes:n.totalBytes,progress_percentage:Math.round(n.uploadedBytes/n.totalBytes*100),...n.partNumber&&{part_number:n.partNumber},...n.speed&&{upload_speed_bps:n.speed}}),S=(e,t,n,r)=>b(`${e.toUpperCase()} ${t}`,{storage_type:e,operation:t,upload_id:n,...r}),C=(e,t,n)=>{let r=n.throughputBps?n.throughputBps/(1024*1024):0;return b(`${e.toUpperCase()} upload completed`,{storage_type:e,upload_id:t,file_size_bytes:n.fileSize,file_size_mb:Math.round(n.fileSize/(1024*1024)*100)/100,total_duration_ms:n.totalDurationMs,total_duration_seconds:Math.round(n.totalDurationMs/1e3*100)/100,throughput_bps:n.throughputBps,throughput_mbps:Math.round(r*100)/100,...n.partsCount&&{parts_count:n.partsCount},...n.averagePartSize&&{average_part_size_bytes:n.averagePartSize,average_part_size_mb:Math.round(n.averagePartSize/(1024*1024)*100)/100},...n.retryCount&&{retry_count:n.retryCount}})},ue=t=>({uploadRequestsTotal:e.Metric.counter(`${t}_upload_requests_total`,{description:`Total number of upload requests for ${t}`}),uploadPartsTotal:e.Metric.counter(`${t}_upload_parts_total`,{description:`Total number of individual parts uploaded for ${t}`}),uploadSuccessTotal:e.Metric.counter(`${t}_upload_success_total`,{description:`Total number of successful uploads for ${t}`}),uploadErrorsTotal:e.Metric.counter(`${t}_upload_errors_total`,{description:`Total number of upload errors for ${t}`}),apiCallsTotal:e.Metric.counter(`${t}_api_calls_total`,{description:`Total number of API calls for ${t}`})}),w=t=>({uploadDurationHistogram:e.Metric.histogram(`${t}_upload_duration_seconds`,e.MetricBoundaries.exponential({start:.01,factor:2,count:20}),`Duration of upload operations in seconds for ${t}`),partUploadDurationHistogram:e.Metric.histogram(`${t}_part_upload_duration_seconds`,e.MetricBoundaries.exponential({start:.001,factor:2,count:15}),`Duration of individual part uploads in seconds for ${t}`),fileSizeHistogram:e.Metric.histogram(`${t}_file_size_bytes`,e.MetricBoundaries.exponential({start:1024,factor:2,count:25}),`Size of uploaded files in bytes for ${t}`),partSizeHistogram:e.Metric.histogram(`${t}_part_size_bytes`,e.MetricBoundaries.linear({start:5242880,width:1048576,count:20}),`Size of upload parts in bytes for ${t}`)}),T=t=>({activeUploadsGauge:e.Metric.gauge(`${t}_active_uploads`,{description:`Number of currently active uploads for ${t}`}),uploadThroughputGauge:e.Metric.gauge(`${t}_upload_throughput_bytes_per_second`,{description:`Current upload throughput in bytes per second for ${t}`})}),E=t=>({uploadLatencySummary:e.Metric.summary({name:`${t}_upload_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Upload latency percentiles for ${t}`})}),D=e=>({...ue(e),...w(e),...T(e),...E(e)}),O=t=>{let n=D(t),r={serviceName:`test-${t}-store`,storageType:t,metrics:n,enabled:!0};return e.Layer.succeed(m,r)},de=()=>{let t={serviceName:`test-upload-server`,enabled:!0,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}};return e.Layer.succeed(h,t)},fe=()=>{let t={serviceName:`test-flow-engine`,enabled:!0,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}};return e.Layer.succeed(g,t)},pe=t=>e.Effect.gen(function*(){let n=yield*t;return yield*e.Metric.snapshot,n}),me=t=>e.Effect.gen(function*(){yield*e.Metric.snapshot;let n=yield*t;return yield*e.Metric.snapshot,n}),he=(e=`test-storage`)=>({storageObservability:O(e),uploadObservability:de(),flowObservability:fe()}),ge=(t,n=`test-storage`)=>{let r=he(n);return t.pipe(e.Effect.provide(r.storageObservability),e.Effect.provide(r.uploadObservability),e.Effect.provide(r.flowObservability))},_e=e.Context.GenericTag(`TracingService`),ve=t=>{let n=t?.serviceName??`uploadista-storage`;return e.Layer.succeed(_e,{serviceName:n})},k=e=>ve({serviceName:`uploadista-${e}-store`}),A=(t,n,r)=>i=>i.pipe(e.Effect.withSpan(`${n}-${t}`,{attributes:{"storage.type":n,operation:t,...r}})),ye=r.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new i.BatchSpanProcessor(new i.ConsoleSpanExporter)})),be=r.NodeSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new i.BatchSpanProcessor(new i.ConsoleSpanExporter)})),xe=r.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage-workers`},spanProcessor:new i.BatchSpanProcessor(new i.ConsoleSpanExporter)}));function j(e={}){return new i.BatchSpanProcessor(ee(),{maxQueueSize:e.maxQueueSize??512,maxExportBatchSize:e.maxExportBatchSize??512,scheduledDelayMillis:e.scheduledDelayMillis??5e3,exportTimeoutMillis:e.exportTimeoutMillis??3e4})}function M(e={}){let t=e.serviceName??f(`uploadista`),n=ne(),r=e.resourceAttributes??{};return{serviceName:t,...n,...r}}const Se=r.NodeSdk.layer(()=>d()?{resource:M(),spanProcessor:j()}:{resource:M()});function Ce(e={}){return r.NodeSdk.layer(()=>d()?{resource:M(e),spanProcessor:j(e)}:{resource:M(e)})}const we=r.WebSdk.layer(()=>d()?{resource:M(),spanProcessor:j()}:{resource:M()});function Te(e={}){return r.WebSdk.layer(()=>d()?{resource:M(e),spanProcessor:j(e)}:{resource:M(e)})}const Ee=r.WebSdk.layer(()=>{let e={serviceName:f(`uploadista-workers`)};return d()?{resource:M(e),spanProcessor:j(e)}:{resource:M(e)}});function De(e={}){return r.WebSdk.layer(()=>{let t={serviceName:f(`uploadista-workers`),...e};return d()?{resource:M(t),spanProcessor:j(t)}:{resource:M(t)}})}const N=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.uploadRequestsTotal.pipe(e.Metric.tagged(`upload_id`,n))(e.Effect.succeed(1))),e.Effect.tapError(()=>t.uploadErrorsTotal.pipe(e.Metric.tagged(`upload_id`,n))(e.Effect.succeed(1))),e.Effect.tap(()=>t.uploadSuccessTotal.pipe(e.Metric.tagged(`upload_id`,n))(e.Effect.succeed(1)))),P=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.apiCallsTotal.pipe(e.Metric.tagged(`operation`,n))(e.Effect.succeed(1)))),F=(t,n)=>e.Effect.gen(function*(){let r=yield*e.Effect.sync(()=>Date.now()),i=yield*n,a=((yield*e.Effect.sync(()=>Date.now()))-r)/1e3;return yield*t(e.Effect.succeed(a)),i}),I=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.fileSizeHistogram(e.Effect.succeed(n)))),Oe=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.partSizeHistogram(e.Effect.succeed(n)))),L=(t,n)=>n.pipe(e.Effect.tap(()=>t.activeUploadsGauge(e.Effect.succeed(1))),e.Effect.ensuring(t.activeUploadsGauge(e.Effect.succeed(-1)))),R=(t,n,r)=>e.Effect.gen(function*(){let i=yield*e.Effect.sync(()=>Date.now()),a=yield*r,o=((yield*e.Effect.sync(()=>Date.now()))-i)/1e3,s=o>0?n/o:0;return yield*t.uploadThroughputGauge(e.Effect.succeed(s)),a}),z=(e,t,n,r,i)=>{let a=r.pipe(n=>P(e,t,n),t=>N(e,n,t),t=>F(e.uploadDurationHistogram,t),t=>L(e,t));return i!==void 0&&(a=a.pipe(t=>I(e,i,t),t=>R(e,i,t))),a},B=()=>({flowStartedTotal:e.Metric.counter(`flow_started_total`,{description:`Total number of flows started`}),flowCompletedTotal:e.Metric.counter(`flow_completed_total`,{description:`Total number of flows completed successfully`}),flowFailedTotal:e.Metric.counter(`flow_failed_total`,{description:`Total number of flows that failed`}),flowPausedTotal:e.Metric.counter(`flow_paused_total`,{description:`Total number of flows that were paused`}),flowResumedTotal:e.Metric.counter(`flow_resumed_total`,{description:`Total number of flows that were resumed`}),nodeExecutedTotal:e.Metric.counter(`node_executed_total`,{description:`Total number of nodes executed`}),nodeSuccessTotal:e.Metric.counter(`node_success_total`,{description:`Total number of nodes executed successfully`}),nodeFailedTotal:e.Metric.counter(`node_failed_total`,{description:`Total number of nodes that failed`}),nodeSkippedTotal:e.Metric.counter(`node_skipped_total`,{description:`Total number of nodes skipped (conditional)`}),flowDurationHistogram:e.Metric.histogram(`flow_duration_seconds`,e.MetricBoundaries.exponential({start:.1,factor:2,count:20}),`Duration of complete flow execution in seconds`),nodeDurationHistogram:e.Metric.histogram(`node_duration_seconds`,e.MetricBoundaries.exponential({start:.01,factor:2,count:18}),`Duration of individual node execution in seconds`),flowNodeCountHistogram:e.Metric.histogram(`flow_node_count`,e.MetricBoundaries.linear({start:1,width:5,count:20}),`Number of nodes in a flow`),parallelNodesHistogram:e.Metric.histogram(`parallel_nodes_count`,e.MetricBoundaries.linear({start:1,width:2,count:15}),`Number of nodes executed in parallel`),activeFlowsGauge:e.Metric.gauge(`active_flows`,{description:`Number of currently active flows`}),activeNodesGauge:e.Metric.gauge(`active_nodes`,{description:`Number of currently executing nodes`}),pausedFlowsGauge:e.Metric.gauge(`paused_flows`,{description:`Number of currently paused flows`}),flowLatencySummary:e.Metric.summary({name:`flow_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Flow execution latency percentiles`}),nodeLatencySummary:e.Metric.summary({name:`node_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Node execution latency percentiles`}),circuitBreakerOpenTotal:e.Metric.counter(`circuit_breaker_open_total`,{description:`Total number of times circuit breakers transitioned to open state`}),circuitBreakerCloseTotal:e.Metric.counter(`circuit_breaker_close_total`,{description:`Total number of times circuit breakers transitioned to closed state`}),circuitBreakerRejectedTotal:e.Metric.counter(`circuit_breaker_rejected_total`,{description:`Total number of requests rejected because circuit breaker is open`}),circuitBreakerHalfOpenTotal:e.Metric.counter(`circuit_breaker_half_open_total`,{description:`Total number of times circuit breakers transitioned to half-open state`}),circuitBreakerStateGauge:e.Metric.gauge(`circuit_breaker_state`,{description:`Current circuit breaker state (0=closed, 1=open, 2=half-open)`}),circuitBreakerFailuresGauge:e.Metric.gauge(`circuit_breaker_failures`,{description:`Number of failures currently in the circuit breaker sliding window`})}),ke=B(),V=e=>{if(!e||typeof e!=`object`)return`unknown_flow_error`;let t=`code`in e?e.code:void 0;if(!t)return`unknown_flow_error`;switch(t){case`FLOW_VALIDATION_ERROR`:case`FLOW_INVALID_INPUT`:case`FLOW_INVALID_OUTPUT`:return`flow_validation_error`;case`FLOW_NODE_NOT_FOUND`:case`FLOW_EDGE_INVALID`:return`node_not_found_error`;case`FLOW_NODE_EXECUTION_FAILED`:case`FLOW_NODE_ERROR`:return`node_execution_error`;case`FLOW_TIMEOUT`:return`flow_timeout_error`;case`FLOW_CANCELLED`:case`ABORTED`:return`flow_cancelled_error`;default:return`unknown_flow_error`}},Ae=t=>{let n=B(),r=V(t);return e.Effect.gen(function*(){yield*e.Metric.increment(n.flowFailedTotal),yield*e.Effect.logError(`Flow execution failed`).pipe(e.Effect.annotateLogs({"error.category":r,"error.message":String(t)}))})},je=(t,n,r)=>{let i=B(),a=V(r);return e.Effect.gen(function*(){yield*e.Metric.increment(i.nodeFailedTotal),yield*e.Effect.logError(`Node execution failed`).pipe(e.Effect.annotateLogs({"node.id":t,"node.type":n,"error.category":a,"error.message":String(r)}))})},H=(t=`uploadista-flow-engine`)=>{let n=B();return e.Layer.succeed(g,{serviceName:t,enabled:!0,metrics:{flowStarted:e.Metric.increment(n.flowStartedTotal),flowCompleted:e.Metric.increment(n.flowCompletedTotal),flowFailed:e.Metric.increment(n.flowFailedTotal),nodeExecuted:e.Metric.increment(n.nodeExecutedTotal)}})},Me=H(),Ne=v(!1),Pe=e.Effect.gen(function*(){return(yield*g).metrics}),Fe=t=>{let n=B();return e.Effect.gen(function*(){let r=Date.now(),i=yield*t,a=(Date.now()-r)/1e3;return yield*e.Metric.update(n.flowDurationHistogram,a),yield*e.Metric.update(n.flowLatencySummary,a),i}).pipe(e.Effect.withSpan(`flow-execution`))},Ie=(t,n,r)=>{let i=B();return e.Effect.gen(function*(){let t=Date.now(),n=yield*r,a=(Date.now()-t)/1e3;return yield*e.Metric.update(i.nodeDurationHistogram,a),yield*e.Metric.update(i.nodeLatencySummary,a),n}).pipe(e.Effect.withSpan(`node-${n}`,{attributes:{"node.id":t,"node.type":n}}))},Le=t=>{let n=B();return e.Effect.gen(function*(){return yield*e.Metric.increment(n.activeFlowsGauge),yield*e.Effect.acquireUseRelease(e.Effect.void,()=>t,()=>e.Metric.set(n.activeFlowsGauge,-1))})},Re=t=>{let n=B();return e.Effect.gen(function*(){return yield*e.Metric.increment(n.activeNodesGauge),yield*e.Effect.acquireUseRelease(e.Effect.void,()=>t,()=>e.Metric.set(n.activeNodesGauge,-1))})},U=()=>{let t={serviceName:`test-flow-engine`,enabled:!0,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}};return e.Layer.succeed(g,t)},ze=t=>t.pipe(e.Effect.provide(U())),Be=(t,n)=>r=>r.pipe(e.Effect.withSpan(`flow-${t}`,{attributes:{"flow.operation":t,...n}})),Ve=t=>e.Effect.annotateCurrentSpan({"flow.id":t.flowId??`unknown`,"flow.name":t.flowName??`unknown`,"flow.job_id":t.jobId??`unknown`,"flow.node_count":t.nodeCount?.toString()??`0`,"flow.storage_id":t.storageId??`unknown`}),He=t=>e.Effect.annotateCurrentSpan({"node.id":t.nodeId,"node.type":t.nodeType,"node.name":t.nodeName??`unknown`,"node.flow_id":t.flowId??`unknown`,"node.job_id":t.jobId??`unknown`}),Ue=t=>e.Effect.annotateCurrentSpan({"execution.order":t.executionOrder?.join(`,`)??``,"execution.current_index":t.currentIndex?.toString()??`0`,"execution.total_nodes":t.totalNodes?.toString()??`0`,"execution.parallel_count":t.parallelCount?.toString()??`0`}),We=(t,n,r)=>i=>i.pipe(e.Effect.withSpan(`circuit-breaker-${t}`,{attributes:{"circuit_breaker.node_type":t,"circuit_breaker.state":n,...r}})),Ge=t=>e.Effect.annotateCurrentSpan({"circuit_breaker.node_type":t.nodeType,"circuit_breaker.state":t.state,"circuit_breaker.failure_count":t.failureCount?.toString()??`0`,"circuit_breaker.failure_threshold":t.failureThreshold?.toString()??`5`,"circuit_breaker.reset_timeout":t.resetTimeout?.toString()??`30000`,"circuit_breaker.decision":t.decision??`unknown`}),Ke=t=>e.Effect.annotateCurrentSpan({"circuit_breaker.event":`state_change`,"circuit_breaker.node_type":t.nodeType,"circuit_breaker.previous_state":t.previousState,"circuit_breaker.new_state":t.newState,"circuit_breaker.failure_count":t.failureCount?.toString()??`0`,"circuit_breaker.timestamp":t.timestamp?.toString()??Date.now().toString()});var W=class extends e.Context.Tag(`MetricsService`)(){};const qe=e.Layer.succeed(W,{recordUpload:(t,n)=>e.Effect.void}),G=`azure`,K=D(G),Je=k(G),Ye=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:`statusCode`in e?e.statusCode:void 0;if(!t)return null;switch(t){case`BlobNotFound`:case`ContainerNotFound`:case`InvalidBlobOrBlock`:return`client_error`;case`ContainerAlreadyExists`:case`BlobAlreadyExists`:return`client_error`;case`InvalidBlockId`:case`InvalidBlockList`:case`InvalidBlobType`:return`client_error`;case`RequestBodyTooLarge`:case`InvalidHeaderValue`:return`client_error`;case`AuthenticationFailed`:case`InvalidAuthenticationInfo`:return`authentication_error`;case`AccountIsDisabled`:return`authorization_error`;case`InsufficientAccountPermissions`:return`authorization_error`;case`OperationTimedOut`:case`ServerBusy`:case`InternalError`:return`server_error`;default:if(typeof t==`number`){if(t>=500)return`server_error`;if(t===429)return`throttling_error`;if(t===403)return`authorization_error`;if(t===401)return`authentication_error`;if(t>=400)return`client_error`}return null}},Xe=c(G,K,Ye),Ze=e.Layer.mergeAll(Je),Qe=(e,t)=>N(K,e,t),$e=(e,t)=>P(K,e,t),et=F,tt=(e,t,n,r)=>z(K,e,t,n,r),nt=(e,t)=>n=>A(e,G,t)(n),rt=S.bind(null,G),it=x.bind(null,G),at=C.bind(null,G),ot=b,{uploadRequestsTotal:st,uploadPartsTotal:ct,uploadSuccessTotal:lt,uploadErrorsTotal:ut,apiCallsTotal:dt,uploadDurationHistogram:ft,partUploadDurationHistogram:pt,fileSizeHistogram:mt,partSizeHistogram:ht,activeUploadsGauge:gt,uploadThroughputGauge:_t,uploadLatencySummary:vt}=K,q=`filesystem`,J=D(q),yt=k(q),bt=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:void 0;if(!t)return null;switch(t){case`ENOENT`:case`ENOTDIR`:return`client_error`;case`EEXIST`:return`client_error`;case`EISDIR`:return`client_error`;case`EINVAL`:case`ENAMETOOLONG`:return`client_error`;case`EACCES`:case`EPERM`:return`authorization_error`;case`ENOSPC`:case`EDQUOT`:return`server_error`;case`EIO`:case`EROFS`:case`EMFILE`:case`ENFILE`:return`server_error`;case`EBUSY`:return`throttling_error`;default:return null}},xt=c(q,J,bt),St=e.Layer.mergeAll(yt),Ct=(e,t)=>N(J,e,t),wt=(e,t)=>P(J,e,t),Tt=F,Et=(e,t,n,r)=>z(J,e,t,n,r),Dt=(e,t)=>n=>A(e,q,t)(n),Ot=S.bind(null,q),kt=x.bind(null,q),At=C.bind(null,q),jt=b,{uploadRequestsTotal:Mt,uploadPartsTotal:Nt,uploadSuccessTotal:Pt,uploadErrorsTotal:Ft,apiCallsTotal:It,uploadDurationHistogram:Lt,partUploadDurationHistogram:Rt,fileSizeHistogram:zt,partSizeHistogram:Bt,activeUploadsGauge:Vt,uploadThroughputGauge:Ht,uploadLatencySummary:Ut}=J,Wt=`gcs`,Y=D(`gcs`),Gt=k(`gcs`),Kt=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:`status`in e?e.status:void 0;if(!t)return null;switch(t){case`NoSuchBucket`:case`NoSuchKey`:case`NoSuchUpload`:return`client_error`;case`BucketAlreadyOwnedByYou`:case`BucketNotEmpty`:return`client_error`;case`InvalidBucketName`:case`InvalidArgument`:case`InvalidPart`:case`InvalidPartOrder`:return`client_error`;case`EntityTooSmall`:case`EntityTooLarge`:return`client_error`;case`MalformedPolicy`:return`client_error`;case`Unauthorized`:case`AuthenticationRequired`:return`authentication_error`;case`Forbidden`:case`AccessDenied`:return`authorization_error`;case`TooManyRequests`:case`RateLimitExceeded`:return`throttling_error`;case`InternalError`:case`ServiceUnavailable`:case`BackendError`:return`server_error`;default:if(typeof t==`number`){if(t>=500)return`server_error`;if(t===429)return`throttling_error`;if(t===403)return`authorization_error`;if(t===401)return`authentication_error`;if(t>=400)return`client_error`}return null}},qt=c(`gcs`,Y,Kt),Jt=e.Layer.mergeAll(Gt),Yt=(e,t)=>N(Y,e,t),Xt=(e,t)=>P(Y,e,t),Zt=F,Qt=(e,t,n,r)=>z(Y,e,t,n,r),$t=(e,t)=>n=>A(e,`gcs`,t)(n),en=S.bind(null,`gcs`),tn=x.bind(null,`gcs`),nn=C.bind(null,`gcs`),rn=b,{uploadRequestsTotal:an,uploadPartsTotal:on,uploadSuccessTotal:sn,uploadErrorsTotal:cn,apiCallsTotal:ln,uploadDurationHistogram:un,partUploadDurationHistogram:dn,fileSizeHistogram:fn,partSizeHistogram:pn,activeUploadsGauge:mn,uploadThroughputGauge:hn,uploadLatencySummary:gn}=Y,_n=`s3`,X=D(`s3`),Z=k(`s3`),vn=e=>{if(!e||typeof e!=`object`)return null;let t=`code`in e?e.code:void 0;if(!t)return null;switch(t){case`NoSuchKey`:case`NoSuchBucket`:case`NoSuchUpload`:return`client_error`;case`BucketAlreadyExists`:case`BucketNotEmpty`:return`client_error`;case`InvalidBucketName`:case`InvalidPart`:case`InvalidPartOrder`:return`client_error`;case`EntityTooSmall`:case`EntityTooLarge`:return`client_error`;case`ExpiredToken`:case`TokenRefreshRequired`:return`authentication_error`;case`RequestTimeTooSkewed`:case`SlowDown`:return`throttling_error`;default:return null}},yn=c(`s3`,X,vn),bn=e.Layer.mergeAll(Z),xn=(e,t)=>N(X,e,t),Sn=(e,t)=>P(X,e,t),Cn=F,wn=(e,t,n,r)=>z(X,e,t,n,r),Tn=(e,t)=>n=>A(e,`s3`,t)(n),En=S.bind(null,`s3`),Dn=x.bind(null,`s3`),On=C.bind(null,`s3`),kn=b,{uploadRequestsTotal:An,uploadPartsTotal:jn,uploadSuccessTotal:Mn,uploadErrorsTotal:Nn,apiCallsTotal:Pn,uploadDurationHistogram:Fn,partUploadDurationHistogram:In,fileSizeHistogram:Ln,partSizeHistogram:Rn,activeUploadsGauge:zn,uploadThroughputGauge:Bn,uploadLatencySummary:Vn}=X,Q=e=>{if(!e||typeof e!=`object`)return`unknown_error`;let t=`code`in e?e.code:void 0,n=`name`in e?e.name:void 0,r=e instanceof Error?e.message.toLowerCase():``;return t===`ABORTED`||n===`AbortError`||r.includes(`abort`)?`abort_error`:t===`FILE_TOO_LARGE`||t===`LIMIT_FILE_SIZE`||t===`RequestEntityTooLarge`||r.includes(`too large`)||r.includes(`size limit`)||r.includes(`max size`)?`size_limit_error`:t===`INVALID_FILE`||t===`INVALID_METADATA`||t===`VALIDATION_ERROR`||r.includes(`validation`)||r.includes(`invalid`)?`validation_error`:t===`NetworkError`||t===`ECONNRESET`||t===`ENOTFOUND`||t===`ETIMEDOUT`||r.includes(`network`)||r.includes(`timeout`)?`network_error`:t===`UNAUTHORIZED`||t===`AuthenticationFailed`||n===`AuthenticationError`||r.includes(`authentication`)||r.includes(`unauthorized`)?`authentication_error`:t===`FORBIDDEN`||t===`AccessDenied`||n===`AuthorizationError`||r.includes(`forbidden`)||r.includes(`permission`)?`authorization_error`:t===`FILE_WRITE_ERROR`||t===`STORAGE_ERROR`||r.includes(`storage`)||r.includes(`write error`)?`storage_error`:`unknown_error`},Hn=(t,n,r,i={})=>e.Effect.gen(function*(){let a=Q(r);yield*t.uploadFailedTotal.pipe(e.Metric.tagged(`operation`,n),e.Metric.tagged(`error_category`,a))(e.Effect.succeed(1));let o={operation:n,error_category:a,error_type:typeof r,error_message:r instanceof Error?r.message:String(r),error_code:r&&typeof r==`object`&&`code`in r?String(r.code):void 0,error_name:r&&typeof r==`object`&&`name`in r?String(r.name):void 0,...i};yield*e.Effect.logError(`Upload ${n} failed`).pipe(e.Effect.annotateLogs(o))}),Un=e=>t=>{if(e){let n=e(t);if(n!==null)return n}return Q(t)},$=()=>({uploadCreatedTotal:e.Metric.counter(`upload_created_total`,{description:`Total number of uploads created`}),uploadCompletedTotal:e.Metric.counter(`upload_completed_total`,{description:`Total number of uploads completed successfully`}),uploadFailedTotal:e.Metric.counter(`upload_failed_total`,{description:`Total number of uploads that failed`}),chunkUploadedTotal:e.Metric.counter(`chunk_uploaded_total`,{description:`Total number of chunks uploaded`}),uploadFromUrlTotal:e.Metric.counter(`upload_from_url_total`,{description:`Total number of URL-based uploads`}),uploadFromUrlSuccessTotal:e.Metric.counter(`upload_from_url_success_total`,{description:`Total number of successful URL-based uploads`}),uploadFromUrlFailedTotal:e.Metric.counter(`upload_from_url_failed_total`,{description:`Total number of failed URL-based uploads`}),uploadDurationHistogram:e.Metric.histogram(`upload_duration_seconds`,e.MetricBoundaries.exponential({start:.01,factor:2,count:20}),`Duration of complete upload operations in seconds`),chunkUploadDurationHistogram:e.Metric.histogram(`chunk_upload_duration_seconds`,e.MetricBoundaries.exponential({start:.001,factor:2,count:15}),`Duration of individual chunk uploads in seconds`),uploadFileSizeHistogram:e.Metric.histogram(`upload_file_size_bytes`,e.MetricBoundaries.exponential({start:1024,factor:2,count:25}),`Size of uploaded files in bytes`),chunkSizeHistogram:e.Metric.histogram(`chunk_size_bytes`,e.MetricBoundaries.linear({start:262144,width:262144,count:20}),`Size of uploaded chunks in bytes`),activeUploadsGauge:e.Metric.gauge(`active_uploads`,{description:`Number of currently active uploads`}),uploadThroughputGauge:e.Metric.gauge(`upload_throughput_bytes_per_second`,{description:`Current upload throughput in bytes per second`}),uploadLatencySummary:e.Metric.summary({name:`upload_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Upload operation latency percentiles`}),chunkLatencySummary:e.Metric.summary({name:`chunk_latency_seconds`,maxAge:`10 minutes`,maxSize:1e3,error:.01,quantiles:[.5,.9,.95,.99],description:`Chunk upload latency percentiles`})}),Wn=$(),Gn=(t=`uploadista-upload-server`)=>{let n=$();return e.Layer.succeed(h,{serviceName:t,enabled:!0,metrics:{uploadCreated:e.Effect.succeed(n.uploadCreatedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t))),uploadCompleted:e.Effect.succeed(n.uploadCompletedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t))),uploadFailed:e.Effect.succeed(n.uploadFailedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t))),chunkUploaded:e.Effect.succeed(n.chunkUploadedTotal).pipe(e.Effect.flatMap(t=>e.Metric.increment(t)))}})},Kn=Gn(),qn=_(!1),Jn=e.Effect.gen(function*(){return(yield*h).metrics}),Yn=t=>{let n=$();return e.Effect.gen(function*(){let r=Date.now(),i=yield*t,a=(Date.now()-r)/1e3;return yield*e.Metric.update(n.uploadDurationHistogram,a),i}).pipe(e.Effect.withSpan(`upload-operation`))},Xn=t=>{let n=$();return e.Effect.gen(function*(){let r=Date.now(),i=yield*t,a=(Date.now()-r)/1e3;return yield*e.Metric.update(n.chunkUploadDurationHistogram,a),i}).pipe(e.Effect.withSpan(`chunk-upload`))},Zn=e.Layer.succeed(h,{serviceName:`uploadista-upload-server-test`,enabled:!0,metrics:{uploadCreated:()=>Promise.resolve(),uploadCompleted:()=>Promise.resolve(),uploadFailed:()=>Promise.resolve(),chunkUploaded:()=>Promise.resolve()}}),Qn=()=>$(),$n=()=>{let e=Qn(),t=[`uploadCreatedTotal`,`uploadCompletedTotal`,`uploadFailedTotal`,`chunkUploadedTotal`,`uploadFromUrlTotal`,`uploadFromUrlSuccessTotal`,`uploadFromUrlFailedTotal`,`uploadDurationHistogram`,`chunkUploadDurationHistogram`,`uploadFileSizeHistogram`,`chunkSizeHistogram`,`activeUploadsGauge`,`uploadThroughputGauge`,`uploadLatencySummary`,`chunkLatencySummary`].filter(t=>!(t in e));if(t.length>0)throw Error(`Missing required metrics: ${t.join(`, `)}`);return!0},er=(t,n)=>r=>r.pipe(e.Effect.withSpan(`upload-${t}`,{attributes:{"upload.operation":t,...n}})),tr=t=>e.Effect.annotateCurrentSpan({"upload.id":t.uploadId??`unknown`,"upload.file_name":t.fileName??`unknown`,"upload.file_size":t.fileSize?.toString()??`0`,"upload.storage_id":t.storageId??`unknown`,"upload.mime_type":t.mimeType??`unknown`}),nr=t=>e.Effect.annotateCurrentSpan({"chunk.upload_id":t.uploadId,"chunk.size":t.chunkSize.toString(),"chunk.offset":t.offset.toString(),"chunk.total_size":t.totalSize?.toString()??`0`,"chunk.progress":t.totalSize&&t.totalSize>0?(t.offset/t.totalSize*100).toFixed(2):`0`});exports.AzureObservabilityLayer=Ze,exports.AzureTracingLayer=Je,exports.FilesystemObservabilityLayer=St,exports.FilesystemTracingLayer=yt,exports.FlowObservability=g,exports.FlowObservabilityDisabled=ce,exports.FlowObservabilityLive=Me,exports.GCSObservabilityLayer=Jt,exports.GCSTracingLayer=Gt,exports.MetricsService=W,exports.NoOpMetricsServiceLive=qe,exports.NodeSdkLive=be,exports.Observability=p,exports.ObservabilityDisabled=ae,exports.OtlpNodeSdkLive=Se,exports.OtlpWebSdkLive=we,exports.OtlpWorkersSdkLive=Ee,exports.S3ObservabilityLayer=bn,exports.S3TracingLayer=Z,exports.StorageObservability=m,exports.StorageObservabilityDisabled=oe,exports.TracingService=_e,exports.UploadObservability=h,exports.UploadObservabilityDisabled=se,exports.UploadObservabilityLive=Kn,exports.UploadObservabilityTest=Zn,exports.WebSdkLive=ye,exports.WorkersSdkLive=xe,exports.annotateCircuitBreakerStateChange=Ke,exports.azureActiveUploadsGauge=gt,exports.azureApiCallsTotal=dt,exports.azureFileSizeHistogram=mt,exports.azureMetrics=K,exports.azurePartSizeHistogram=ht,exports.azurePartUploadDurationHistogram=pt,exports.azureUploadDurationHistogram=ft,exports.azureUploadErrorsTotal=ut,exports.azureUploadLatencySummary=vt,exports.azureUploadPartsTotal=ct,exports.azureUploadRequestsTotal=st,exports.azureUploadSuccessTotal=lt,exports.azureUploadThroughputGauge=_t,exports.captureMetrics=pe,exports.classifyFlowError=V,exports.classifyStorageError=a,exports.classifyUploadError=Q,exports.createFlowMetrics=B,exports.createOtlpMetricExporter=te,exports.createOtlpNodeSdkLayer=Ce,exports.createOtlpTraceExporter=ee,exports.createOtlpWebSdkLayer=Te,exports.createOtlpWorkersSdkLayer=De,exports.createStorageErrorClassifier=o,exports.createStorageErrorTracker=c,exports.createStorageMetrics=D,exports.createStorageTracingLayer=k,exports.createTestFixture=he,exports.createTracingLayer=ve,exports.createUploadErrorClassifier=Un,exports.createUploadGauges=T,exports.createUploadHistograms=w,exports.createUploadMetrics=ue,exports.createUploadServerMetrics=$,exports.createUploadSummaries=E,exports.filesystemActiveUploadsGauge=Vt,exports.filesystemApiCallsTotal=It,exports.filesystemFileSizeHistogram=zt,exports.filesystemMetrics=J,exports.filesystemPartSizeHistogram=Bt,exports.filesystemPartUploadDurationHistogram=Rt,exports.filesystemUploadDurationHistogram=Lt,exports.filesystemUploadErrorsTotal=Ft,exports.filesystemUploadLatencySummary=Ut,exports.filesystemUploadPartsTotal=Nt,exports.filesystemUploadRequestsTotal=Mt,exports.filesystemUploadSuccessTotal=Pt,exports.filesystemUploadThroughputGauge=Ht,exports.flowMetrics=ke,exports.gcsActiveUploadsGauge=mn,exports.gcsApiCallsTotal=ln,exports.gcsFileSizeHistogram=fn,exports.gcsMetrics=Y,exports.gcsPartSizeHistogram=pn,exports.gcsPartUploadDurationHistogram=dn,exports.gcsUploadDurationHistogram=un,exports.gcsUploadErrorsTotal=cn,exports.gcsUploadLatencySummary=gn,exports.gcsUploadPartsTotal=on,exports.gcsUploadRequestsTotal=an,exports.gcsUploadSuccessTotal=sn,exports.gcsUploadThroughputGauge=hn,exports.getFlowMetrics=Pe,exports.getOtlpEndpoint=u,exports.getServiceName=f,exports.getTestMetrics=Qn,exports.getUploadMetrics=Jn,exports.isObservabilityEnabled=y,exports.isOtlpExportEnabled=d,exports.logAzureContext=ot,exports.logAzureOperation=rt,exports.logAzureUploadCompletion=at,exports.logAzureUploadProgress=it,exports.logFilesystemContext=jt,exports.logFilesystemOperation=Ot,exports.logFilesystemUploadCompletion=At,exports.logFilesystemUploadProgress=kt,exports.logGCSContext=rn,exports.logGCSOperation=en,exports.logGCSUploadCompletion=nn,exports.logGCSUploadProgress=tn,exports.logS3Context=kn,exports.logS3Operation=En,exports.logS3UploadCompletion=On,exports.logS3UploadProgress=Dn,exports.logStorageOperation=S,exports.logUploadCompletion=C,exports.logUploadProgress=x,exports.logWithContext=b,exports.makeFlowObservabilityLayer=v,exports.makeFlowObservabilityLive=H,exports.makeObservabilityLayer=re,exports.makeStorageObservabilityLayer=ie,exports.makeTestFlowObservability=fe,exports.makeTestFlowObservabilityUtil=U,exports.makeTestStorageObservability=O,exports.makeTestUploadObservability=de,exports.makeUploadObservabilityLayer=_,exports.makeUploadObservabilityLive=Gn,exports.parseOtlpHeaders=l,exports.parseResourceAttributes=ne,exports.runWithTestFlowObservability=ze,exports.runWithTestObservability=ge,exports.s3ActiveUploadsGauge=zn,exports.s3ApiCallsTotal=Pn,exports.s3FileSizeHistogram=Ln,exports.s3Metrics=X,exports.s3PartSizeHistogram=Rn,exports.s3PartUploadDurationHistogram=In,exports.s3UploadDurationHistogram=Fn,exports.s3UploadErrorsTotal=Nn,exports.s3UploadLatencySummary=Vn,exports.s3UploadPartsTotal=jn,exports.s3UploadRequestsTotal=An,exports.s3UploadSuccessTotal=Mn,exports.s3UploadThroughputGauge=Bn,exports.trackActiveFlow=Le,exports.trackActiveNode=Re,exports.trackAzureError=Xe,exports.trackFileSize=I,exports.trackFilesystemError=xt,exports.trackFlowError=Ae,exports.trackGCSError=qt,exports.trackNodeError=je,exports.trackPartSize=Oe,exports.trackS3Error=yn,exports.trackStorageError=s,exports.trackUploadError=Hn,exports.uploadServerMetrics=Wn,exports.validateMetricsExist=$n,exports.whenObservabilityEnabled=le,exports.withActiveUploadTracking=L,exports.withApiMetrics=P,exports.withAzureApiMetrics=$e,exports.withAzureOperationMetrics=tt,exports.withAzureSpan=nt,exports.withAzureTimingMetrics=et,exports.withAzureUploadMetrics=Qe,exports.withChunkContext=nr,exports.withChunkDuration=Xn,exports.withCircuitBreakerContext=Ge,exports.withCircuitBreakerSpan=We,exports.withExecutionContext=Ue,exports.withFilesystemApiMetrics=wt,exports.withFilesystemOperationMetrics=Et,exports.withFilesystemSpan=Dt,exports.withFilesystemTimingMetrics=Tt,exports.withFilesystemUploadMetrics=Ct,exports.withFlowContext=Ve,exports.withFlowDuration=Fe,exports.withFlowSpan=Be,exports.withGCSApiMetrics=Xt,exports.withGCSOperationMetrics=Qt,exports.withGCSSpan=$t,exports.withGCSTimingMetrics=Zt,exports.withGCSUploadMetrics=Yt,exports.withMetricTracking=me,exports.withNodeContext=He,exports.withNodeDuration=Ie,exports.withS3ApiMetrics=Sn,exports.withS3OperationMetrics=wn,exports.withS3Span=Tn,exports.withS3TimingMetrics=Cn,exports.withS3UploadMetrics=xn,exports.withStorageOperationMetrics=z,exports.withStorageSpan=A,exports.withThroughputTracking=R,exports.withTimingMetrics=F,exports.withUploadContext=tr,exports.withUploadDuration=Yn,exports.withUploadMetrics=N,exports.withUploadSpan=er;
package/dist/index.d.cts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { Context, Effect, Layer, Metric, Option } from "effect";
2
- import * as effect_MetricKeyType7 from "effect/MetricKeyType";
3
- import * as effect_MetricState7 from "effect/MetricState";
2
+ import * as effect_MetricKeyType39 from "effect/MetricKeyType";
3
+ import * as effect_MetricState39 from "effect/MetricState";
4
4
  import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
5
5
  import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
6
6
  import * as effect_Tracer0 from "effect/Tracer";
7
7
  import * as _effect_opentelemetry_Resource0 from "@effect/opentelemetry/Resource";
8
- import * as effect_Metric64 from "effect/Metric";
8
+ import * as effect_Metric24 from "effect/Metric";
9
9
 
10
10
  //#region src/core/metrics.d.ts
11
11
  declare const createUploadMetrics: (storageType: string) => {
@@ -16,10 +16,10 @@ declare const createUploadMetrics: (storageType: string) => {
16
16
  apiCallsTotal: Metric.Metric.Counter<number>;
17
17
  };
18
18
  declare const createUploadHistograms: (storageType: string) => {
19
- uploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
20
- partUploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
21
- fileSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
22
- partSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
19
+ uploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
20
+ partUploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
21
+ fileSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
22
+ partSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
23
23
  };
24
24
  declare const createUploadGauges: (storageType: string) => {
25
25
  activeUploadsGauge: Metric.Metric.Gauge<number>;
@@ -32,10 +32,10 @@ declare const createStorageMetrics: (storageType: string) => {
32
32
  uploadLatencySummary: Metric.Metric.Summary<number>;
33
33
  activeUploadsGauge: Metric.Metric.Gauge<number>;
34
34
  uploadThroughputGauge: Metric.Metric.Gauge<number>;
35
- uploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
36
- partUploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
37
- fileSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
38
- partSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
35
+ uploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
36
+ partUploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
37
+ fileSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
38
+ partSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
39
39
  uploadRequestsTotal: Metric.Metric.Counter<number>;
40
40
  uploadPartsTotal: Metric.Metric.Counter<number>;
41
41
  uploadSuccessTotal: Metric.Metric.Counter<number>;
@@ -520,10 +520,10 @@ declare const createFlowMetrics: () => {
520
520
  nodeSuccessTotal: Metric.Metric.Counter<number>;
521
521
  nodeFailedTotal: Metric.Metric.Counter<number>;
522
522
  nodeSkippedTotal: Metric.Metric.Counter<number>;
523
- flowDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
524
- nodeDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
525
- flowNodeCountHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
526
- parallelNodesHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
523
+ flowDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
524
+ nodeDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
525
+ flowNodeCountHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
526
+ parallelNodesHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
527
527
  activeFlowsGauge: Metric.Metric.Gauge<number>;
528
528
  activeNodesGauge: Metric.Metric.Gauge<number>;
529
529
  pausedFlowsGauge: Metric.Metric.Gauge<number>;
@@ -559,10 +559,10 @@ declare const flowMetrics: {
559
559
  nodeSuccessTotal: Metric.Metric.Counter<number>;
560
560
  nodeFailedTotal: Metric.Metric.Counter<number>;
561
561
  nodeSkippedTotal: Metric.Metric.Counter<number>;
562
- flowDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
563
- nodeDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
564
- flowNodeCountHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
565
- parallelNodesHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
562
+ flowDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
563
+ nodeDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
564
+ flowNodeCountHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
565
+ parallelNodesHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
566
566
  activeFlowsGauge: Metric.Metric.Gauge<number>;
567
567
  activeNodesGauge: Metric.Metric.Gauge<number>;
568
568
  pausedFlowsGauge: Metric.Metric.Gauge<number>;
@@ -679,18 +679,18 @@ declare const NoOpMetricsServiceLive: Layer.Layer<MetricsService>;
679
679
  //#endregion
680
680
  //#region src/storage/azure.d.ts
681
681
  declare const azureMetrics: {
682
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
683
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
684
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
685
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
686
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
687
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
688
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
689
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
690
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
691
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
692
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
693
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
682
+ uploadLatencySummary: effect_Metric24.Metric.Summary<number>;
683
+ activeUploadsGauge: effect_Metric24.Metric.Gauge<number>;
684
+ uploadThroughputGauge: effect_Metric24.Metric.Gauge<number>;
685
+ uploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
686
+ partUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
687
+ fileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
688
+ partSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
689
+ uploadRequestsTotal: effect_Metric24.Metric.Counter<number>;
690
+ uploadPartsTotal: effect_Metric24.Metric.Counter<number>;
691
+ uploadSuccessTotal: effect_Metric24.Metric.Counter<number>;
692
+ uploadErrorsTotal: effect_Metric24.Metric.Counter<number>;
693
+ apiCallsTotal: effect_Metric24.Metric.Counter<number>;
694
694
  };
695
695
  declare const AzureTracingLayer: Layer.Layer<{
696
696
  serviceName: string;
@@ -701,7 +701,7 @@ declare const AzureObservabilityLayer: Layer.Layer<{
701
701
  }, never, never>;
702
702
  declare const withAzureUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
703
703
  declare const withAzureApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
704
- declare const withAzureTimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
704
+ declare const withAzureTimingMetrics: <A, E, R>(metric: effect_Metric24.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
705
705
  declare const withAzureOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
706
706
  declare const withAzureSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
707
707
  declare const logAzureOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -720,23 +720,23 @@ declare const logAzureUploadCompletion: (uploadId: string, metrics: {
720
720
  retryCount?: number;
721
721
  }) => Effect.Effect<void, never, never>;
722
722
  declare const logAzureContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
723
- declare const azureUploadRequestsTotal: effect_Metric64.Metric.Counter<number>, azureUploadPartsTotal: effect_Metric64.Metric.Counter<number>, azureUploadSuccessTotal: effect_Metric64.Metric.Counter<number>, azureUploadErrorsTotal: effect_Metric64.Metric.Counter<number>, azureApiCallsTotal: effect_Metric64.Metric.Counter<number>, azureUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azurePartUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azureFileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azurePartSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azureActiveUploadsGauge: effect_Metric64.Metric.Gauge<number>, azureUploadThroughputGauge: effect_Metric64.Metric.Gauge<number>, azureUploadLatencySummary: effect_Metric64.Metric.Summary<number>;
723
+ declare const azureUploadRequestsTotal: effect_Metric24.Metric.Counter<number>, azureUploadPartsTotal: effect_Metric24.Metric.Counter<number>, azureUploadSuccessTotal: effect_Metric24.Metric.Counter<number>, azureUploadErrorsTotal: effect_Metric24.Metric.Counter<number>, azureApiCallsTotal: effect_Metric24.Metric.Counter<number>, azureUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, azurePartUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, azureFileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, azurePartSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, azureActiveUploadsGauge: effect_Metric24.Metric.Gauge<number>, azureUploadThroughputGauge: effect_Metric24.Metric.Gauge<number>, azureUploadLatencySummary: effect_Metric24.Metric.Summary<number>;
724
724
  type AzureMetrics = StorageMetrics;
725
725
  //#endregion
726
726
  //#region src/storage/filesystem.d.ts
727
727
  declare const filesystemMetrics: {
728
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
729
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
730
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
731
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
732
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
733
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
734
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
735
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
736
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
737
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
738
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
739
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
728
+ uploadLatencySummary: effect_Metric24.Metric.Summary<number>;
729
+ activeUploadsGauge: effect_Metric24.Metric.Gauge<number>;
730
+ uploadThroughputGauge: effect_Metric24.Metric.Gauge<number>;
731
+ uploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
732
+ partUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
733
+ fileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
734
+ partSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
735
+ uploadRequestsTotal: effect_Metric24.Metric.Counter<number>;
736
+ uploadPartsTotal: effect_Metric24.Metric.Counter<number>;
737
+ uploadSuccessTotal: effect_Metric24.Metric.Counter<number>;
738
+ uploadErrorsTotal: effect_Metric24.Metric.Counter<number>;
739
+ apiCallsTotal: effect_Metric24.Metric.Counter<number>;
740
740
  };
741
741
  declare const FilesystemTracingLayer: Layer.Layer<{
742
742
  serviceName: string;
@@ -747,7 +747,7 @@ declare const FilesystemObservabilityLayer: Layer.Layer<{
747
747
  }, never, never>;
748
748
  declare const withFilesystemUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
749
749
  declare const withFilesystemApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
750
- declare const withFilesystemTimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
750
+ declare const withFilesystemTimingMetrics: <A, E, R>(metric: effect_Metric24.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
751
751
  declare const withFilesystemOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
752
752
  declare const withFilesystemSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
753
753
  declare const logFilesystemOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -766,23 +766,23 @@ declare const logFilesystemUploadCompletion: (uploadId: string, metrics: {
766
766
  retryCount?: number;
767
767
  }) => Effect.Effect<void, never, never>;
768
768
  declare const logFilesystemContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
769
- declare const filesystemUploadRequestsTotal: effect_Metric64.Metric.Counter<number>, filesystemUploadPartsTotal: effect_Metric64.Metric.Counter<number>, filesystemUploadSuccessTotal: effect_Metric64.Metric.Counter<number>, filesystemUploadErrorsTotal: effect_Metric64.Metric.Counter<number>, filesystemApiCallsTotal: effect_Metric64.Metric.Counter<number>, filesystemUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemPartUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemFileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemPartSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemActiveUploadsGauge: effect_Metric64.Metric.Gauge<number>, filesystemUploadThroughputGauge: effect_Metric64.Metric.Gauge<number>, filesystemUploadLatencySummary: effect_Metric64.Metric.Summary<number>;
769
+ declare const filesystemUploadRequestsTotal: effect_Metric24.Metric.Counter<number>, filesystemUploadPartsTotal: effect_Metric24.Metric.Counter<number>, filesystemUploadSuccessTotal: effect_Metric24.Metric.Counter<number>, filesystemUploadErrorsTotal: effect_Metric24.Metric.Counter<number>, filesystemApiCallsTotal: effect_Metric24.Metric.Counter<number>, filesystemUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, filesystemPartUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, filesystemFileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, filesystemPartSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, filesystemActiveUploadsGauge: effect_Metric24.Metric.Gauge<number>, filesystemUploadThroughputGauge: effect_Metric24.Metric.Gauge<number>, filesystemUploadLatencySummary: effect_Metric24.Metric.Summary<number>;
770
770
  type FilesystemMetrics = StorageMetrics;
771
771
  //#endregion
772
772
  //#region src/storage/gcs.d.ts
773
773
  declare const gcsMetrics: {
774
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
775
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
776
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
777
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
778
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
779
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
780
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
781
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
782
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
783
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
784
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
785
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
774
+ uploadLatencySummary: effect_Metric24.Metric.Summary<number>;
775
+ activeUploadsGauge: effect_Metric24.Metric.Gauge<number>;
776
+ uploadThroughputGauge: effect_Metric24.Metric.Gauge<number>;
777
+ uploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
778
+ partUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
779
+ fileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
780
+ partSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
781
+ uploadRequestsTotal: effect_Metric24.Metric.Counter<number>;
782
+ uploadPartsTotal: effect_Metric24.Metric.Counter<number>;
783
+ uploadSuccessTotal: effect_Metric24.Metric.Counter<number>;
784
+ uploadErrorsTotal: effect_Metric24.Metric.Counter<number>;
785
+ apiCallsTotal: effect_Metric24.Metric.Counter<number>;
786
786
  };
787
787
  declare const GCSTracingLayer: Layer.Layer<{
788
788
  serviceName: string;
@@ -793,7 +793,7 @@ declare const GCSObservabilityLayer: Layer.Layer<{
793
793
  }, never, never>;
794
794
  declare const withGCSUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
795
795
  declare const withGCSApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
796
- declare const withGCSTimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
796
+ declare const withGCSTimingMetrics: <A, E, R>(metric: effect_Metric24.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
797
797
  declare const withGCSOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
798
798
  declare const withGCSSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
799
799
  declare const logGCSOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -812,23 +812,23 @@ declare const logGCSUploadCompletion: (uploadId: string, metrics: {
812
812
  retryCount?: number;
813
813
  }) => Effect.Effect<void, never, never>;
814
814
  declare const logGCSContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
815
- declare const gcsUploadRequestsTotal: effect_Metric64.Metric.Counter<number>, gcsUploadPartsTotal: effect_Metric64.Metric.Counter<number>, gcsUploadSuccessTotal: effect_Metric64.Metric.Counter<number>, gcsUploadErrorsTotal: effect_Metric64.Metric.Counter<number>, gcsApiCallsTotal: effect_Metric64.Metric.Counter<number>, gcsUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsPartUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsFileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsPartSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsActiveUploadsGauge: effect_Metric64.Metric.Gauge<number>, gcsUploadThroughputGauge: effect_Metric64.Metric.Gauge<number>, gcsUploadLatencySummary: effect_Metric64.Metric.Summary<number>;
815
+ declare const gcsUploadRequestsTotal: effect_Metric24.Metric.Counter<number>, gcsUploadPartsTotal: effect_Metric24.Metric.Counter<number>, gcsUploadSuccessTotal: effect_Metric24.Metric.Counter<number>, gcsUploadErrorsTotal: effect_Metric24.Metric.Counter<number>, gcsApiCallsTotal: effect_Metric24.Metric.Counter<number>, gcsUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, gcsPartUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, gcsFileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, gcsPartSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, gcsActiveUploadsGauge: effect_Metric24.Metric.Gauge<number>, gcsUploadThroughputGauge: effect_Metric24.Metric.Gauge<number>, gcsUploadLatencySummary: effect_Metric24.Metric.Summary<number>;
816
816
  type GCSMetrics = StorageMetrics;
817
817
  //#endregion
818
818
  //#region src/storage/s3.d.ts
819
819
  declare const s3Metrics: {
820
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
821
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
822
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
823
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
824
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
825
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
826
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
827
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
828
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
829
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
830
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
831
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
820
+ uploadLatencySummary: effect_Metric24.Metric.Summary<number>;
821
+ activeUploadsGauge: effect_Metric24.Metric.Gauge<number>;
822
+ uploadThroughputGauge: effect_Metric24.Metric.Gauge<number>;
823
+ uploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
824
+ partUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
825
+ fileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
826
+ partSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
827
+ uploadRequestsTotal: effect_Metric24.Metric.Counter<number>;
828
+ uploadPartsTotal: effect_Metric24.Metric.Counter<number>;
829
+ uploadSuccessTotal: effect_Metric24.Metric.Counter<number>;
830
+ uploadErrorsTotal: effect_Metric24.Metric.Counter<number>;
831
+ apiCallsTotal: effect_Metric24.Metric.Counter<number>;
832
832
  };
833
833
  declare const S3TracingLayer: Layer.Layer<{
834
834
  serviceName: string;
@@ -839,7 +839,7 @@ declare const S3ObservabilityLayer: Layer.Layer<{
839
839
  }, never, never>;
840
840
  declare const withS3UploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
841
841
  declare const withS3ApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
842
- declare const withS3TimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
842
+ declare const withS3TimingMetrics: <A, E, R>(metric: effect_Metric24.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
843
843
  declare const withS3OperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
844
844
  declare const withS3Span: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
845
845
  declare const logS3Operation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -858,7 +858,7 @@ declare const logS3UploadCompletion: (uploadId: string, metrics: {
858
858
  retryCount?: number;
859
859
  }) => Effect.Effect<void, never, never>;
860
860
  declare const logS3Context: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
861
- declare const s3UploadRequestsTotal: effect_Metric64.Metric.Counter<number>, s3UploadPartsTotal: effect_Metric64.Metric.Counter<number>, s3UploadSuccessTotal: effect_Metric64.Metric.Counter<number>, s3UploadErrorsTotal: effect_Metric64.Metric.Counter<number>, s3ApiCallsTotal: effect_Metric64.Metric.Counter<number>, s3UploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3PartUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3FileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3PartSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3ActiveUploadsGauge: effect_Metric64.Metric.Gauge<number>, s3UploadThroughputGauge: effect_Metric64.Metric.Gauge<number>, s3UploadLatencySummary: effect_Metric64.Metric.Summary<number>;
861
+ declare const s3UploadRequestsTotal: effect_Metric24.Metric.Counter<number>, s3UploadPartsTotal: effect_Metric24.Metric.Counter<number>, s3UploadSuccessTotal: effect_Metric24.Metric.Counter<number>, s3UploadErrorsTotal: effect_Metric24.Metric.Counter<number>, s3ApiCallsTotal: effect_Metric24.Metric.Counter<number>, s3UploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, s3PartUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, s3FileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, s3PartSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>, s3ActiveUploadsGauge: effect_Metric24.Metric.Gauge<number>, s3UploadThroughputGauge: effect_Metric24.Metric.Gauge<number>, s3UploadLatencySummary: effect_Metric24.Metric.Summary<number>;
862
862
  type S3Metrics = StorageMetrics;
863
863
  //#endregion
864
864
  //#region src/upload/metrics.d.ts
@@ -873,10 +873,10 @@ declare const createUploadServerMetrics: () => {
873
873
  uploadFromUrlTotal: Metric.Metric.Counter<number>;
874
874
  uploadFromUrlSuccessTotal: Metric.Metric.Counter<number>;
875
875
  uploadFromUrlFailedTotal: Metric.Metric.Counter<number>;
876
- uploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
877
- chunkUploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
878
- uploadFileSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
879
- chunkSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
876
+ uploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
877
+ chunkUploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
878
+ uploadFileSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
879
+ chunkSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
880
880
  activeUploadsGauge: Metric.Metric.Gauge<number>;
881
881
  uploadThroughputGauge: Metric.Metric.Gauge<number>;
882
882
  uploadLatencySummary: Metric.Metric.Summary<number>;
@@ -897,10 +897,10 @@ declare const uploadServerMetrics: {
897
897
  uploadFromUrlTotal: Metric.Metric.Counter<number>;
898
898
  uploadFromUrlSuccessTotal: Metric.Metric.Counter<number>;
899
899
  uploadFromUrlFailedTotal: Metric.Metric.Counter<number>;
900
- uploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
901
- chunkUploadDurationHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
902
- uploadFileSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
903
- chunkSizeHistogram: Metric.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
900
+ uploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
901
+ chunkUploadDurationHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
902
+ uploadFileSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
903
+ chunkSizeHistogram: Metric.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
904
904
  activeUploadsGauge: Metric.Metric.Gauge<number>;
905
905
  uploadThroughputGauge: Metric.Metric.Gauge<number>;
906
906
  uploadLatencySummary: Metric.Metric.Summary<number>;
@@ -959,21 +959,21 @@ declare const UploadObservabilityTest: Layer.Layer<UploadObservability, never, n
959
959
  * Get metrics for validation (useful for testing metric definitions)
960
960
  */
961
961
  declare const getTestMetrics: () => {
962
- uploadCreatedTotal: effect_Metric64.Metric.Counter<number>;
963
- uploadCompletedTotal: effect_Metric64.Metric.Counter<number>;
964
- uploadFailedTotal: effect_Metric64.Metric.Counter<number>;
965
- chunkUploadedTotal: effect_Metric64.Metric.Counter<number>;
966
- uploadFromUrlTotal: effect_Metric64.Metric.Counter<number>;
967
- uploadFromUrlSuccessTotal: effect_Metric64.Metric.Counter<number>;
968
- uploadFromUrlFailedTotal: effect_Metric64.Metric.Counter<number>;
969
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
970
- chunkUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
971
- uploadFileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
972
- chunkSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
973
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
974
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
975
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
976
- chunkLatencySummary: effect_Metric64.Metric.Summary<number>;
962
+ uploadCreatedTotal: effect_Metric24.Metric.Counter<number>;
963
+ uploadCompletedTotal: effect_Metric24.Metric.Counter<number>;
964
+ uploadFailedTotal: effect_Metric24.Metric.Counter<number>;
965
+ chunkUploadedTotal: effect_Metric24.Metric.Counter<number>;
966
+ uploadFromUrlTotal: effect_Metric24.Metric.Counter<number>;
967
+ uploadFromUrlSuccessTotal: effect_Metric24.Metric.Counter<number>;
968
+ uploadFromUrlFailedTotal: effect_Metric24.Metric.Counter<number>;
969
+ uploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
970
+ chunkUploadDurationHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
971
+ uploadFileSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
972
+ chunkSizeHistogram: effect_Metric24.Metric<effect_MetricKeyType39.MetricKeyType.Histogram, number, effect_MetricState39.MetricState.Histogram>;
973
+ activeUploadsGauge: effect_Metric24.Metric.Gauge<number>;
974
+ uploadThroughputGauge: effect_Metric24.Metric.Gauge<number>;
975
+ uploadLatencySummary: effect_Metric24.Metric.Summary<number>;
976
+ chunkLatencySummary: effect_Metric24.Metric.Summary<number>;
977
977
  };
978
978
  /**
979
979
  * Validate that all required metrics exist