@ultipa-graph/ultipa-driver
Version:
NodeJS SDK for Ultipa GQL
78 lines • 8.45 kB
JavaScript
;
/**
* Health service handles health check operations.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.HealthService = void 0;
const events_1 = require("events");
const services_1 = require("../services");
const converters_1 = require("./converters");
/**
* Health service for checking service health.
*/
class HealthService {
ctx;
constructor(ctx) {
this.ctx = ctx;
}
/**
* Check the health of a service.
*/
async healthCheck(service = '') {
const metadata = this.ctx.getSessionMetadata();
const response = await (0, services_1.promisifyCall)(this.ctx.clients.healthService, 'Check', { service }, metadata);
return (0, converters_1.protoToHealthStatus)(response.status);
}
/**
* Watch health status changes via server-side streaming.
* Returns a HealthWatcher that emits 'status' events with HealthStatus values.
* Call stop() to cancel the stream.
*
* @param service - Optional service name to watch
* @returns HealthWatcher - EventEmitter with stop() method
*
* @example
* ```typescript
* const watcher = healthService.watch();
* watcher.on('status', (status: HealthStatus) => {
* console.log('Health status:', status);
* });
* watcher.on('error', (err) => {
* console.error('Watch error:', err);
* });
* watcher.on('end', () => {
* console.log('Watch stream ended');
* });
* // Later, to stop watching:
* watcher.stop();
* ```
*/
watch(service = '') {
const emitter = new events_1.EventEmitter();
// Get the Watch method from the health service
const watchFn = this.ctx.clients.healthService.Watch.bind(this.ctx.clients.healthService);
// Start the streaming call with metadata
const metadata = this.ctx.getSessionMetadata();
const call = watchFn({ service }, metadata);
// Handle incoming data
call.on('data', (response) => {
const status = (0, converters_1.protoToHealthStatus)(response.status);
emitter.emit('status', status);
});
// Handle errors
call.on('error', (err) => {
emitter.emit('error', err);
});
// Handle stream end
call.on('end', () => {
emitter.emit('end');
});
// Add stop method to cancel the stream
emitter.stop = () => {
call.cancel();
};
return emitter;
}
}
exports.HealthService = HealthService;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaGVhbHRoLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCxtQ0FBc0M7QUFHdEMsMENBQTRDO0FBQzVDLDZDQUFtRDtBQVduRDs7R0FFRztBQUNILE1BQWEsYUFBYTtJQUNKO0lBQXBCLFlBQW9CLEdBQW1CO1FBQW5CLFFBQUcsR0FBSCxHQUFHLENBQWdCO0lBQUcsQ0FBQztJQUUzQzs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBa0IsRUFBRTtRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFBLHdCQUFhLEVBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDOUIsT0FBTyxFQUNQLEVBQUUsT0FBTyxFQUFFLEVBQ1gsUUFBUSxDQUNULENBQUM7UUFFRixPQUFPLElBQUEsZ0NBQW1CLEVBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F1Qkc7SUFDSCxLQUFLLENBQUMsVUFBa0IsRUFBRTtRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFZLEVBQW1CLENBQUM7UUFFcEQsK0NBQStDO1FBQy9DLE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQXFCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUMvQixDQUFDO1FBRUYseUNBQXlDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU1Qyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFBLGdDQUFtQixFQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILGdCQUFnQjtRQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUNBQXVDO1FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUE3RUQsc0NBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWFsdGggc2VydmljZSBoYW5kbGVzIGhlYWx0aCBjaGVjayBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vc2VydmljZS1jb250ZXh0JztcbmltcG9ydCB7IEhlYWx0aFN0YXR1cyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHByb21pc2lmeUNhbGwgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBwcm90b1RvSGVhbHRoU3RhdHVzIH0gZnJvbSAnLi9jb252ZXJ0ZXJzJztcblxuLyoqXG4gKiBIZWFsdGggd2F0Y2hlciBpbnRlcmZhY2UgZm9yIHN0cmVhbWluZyBoZWFsdGggdXBkYXRlcy5cbiAqIEVtaXRzICdzdGF0dXMnIGV2ZW50cyB3aXRoIEhlYWx0aFN0YXR1cyBhbmQgJ2Vycm9yJyBldmVudHMgb24gZmFpbHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhXYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqIFN0b3Agd2F0Y2hpbmcgaGVhbHRoIHVwZGF0ZXMgKi9cbiAgc3RvcCgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEhlYWx0aCBzZXJ2aWNlIGZvciBjaGVja2luZyBzZXJ2aWNlIGhlYWx0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEhlYWx0aFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGN0eDogU2VydmljZUNvbnRleHQpIHt9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBoZWFsdGggb2YgYSBzZXJ2aWNlLlxuICAgKi9cbiAgYXN5bmMgaGVhbHRoQ2hlY2soc2VydmljZTogc3RyaW5nID0gJycpOiBQcm9taXNlPEhlYWx0aFN0YXR1cz4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmhlYWx0aFNlcnZpY2UsXG4gICAgICAnQ2hlY2snLFxuICAgICAgeyBzZXJ2aWNlIH0sXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICByZXR1cm4gcHJvdG9Ub0hlYWx0aFN0YXR1cyhyZXNwb25zZS5zdGF0dXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGhlYWx0aCBzdGF0dXMgY2hhbmdlcyB2aWEgc2VydmVyLXNpZGUgc3RyZWFtaW5nLlxuICAgKiBSZXR1cm5zIGEgSGVhbHRoV2F0Y2hlciB0aGF0IGVtaXRzICdzdGF0dXMnIGV2ZW50cyB3aXRoIEhlYWx0aFN0YXR1cyB2YWx1ZXMuXG4gICAqIENhbGwgc3RvcCgpIHRvIGNhbmNlbCB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZSAtIE9wdGlvbmFsIHNlcnZpY2UgbmFtZSB0byB3YXRjaFxuICAgKiBAcmV0dXJucyBIZWFsdGhXYXRjaGVyIC0gRXZlbnRFbWl0dGVyIHdpdGggc3RvcCgpIG1ldGhvZFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHdhdGNoZXIgPSBoZWFsdGhTZXJ2aWNlLndhdGNoKCk7XG4gICAqIHdhdGNoZXIub24oJ3N0YXR1cycsIChzdGF0dXM6IEhlYWx0aFN0YXR1cykgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdIZWFsdGggc3RhdHVzOicsIHN0YXR1cyk7XG4gICAqIH0pO1xuICAgKiB3YXRjaGVyLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICogICBjb25zb2xlLmVycm9yKCdXYXRjaCBlcnJvcjonLCBlcnIpO1xuICAgKiB9KTtcbiAgICogd2F0Y2hlci5vbignZW5kJywgKCkgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdXYXRjaCBzdHJlYW0gZW5kZWQnKTtcbiAgICogfSk7XG4gICAqIC8vIExhdGVyLCB0byBzdG9wIHdhdGNoaW5nOlxuICAgKiB3YXRjaGVyLnN0b3AoKTtcbiAgICogYGBgXG4gICAqL1xuICB3YXRjaChzZXJ2aWNlOiBzdHJpbmcgPSAnJyk6IEhlYWx0aFdhdGNoZXIge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCkgYXMgSGVhbHRoV2F0Y2hlcjtcblxuICAgIC8vIEdldCB0aGUgV2F0Y2ggbWV0aG9kIGZyb20gdGhlIGhlYWx0aCBzZXJ2aWNlXG4gICAgY29uc3Qgd2F0Y2hGbiA9ICh0aGlzLmN0eC5jbGllbnRzLmhlYWx0aFNlcnZpY2UgYXMgYW55KS5XYXRjaC5iaW5kKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5oZWFsdGhTZXJ2aWNlXG4gICAgKTtcblxuICAgIC8vIFN0YXJ0IHRoZSBzdHJlYW1pbmcgY2FsbCB3aXRoIG1ldGFkYXRhXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcbiAgICBjb25zdCBjYWxsID0gd2F0Y2hGbih7IHNlcnZpY2UgfSwgbWV0YWRhdGEpO1xuXG4gICAgLy8gSGFuZGxlIGluY29taW5nIGRhdGFcbiAgICBjYWxsLm9uKCdkYXRhJywgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHByb3RvVG9IZWFsdGhTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIGVtaXR0ZXIuZW1pdCgnc3RhdHVzJywgc3RhdHVzKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICBjYWxsLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBlbWl0dGVyLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBzdHJlYW0gZW5kXG4gICAgY2FsbC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgZW1pdHRlci5lbWl0KCdlbmQnKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBzdG9wIG1ldGhvZCB0byBjYW5jZWwgdGhlIHN0cmVhbVxuICAgIGVtaXR0ZXIuc3RvcCA9ICgpID0+IHtcbiAgICAgIGNhbGwuY2FuY2VsKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlbWl0dGVyO1xuICB9XG59XG4iXX0=