@uploadista/observability 0.1.2 → 0.1.3-beta.3

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-logs-otlp-http`),n=require(`@opentelemetry/exporter-metrics-otlp-http`),r=require(`@opentelemetry/exporter-trace-otlp-http`),i=require(`@opentelemetry/sdk-logs`),a=require(`@opentelemetry/sdk-metrics`),o=require(`@opentelemetry/api`),s=require(`@opentelemetry/api-logs`),c=require(`@effect/opentelemetry`),l=require(`@opentelemetry/sdk-trace-base`);const u=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`},ee=(e,t)=>e=>{if(t){let n=t(e);if(n!==null)return n}return u(e)},te=(t,n,r,i,a={},o=u)=>e.Effect.gen(function*(){let s=o(i);yield*n.uploadErrorsTotal.pipe(e.Metric.tagged(`operation`,r),e.Metric.tagged(`error_category`,s))(e.Effect.succeed(1));let c={storage_type:t,operation:r,error_category:s,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,...a};yield*e.Effect.logError(`${t.toUpperCase()} ${r} failed`).pipe(e.Effect.annotateLogs(c))}),d=(e,t,n)=>{let r=ee(e,n);return(n,i,a={})=>te(e,t,n,i,a,r)};function f(){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 p(e,t){if(t)return t;if(typeof process<`u`){let t;switch(e){case`traces`:t=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;break;case`metrics`:t=process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT;break;case`logs`:t=process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT;break}if(t)return t;if(process.env.OTEL_EXPORTER_OTLP_ENDPOINT)return process.env.OTEL_EXPORTER_OTLP_ENDPOINT}return`http://localhost:4318`}function ne(e={}){let t=p(`traces`,e.endpoint),n=e.headers??f(),i=e.timeoutMillis??3e4;return new r.OTLPTraceExporter({url:`${t}/v1/traces`,headers:n,timeoutMillis:i})}function re(e={}){let t=p(`metrics`,e.endpoint),r=e.headers??f(),i=e.timeoutMillis??3e4;return new n.OTLPMetricExporter({url:`${t}/v1/metrics`,headers:r,timeoutMillis:i})}function m(){if(typeof process<`u`){let e=process.env.UPLOADISTA_OBSERVABILITY_ENABLED;if(e!==void 0)return e.toLowerCase()!==`false`&&e!==`0`}return!0}function h(e=`uploadista`){return typeof process<`u`&&process.env.OTEL_SERVICE_NAME?process.env.OTEL_SERVICE_NAME:e}function ie(){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}function ae(e={}){let n=p(`logs`,e.endpoint),r=e.headers??f(),i=e.timeoutMillis??3e4;return new t.OTLPLogExporter({url:`${n}/v1/logs`,headers:r,timeoutMillis:i})}function oe(e){if(e!==void 0)return e;if(typeof process<`u`&&process.env.OTEL_METRICS_EXPORT_INTERVAL){let e=Number.parseInt(process.env.OTEL_METRICS_EXPORT_INTERVAL,10);if(!Number.isNaN(e)&&e>0)return e}return 6e4}function se(e={}){return new a.MeterProvider({readers:[new a.PeriodicExportingMetricReader({exporter:re(e),exportIntervalMillis:oe(e.exportIntervalMillis),exportTimeoutMillis:e.exportTimeoutMillis??3e4})]})}function ce(e){if(e!==void 0)return e;if(typeof process<`u`&&process.env.OTEL_LOGS_EXPORT_INTERVAL){let e=Number.parseInt(process.env.OTEL_LOGS_EXPORT_INTERVAL,10);if(!Number.isNaN(e)&&e>0)return e}return 5e3}function le(e={}){let t=ae(e),n=ce(e.scheduledDelayMillis);return new i.LoggerProvider({processors:[new i.BatchLogRecordProcessor(t,{maxQueueSize:e.maxQueueSize??512,maxExportBatchSize:e.maxExportBatchSize??512,scheduledDelayMillis:n,exportTimeoutMillis:e.exportTimeoutMillis??3e4})]})}var g=class extends e.Context.Tag(`OtelLogger`)(){};function _(e){switch(e.toLowerCase()){case`debug`:case`trace`:return s.SeverityNumber.DEBUG;case`info`:return s.SeverityNumber.INFO;case`warning`:case`warn`:return s.SeverityNumber.WARN;case`error`:return s.SeverityNumber.ERROR;case`fatal`:case`critical`:return s.SeverityNumber.FATAL;default:return s.SeverityNumber.INFO}}function ue(e){return e<=s.SeverityNumber.DEBUG?`DEBUG`:e<=s.SeverityNumber.INFO?`INFO`:e<=s.SeverityNumber.WARN?`WARN`:e<=s.SeverityNumber.ERROR?`ERROR`:`FATAL`}function v(){let e=o.trace.getActiveSpan();if(!e)return{};let t=e.spanContext();return t.traceId===`00000000000000000000000000000000`?{}:{trace_id:t.traceId,span_id:t.spanId,trace_flags:String(t.traceFlags)}}function y(t={}){return e.Layer.scoped(g,e.Effect.gen(function*(){if(!m()){let{LoggerProvider:t}=yield*e.Effect.promise(()=>import(`@opentelemetry/sdk-logs`)),n=new t;return{logger:n.getLogger(h(`uploadista`)),provider:n}}let n=le(t),r=t.serviceName??h(`uploadista`),i=n.getLogger(r);return yield*e.Effect.addFinalizer(()=>e.Effect.promise(async()=>{try{await n.shutdown()}catch(e){console.warn(`Error shutting down LoggerProvider:`,e)}})),{logger:i,provider:n}}))}const de=y();function fe(e={}){return y(e)}const pe=y();function me(e={}){return y(e)}const he=y({serviceName:h(`uploadista-workers`)});function ge(e={}){return y({serviceName:h(`uploadista-workers`),...e})}const _e=t=>e.Logger.make(({logLevel:e,message:n,annotations:r})=>{let i=_(e.label);if(t!==void 0&&i<t)return;let a={...v()};for(let[e,t]of r)typeof t==`string`||typeof t==`number`||typeof t==`boolean`?a[e]=t:a[e]=String(t);(i>=s.SeverityNumber.ERROR?console.error:i>=s.SeverityNumber.WARN?console.warn:console.log)(`[${e.label}] ${String(n)}`,a)}),b=(t,n,r)=>e.Effect.gen(function*(){let{logger:e}=yield*g,i=_(t),a=v();e.emit({severityNumber:i,severityText:ue(i),body:n,attributes:{...a,...r}})}),ve=(e,t)=>b(`debug`,e,t),ye=(e,t)=>b(`info`,e,t),be=(e,t)=>b(`warn`,e,t),xe=(e,t)=>b(`error`,e,t),Se=(e,t)=>b(`fatal`,e,t);var x=class extends e.Context.Tag(`OtelMeter`)(){};function S(t={}){return e.Layer.scoped(x,e.Effect.gen(function*(){if(!m()){let{MeterProvider:t}=yield*e.Effect.promise(()=>import(`@opentelemetry/sdk-metrics`)),n=new t;return{meter:n.getMeter(h(`uploadista`)),provider:n}}let n=se(t),r=t.serviceName??h(`uploadista`),i=n.getMeter(r);return yield*e.Effect.addFinalizer(()=>e.Effect.promise(async()=>{try{await n.shutdown()}catch(e){console.warn(`Error shutting down MeterProvider:`,e)}})),{meter:i,provider:n}}))}const Ce=S();function we(e={}){return S(e)}const Te=S();function Ee(e={}){return S(e)}const De=S({serviceName:h(`uploadista-workers`)});function Oe(e={}){return S({serviceName:h(`uploadista-workers`),...e})}const ke=(t,n=1,r)=>e.Effect.gen(function*(){let{meter:e}=yield*x;e.createCounter(t).add(n,r)}),Ae=(t,n,r)=>e.Effect.gen(function*(){let{meter:e}=yield*x;e.createHistogram(t).record(n,r)}),je=(t,n,r)=>e.Effect.gen(function*(){let{meter:e}=yield*x;e.createObservableGauge(t,{description:t}).addCallback(e=>{e.observe(n(),r)})}),Me=e.Context.GenericTag(`TracingService`),Ne=t=>{let n=t?.serviceName??`uploadista-storage`;return e.Layer.succeed(Me,{serviceName:n})},C=e=>Ne({serviceName:`uploadista-${e}-store`}),w=(t,n,r)=>i=>i.pipe(e.Effect.withSpan(`${n}-${t}`,{attributes:{"storage.type":n,operation:t,...r}})),Pe=c.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new l.BatchSpanProcessor(new l.ConsoleSpanExporter)})),Fe=c.NodeSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new l.BatchSpanProcessor(new l.ConsoleSpanExporter)})),Ie=c.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage-workers`},spanProcessor:new l.BatchSpanProcessor(new l.ConsoleSpanExporter)}));function T(e={}){return new l.BatchSpanProcessor(ne(),{maxQueueSize:e.maxQueueSize??512,maxExportBatchSize:e.maxExportBatchSize??512,scheduledDelayMillis:e.scheduledDelayMillis??5e3,exportTimeoutMillis:e.exportTimeoutMillis??3e4})}function E(e={}){let t=e.serviceName??h(`uploadista`),n=ie(),r=e.resourceAttributes??{};return{serviceName:t,...n,...r}}const Le=c.NodeSdk.layer(()=>m()?{resource:E(),spanProcessor:T()}:{resource:E()});function Re(e={}){return c.NodeSdk.layer(()=>m()?{resource:E(e),spanProcessor:T(e)}:{resource:E(e)})}const ze=c.WebSdk.layer(()=>m()?{resource:E(),spanProcessor:T()}:{resource:E()});function Be(e={}){return c.WebSdk.layer(()=>m()?{resource:E(e),spanProcessor:T(e)}:{resource:E(e)})}const Ve=c.WebSdk.layer(()=>{let e={serviceName:h(`uploadista-workers`)};return m()?{resource:E(e),spanProcessor:T(e)}:{resource:E(e)}});function He(e={}){return c.WebSdk.layer(()=>{let t={serviceName:h(`uploadista-workers`),...e};return m()?{resource:E(t),spanProcessor:T(t)}:{resource:E(t)}})}function Ue(){let e=o.trace.getActiveSpan();if(!e)return;let t=e.spanContext();return{traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags}}const We=e.Effect.gen(function*(){let t=yield*e.Effect.currentSpan.pipe(e.Effect.option);return e.Option.match(t,{onNone:()=>void 0,onSome:e=>({traceId:e.traceId,spanId:e.spanId,traceFlags:e.sampled?1:0})})});function Ge(t){return e.Tracer.externalSpan({traceId:t.traceId,spanId:t.spanId,sampled:t.traceFlags===1})}function Ke(t){return n=>{let r=e.Tracer.externalSpan({traceId:t.traceId,spanId:t.spanId,sampled:t.traceFlags===1});return n.pipe(e.Effect.provideService(e.Tracer.ParentSpan,r))}}function qe(){let e=o.trace.getActiveSpan();return e?e.spanContext().traceId!==`00000000000000000000000000000000`:!1}const Je=e.Layer.mergeAll(Le,Ce,de);function Ye(t={}){let n=t.serviceName??h(`uploadista`),r=t.resourceAttributes;return e.Layer.mergeAll(Re({serviceName:n,resourceAttributes:r,...t.traces}),we({serviceName:n,...t.metrics}),fe({serviceName:n,...t.logs}))}const Xe=e.Layer.mergeAll(ze,Te,pe);function Ze(t={}){let n=t.serviceName??h(`uploadista`),r=t.resourceAttributes;return e.Layer.mergeAll(Be({serviceName:n,resourceAttributes:r,...t.traces}),Ee({serviceName:n,...t.metrics}),me({serviceName:n,...t.logs}))}const Qe=e.Layer.mergeAll(Ve,De,he);function $e(t={}){let n=t.serviceName??h(`uploadista-workers`),r=t.resourceAttributes;return e.Layer.mergeAll(He({serviceName:n,resourceAttributes:r,...t.traces}),Oe({serviceName:n,...t.metrics}),ge({serviceName:n,...t.logs}))}function D(){return typeof process<`u`&&process.versions?.node?`node`:typeof navigator<`u`&&typeof window<`u`?`web`:`workers`}const et=e.Layer.unwrapEffect(e.Effect.sync(()=>{switch(D()){case`node`:return Je;case`web`:return Xe;case`workers`:return Qe}}));function tt(t={}){return e.Layer.unwrapEffect(e.Effect.sync(()=>{switch(D()){case`node`:return Ye(t);case`web`:return Ze(t);case`workers`:return $e(t)}}))}var O=class extends e.Context.Tag(`Observability`)(){},k=class extends e.Context.Tag(`StorageObservability`)(){},A=class extends e.Context.Tag(`UploadObservability`)(){},j=class extends e.Context.Tag(`FlowObservability`)(){};const nt=(t,n=!0)=>e.Layer.succeed(O,{serviceName:t,enabled:n}),M=(t,n,r=!0)=>e.Layer.succeed(k,{serviceName:`uploadista-${t}-store`,storageType:t,metrics:n,enabled:r}),N=(t=!0)=>e.Layer.succeed(A,{serviceName:`uploadista-upload-server`,enabled:t,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}}),P=(t=!0)=>e.Layer.succeed(j,{serviceName:`uploadista-flow-engine`,enabled:t,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}}),rt=nt(`uploadista-disabled`,!1),it=e=>M(e,{},!1),at=N(!1),ot=P(!1),st=e.Effect.gen(function*(){let t=yield*e.Effect.serviceOption(O);return e.Option.match(t,{onNone:()=>!1,onSome:e=>e.enabled})}),ct=t=>e.Effect.gen(function*(){if(yield*st){let n=yield*t;return e.Option.some(n)}return e.Option.none()}),F=(t,n)=>e.Effect.log(t).pipe(e.Effect.annotateLogs(n)),I=(e,t,n)=>F(`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}}),L=(e,t,n,r)=>F(`${e.toUpperCase()} ${t}`,{storage_type:e,operation:t,upload_id:n,...r}),R=(e,t,n)=>{let r=n.throughputBps?n.throughputBps/(1024*1024):0;return F(`${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}})},lt=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}`})}),ut=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}`)}),dt=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}`})}),ft=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}`})}),z=e=>({...lt(e),...ut(e),...dt(e),...ft(e)}),pt=t=>{let n=z(t),r={serviceName:`test-${t}-store`,storageType:t,metrics:n,enabled:!0};return e.Layer.succeed(k,r)},mt=()=>{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(A,t)},ht=()=>{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(j,t)},gt=t=>e.Effect.gen(function*(){let n=yield*t;return yield*e.Metric.snapshot,n}),_t=t=>e.Effect.gen(function*(){yield*e.Metric.snapshot;let n=yield*t;return yield*e.Metric.snapshot,n}),vt=(e=`test-storage`)=>({storageObservability:pt(e),uploadObservability:mt(),flowObservability:ht()}),yt=(t,n=`test-storage`)=>{let r=vt(n);return t.pipe(e.Effect.provide(r.storageObservability),e.Effect.provide(r.uploadObservability),e.Effect.provide(r.flowObservability))},B=(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)))),V=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.apiCallsTotal.pipe(e.Metric.tagged(`operation`,n))(e.Effect.succeed(1)))),H=(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}),bt=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.fileSizeHistogram(e.Effect.succeed(n)))),xt=(t,n,r)=>r.pipe(e.Effect.tap(()=>t.partSizeHistogram(e.Effect.succeed(n)))),St=(t,n)=>n.pipe(e.Effect.tap(()=>t.activeUploadsGauge(e.Effect.succeed(1))),e.Effect.ensuring(t.activeUploadsGauge(e.Effect.succeed(-1)))),Ct=(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}),U=(e,t,n,r,i)=>{let a=r.pipe(n=>V(e,t,n),t=>B(e,n,t),t=>H(e.uploadDurationHistogram,t),t=>St(e,t));return i!==void 0&&(a=a.pipe(t=>bt(e,i,t),t=>Ct(e,i,t))),a},W=()=>({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`})}),wt=W(),G=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`}},Tt=t=>{let n=W(),r=G(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)}))})},Et=(t,n,r)=>{let i=W(),a=G(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)}))})},Dt=(t=`uploadista-flow-engine`)=>{let n=W();return e.Layer.succeed(j,{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)}})},Ot=Dt(),kt=P(!1),At=e.Effect.gen(function*(){return(yield*j).metrics}),jt=t=>{let n=W();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`))},Mt=(t,n,r,i)=>{let a=W(),o=i??n;return e.Effect.gen(function*(){let t=Date.now(),n=yield*r,i=(Date.now()-t)/1e3;return yield*e.Metric.update(a.nodeDurationHistogram,i),yield*e.Metric.update(a.nodeLatencySummary,i),n}).pipe(e.Effect.withSpan(`node-${o}`,{attributes:{"node.id":t,"node.type":n,"node.type_id":i??n}}))},Nt=t=>{let n=W();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))})},Pt=t=>{let n=W();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))})},Ft=()=>{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(j,t)},It=t=>t.pipe(e.Effect.provide(Ft())),Lt=(t,n)=>r=>r.pipe(e.Effect.withSpan(`flow-${t}`,{attributes:{"flow.operation":t,...n}})),Rt=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`}),zt=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`}),Bt=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`}),Vt=(t,n,r)=>i=>i.pipe(e.Effect.withSpan(`${t}-${n}`,{attributes:{"operation.domain":t,"operation.name":n,...r}})),Ht=t=>e.Effect.annotateCurrentSpan({"operation.domain":t.domain,"operation.name":t.operation,"operation.input_size":t.inputSize?.toString()??`unknown`,"operation.output_size":t.outputSize?.toString()??`unknown`}),Ut=(t,n,r)=>i=>i.pipe(e.Effect.withSpan(`circuit-breaker-${t}`,{attributes:{"circuit_breaker.node_type":t,"circuit_breaker.state":n,...r}})),Wt=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`}),Gt=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 Kt=class extends e.Context.Tag(`MetricsService`)(){};const qt=e.Layer.succeed(Kt,{recordUpload:(t,n)=>e.Effect.void}),K=`azure`,q=z(K),Jt=C(K),Yt=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}},Xt=d(K,q,Yt),Zt=e.Layer.mergeAll(Jt),Qt=(e,t)=>B(q,e,t),$t=(e,t)=>V(q,e,t),en=H,tn=(e,t,n,r)=>U(q,e,t,n,r),nn=(e,t)=>n=>w(e,K,t)(n),rn=L.bind(null,K),an=I.bind(null,K),on=R.bind(null,K),sn=F,{uploadRequestsTotal:cn,uploadPartsTotal:ln,uploadSuccessTotal:un,uploadErrorsTotal:dn,apiCallsTotal:fn,uploadDurationHistogram:pn,partUploadDurationHistogram:mn,fileSizeHistogram:hn,partSizeHistogram:gn,activeUploadsGauge:_n,uploadThroughputGauge:vn,uploadLatencySummary:yn}=q,J=`filesystem`,Y=z(J),bn=C(J),xn=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}},Sn=d(J,Y,xn),Cn=e.Layer.mergeAll(bn),wn=(e,t)=>B(Y,e,t),Tn=(e,t)=>V(Y,e,t),En=H,Dn=(e,t,n,r)=>U(Y,e,t,n,r),On=(e,t)=>n=>w(e,J,t)(n),kn=L.bind(null,J),An=I.bind(null,J),jn=R.bind(null,J),Mn=F,{uploadRequestsTotal:Nn,uploadPartsTotal:Pn,uploadSuccessTotal:Fn,uploadErrorsTotal:In,apiCallsTotal:Ln,uploadDurationHistogram:Rn,partUploadDurationHistogram:zn,fileSizeHistogram:Bn,partSizeHistogram:Vn,activeUploadsGauge:Hn,uploadThroughputGauge:Un,uploadLatencySummary:Wn}=Y,Gn=`gcs`,X=z(`gcs`),Kn=C(`gcs`),qn=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}},Jn=d(`gcs`,X,qn),Yn=e.Layer.mergeAll(Kn),Xn=(e,t)=>B(X,e,t),Zn=(e,t)=>V(X,e,t),Qn=H,$n=(e,t,n,r)=>U(X,e,t,n,r),er=(e,t)=>n=>w(e,`gcs`,t)(n),tr=L.bind(null,`gcs`),nr=I.bind(null,`gcs`),rr=R.bind(null,`gcs`),ir=F,{uploadRequestsTotal:ar,uploadPartsTotal:or,uploadSuccessTotal:sr,uploadErrorsTotal:cr,apiCallsTotal:lr,uploadDurationHistogram:ur,partUploadDurationHistogram:dr,fileSizeHistogram:fr,partSizeHistogram:pr,activeUploadsGauge:mr,uploadThroughputGauge:hr,uploadLatencySummary:gr}=X,_r=`s3`,Z=z(`s3`),vr=C(`s3`),yr=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}},br=d(`s3`,Z,yr),xr=e.Layer.mergeAll(vr),Sr=(e,t)=>B(Z,e,t),Cr=(e,t)=>V(Z,e,t),wr=H,Tr=(e,t,n,r)=>U(Z,e,t,n,r),Er=(e,t)=>n=>w(e,`s3`,t)(n),Dr=L.bind(null,`s3`),Or=I.bind(null,`s3`),kr=R.bind(null,`s3`),Ar=F,{uploadRequestsTotal:jr,uploadPartsTotal:Mr,uploadSuccessTotal:Nr,uploadErrorsTotal:Pr,apiCallsTotal:Fr,uploadDurationHistogram:Ir,partUploadDurationHistogram:Lr,fileSizeHistogram:Rr,partSizeHistogram:zr,activeUploadsGauge:Br,uploadThroughputGauge:Vr,uploadLatencySummary:Hr}=Z,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`},Ur=(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))}),Wr=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`})}),Gr=$(),Kr=(t=`uploadista-upload-server`)=>{let n=$();return e.Layer.succeed(A,{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)))}})},qr=Kr(),Jr=N(!1),Yr=e.Effect.gen(function*(){return(yield*A).metrics}),Xr=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`))},Zr=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`))},Qr=e.Layer.succeed(A,{serviceName:`uploadista-upload-server-test`,enabled:!0,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}}),$r=()=>$(),ei=()=>{let e=$r(),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},ti=(t,n)=>r=>r.pipe(e.Effect.withSpan(`upload-${t}`,{attributes:{"upload.operation":t,...n}})),ni=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`}),ri=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=Zt,exports.AzureTracingLayer=Jt,Object.defineProperty(exports,`BatchLogRecordProcessor`,{enumerable:!0,get:function(){return i.BatchLogRecordProcessor}}),exports.FilesystemObservabilityLayer=Cn,exports.FilesystemTracingLayer=bn,exports.FlowObservability=j,exports.FlowObservabilityDisabled=ot,exports.FlowObservabilityLive=Ot,exports.GCSObservabilityLayer=Yn,exports.GCSTracingLayer=Kn,Object.defineProperty(exports,`LoggerProvider`,{enumerable:!0,get:function(){return i.LoggerProvider}}),Object.defineProperty(exports,`MeterProvider`,{enumerable:!0,get:function(){return a.MeterProvider}}),exports.MetricsService=Kt,exports.NoOpMetricsServiceLive=qt,exports.NodeSdkLive=Fe,Object.defineProperty(exports,`OTLPLogExporter`,{enumerable:!0,get:function(){return t.OTLPLogExporter}}),Object.defineProperty(exports,`OTLPMetricExporter`,{enumerable:!0,get:function(){return n.OTLPMetricExporter}}),exports.Observability=O,exports.ObservabilityDisabled=rt,exports.OtelLogger=g,exports.OtelMeter=x,exports.OtlpAutoSdkLive=et,exports.OtlpFullObservabilityNodeSdkLive=Je,exports.OtlpFullObservabilityWebSdkLive=Xe,exports.OtlpFullObservabilityWorkersSdkLive=Qe,exports.OtlpLogsNodeSdkLive=de,exports.OtlpLogsWebSdkLive=pe,exports.OtlpLogsWorkersSdkLive=he,exports.OtlpMetricsNodeSdkLive=Ce,exports.OtlpMetricsWebSdkLive=Te,exports.OtlpMetricsWorkersSdkLive=De,exports.OtlpNodeSdkLive=Le,exports.OtlpWebSdkLive=ze,exports.OtlpWorkersSdkLive=Ve,Object.defineProperty(exports,`PeriodicExportingMetricReader`,{enumerable:!0,get:function(){return a.PeriodicExportingMetricReader}}),exports.S3ObservabilityLayer=xr,exports.S3TracingLayer=vr,Object.defineProperty(exports,`SeverityNumber`,{enumerable:!0,get:function(){return s.SeverityNumber}}),exports.StorageObservability=k,exports.StorageObservabilityDisabled=it,exports.TracingService=Me,exports.UploadObservability=A,exports.UploadObservabilityDisabled=at,exports.UploadObservabilityLive=qr,exports.UploadObservabilityTest=Qr,exports.WebSdkLive=Pe,exports.WorkersSdkLive=Ie,exports.annotateCircuitBreakerStateChange=Gt,exports.azureActiveUploadsGauge=_n,exports.azureApiCallsTotal=fn,exports.azureFileSizeHistogram=hn,exports.azureMetrics=q,exports.azurePartSizeHistogram=gn,exports.azurePartUploadDurationHistogram=mn,exports.azureUploadDurationHistogram=pn,exports.azureUploadErrorsTotal=dn,exports.azureUploadLatencySummary=yn,exports.azureUploadPartsTotal=ln,exports.azureUploadRequestsTotal=cn,exports.azureUploadSuccessTotal=un,exports.azureUploadThroughputGauge=vn,exports.captureMetrics=gt,exports.captureTraceContext=Ue,exports.captureTraceContextEffect=We,exports.classifyFlowError=G,exports.classifyStorageError=u,exports.classifyUploadError=Q,exports.createExternalSpan=Ge,exports.createFlowMetrics=W,exports.createGauge=je,exports.createOtlpAutoSdkLayer=tt,exports.createOtlpEffectLogger=_e,exports.createOtlpFullObservabilityNodeSdkLayer=Ye,exports.createOtlpFullObservabilityWebSdkLayer=Ze,exports.createOtlpFullObservabilityWorkersSdkLayer=$e,exports.createOtlpLogExporter=ae,exports.createOtlpLoggerProvider=le,exports.createOtlpLogsNodeSdkLayer=fe,exports.createOtlpLogsWebSdkLayer=me,exports.createOtlpLogsWorkersSdkLayer=ge,exports.createOtlpMeterProvider=se,exports.createOtlpMetricExporter=re,exports.createOtlpMetricsNodeSdkLayer=we,exports.createOtlpMetricsWebSdkLayer=Ee,exports.createOtlpMetricsWorkersSdkLayer=Oe,exports.createOtlpNodeSdkLayer=Re,exports.createOtlpTraceExporter=ne,exports.createOtlpWebSdkLayer=Be,exports.createOtlpWorkersSdkLayer=He,exports.createStorageErrorClassifier=ee,exports.createStorageErrorTracker=d,exports.createStorageMetrics=z,exports.createStorageTracingLayer=C,exports.createTestFixture=vt,exports.createTracingLayer=Ne,exports.createUploadEngineMetrics=$,exports.createUploadErrorClassifier=Wr,exports.createUploadGauges=dt,exports.createUploadHistograms=ut,exports.createUploadMetrics=lt,exports.createUploadSummaries=ft,exports.detectEnvironment=D,exports.emitLog=b,exports.filesystemActiveUploadsGauge=Hn,exports.filesystemApiCallsTotal=Ln,exports.filesystemFileSizeHistogram=Bn,exports.filesystemMetrics=Y,exports.filesystemPartSizeHistogram=Vn,exports.filesystemPartUploadDurationHistogram=zn,exports.filesystemUploadDurationHistogram=Rn,exports.filesystemUploadErrorsTotal=In,exports.filesystemUploadLatencySummary=Wn,exports.filesystemUploadPartsTotal=Pn,exports.filesystemUploadRequestsTotal=Nn,exports.filesystemUploadSuccessTotal=Fn,exports.filesystemUploadThroughputGauge=Un,exports.flowMetrics=wt,exports.gcsActiveUploadsGauge=mr,exports.gcsApiCallsTotal=lr,exports.gcsFileSizeHistogram=fr,exports.gcsMetrics=X,exports.gcsPartSizeHistogram=pr,exports.gcsPartUploadDurationHistogram=dr,exports.gcsUploadDurationHistogram=ur,exports.gcsUploadErrorsTotal=cr,exports.gcsUploadLatencySummary=gr,exports.gcsUploadPartsTotal=or,exports.gcsUploadRequestsTotal=ar,exports.gcsUploadSuccessTotal=sr,exports.gcsUploadThroughputGauge=hr,exports.getFlowMetrics=At,exports.getLogsExportInterval=ce,exports.getMetricsExportInterval=oe,exports.getOtlpEndpoint=p,exports.getServiceName=h,exports.getTestMetrics=$r,exports.getTraceContext=v,exports.getUploadMetrics=Yr,exports.hasActiveTraceContext=qe,exports.isObservabilityEnabled=st,exports.isOtlpExportEnabled=m,exports.logAzureContext=sn,exports.logAzureOperation=rn,exports.logAzureUploadCompletion=on,exports.logAzureUploadProgress=an,exports.logDebug=ve,exports.logError=xe,exports.logFatal=Se,exports.logFilesystemContext=Mn,exports.logFilesystemOperation=kn,exports.logFilesystemUploadCompletion=jn,exports.logFilesystemUploadProgress=An,exports.logGCSContext=ir,exports.logGCSOperation=tr,exports.logGCSUploadCompletion=rr,exports.logGCSUploadProgress=nr,exports.logInfo=ye,exports.logS3Context=Ar,exports.logS3Operation=Dr,exports.logS3UploadCompletion=kr,exports.logS3UploadProgress=Or,exports.logStorageOperation=L,exports.logUploadCompletion=R,exports.logUploadProgress=I,exports.logWarn=be,exports.logWithContext=F,exports.makeFlowObservabilityLayer=P,exports.makeFlowObservabilityLive=Dt,exports.makeObservabilityLayer=nt,exports.makeStorageObservabilityLayer=M,exports.makeTestFlowObservability=ht,exports.makeTestFlowObservabilityUtil=Ft,exports.makeTestStorageObservability=pt,exports.makeTestUploadObservability=mt,exports.makeUploadObservabilityLayer=N,exports.makeUploadObservabilityLive=Kr,exports.mapLogLevelToSeverity=_,exports.parseOtlpHeaders=f,exports.parseResourceAttributes=ie,exports.recordCounter=ke,exports.recordHistogram=Ae,exports.runWithTestFlowObservability=It,exports.runWithTestObservability=yt,exports.s3ActiveUploadsGauge=Br,exports.s3ApiCallsTotal=Fr,exports.s3FileSizeHistogram=Rr,exports.s3Metrics=Z,exports.s3PartSizeHistogram=zr,exports.s3PartUploadDurationHistogram=Lr,exports.s3UploadDurationHistogram=Ir,exports.s3UploadErrorsTotal=Pr,exports.s3UploadLatencySummary=Hr,exports.s3UploadPartsTotal=Mr,exports.s3UploadRequestsTotal=jr,exports.s3UploadSuccessTotal=Nr,exports.s3UploadThroughputGauge=Vr,exports.severityToText=ue,exports.trackActiveFlow=Nt,exports.trackActiveNode=Pt,exports.trackAzureError=Xt,exports.trackFileSize=bt,exports.trackFilesystemError=Sn,exports.trackFlowError=Tt,exports.trackGCSError=Jn,exports.trackNodeError=Et,exports.trackPartSize=xt,exports.trackS3Error=br,exports.trackStorageError=te,exports.trackUploadError=Ur,exports.uploadEngineMetrics=Gr,exports.validateMetricsExist=ei,exports.whenObservabilityEnabled=ct,exports.withActiveUploadTracking=St,exports.withApiMetrics=V,exports.withAzureApiMetrics=$t,exports.withAzureOperationMetrics=tn,exports.withAzureSpan=nn,exports.withAzureTimingMetrics=en,exports.withAzureUploadMetrics=Qt,exports.withChunkContext=ri,exports.withChunkDuration=Zr,exports.withCircuitBreakerContext=Wt,exports.withCircuitBreakerSpan=Ut,exports.withExecutionContext=Bt,exports.withFilesystemApiMetrics=Tn,exports.withFilesystemOperationMetrics=Dn,exports.withFilesystemSpan=On,exports.withFilesystemTimingMetrics=En,exports.withFilesystemUploadMetrics=wn,exports.withFlowContext=Rt,exports.withFlowDuration=jt,exports.withFlowSpan=Lt,exports.withGCSApiMetrics=Zn,exports.withGCSOperationMetrics=$n,exports.withGCSSpan=er,exports.withGCSTimingMetrics=Qn,exports.withGCSUploadMetrics=Xn,exports.withMetricTracking=_t,exports.withNodeContext=zt,exports.withNodeDuration=Mt,exports.withOperationContext=Ht,exports.withOperationSpan=Vt,exports.withParentContext=Ke,exports.withS3ApiMetrics=Cr,exports.withS3OperationMetrics=Tr,exports.withS3Span=Er,exports.withS3TimingMetrics=wr,exports.withS3UploadMetrics=Sr,exports.withStorageOperationMetrics=U,exports.withStorageSpan=w,exports.withThroughputTracking=Ct,exports.withTimingMetrics=H,exports.withUploadContext=ni,exports.withUploadDuration=Xr,exports.withUploadMetrics=B,exports.withUploadSpan=ti;
1
+ let e=require(`effect`),t=require(`@opentelemetry/exporter-logs-otlp-http`),n=require(`@opentelemetry/exporter-metrics-otlp-http`),r=require(`@opentelemetry/exporter-trace-otlp-http`),i=require(`@opentelemetry/sdk-logs`),a=require(`@opentelemetry/sdk-metrics`),o=require(`@opentelemetry/api`),s=require(`@opentelemetry/api-logs`),c=require(`@effect/opentelemetry`),l=require(`@opentelemetry/sdk-trace-base`);const u=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`},ee=(e,t)=>e=>{if(t){let n=t(e);if(n!==null)return n}return u(e)},te=(t,n,r,i,a={},o=u)=>e.Effect.gen(function*(){let s=o(i);yield*n.uploadErrorsTotal.pipe(e.Metric.tagged(`operation`,r),e.Metric.tagged(`error_category`,s))(e.Effect.succeed(1));let c={storage_type:t,operation:r,error_category:s,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,...a};yield*e.Effect.logError(`${t.toUpperCase()} ${r} failed`).pipe(e.Effect.annotateLogs(c))}),d=(e,t,n)=>{let r=ee(e,n);return(n,i,a={})=>te(e,t,n,i,a,r)};function f(){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 p(e,t){if(t)return t;if(typeof process<`u`){let t;switch(e){case`traces`:t=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;break;case`metrics`:t=process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT;break;case`logs`:t=process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT;break}if(t)return t;if(process.env.OTEL_EXPORTER_OTLP_ENDPOINT)return process.env.OTEL_EXPORTER_OTLP_ENDPOINT}return`http://localhost:4318`}function ne(e={}){let t=p(`traces`,e.endpoint),n=e.headers??f(),i=e.timeoutMillis??3e4;return new r.OTLPTraceExporter({url:`${t}/v1/traces`,headers:n,timeoutMillis:i})}function re(e={}){let t=p(`metrics`,e.endpoint),r=e.headers??f(),i=e.timeoutMillis??3e4;return new n.OTLPMetricExporter({url:`${t}/v1/metrics`,headers:r,timeoutMillis:i})}function m(){if(typeof process<`u`){let e=process.env.UPLOADISTA_OBSERVABILITY_ENABLED;if(e!==void 0)return e.toLowerCase()!==`false`&&e!==`0`}return!0}function h(e=`uploadista`){return typeof process<`u`&&process.env.OTEL_SERVICE_NAME?process.env.OTEL_SERVICE_NAME:e}function ie(){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}function ae(e={}){let n=p(`logs`,e.endpoint),r=e.headers??f(),i=e.timeoutMillis??3e4;return new t.OTLPLogExporter({url:`${n}/v1/logs`,headers:r,timeoutMillis:i})}function oe(e){if(e!==void 0)return e;if(typeof process<`u`&&process.env.OTEL_METRICS_EXPORT_INTERVAL){let e=Number.parseInt(process.env.OTEL_METRICS_EXPORT_INTERVAL,10);if(!Number.isNaN(e)&&e>0)return e}return 6e4}function se(e={}){return new a.MeterProvider({readers:[new a.PeriodicExportingMetricReader({exporter:re(e),exportIntervalMillis:oe(e.exportIntervalMillis),exportTimeoutMillis:e.exportTimeoutMillis??3e4})]})}function ce(e){if(e!==void 0)return e;if(typeof process<`u`&&process.env.OTEL_LOGS_EXPORT_INTERVAL){let e=Number.parseInt(process.env.OTEL_LOGS_EXPORT_INTERVAL,10);if(!Number.isNaN(e)&&e>0)return e}return 5e3}function le(e={}){let t=ae(e),n=ce(e.scheduledDelayMillis);return new i.LoggerProvider({processors:[new i.BatchLogRecordProcessor(t,{maxQueueSize:e.maxQueueSize??512,maxExportBatchSize:e.maxExportBatchSize??512,scheduledDelayMillis:n,exportTimeoutMillis:e.exportTimeoutMillis??3e4})]})}var g=class extends e.Context.Tag(`OtelLogger`)(){};function _(e){switch(e.toLowerCase()){case`debug`:case`trace`:return s.SeverityNumber.DEBUG;case`info`:return s.SeverityNumber.INFO;case`warning`:case`warn`:return s.SeverityNumber.WARN;case`error`:return s.SeverityNumber.ERROR;case`fatal`:case`critical`:return s.SeverityNumber.FATAL;default:return s.SeverityNumber.INFO}}function ue(e){return e<=s.SeverityNumber.DEBUG?`DEBUG`:e<=s.SeverityNumber.INFO?`INFO`:e<=s.SeverityNumber.WARN?`WARN`:e<=s.SeverityNumber.ERROR?`ERROR`:`FATAL`}function v(){let e=o.trace.getActiveSpan();if(!e)return{};let t=e.spanContext();return t.traceId===`00000000000000000000000000000000`?{}:{trace_id:t.traceId,span_id:t.spanId,trace_flags:String(t.traceFlags)}}function y(t={}){return e.Layer.scoped(g,e.Effect.gen(function*(){if(!m()){let{LoggerProvider:t}=yield*e.Effect.promise(()=>import(`@opentelemetry/sdk-logs`)),n=new t;return{logger:n.getLogger(h(`uploadista`)),provider:n}}let n=le(t),r=t.serviceName??h(`uploadista`),i=n.getLogger(r);return yield*e.Effect.addFinalizer(()=>e.Effect.promise(async()=>{try{await n.shutdown()}catch(e){console.warn(`Error shutting down LoggerProvider:`,e)}})),{logger:i,provider:n}}))}const de=y();function fe(e={}){return y(e)}const pe=y();function me(e={}){return y(e)}const he=y({serviceName:h(`uploadista-workers`)});function ge(e={}){return y({serviceName:h(`uploadista-workers`),...e})}const _e=t=>e.Logger.make(({logLevel:e,message:n,annotations:r})=>{let i=_(e.label);if(t!==void 0&&i<t)return;let a={...v()};for(let[e,t]of r)typeof t==`string`||typeof t==`number`||typeof t==`boolean`?a[e]=t:a[e]=String(t);(i>=s.SeverityNumber.ERROR?console.error:i>=s.SeverityNumber.WARN?console.warn:console.log)(`[${e.label}] ${String(n)}`,a)}),b=(t,n,r)=>e.Effect.gen(function*(){let{logger:e}=yield*g,i=_(t),a=v();e.emit({severityNumber:i,severityText:ue(i),body:n,attributes:{...a,...r}})}),ve=(e,t)=>b(`debug`,e,t),ye=(e,t)=>b(`info`,e,t),be=(e,t)=>b(`warn`,e,t),xe=(e,t)=>b(`error`,e,t),Se=(e,t)=>b(`fatal`,e,t);var x=class extends e.Context.Tag(`OtelMeter`)(){};function S(t={}){return e.Layer.scoped(x,e.Effect.gen(function*(){if(!m()){let{MeterProvider:t}=yield*e.Effect.promise(()=>import(`@opentelemetry/sdk-metrics`)),n=new t;return{meter:n.getMeter(h(`uploadista`)),provider:n}}let n=se(t),r=t.serviceName??h(`uploadista`),i=n.getMeter(r);return yield*e.Effect.addFinalizer(()=>e.Effect.promise(async()=>{try{await n.shutdown()}catch(e){console.warn(`Error shutting down MeterProvider:`,e)}})),{meter:i,provider:n}}))}const Ce=S();function we(e={}){return S(e)}const Te=S();function Ee(e={}){return S(e)}const De=S({serviceName:h(`uploadista-workers`)});function Oe(e={}){return S({serviceName:h(`uploadista-workers`),...e})}const ke=(t,n=1,r)=>e.Effect.gen(function*(){let{meter:e}=yield*x;e.createCounter(t).add(n,r)}),Ae=(t,n,r)=>e.Effect.gen(function*(){let{meter:e}=yield*x;e.createHistogram(t).record(n,r)}),je=(t,n,r)=>e.Effect.gen(function*(){let{meter:e}=yield*x;e.createObservableGauge(t,{description:t}).addCallback(e=>{e.observe(n(),r)})}),Me=e.Context.GenericTag(`TracingService`),Ne=t=>{let n=t?.serviceName??`uploadista-storage`;return e.Layer.succeed(Me,{serviceName:n})},C=e=>Ne({serviceName:`uploadista-${e}-store`}),w=(e,t,n)=>r=>r.pipe(r.Effect.withSpan(`${t}-${e}`,{attributes:{"storage.type":t,operation:e,...n}})),Pe=c.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new l.BatchSpanProcessor(new l.ConsoleSpanExporter)})),Fe=c.NodeSdk.layer(()=>({resource:{serviceName:`uploadista-storage`},spanProcessor:new l.BatchSpanProcessor(new l.ConsoleSpanExporter)})),Ie=c.WebSdk.layer(()=>({resource:{serviceName:`uploadista-storage-workers`},spanProcessor:new l.BatchSpanProcessor(new l.ConsoleSpanExporter)}));function T(e={}){return new l.BatchSpanProcessor(ne(),{maxQueueSize:e.maxQueueSize??512,maxExportBatchSize:e.maxExportBatchSize??512,scheduledDelayMillis:e.scheduledDelayMillis??5e3,exportTimeoutMillis:e.exportTimeoutMillis??3e4})}function E(e={}){let t=e.serviceName??h(`uploadista`),n=ie(),r=e.resourceAttributes??{};return{serviceName:t,...n,...r}}const Le=c.NodeSdk.layer(()=>m()?{resource:E(),spanProcessor:T()}:{resource:E()});function Re(e={}){return c.NodeSdk.layer(()=>m()?{resource:E(e),spanProcessor:T(e)}:{resource:E(e)})}const ze=c.WebSdk.layer(()=>m()?{resource:E(),spanProcessor:T()}:{resource:E()});function Be(e={}){return c.WebSdk.layer(()=>m()?{resource:E(e),spanProcessor:T(e)}:{resource:E(e)})}const Ve=c.WebSdk.layer(()=>{let e={serviceName:h(`uploadista-workers`)};return m()?{resource:E(e),spanProcessor:T(e)}:{resource:E(e)}});function He(e={}){return c.WebSdk.layer(()=>{let t={serviceName:h(`uploadista-workers`),...e};return m()?{resource:E(t),spanProcessor:T(t)}:{resource:E(t)}})}function Ue(){let e=o.trace.getActiveSpan();if(!e)return;let t=e.spanContext();return{traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags}}const We=e.Effect.gen(function*(){let t=yield*e.Effect.currentSpan.pipe(e.Effect.option);return e.Option.match(t,{onNone:()=>void 0,onSome:e=>({traceId:e.traceId,spanId:e.spanId,traceFlags:e.sampled?1:0})})});function Ge(t){return e.Tracer.externalSpan({traceId:t.traceId,spanId:t.spanId,sampled:t.traceFlags===1})}function Ke(e){return t=>{let n=t.Tracer.externalSpan({traceId:e.traceId,spanId:e.spanId,sampled:e.traceFlags===1});return t.pipe(t.Effect.provideService(t.Tracer.ParentSpan,n))}}function qe(){let e=o.trace.getActiveSpan();return e?e.spanContext().traceId!==`00000000000000000000000000000000`:!1}const Je=e.Layer.mergeAll(Le,Ce,de);function Ye(t={}){let n=t.serviceName??h(`uploadista`),r=t.resourceAttributes;return e.Layer.mergeAll(Re({serviceName:n,resourceAttributes:r,...t.traces}),we({serviceName:n,...t.metrics}),fe({serviceName:n,...t.logs}))}const Xe=e.Layer.mergeAll(ze,Te,pe);function Ze(t={}){let n=t.serviceName??h(`uploadista`),r=t.resourceAttributes;return e.Layer.mergeAll(Be({serviceName:n,resourceAttributes:r,...t.traces}),Ee({serviceName:n,...t.metrics}),me({serviceName:n,...t.logs}))}const Qe=e.Layer.mergeAll(Ve,De,he);function $e(t={}){let n=t.serviceName??h(`uploadista-workers`),r=t.resourceAttributes;return e.Layer.mergeAll(He({serviceName:n,resourceAttributes:r,...t.traces}),Oe({serviceName:n,...t.metrics}),ge({serviceName:n,...t.logs}))}function D(){return typeof process<`u`&&process.versions?.node?`node`:typeof navigator<`u`&&typeof window<`u`?`web`:`workers`}const et=e.Layer.unwrapEffect(e.Effect.sync(()=>{switch(D()){case`node`:return Je;case`web`:return Xe;case`workers`:return Qe}}));function tt(t={}){return e.Layer.unwrapEffect(e.Effect.sync(()=>{switch(D()){case`node`:return Ye(t);case`web`:return Ze(t);case`workers`:return $e(t)}}))}var O=class extends e.Context.Tag(`Observability`)(){},k=class extends e.Context.Tag(`StorageObservability`)(){},A=class extends e.Context.Tag(`UploadObservability`)(){},j=class extends e.Context.Tag(`FlowObservability`)(){};const nt=(t,n=!0)=>e.Layer.succeed(O,{serviceName:t,enabled:n}),rt=(t,n,r=!0)=>e.Layer.succeed(k,{serviceName:`uploadista-${t}-store`,storageType:t,metrics:n,enabled:r}),M=(t=!0)=>e.Layer.succeed(A,{serviceName:`uploadista-upload-server`,enabled:t,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}}),N=(t=!0)=>e.Layer.succeed(j,{serviceName:`uploadista-flow-engine`,enabled:t,metrics:{flowStarted:e.Effect.void,flowCompleted:e.Effect.void,flowFailed:e.Effect.void,nodeExecuted:e.Effect.void}}),it=nt(`uploadista-disabled`,!1),at=e=>rt(e,{},!1),ot=M(!1),st=N(!1),P=e.Effect.gen(function*(){let t=yield*e.Effect.serviceOption(O);return e.Option.match(t,{onNone:()=>!1,onSome:e=>e.enabled})}),ct=e=>e.Effect.gen(function*(){if(yield*P){let t=yield*e;return e.Option.some(t)}return e.Option.none()}),F=(t,n)=>e.Effect.log(t).pipe(e.Effect.annotateLogs(n)),I=(e,t,n)=>F(`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}}),L=(e,t,n,r)=>F(`${e.toUpperCase()} ${t}`,{storage_type:e,operation:t,upload_id:n,...r}),R=(e,t,n)=>{let r=n.throughputBps?n.throughputBps/(1024*1024):0;return F(`${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}})},lt=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}`})}),ut=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}`)}),dt=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}`})}),ft=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}`})}),z=e=>({...lt(e),...ut(e),...dt(e),...ft(e)}),pt=t=>{let n=z(t),r={serviceName:`test-${t}-store`,storageType:t,metrics:n,enabled:!0};return e.Layer.succeed(k,r)},mt=()=>{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(A,t)},ht=()=>{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(j,t)},gt=e=>e.Effect.gen(function*(){let t=yield*e;return yield*e.Metric.snapshot,t}),_t=e=>e.Effect.gen(function*(){yield*e.Metric.snapshot;let t=yield*e;return yield*e.Metric.snapshot,t}),vt=(e=`test-storage`)=>({storageObservability:pt(e),uploadObservability:mt(),flowObservability:ht()}),yt=(e,t=`test-storage`)=>{let n=vt(t);return e.pipe(e.Effect.provide(n.storageObservability),e.Effect.provide(n.uploadObservability),e.Effect.provide(n.flowObservability))},B=(e,t,n)=>n.pipe(n.Effect.tap(()=>e.uploadRequestsTotal.pipe(n.Metric.tagged(`upload_id`,t))(n.Effect.succeed(1))),n.Effect.tapError(()=>e.uploadErrorsTotal.pipe(n.Metric.tagged(`upload_id`,t))(n.Effect.succeed(1))),n.Effect.tap(()=>e.uploadSuccessTotal.pipe(n.Metric.tagged(`upload_id`,t))(n.Effect.succeed(1)))),V=(e,t,n)=>n.pipe(n.Effect.tap(()=>e.apiCallsTotal.pipe(n.Metric.tagged(`operation`,t))(n.Effect.succeed(1)))),H=(e,t)=>t.Effect.gen(function*(){let n=yield*t.Effect.sync(()=>Date.now()),r=yield*t,i=((yield*t.Effect.sync(()=>Date.now()))-n)/1e3;return yield*e(t.Effect.succeed(i)),r}),bt=(e,t,n)=>n.pipe(n.Effect.tap(()=>e.fileSizeHistogram(n.Effect.succeed(t)))),xt=(e,t,n)=>n.pipe(n.Effect.tap(()=>e.partSizeHistogram(n.Effect.succeed(t)))),St=(e,t)=>t.pipe(t.Effect.tap(()=>e.activeUploadsGauge(t.Effect.succeed(1))),t.Effect.ensuring(e.activeUploadsGauge(t.Effect.succeed(-1)))),Ct=(e,t,n)=>n.Effect.gen(function*(){let r=yield*n.Effect.sync(()=>Date.now()),i=yield*n,a=((yield*n.Effect.sync(()=>Date.now()))-r)/1e3,o=a>0?t/a:0;return yield*e.uploadThroughputGauge(n.Effect.succeed(o)),i}),U=(e,t,n,r,i)=>{let a=r.pipe(n=>V(e,t,n),t=>B(e,n,t),t=>H(e.uploadDurationHistogram,t),t=>St(e,t));return i!==void 0&&(a=a.pipe(t=>bt(e,i,t),t=>Ct(e,i,t))),a},W=()=>({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`})}),wt=W(),G=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`}},Tt=t=>{let n=W(),r=G(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)}))})},Et=(t,n,r)=>{let i=W(),a=G(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)}))})},Dt=(t=`uploadista-flow-engine`)=>{let n=W();return e.Layer.succeed(j,{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)}})},Ot=Dt();N(!1);const kt=e.Effect.gen(function*(){return(yield*j).metrics}),At=e=>{let t=W();return e.Effect.gen(function*(){let n=Date.now(),r=yield*e,i=(Date.now()-n)/1e3;return yield*e.Metric.update(t.flowDurationHistogram,i),yield*e.Metric.update(t.flowLatencySummary,i),r}).pipe(e.Effect.withSpan(`flow-execution`))},jt=(e,t,n,r)=>{let i=W(),a=r??t;return n.Effect.gen(function*(){let e=Date.now(),t=yield*n,r=(Date.now()-e)/1e3;return yield*n.Metric.update(i.nodeDurationHistogram,r),yield*n.Metric.update(i.nodeLatencySummary,r),t}).pipe(n.Effect.withSpan(`node-${a}`,{attributes:{"node.id":e,"node.type":t,"node.type_id":r??t}}))},Mt=e=>{let t=W();return e.Effect.gen(function*(){return yield*e.Metric.increment(t.activeFlowsGauge),yield*e.Effect.acquireUseRelease(e.Effect.void,()=>e,()=>e.Metric.set(t.activeFlowsGauge,-1))})},Nt=e=>{let t=W();return e.Effect.gen(function*(){return yield*e.Metric.increment(t.activeNodesGauge),yield*e.Effect.acquireUseRelease(e.Effect.void,()=>e,()=>e.Metric.set(t.activeNodesGauge,-1))})},Pt=()=>{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(j,t)},Ft=e=>e.pipe(e.Effect.provide(Pt())),It=(e,t)=>n=>n.pipe(n.Effect.withSpan(`flow-${e}`,{attributes:{"flow.operation":e,...t}})),Lt=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`}),Rt=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`}),zt=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`}),Bt=(e,t,n)=>r=>r.pipe(r.Effect.withSpan(`${e}-${t}`,{attributes:{"operation.domain":e,"operation.name":t,...n}})),Vt=t=>e.Effect.annotateCurrentSpan({"operation.domain":t.domain,"operation.name":t.operation,"operation.input_size":t.inputSize?.toString()??`unknown`,"operation.output_size":t.outputSize?.toString()??`unknown`}),Ht=(e,t,n)=>r=>r.pipe(r.Effect.withSpan(`circuit-breaker-${e}`,{attributes:{"circuit_breaker.node_type":e,"circuit_breaker.state":t,...n}})),Ut=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`}),Wt=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 Gt=class extends e.Context.Tag(`MetricsService`)(){};const Kt=e.Layer.succeed(Gt,{recordUpload:(t,n)=>e.Effect.void}),K=`azure`,q=z(K),qt=C(K),Jt=d(K,q,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}}),Yt=e.Layer.mergeAll(qt),Xt=(e,t)=>B(q,e,t),Zt=(e,t)=>V(q,e,t),Qt=H,$t=(e,t,n,r)=>U(q,e,t,n,r),en=(e,t)=>n=>w(e,K,t)(n),tn=L.bind(null,K),nn=I.bind(null,K),rn=R.bind(null,K),an=F,{uploadRequestsTotal:on,uploadPartsTotal:sn,uploadSuccessTotal:cn,uploadErrorsTotal:ln,apiCallsTotal:un,uploadDurationHistogram:dn,partUploadDurationHistogram:fn,fileSizeHistogram:pn,partSizeHistogram:mn,activeUploadsGauge:hn,uploadThroughputGauge:gn,uploadLatencySummary:_n}=q,J=`filesystem`,Y=z(J),vn=C(J),yn=d(J,Y,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}}),bn=e.Layer.mergeAll(vn),xn=(e,t)=>B(Y,e,t),Sn=(e,t)=>V(Y,e,t),Cn=H,wn=(e,t,n,r)=>U(Y,e,t,n,r),Tn=(e,t)=>n=>w(e,J,t)(n),En=L.bind(null,J),Dn=I.bind(null,J),On=R.bind(null,J),kn=F,{uploadRequestsTotal:An,uploadPartsTotal:jn,uploadSuccessTotal:Mn,uploadErrorsTotal:Nn,apiCallsTotal:Pn,uploadDurationHistogram:Fn,partUploadDurationHistogram:In,fileSizeHistogram:Ln,partSizeHistogram:Rn,activeUploadsGauge:zn,uploadThroughputGauge:Bn,uploadLatencySummary:Vn}=Y,X=z(`gcs`),Hn=C(`gcs`),Un=d(`gcs`,X,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}}),Wn=e.Layer.mergeAll(Hn),Gn=(e,t)=>B(X,e,t),Kn=(e,t)=>V(X,e,t),qn=H,Jn=(e,t,n,r)=>U(X,e,t,n,r),Yn=(e,t)=>n=>w(e,`gcs`,t)(n),Xn=L.bind(null,`gcs`),Zn=I.bind(null,`gcs`),Qn=R.bind(null,`gcs`),$n=F,{uploadRequestsTotal:er,uploadPartsTotal:tr,uploadSuccessTotal:nr,uploadErrorsTotal:rr,apiCallsTotal:ir,uploadDurationHistogram:ar,partUploadDurationHistogram:or,fileSizeHistogram:sr,partSizeHistogram:cr,activeUploadsGauge:lr,uploadThroughputGauge:ur,uploadLatencySummary:dr}=X,Z=z(`s3`),fr=C(`s3`),pr=d(`s3`,Z,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}}),mr=e.Layer.mergeAll(fr),hr=(e,t)=>B(Z,e,t),gr=(e,t)=>V(Z,e,t),_r=H,vr=(e,t,n,r)=>U(Z,e,t,n,r),yr=(e,t)=>n=>w(e,`s3`,t)(n),br=L.bind(null,`s3`),xr=I.bind(null,`s3`),Sr=R.bind(null,`s3`),Cr=F,{uploadRequestsTotal:wr,uploadPartsTotal:Tr,uploadSuccessTotal:Er,uploadErrorsTotal:Dr,apiCallsTotal:Or,uploadDurationHistogram:kr,partUploadDurationHistogram:Ar,fileSizeHistogram:jr,partSizeHistogram:Mr,activeUploadsGauge:Nr,uploadThroughputGauge:Pr,uploadLatencySummary:Fr}=Z,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`},Ir=(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))}),Lr=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`})}),Rr=$(),zr=(t=`uploadista-upload-server`)=>{let n=$();return e.Layer.succeed(A,{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)))}})},Br=zr();M(!1);const Vr=e.Effect.gen(function*(){return(yield*A).metrics}),Hr=e=>{let t=$();return e.Effect.gen(function*(){let n=Date.now(),r=yield*e,i=(Date.now()-n)/1e3;return yield*e.Metric.update(t.uploadDurationHistogram,i),r}).pipe(e.Effect.withSpan(`upload-operation`))},Ur=e=>{let t=$();return e.Effect.gen(function*(){let n=Date.now(),r=yield*e,i=(Date.now()-n)/1e3;return yield*e.Metric.update(t.chunkUploadDurationHistogram,i),r}).pipe(e.Effect.withSpan(`chunk-upload`))},Wr=e.Layer.succeed(A,{serviceName:`uploadista-upload-server-test`,enabled:!0,metrics:{uploadCreated:e.Effect.void,uploadCompleted:e.Effect.void,uploadFailed:e.Effect.void,chunkUploaded:e.Effect.void}}),Gr=()=>$(),Kr=()=>{let e=Gr(),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},qr=(e,t)=>n=>n.pipe(n.Effect.withSpan(`upload-${e}`,{attributes:{"upload.operation":e,...t}})),Jr=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`}),Yr=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=Yt,exports.AzureTracingLayer=qt,Object.defineProperty(exports,`BatchLogRecordProcessor`,{enumerable:!0,get:function(){return i.BatchLogRecordProcessor}}),exports.FilesystemObservabilityLayer=bn,exports.FilesystemTracingLayer=vn,exports.FlowObservability=j,exports.FlowObservabilityDisabled=st,exports.FlowObservabilityLive=Ot,exports.GCSObservabilityLayer=Wn,exports.GCSTracingLayer=Hn,Object.defineProperty(exports,`LoggerProvider`,{enumerable:!0,get:function(){return i.LoggerProvider}}),Object.defineProperty(exports,`MeterProvider`,{enumerable:!0,get:function(){return a.MeterProvider}}),exports.MetricsService=Gt,exports.NoOpMetricsServiceLive=Kt,exports.NodeSdkLive=Fe,Object.defineProperty(exports,`OTLPLogExporter`,{enumerable:!0,get:function(){return t.OTLPLogExporter}}),Object.defineProperty(exports,`OTLPMetricExporter`,{enumerable:!0,get:function(){return n.OTLPMetricExporter}}),exports.Observability=O,exports.ObservabilityDisabled=it,exports.OtelLogger=g,exports.OtelMeter=x,exports.OtlpAutoSdkLive=et,exports.OtlpFullObservabilityNodeSdkLive=Je,exports.OtlpFullObservabilityWebSdkLive=Xe,exports.OtlpFullObservabilityWorkersSdkLive=Qe,exports.OtlpLogsNodeSdkLive=de,exports.OtlpLogsWebSdkLive=pe,exports.OtlpLogsWorkersSdkLive=he,exports.OtlpMetricsNodeSdkLive=Ce,exports.OtlpMetricsWebSdkLive=Te,exports.OtlpMetricsWorkersSdkLive=De,exports.OtlpNodeSdkLive=Le,exports.OtlpWebSdkLive=ze,exports.OtlpWorkersSdkLive=Ve,Object.defineProperty(exports,`PeriodicExportingMetricReader`,{enumerable:!0,get:function(){return a.PeriodicExportingMetricReader}}),exports.S3ObservabilityLayer=mr,exports.S3TracingLayer=fr,Object.defineProperty(exports,`SeverityNumber`,{enumerable:!0,get:function(){return s.SeverityNumber}}),exports.StorageObservability=k,exports.StorageObservabilityDisabled=at,exports.TracingService=Me,exports.UploadObservability=A,exports.UploadObservabilityDisabled=ot,exports.UploadObservabilityLive=Br,exports.UploadObservabilityTest=Wr,exports.WebSdkLive=Pe,exports.WorkersSdkLive=Ie,exports.annotateCircuitBreakerStateChange=Wt,exports.azureActiveUploadsGauge=hn,exports.azureApiCallsTotal=un,exports.azureFileSizeHistogram=pn,exports.azureMetrics=q,exports.azurePartSizeHistogram=mn,exports.azurePartUploadDurationHistogram=fn,exports.azureUploadDurationHistogram=dn,exports.azureUploadErrorsTotal=ln,exports.azureUploadLatencySummary=_n,exports.azureUploadPartsTotal=sn,exports.azureUploadRequestsTotal=on,exports.azureUploadSuccessTotal=cn,exports.azureUploadThroughputGauge=gn,exports.captureMetrics=gt,exports.captureTraceContext=Ue,exports.captureTraceContextEffect=We,exports.classifyFlowError=G,exports.classifyStorageError=u,exports.classifyUploadError=Q,exports.createExternalSpan=Ge,exports.createFlowMetrics=W,exports.createGauge=je,exports.createOtlpAutoSdkLayer=tt,exports.createOtlpEffectLogger=_e,exports.createOtlpFullObservabilityNodeSdkLayer=Ye,exports.createOtlpFullObservabilityWebSdkLayer=Ze,exports.createOtlpFullObservabilityWorkersSdkLayer=$e,exports.createOtlpLogExporter=ae,exports.createOtlpLoggerProvider=le,exports.createOtlpLogsNodeSdkLayer=fe,exports.createOtlpLogsWebSdkLayer=me,exports.createOtlpLogsWorkersSdkLayer=ge,exports.createOtlpMeterProvider=se,exports.createOtlpMetricExporter=re,exports.createOtlpMetricsNodeSdkLayer=we,exports.createOtlpMetricsWebSdkLayer=Ee,exports.createOtlpMetricsWorkersSdkLayer=Oe,exports.createOtlpNodeSdkLayer=Re,exports.createOtlpTraceExporter=ne,exports.createOtlpWebSdkLayer=Be,exports.createOtlpWorkersSdkLayer=He,exports.createStorageErrorClassifier=ee,exports.createStorageErrorTracker=d,exports.createStorageMetrics=z,exports.createStorageTracingLayer=C,exports.createTestFixture=vt,exports.createTracingLayer=Ne,exports.createUploadEngineMetrics=$,exports.createUploadErrorClassifier=Lr,exports.createUploadGauges=dt,exports.createUploadHistograms=ut,exports.createUploadMetrics=lt,exports.createUploadSummaries=ft,exports.detectEnvironment=D,exports.emitLog=b,exports.filesystemActiveUploadsGauge=zn,exports.filesystemApiCallsTotal=Pn,exports.filesystemFileSizeHistogram=Ln,exports.filesystemMetrics=Y,exports.filesystemPartSizeHistogram=Rn,exports.filesystemPartUploadDurationHistogram=In,exports.filesystemUploadDurationHistogram=Fn,exports.filesystemUploadErrorsTotal=Nn,exports.filesystemUploadLatencySummary=Vn,exports.filesystemUploadPartsTotal=jn,exports.filesystemUploadRequestsTotal=An,exports.filesystemUploadSuccessTotal=Mn,exports.filesystemUploadThroughputGauge=Bn,exports.flowMetrics=wt,exports.gcsActiveUploadsGauge=lr,exports.gcsApiCallsTotal=ir,exports.gcsFileSizeHistogram=sr,exports.gcsMetrics=X,exports.gcsPartSizeHistogram=cr,exports.gcsPartUploadDurationHistogram=or,exports.gcsUploadDurationHistogram=ar,exports.gcsUploadErrorsTotal=rr,exports.gcsUploadLatencySummary=dr,exports.gcsUploadPartsTotal=tr,exports.gcsUploadRequestsTotal=er,exports.gcsUploadSuccessTotal=nr,exports.gcsUploadThroughputGauge=ur,exports.getFlowMetrics=kt,exports.getLogsExportInterval=ce,exports.getMetricsExportInterval=oe,exports.getOtlpEndpoint=p,exports.getServiceName=h,exports.getTestMetrics=Gr,exports.getTraceContext=v,exports.getUploadMetrics=Vr,exports.hasActiveTraceContext=qe,exports.isObservabilityEnabled=P,exports.isOtlpExportEnabled=m,exports.logAzureContext=an,exports.logAzureOperation=tn,exports.logAzureUploadCompletion=rn,exports.logAzureUploadProgress=nn,exports.logDebug=ve,exports.logError=xe,exports.logFatal=Se,exports.logFilesystemContext=kn,exports.logFilesystemOperation=En,exports.logFilesystemUploadCompletion=On,exports.logFilesystemUploadProgress=Dn,exports.logGCSContext=$n,exports.logGCSOperation=Xn,exports.logGCSUploadCompletion=Qn,exports.logGCSUploadProgress=Zn,exports.logInfo=ye,exports.logS3Context=Cr,exports.logS3Operation=br,exports.logS3UploadCompletion=Sr,exports.logS3UploadProgress=xr,exports.logStorageOperation=L,exports.logUploadCompletion=R,exports.logUploadProgress=I,exports.logWarn=be,exports.logWithContext=F,exports.makeFlowObservabilityLayer=N,exports.makeFlowObservabilityLive=Dt,exports.makeObservabilityLayer=nt,exports.makeStorageObservabilityLayer=rt,exports.makeTestFlowObservability=ht,exports.makeTestFlowObservabilityUtil=Pt,exports.makeTestStorageObservability=pt,exports.makeTestUploadObservability=mt,exports.makeUploadObservabilityLayer=M,exports.makeUploadObservabilityLive=zr,exports.mapLogLevelToSeverity=_,exports.parseOtlpHeaders=f,exports.parseResourceAttributes=ie,exports.recordCounter=ke,exports.recordHistogram=Ae,exports.runWithTestFlowObservability=Ft,exports.runWithTestObservability=yt,exports.s3ActiveUploadsGauge=Nr,exports.s3ApiCallsTotal=Or,exports.s3FileSizeHistogram=jr,exports.s3Metrics=Z,exports.s3PartSizeHistogram=Mr,exports.s3PartUploadDurationHistogram=Ar,exports.s3UploadDurationHistogram=kr,exports.s3UploadErrorsTotal=Dr,exports.s3UploadLatencySummary=Fr,exports.s3UploadPartsTotal=Tr,exports.s3UploadRequestsTotal=wr,exports.s3UploadSuccessTotal=Er,exports.s3UploadThroughputGauge=Pr,exports.severityToText=ue,exports.trackActiveFlow=Mt,exports.trackActiveNode=Nt,exports.trackAzureError=Jt,exports.trackFileSize=bt,exports.trackFilesystemError=yn,exports.trackFlowError=Tt,exports.trackGCSError=Un,exports.trackNodeError=Et,exports.trackPartSize=xt,exports.trackS3Error=pr,exports.trackStorageError=te,exports.trackUploadError=Ir,exports.uploadEngineMetrics=Rr,exports.validateMetricsExist=Kr,exports.whenObservabilityEnabled=ct,exports.withActiveUploadTracking=St,exports.withApiMetrics=V,exports.withAzureApiMetrics=Zt,exports.withAzureOperationMetrics=$t,exports.withAzureSpan=en,exports.withAzureTimingMetrics=Qt,exports.withAzureUploadMetrics=Xt,exports.withChunkContext=Yr,exports.withChunkDuration=Ur,exports.withCircuitBreakerContext=Ut,exports.withCircuitBreakerSpan=Ht,exports.withExecutionContext=zt,exports.withFilesystemApiMetrics=Sn,exports.withFilesystemOperationMetrics=wn,exports.withFilesystemSpan=Tn,exports.withFilesystemTimingMetrics=Cn,exports.withFilesystemUploadMetrics=xn,exports.withFlowContext=Lt,exports.withFlowDuration=At,exports.withFlowSpan=It,exports.withGCSApiMetrics=Kn,exports.withGCSOperationMetrics=Jn,exports.withGCSSpan=Yn,exports.withGCSTimingMetrics=qn,exports.withGCSUploadMetrics=Gn,exports.withMetricTracking=_t,exports.withNodeContext=Rt,exports.withNodeDuration=jt,exports.withOperationContext=Vt,exports.withOperationSpan=Bt,exports.withParentContext=Ke,exports.withS3ApiMetrics=gr,exports.withS3OperationMetrics=vr,exports.withS3Span=yr,exports.withS3TimingMetrics=_r,exports.withS3UploadMetrics=hr,exports.withStorageOperationMetrics=U,exports.withStorageSpan=w,exports.withThroughputTracking=Ct,exports.withTimingMetrics=H,exports.withUploadContext=Jr,exports.withUploadDuration=Hr,exports.withUploadMetrics=B,exports.withUploadSpan=qr;
package/dist/index.d.cts CHANGED
@@ -9,7 +9,7 @@ import { MeterProvider, MeterProvider as MeterProvider$1, PeriodicExportingMetri
9
9
  import * as _effect_opentelemetry_Resource7 from "@effect/opentelemetry/Resource";
10
10
  import { Meter } from "@opentelemetry/api";
11
11
  import { Logger as Logger$1, SeverityNumber, SeverityNumber as SeverityNumber$1 } from "@opentelemetry/api-logs";
12
- import * as effect_Metric64 from "effect/Metric";
12
+ import * as effect_Metric49 from "effect/Metric";
13
13
 
14
14
  //#region src/core/metrics.d.ts
15
15
  declare const createUploadMetrics: (storageType: string) => {
@@ -626,11 +626,8 @@ declare const logFatal: (message: string, attributes?: Record<string, string | n
626
626
  * ```
