private constructor()

in runtimes/runtimes/operational-telemetry/operational-telemetry-service.ts [43:89]


    private constructor(config: OperationalTelemetryConfig) {
        diag.setLogger(
            {
                debug: message => config.lspConsole.debug(message),
                error: message => config.lspConsole.error(message),
                info: message => config.lspConsole.info(message),
                verbose: message => config.lspConsole.log(message),
                warn: message => config.lspConsole.warn(message),
            },
            DiagLogLevel.ALL
        )

        const operationalTelemetryResource: OperationalTelemetryResource = {
            'server.name': config.serviceName,
            'server.version': config.serviceVersion,
            'clientInfo.name': config.extendedClientInfo?.name,
            'clientInfo.version': config.extendedClientInfo?.version,
            'clientInfo.clientId': config.extendedClientInfo?.clientId,
            'clientInfo.extension.name': config.extendedClientInfo?.extension.name,
            'clientInfo.extension.version': config.extendedClientInfo?.extension.version,
            'operational.telemetry.schema.version': '1.0.0',
            sessionId: randomUUID(),
        }
        this.baseResource = resourceFromAttributes({ ...operationalTelemetryResource })

        this.awsConfig = {
            endpoint: config.endpoint,
        }

        this.telemetryOptOut = config.telemetryOptOut

        if (!this.telemetryOptOut) {
            this.startupSdk()
        }

        // Registering process events callbacks once
        process.on('uncaughtException', async () => {
            // Telemetry signals are force flushed to their exporters on shutdown.
            await this.shutdownSdk()
            process.exit(1)
        })

        process.on('beforeExit', async () => {
            // Telemetry signals are force flushed to their exporters on shutdown.
            await this.shutdownSdk()
        })
    }