UNPKG

rocketmq-client-nodejs

Version:
139 lines 13.4 kB
"use strict"; /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.TelemetrySession = void 0; const service_pb_1 = require("../../proto/apache/rocketmq/v2/service_pb"); class TelemetrySession { #endpoints; #baseClient; #logger; #stream; #isRefreshing = false; constructor(baseClient, endpoints, logger) { this.#endpoints = endpoints; this.#baseClient = baseClient; this.#logger = logger; this.#logger.info('Creating telemetry session, endpoints=%s, clientId=%s', endpoints, baseClient.clientId); this.#renewStream(true); } release() { this.#logger.info('Begin to release telemetry session, endpoints=%s, clientId=%s', this.#endpoints, this.#baseClient.clientId); try { this.#stream.end(); this.#stream.removeAllListeners(); } catch (e) { this.#logger.warn('Failed to release telemetry session gracefully, endpoints=%s, clientId=%s, error=%s', this.#endpoints, this.#baseClient.clientId, e instanceof Error ? e.message : String(e)); } } write(command) { this.#stream.write(command); } syncSettings() { const command = this.#baseClient.settingsCommand(); this.write(command); } refresh() { if (this.#isRefreshing) { this.#logger.warn('Telemetry session is already refreshing, skip this request, endpoints=%s, clientId=%s', this.#endpoints, this.#baseClient.clientId); return; } this.#isRefreshing = true; this.#logger.info('Refreshing telemetry session, endpoints=%s, clientId=%s', this.#endpoints, this.#baseClient.clientId); try { this.release(); this.#renewStream(false); } catch (err) { this.#logger.error('Failed to refresh telemetry session, endpoints=%s, clientId=%s, error=%s', this.#endpoints, this.#baseClient.clientId, err); } finally { this.#isRefreshing = false; } } #renewStream(inited) { try { this.#logger.debug?.('Creating telemetry stream, endpoints=%s, clientId=%s, inited=%s', this.#endpoints, this.#baseClient.clientId, inited); this.#stream = this.#baseClient.createTelemetryStream(this.#endpoints); this.#stream.on('data', this.#onData.bind(this)); this.#stream.once('error', this.#onError.bind(this)); this.#stream.once('end', this.#onEnd.bind(this)); if (!inited) { this.#logger.info('Syncing settings to new stream, endpoints=%s, clientId=%s', this.#endpoints, this.#baseClient.clientId); this.syncSettings(); } } catch (err) { this.#logger.error('Failed to create telemetry stream, endpoints=%s, clientId=%s, error=%s', this.#endpoints, this.#baseClient.clientId, err); throw err; } } #onData(command) { const endpoints = this.#endpoints; const clientId = this.#baseClient.clientId; const commandCase = command.getCommandCase(); switch (commandCase) { case service_pb_1.TelemetryCommand.CommandCase.SETTINGS: this.#logger.info('Receive settings from remote, endpoints=%s, clientId=%s', endpoints, clientId); this.#baseClient.onSettingsCommand(endpoints, command.getSettings()); break; case service_pb_1.TelemetryCommand.CommandCase.RECOVER_ORPHANED_TRANSACTION_COMMAND: { this.#logger.info('Receive orphaned transaction recovery command from remote, endpoints=%s, clientId=%s', endpoints, clientId); this.#baseClient.onRecoverOrphanedTransactionCommand(endpoints, command.getRecoverOrphanedTransactionCommand()); break; } case service_pb_1.TelemetryCommand.CommandCase.VERIFY_MESSAGE_COMMAND: { this.#logger.info('Receive message verification command from remote, endpoints=%s, clientId=%s', endpoints, clientId); this.#baseClient.onVerifyMessageCommand(endpoints, command.getVerifyMessageCommand()); break; } case service_pb_1.TelemetryCommand.CommandCase.PRINT_THREAD_STACK_TRACE_COMMAND: { this.#logger.info('Receive thread stack print command from remote, endpoints=%s, clientId=%s', endpoints, clientId); this.#baseClient.onPrintThreadStackTraceCommand(endpoints, command.getPrintThreadStackTraceCommand()); break; } case service_pb_1.TelemetryCommand.CommandCase.RECONNECT_ENDPOINTS_COMMAND: { this.#logger.info('Receive reconnect endpoints command from remote, endpoints=%s, clientId=%s', endpoints, clientId); this.#baseClient.onReconnectEndpointsCommand(endpoints, command.getReconnectEndpointsCommand()); break; } default: { const commandObj = command.toObject(); this.#logger.warn('Receive unrecognized command from remote, endpoints=%s, commandCase=%j, command=%j, clientId=%s', endpoints, commandCase, commandObj, clientId); // should telemetry session start fail this.#baseClient.onUnknownCommand(endpoints, commandObj.status); } } } #onError(err) { this.#logger.error('Exception raised from stream response observer, endpoints=%s, clientId=%s, error=%s', this.#endpoints, this.#baseClient.clientId, err); this.release(); setTimeout(() => { this.#renewStream(false); }, 1000); } #onEnd() { this.#logger.info('Receive completion for stream response observer, endpoints=%s, clientId=%s', this.#endpoints, this.#baseClient.clientId); this.release(); setTimeout(() => { this.#renewStream(false); }, 1000); } } exports.TelemetrySession = TelemetrySession; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVsZW1ldHJ5U2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvVGVsZW1ldHJ5U2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUFHSCwwRUFBNkU7QUFLN0UsTUFBYSxnQkFBZ0I7SUFDM0IsVUFBVSxDQUFZO0lBQ3RCLFdBQVcsQ0FBYTtJQUN4QixPQUFPLENBQVU7SUFDakIsT0FBTyxDQUF5RDtJQUNoRSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLFlBQVksVUFBc0IsRUFBRSxTQUFvQixFQUFFLE1BQWU7UUFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdURBQXVELEVBQ3ZFLFNBQVMsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLCtEQUErRCxFQUMvRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxRkFBcUYsRUFDckcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFB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