UNPKG

@salesforce/o11y-reporter

Version:

A wrapper service around o11y and o11y_schema for telemetry reporting.

3 lines (2 loc) 5.81 kB
/* o11y-reporter - A wrapper service around o11y and o11y_schema for telemetry reporting */ var g=Object.create;var d=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var v=(e,n)=>{for(var t in n)d(e,t,{get:n[t],enumerable:!0})},m=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of f(n))!S.call(e,r)&&r!==t&&d(e,r,{get:()=>n[r],enumerable:!(o=C(n,r))||o.enumerable});return e};var l=(e,n,t)=>(t=e!=null?g(I(e)):{},m(n||!e||!e.__esModule?d(t,"default",{value:e,enumerable:!0}):t,e)),O=e=>m(d({},"__esModule",{value:!0}),e);var w={};v(w,{O11yService:()=>u});module.exports=O(w);var p=null,h=async()=>(p||(p=(async()=>{let[e,n,t,o,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:a,getInstrumentation:c}=e,{version:y}=n;return{o11yClientVersion:a,getInstrumentation:c,o11ySchemaVersion:y,registerInstrumentedApp:i,ConsoleCollector:s,a4d_instrumentation:t.a4dInstrumentationSchema,simpleCollectorModule:o,collectorsModule:r}})()),p);var u=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 t=new e;e.instances.set(n,t)}return e.instances.get(n)}async initialize(n,t){this.extensionName=n,this.o11yUploadEndpoint=t,e.sharedInstrApp||await this.initializeSharedResources(),this.instrumentation=e.sharedInstrumentation,this.a4dO11ySchema=e.sharedO11yModules.a4d_instrumentation;let{o11yClientVersion:o,o11ySchemaVersion:r}=e.sharedO11yModules;Object.assign(this.environment,{appName:"o11y-reporter-extensions",extensionName:this.extensionName,o11ySchemaVersion:r,sdkVersion:`${o}:${r}`})}async initializeSharedResources(){console.log("Initializing shared O11y resources");try{e.sharedO11yModules=await h();let{o11yClientVersion:n,o11ySchemaVersion:t,getInstrumentation:o,registerInstrumentedApp:r}=e.sharedO11yModules,i="o11y-reporter-extensions-instrumentation";console.log("Creating shared instrumentation with name:",i),e.sharedInstrumentation=o(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}:${t}`},e.sharedO11yModules)),e.sharedO11yModules){let{collectorsModule:a}=e.sharedO11yModules,c=a.default??a;if(typeof c.encodeCoreEnvelopeContentsRaw=="function")e.sharedProtoEncoderFunc=c.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 t=Date.now();if(this.isInitialized())return!0;let o=5;for(;!this.isInitialized();){if(Date.now()-t>n)return console.error("O11yService: Initialization timeout after",n,"ms"),console.error("Final initialization status:",this.getInitializationStatus()),!1;await new Promise(r=>setTimeout(r,o)),o=Math.min(o*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,t,o){if(!o)throw new Error("o11yModules is null");let{simpleCollectorModule:r}=o,i=r.default?.SimpleCollector??r.SimpleCollector,s=new i({environment:t});return n.registerLogCollector(s,{retroactive:!0}),n.registerMetricsCollector(s),s}uploadAsNeededAsync(n=!1){let t=[];if(!e.sharedProtoEncoderFunc)return console.error("sharedProtoEncoderFunc is not initialized"),Promise.resolve([]);let o=e.sharedInstrApp?.simpleCollector;if(o?.hasData&&(n||o.estimatedByteSize>=this.O11Y_UPLOAD_THRESHOLD_BYTES))try{let r=o.getRawContentsOfCoreEnvelope(),i=e.sharedProtoEncoderFunc(r);t.push(this.uploadToFalconAsync(i))}catch(r){return console.error("Error during upload encoding:",r),Promise.resolve([])}return Promise.allSettled(t)}async uploadToFalconAsync(n){let t=Buffer.from(n).toString("base64");return this.o11yUploadEndpoint?await this.postRequest(this.o11yUploadEndpoint,{base64Env:t}):Promise.reject(new Error("o11yUploadEndpoint is not defined"))}postRequest(n,t){return fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).catch(o=>{throw console.error("Post Request failed:",o),o})}};0&&(module.exports={O11yService});