627
627
  */
628
628
  type TraceContext = {
629
- /** 128-bit trace identifier (32 hex characters) */
630
- traceId: string;
631
- /** 64-bit span identifier (16 hex characters) */
632
- spanId: string;
633
- /** Trace flags (1 = sampled) */
629
+ /** 128-bit trace identifier (32 hex characters) */traceId: string; /** 64-bit span identifier (16 hex characters) */
630
+ spanId: string; /** Trace flags (1 = sampled) */
634
631
  traceFlags: number;
635
632
  };
636
633
  //#endregion
@@ -1246,18 +1243,12 @@ declare const createFlowMetrics: () => {
1246
1243
  activeNodesGauge: Metric.Metric.Gauge<number>;
1247
1244
  pausedFlowsGauge: Metric.Metric.Gauge<number>;
1248
1245
  flowLatencySummary: Metric.Metric.Summary<number>;
1249
- nodeLatencySummary: Metric.Metric.Summary<number>;
1250
- /** Total number of times circuit breakers opened */
1251
- circuitBreakerOpenTotal: Metric.Metric.Counter<number>;
1252
- /** Total number of times circuit breakers closed */
1253
- circuitBreakerCloseTotal: Metric.Metric.Counter<number>;
1254
- /** Total number of requests rejected by open circuit breakers */
1255
- circuitBreakerRejectedTotal: Metric.Metric.Counter<number>;
1256
- /** Total number of times circuit breakers transitioned to half-open */
1257
- circuitBreakerHalfOpenTotal: Metric.Metric.Counter<number>;
1258
- /** Current state of circuit breakers (0=closed, 1=open, 2=half-open) */
1259
- circuitBreakerStateGauge: Metric.Metric.Gauge<number>;
1260
- /** Number of failures in circuit breaker sliding window */
1246
+ nodeLatencySummary: Metric.Metric.Summary<number>; /** Total number of times circuit breakers opened */
1247
+ circuitBreakerOpenTotal: Metric.Metric.Counter<number>; /** Total number of times circuit breakers closed */
1248
+ circuitBreakerCloseTotal: Metric.Metric.Counter<number>; /** Total number of requests rejected by open circuit breakers */
1249
+ circuitBreakerRejectedTotal: Metric.Metric.Counter<number>; /** Total number of times circuit breakers transitioned to half-open */
1250
+ circuitBreakerHalfOpenTotal: Metric.Metric.Counter<number>; /** Current state of circuit breakers (0=closed, 1=open, 2=half-open) */
1251
+ circuitBreakerStateGauge: Metric.Metric.Gauge<number>; /** Number of failures in circuit breaker sliding window */
1261
1252
  circuitBreakerFailuresGauge: Metric.Metric.Gauge<number>;
1262
1253
  };
