UNPKG

yandex-cloud-monitoring-metrics

Version:
104 lines (103 loc) 4.28 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.YandexCloudMonitoringMetricsLogger = void 0; const nodejs_sdk_1 = require("@yandex-cloud/nodejs-sdk"); const axios_1 = require("axios"); const axios_retry_1 = require("axios-retry"); const MAX_RETRIES = 3; (0, axios_retry_1.default)(axios_1.default, { retries: MAX_RETRIES, }); class YandexCloudMonitoringMetricsLogger { constructor(serviceAccountId, accessKeyId, privateKey, folderId) { this.iamToken = null; this.serviceAccountId = serviceAccountId; this.folderId = folderId; this.session = new nodejs_sdk_1.Session({ serviceAccountJson: { serviceAccountId, accessKeyId, privateKey, }, }); } refreshToken() { return __awaiter(this, void 0, void 0, function* () { this.iamToken = null; const iamTokenServiceClient = this.session.client(nodejs_sdk_1.serviceClients.IamTokenServiceClient); const token = yield iamTokenServiceClient.createForServiceAccount({ $type: 'yandex.cloud.iam.v1.CreateIamTokenForServiceAccountRequest', serviceAccountId: this.serviceAccountId, }); this.iamToken = token.iamToken; }); } getFailedToRefreshTokenResponse() { return { writtenMetricsCount: 0, error: 'Failed to refresh IAM token', }; } writeMetrics(metrics) { var _a; return __awaiter(this, void 0, void 0, function* () { try { if (!this.iamToken) { yield this.refreshToken(); if (!this.iamToken) { return this.getFailedToRefreshTokenResponse(); } } const response = yield axios_1.default.post('https://monitoring.api.cloud.yandex.net/monitoring/v2/data/write', metrics, { headers: { Authorization: `Bearer ${this.iamToken}`, }, params: { service: 'custom', folderId: this.folderId, }, }); if (response.status === 200) { const { writtenMetricsCount } = response.data; return { writtenMetricsCount, }; } if (response.status === 401) { yield this.refreshToken(); if (!this.iamToken) { return this.getFailedToRefreshTokenResponse(); } return yield this.writeMetrics(metrics); } return { writtenMetricsCount: 0, error: response.statusText, }; } catch (error) { if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401) { yield this.refreshToken(); if (!this.iamToken) { return this.getFailedToRefreshTokenResponse(); } return yield this.writeMetrics(metrics); } return { writtenMetricsCount: 0, error: error.message, }; } }); } } exports.YandexCloudMonitoringMetricsLogger = YandexCloudMonitoringMetricsLogger;