UNPKG

@salesforce/o11y-reporter

Version:

A wrapper service around o11y and o11y_schema for telemetry reporting.

3 lines (2 loc) 5.19 kB
/* o11y-reporter - A wrapper service around o11y and o11y_schema for telemetry reporting */ var c=null,u=async()=>(c||(c=(async()=>{let[e,n,o,t,r]=await Promise.all([import("o11y/client"),import("o11y_schema/version"),import("o11y_schema/sf_a4dInstrumentation"),import("o11y/simple_collector"),import("o11y/collectors")]),{registerInstrumentedApp:i,ConsoleCollector:s,_version:l,getInstrumentation:a}=e,{version:p}=n;return{o11yClientVersion:l,getInstrumentation:a,o11ySchemaVersion:p,registerInstrumentedApp:i,ConsoleCollector:s,a4d_instrumentation:o.a4dInstrumentationSchema,simpleCollectorModule:t,collectorsModule:r}})()),c);var d=class e{constructor(){this.O11Y_UPLOAD_THRESHOLD_BYTES=5e4;this.environment={}}static{this.instances=new Map}static{this.sharedInstrumentation=null}static{this.sharedInstrApp=null}static{this.sharedO11yModules=null}static{this.sharedProtoEncoderFunc=null}static getInstance(n){if(!e.instances.has(n)){let o=new e;e.instances.set(n,o)}return e.instances.get(n)}async initialize(n,o){this.extensionName=n,this.o11yUploadEndpoint=o,e.sharedInstrApp||await this.initializeSharedResources(),this.instrumentation=e.sharedInstrumentation,this.a4dO11ySchema=e.sharedO11yModules.a4d_instrumentation;let{o11yClientVersion:t,o11ySchemaVersion:r}=e.sharedO11yModules;Object.assign(this.environment,{appName:"o11y-reporter-extensions",extensionName:this.extensionName,o11ySchemaVersion:r,sdkVersion:`${t}:${r}`})}async initializeSharedResources(){console.log("Initializing shared O11y resources");try{e.sharedO11yModules=await u();let{o11yClientVersion:n,o11ySchemaVersion:o,getInstrumentation:t,registerInstrumentedApp:r}=e.sharedO11yModules,i="o11y-reporter-extensions-instrumentation";console.log("Creating shared instrumentation with name:",i),e.sharedInstrumentation=t(i);let s="o11y-reporter-extensions";if(console.log("Registering shared app with name:",s),e.sharedInstrApp=r(s,{isProduction:!1,enableBuffering:!0}),e.sharedInstrApp&&(e.sharedInstrApp.simpleCollector=this.initSimpleCollector(e.sharedInstrApp,{appName:s,sdkVersion:`${n}:${o}`},e.sharedO11yModules)),e.sharedO11yModules){let{collectorsModule:l}=e.sharedO11yModules,a=l.default??l;if(typeof a.encodeCoreEnvelopeContentsRaw=="function")e.sharedProtoEncoderFunc=a.encodeCoreEnvelopeContentsRaw,console.log("Shared proto encoder function initialized successfully");else throw new Error("encodeCoreEnvelopeContentsRaw is undefined or not a function")}else throw new Error("sharedO11yModules is null after loading");console.log("Shared O11y resources initialized successfully")}catch(n){throw console.error("Failed to initialize shared O11y resources:",n),e.sharedInstrApp=null,e.sharedO11yModules=null,e.sharedInstrumentation=null,e.sharedProtoEncoderFunc=null,n}}logEvent(n){if(!this.isInitialized()){console.error("O11yService: Cannot log event - Service not fully initialized"),console.error("Initialization status:",this.getInitializationStatus());return}this.instrumentation?this.instrumentation.log(this.a4dO11ySchema,{message:JSON.stringify(n)}):console.log("O11yService: Unable to log event - Instrumentation not initialized.")}isInitialized(){return!!(e.sharedProtoEncoderFunc&&e.sharedInstrApp&&e.sharedO11yModules&&this.instrumentation)}getInitializationStatus(){return{sharedProtoEncoderFunc:!!e.sharedProtoEncoderFunc,sharedInstrApp:!!e.sharedInstrApp,sharedO11yModules:!!e.sharedO11yModules,instrumentation:!!this.instrumentation}}async waitForInitialization(n=5e3){let o=Date.now();if(this.isInitialized())return!0;let t=5;for(;!this.isInitialized();){if(Date.now()-o>n)return console.error("O11yService: Initialization timeout after",n,"ms"),console.error("Final initialization status:",this.getInitializationStatus()),!1;await new Promise(r=>setTimeout(r,t)),t=Math.min(t*2,100)}return!0}async upload(){if(!this.isInitialized()){console.error("O11yService: Cannot upload - Service not fully initialized");return}try{await this.uploadAsNeededAsync(!0)}catch(n){console.error("Telemetry upload failed:",n)}}initSimpleCollector(n,o,t){if(!t)throw new Error("o11yModules is null");let{simpleCollectorModule:r}=t,i=r.default?.SimpleCollector??r.SimpleCollector,s=new i({environment:o});return n.registerLogCollector(s,{retroactive:!0}),n.registerMetricsCollector(s),s}uploadAsNeededAsync(n=!1){let o=[];if(!e.sharedProtoEncoderFunc)return console.error("sharedProtoEncoderFunc is not initialized"),Promise.resolve([]);let t=e.sharedInstrApp?.simpleCollector;if(t?.hasData&&(n||t.estimatedByteSize>=this.O11Y_UPLOAD_THRESHOLD_BYTES))try{let r=t.getRawContentsOfCoreEnvelope(),i=e.sharedProtoEncoderFunc(r);o.push(this.uploadToFalconAsync(i))}catch(r){return console.error("Error during upload encoding:",r),Promise.resolve([])}return Promise.allSettled(o)}async uploadToFalconAsync(n){let o=Buffer.from(n).toString("base64");return this.o11yUploadEndpoint?await this.postRequest(this.o11yUploadEndpoint,{base64Env:o}):Promise.reject(new Error("o11yUploadEndpoint is not defined"))}postRequest(n,o){return fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}).catch(t=>{throw console.error("Post Request failed:",t),t})}};export{d as O11yService};