1263
1254
  /**
@@ -1285,18 +1276,12 @@ declare const flowMetrics: {
1285
1276
  activeNodesGauge: Metric.Metric.Gauge<number>;
1286
1277
  pausedFlowsGauge: Metric.Metric.Gauge<number>;
1287
1278
  flowLatencySummary: Metric.Metric.Summary<number>;
1288
- nodeLatencySummary: Metric.Metric.Summary<number>;
1289
- /** Total number of times circuit breakers opened */
1290
- circuitBreakerOpenTotal: Metric.Metric.Counter<number>;
1291
- /** Total number of times circuit breakers closed */
1292
- circuitBreakerCloseTotal: Metric.Metric.Counter<number>;
1293
- /** Total number of requests rejected by open circuit breakers */
1294
- circuitBreakerRejectedTotal: Metric.Metric.Counter<number>;
1295
- /** Total number of times circuit breakers transitioned to half-open */
1296
- circuitBreakerHalfOpenTotal: Metric.Metric.Counter<number>;
1297
- /** Current state of circuit breakers (0=closed, 1=open, 2=half-open) */
1298
- circuitBreakerStateGauge: Metric.Metric.Gauge<number>;
1299
- /** Number of failures in circuit breaker sliding window */
1279
+ nodeLatencySummary: Metric.Metric.Summary<number>; /** Total number of times circuit breakers opened */
1280
+ circuitBreakerOpenTotal: Metric.Metric.Counter<number>; /** Total number of times circuit breakers closed */
1281
+ circuitBreakerCloseTotal: Metric.Metric.Counter<number>; /** Total number of requests rejected by open circuit breakers */
1282
+ circuitBreakerRejectedTotal: Metric.Metric.Counter<number>; /** Total number of times circuit breakers transitioned to half-open */
1283
+ circuitBreakerHalfOpenTotal: Metric.Metric.Counter<number>; /** Current state of circuit breakers (0=closed, 1=open, 2=half-open) */
1284
+ circuitBreakerStateGauge: Metric.Metric.Gauge<number>; /** Number of failures in circuit breaker sliding window */
1300
1285
  circuitBreakerFailuresGauge: Metric.Metric.Gauge<number>;
1301
1286
  };
1302
1287
  //#endregion
@@ -1433,18 +1418,18 @@ declare const NoOpMetricsServiceLive: Layer.Layer<MetricsService>;
1433
1418
  //#endregion
1434
1419
  //#region src/storage/azure.d.ts
1435
1420
  declare const azureMetrics: {
1436
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
1437
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
1438
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
1439
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1440
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1441
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1442
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1443
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
1444
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
1445
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
1446
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
1447
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
1421
+ uploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1422
+ activeUploadsGauge: effect_Metric49.Metric.Gauge<number>;
1423
+ uploadThroughputGauge: effect_Metric49.Metric.Gauge<number>;
1424
+ uploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1425
+ partUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1426
+ fileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1427
+ partSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1428
+ uploadRequestsTotal: effect_Metric49.Metric.Counter<number>;
1429
+ uploadPartsTotal: effect_Metric49.Metric.Counter<number>;
1430
+ uploadSuccessTotal: effect_Metric49.Metric.Counter<number>;
1431
+ uploadErrorsTotal: effect_Metric49.Metric.Counter<number>;
1432
+ apiCallsTotal: effect_Metric49.Metric.Counter<number>;
1448
1433
  };
1449
1434
  declare const AzureTracingLayer: Layer.Layer<{
1450
1435
  serviceName: string;
@@ -1455,7 +1440,7 @@ declare const AzureObservabilityLayer: Layer.Layer<{
1455
1440
  }, never, never>;
1456
1441
  declare const withAzureUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1457
1442
  declare const withAzureApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1458
- declare const withAzureTimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1443
+ declare const withAzureTimingMetrics: <A, E, R>(metric: effect_Metric49.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1459
1444
  declare const withAzureOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
1460
1445
  declare const withAzureSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
1461
1446
  declare const logAzureOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -1474,23 +1459,23 @@ declare const logAzureUploadCompletion: (uploadId: string, metrics: {
1474
1459
  retryCount?: number;
1475
1460
  }) => Effect.Effect<void, never, never>;
1476
1461
  declare const logAzureContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
1477
- 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>;
1462
+ declare const azureUploadRequestsTotal: effect_Metric49.Metric.Counter<number>, azureUploadPartsTotal: effect_Metric49.Metric.Counter<number>, azureUploadSuccessTotal: effect_Metric49.Metric.Counter<number>, azureUploadErrorsTotal: effect_Metric49.Metric.Counter<number>, azureApiCallsTotal: effect_Metric49.Metric.Counter<number>, azureUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azurePartUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azureFileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azurePartSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, azureActiveUploadsGauge: effect_Metric49.Metric.Gauge<number>, azureUploadThroughputGauge: effect_Metric49.Metric.Gauge<number>, azureUploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1478
1463
  type AzureMetrics = StorageMetrics;
1479
1464
  //#endregion
1480
1465
  //#region src/storage/filesystem.d.ts
1481
1466
  declare const filesystemMetrics: {
1482
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
1483
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
1484
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
1485
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1486
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1487
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1488
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1489
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
1490
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
1491
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
1492
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
1493
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
1467
+ uploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1468
+ activeUploadsGauge: effect_Metric49.Metric.Gauge<number>;
1469
+ uploadThroughputGauge: effect_Metric49.Metric.Gauge<number>;
1470
+ uploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1471
+ partUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1472
+ fileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1473
+ partSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1474
+ uploadRequestsTotal: effect_Metric49.Metric.Counter<number>;
1475
+ uploadPartsTotal: effect_Metric49.Metric.Counter<number>;
1476
+ uploadSuccessTotal: effect_Metric49.Metric.Counter<number>;
1477
+ uploadErrorsTotal: effect_Metric49.Metric.Counter<number>;
1478
+ apiCallsTotal: effect_Metric49.Metric.Counter<number>;
1494
1479
  };
1495
1480
  declare const FilesystemTracingLayer: Layer.Layer<{
1496
1481
  serviceName: string;
@@ -1501,7 +1486,7 @@ declare const FilesystemObservabilityLayer: Layer.Layer<{
1501
1486
  }, never, never>;
1502
1487
  declare const withFilesystemUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1503
1488
  declare const withFilesystemApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1504
- declare const withFilesystemTimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1489
+ declare const withFilesystemTimingMetrics: <A, E, R>(metric: effect_Metric49.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1505
1490
  declare const withFilesystemOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
1506
1491
  declare const withFilesystemSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
1507
1492
  declare const logFilesystemOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -1520,23 +1505,23 @@ declare const logFilesystemUploadCompletion: (uploadId: string, metrics: {
1520
1505
  retryCount?: number;
1521
1506
  }) => Effect.Effect<void, never, never>;
1522
1507
  declare const logFilesystemContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
1523
- 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>;
1508
+ declare const filesystemUploadRequestsTotal: effect_Metric49.Metric.Counter<number>, filesystemUploadPartsTotal: effect_Metric49.Metric.Counter<number>, filesystemUploadSuccessTotal: effect_Metric49.Metric.Counter<number>, filesystemUploadErrorsTotal: effect_Metric49.Metric.Counter<number>, filesystemApiCallsTotal: effect_Metric49.Metric.Counter<number>, filesystemUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemPartUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemFileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemPartSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, filesystemActiveUploadsGauge: effect_Metric49.Metric.Gauge<number>, filesystemUploadThroughputGauge: effect_Metric49.Metric.Gauge<number>, filesystemUploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1524
1509
  type FilesystemMetrics = StorageMetrics;
1525
1510
  //#endregion
1526
1511
  //#region src/storage/gcs.d.ts
1527
1512
  declare const gcsMetrics: {
1528
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
1529
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
1530
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
1531
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1532
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1533
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1534
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1535
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
1536
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
1537
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
1538
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
1539
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
1513
+ uploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1514
+ activeUploadsGauge: effect_Metric49.Metric.Gauge<number>;
1515
+ uploadThroughputGauge: effect_Metric49.Metric.Gauge<number>;
1516
+ uploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1517
+ partUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1518
+ fileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1519
+ partSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1520
+ uploadRequestsTotal: effect_Metric49.Metric.Counter<number>;
1521
+ uploadPartsTotal: effect_Metric49.Metric.Counter<number>;
1522
+ uploadSuccessTotal: effect_Metric49.Metric.Counter<number>;
1523
+ uploadErrorsTotal: effect_Metric49.Metric.Counter<number>;
1524
+ apiCallsTotal: effect_Metric49.Metric.Counter<number>;
1540
1525
  };
1541
1526
  declare const GCSTracingLayer: Layer.Layer<{
1542
1527
  serviceName: string;
@@ -1547,7 +1532,7 @@ declare const GCSObservabilityLayer: Layer.Layer<{
1547
1532
  }, never, never>;
1548
1533
  declare const withGCSUploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1549
1534
  declare const withGCSApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1550
- declare const withGCSTimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1535
+ declare const withGCSTimingMetrics: <A, E, R>(metric: effect_Metric49.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1551
1536
  declare const withGCSOperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
1552
1537
  declare const withGCSSpan: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
1553
1538
  declare const logGCSOperation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -1566,23 +1551,23 @@ declare const logGCSUploadCompletion: (uploadId: string, metrics: {
1566
1551
  retryCount?: number;
1567
1552
  }) => Effect.Effect<void, never, never>;
1568
1553
  declare const logGCSContext: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
1569
- 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>;
1554
+ declare const gcsUploadRequestsTotal: effect_Metric49.Metric.Counter<number>, gcsUploadPartsTotal: effect_Metric49.Metric.Counter<number>, gcsUploadSuccessTotal: effect_Metric49.Metric.Counter<number>, gcsUploadErrorsTotal: effect_Metric49.Metric.Counter<number>, gcsApiCallsTotal: effect_Metric49.Metric.Counter<number>, gcsUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsPartUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsFileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsPartSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, gcsActiveUploadsGauge: effect_Metric49.Metric.Gauge<number>, gcsUploadThroughputGauge: effect_Metric49.Metric.Gauge<number>, gcsUploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1570
1555
  type GCSMetrics = StorageMetrics;
1571
1556
  //#endregion
1572
1557
  //#region src/storage/s3.d.ts
1573
1558
  declare const s3Metrics: {
1574
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
1575
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
1576
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
1577
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1578
- partUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1579
- fileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1580
- partSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1581
- uploadRequestsTotal: effect_Metric64.Metric.Counter<number>;
1582
- uploadPartsTotal: effect_Metric64.Metric.Counter<number>;
1583
- uploadSuccessTotal: effect_Metric64.Metric.Counter<number>;
1584
- uploadErrorsTotal: effect_Metric64.Metric.Counter<number>;
1585
- apiCallsTotal: effect_Metric64.Metric.Counter<number>;
1559
+ uploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1560
+ activeUploadsGauge: effect_Metric49.Metric.Gauge<number>;
1561
+ uploadThroughputGauge: effect_Metric49.Metric.Gauge<number>;
1562
+ uploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1563
+ partUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1564
+ fileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1565
+ partSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1566
+ uploadRequestsTotal: effect_Metric49.Metric.Counter<number>;
1567
+ uploadPartsTotal: effect_Metric49.Metric.Counter<number>;
1568
+ uploadSuccessTotal: effect_Metric49.Metric.Counter<number>;
1569
+ uploadErrorsTotal: effect_Metric49.Metric.Counter<number>;
1570
+ apiCallsTotal: effect_Metric49.Metric.Counter<number>;
1586
1571
  };
1587
1572
  declare const S3TracingLayer: Layer.Layer<{
1588
1573
  serviceName: string;
@@ -1593,7 +1578,7 @@ declare const S3ObservabilityLayer: Layer.Layer<{
1593
1578
  }, never, never>;
1594
1579
  declare const withS3UploadMetrics: <A, E, R>(uploadId: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1595
1580
  declare const withS3ApiMetrics: <A, E, R>(operation: string, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1596
- declare const withS3TimingMetrics: <A, E, R>(metric: effect_Metric64.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1581
+ declare const withS3TimingMetrics: <A, E, R>(metric: effect_Metric49.Metric.Histogram<number>, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
1597
1582
  declare const withS3OperationMetrics: <A, E, R>(operation: string, uploadId: string, effect: Effect.Effect<A, E, R>, fileSize?: number) => Effect.Effect<A, E, R>;
1598
1583
  declare const withS3Span: <A, E, R>(operation: string, attributes?: Record<string, unknown>) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<unknown, unknown, unknown>;
1599
1584
  declare const logS3Operation: (operation: string, uploadId: string, metadata?: Record<string, unknown> | undefined) => Effect.Effect<void, never, never>;
@@ -1612,7 +1597,7 @@ declare const logS3UploadCompletion: (uploadId: string, metrics: {
1612
1597
  retryCount?: number;
1613
1598
  }) => Effect.Effect<void, never, never>;
1614
1599
  declare const logS3Context: (message: string, context: Record<string, unknown>) => Effect.Effect<void, never, never>;
1615
- 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>;
1600
+ declare const s3UploadRequestsTotal: effect_Metric49.Metric.Counter<number>, s3UploadPartsTotal: effect_Metric49.Metric.Counter<number>, s3UploadSuccessTotal: effect_Metric49.Metric.Counter<number>, s3UploadErrorsTotal: effect_Metric49.Metric.Counter<number>, s3ApiCallsTotal: effect_Metric49.Metric.Counter<number>, s3UploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3PartUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3FileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3PartSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>, s3ActiveUploadsGauge: effect_Metric49.Metric.Gauge<number>, s3UploadThroughputGauge: effect_Metric49.Metric.Gauge<number>, s3UploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1616
1601
  type S3Metrics = StorageMetrics;
1617
1602
  //#endregion
1618
1603
  //#region src/upload/metrics.d.ts
@@ -1713,21 +1698,21 @@ declare const UploadObservabilityTest: Layer.Layer<UploadObservability, never, n
1713
1698
  * Get metrics for validation (useful for testing metric definitions)
1714
1699
  */
1715
1700
  declare const getTestMetrics: () => {
1716
- uploadCreatedTotal: effect_Metric64.Metric.Counter<number>;
1717
- uploadCompletedTotal: effect_Metric64.Metric.Counter<number>;
1718
- uploadFailedTotal: effect_Metric64.Metric.Counter<number>;
1719
- chunkUploadedTotal: effect_Metric64.Metric.Counter<number>;
1720
- uploadFromUrlTotal: effect_Metric64.Metric.Counter<number>;
1721
- uploadFromUrlSuccessTotal: effect_Metric64.Metric.Counter<number>;
1722
- uploadFromUrlFailedTotal: effect_Metric64.Metric.Counter<number>;
1723
- uploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1724
- chunkUploadDurationHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1725
- uploadFileSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1726
- chunkSizeHistogram: effect_Metric64.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1727
- activeUploadsGauge: effect_Metric64.Metric.Gauge<number>;
1728
- uploadThroughputGauge: effect_Metric64.Metric.Gauge<number>;
1729
- uploadLatencySummary: effect_Metric64.Metric.Summary<number>;
1730
- chunkLatencySummary: effect_Metric64.Metric.Summary<number>;
1701
+ uploadCreatedTotal: effect_Metric49.Metric.Counter<number>;
1702
+ uploadCompletedTotal: effect_Metric49.Metric.Counter<number>;
1703
+ uploadFailedTotal: effect_Metric49.Metric.Counter<number>;
1704
+ chunkUploadedTotal: effect_Metric49.Metric.Counter<number>;
1705
+ uploadFromUrlTotal: effect_Metric49.Metric.Counter<number>;
1706
+ uploadFromUrlSuccessTotal: effect_Metric49.Metric.Counter<number>;
1707
+ uploadFromUrlFailedTotal: effect_Metric49.Metric.Counter<number>;
1708
+ uploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1709
+ chunkUploadDurationHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1710
+ uploadFileSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1711
+ chunkSizeHistogram: effect_Metric49.Metric<effect_MetricKeyType7.MetricKeyType.Histogram, number, effect_MetricState7.MetricState.Histogram>;
1712
+ activeUploadsGauge: effect_Metric49.Metric.Gauge<number>;
1713
+ uploadThroughputGauge: effect_Metric49.Metric.Gauge<number>;
1714
+ uploadLatencySummary: effect_Metric49.Metric.Summary<number>;
1715
+ chunkLatencySummary: effect_Metric49.Metric.Summary<number>;
1731
1716
  };
1732
1717
  /**
1733
1718
  * Validate that all required metrics exist