UNPKG

@grnsft/if-eco-ci-plugin

Version:

EcoCI plugin for Impact Framework.

97 lines 11.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EcoCiAPI = void 0; const axios_1 = __importDefault(require("axios")); const moment_timezone_1 = __importDefault(require("moment-timezone")); const utils_1 = require("@grnsft/if-core/utils"); const { APIRequestError } = utils_1.ERRORS; const EcoCiAPI = () => { const greenCodingAPI = axios_1.default.create({ baseURL: 'https://api.green-coding.io/v1/ci/', }); greenCodingAPI?.interceptors?.response?.use(response => { // In case of status 204, the API returns `statusText: No Content` and the `data: undefined` if (response.status === 204) { return []; } if (!response?.data?.success) { throw new Error(`Error fetching data from Green Coding API. ${response?.data?.data.statusText || response?.statusText}`); } return response.data.data; }, error => { const errorMessage = error?.response?.data?.err[0]?.msg; if (error.response) { throw new APIRequestError(`Error fetching data from Green Coding API. ${JSON.stringify(errorMessage)}`); } else if (error.request) { throw new APIRequestError(`No response received from Green Coding API. ${error.message}`); } else { throw new APIRequestError(`Request error: ${error.message}`); } }); /** * Gets data for all branches for a given time range. */ const getAllBranchesDataForTimeRange = async (params) => { const result = await greenCodingAPI.get('runs', { params: { repo: params.repo, sort_by: 'date', }, }); const responsesData = []; for (const branch of result) { const brachDateInMilliseconds = moment_timezone_1.default .tz(branch[4].toString(), 'UTC') .toDate() .getTime(); const startDateInMilliseonds = moment_timezone_1.default.utc(params['start_date']).valueOf(); const endDateInMilliseonds = moment_timezone_1.default.utc(params['end_date']).valueOf(); if (brachDateInMilliseconds >= startDateInMilliseonds && brachDateInMilliseconds <= endDateInMilliseonds) { const updatedParams = { ...params, branch: branch[1], }; const response = await getData(updatedParams); responsesData.push(...response); } } return responsesData || []; }; /** * Gets data for a branch for a given time range. */ const getData = async (params) => { const result = await greenCodingAPI.get('measurements', { params: { ...params, start_date: params.start_date?.toString().split('T')[0] || params.start_date, end_date: params.end_date?.toString().split('T')[0] || params.end_date, }, }); return result || []; }; /** * Gets energy and carbon of the specified repo workflow. */ const getRepoMetrics = async (params) => { let result = {}; if (params.branch.trim() === 'all') { result = await getAllBranchesDataForTimeRange(params); } else { result = await getData(params); } return result; }; return { getRepoMetrics, }; }; exports.EcoCiAPI = EcoCiAPI; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLHNFQUFxQztBQUNyQyxpREFBNkM7QUFJN0MsTUFBTSxFQUFDLGVBQWUsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUUxQixNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7SUFDM0IsTUFBTSxjQUFjLEdBQUcsZUFBSyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxPQUFPLEVBQUUsb0NBQW9DO0tBQzlDLENBQUMsQ0FBQztJQUVILGNBQWMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FDekMsUUFBUSxDQUFDLEVBQUU7UUFDVCw0RkFBNEY7UUFDNUYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOENBQ0UsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsRUFBRSxVQUMvQyxFQUFFLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzVCLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtRQUNOLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDeEQsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLGVBQWUsQ0FDdkIsOENBQThDLElBQUksQ0FBQyxTQUFTLENBQzFELFlBQVksQ0FDYixFQUFFLENBQ0osQ0FBQztRQUNKLENBQUM7YUFBTSxJ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UUFDakMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxjQUFjO0tBQ2YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQTlHVyxRQUFBLFFBQVEsWUE4R25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuXG5pbXBvcnQge0Vjb0NpUGFyYW1zfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3Qge0FQSVJlcXVlc3RFcnJvcn0gPSBFUlJPUlM7XG5cbmV4cG9ydCBjb25zdCBFY29DaUFQSSA9ICgpID0+IHtcbiAgY29uc3QgZ3JlZW5Db2RpbmdBUEkgPSBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkw6ICdodHRwczovL2FwaS5ncmVlbi1jb2RpbmcuaW8vdjEvY2kvJyxcbiAgfSk7XG5cbiAgZ3JlZW5Db2RpbmdBUEk/LmludGVyY2VwdG9ycz8ucmVzcG9uc2U/LnVzZShcbiAgICByZXNwb25zZSA9PiB7XG4gICAgICAvLyBJbiBjYXNlIG9mIHN0YXR1cyAyMDQsIHRoZSBBUEkgcmV0dXJucyBgc3RhdHVzVGV4dDogTm8gQ29udGVudGAgYW5kIHRoZSBgZGF0YTogdW5kZWZpbmVkYFxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZT8uZGF0YT8uc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVycm9yIGZldGNoaW5nIGRhdGEgZnJvbSBHcmVlbiBDb2RpbmcgQVBJLiAke1xuICAgICAgICAgICAgcmVzcG9uc2U/LmRhdGE/LmRhdGEuc3RhdHVzVGV4dCB8fCByZXNwb25zZT8uc3RhdHVzVGV4dFxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gICAgfSxcbiAgICBlcnJvciA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8ucmVzcG9uc2U/LmRhdGE/LmVyclswXT8ubXNnO1xuICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBBUElSZXF1ZXN0RXJyb3IoXG4gICAgICAgICAgYEVycm9yIGZldGNoaW5nIGRhdGEgZnJvbSBHcmVlbiBDb2RpbmcgQVBJLiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgKX1gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSVJlcXVlc3RFcnJvcihcbiAgICAgICAgICBgTm8gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBHcmVlbiBDb2RpbmcgQVBJLiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSVJlcXVlc3RFcnJvcihgUmVxdWVzdCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICAvKipcbiAgICogR2V0cyBkYXRhIGZvciBhbGwgYnJhbmNoZXMgZm9yIGEgZ2l2ZW4gdGltZSByYW5nZS5cbiAgICovXG4gIGNvbnN0IGdldEFsbEJyYW5jaGVzRGF0YUZvclRpbWVSYW5nZSA9IGFzeW5jIChwYXJhbXM6IEVjb0NpUGFyYW1zKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ3JlZW5Db2RpbmdBUEkuZ2V0PHN0cmluZywgYW55PigncnVucycsIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc29ydF9ieTogJ2RhdGUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlc0RhdGEgPSBbXTtcblxuICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHJlc3VsdCkge1xuICAgICAgY29uc3QgYnJhY2hEYXRlSW5NaWxsaXNlY29uZHMgPSBtb21lbnRcbiAgICAgICAgLnR6KGJyYW5jaFs0XS50b1N0cmluZygpLCAnVVRDJylcbiAgICAgICAgLnRvRGF0ZSgpXG4gICAgICAgIC5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBzdGFydERhdGVJbk1pbGxpc2VvbmRzID0gbW9tZW50LnV0YyhwYXJhbXNbJ3N0YXJ0X2RhdGUnXSkudmFsdWVPZigpO1xuICAgICAgY29uc3QgZW5kRGF0ZUluTWlsbGlzZW9uZHMgPSBtb21lbnQudXRjKHBhcmFtc1snZW5kX2RhdGUnXSkudmFsdWVPZigpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGJyYWNoRGF0ZUluTWlsbGlzZWNvbmRzID49IHN0YXJ0RGF0ZUluTWlsbGlzZW9uZHMgJiZcbiAgICAgICAgYnJhY2hEYXRlSW5NaWxsaXNlY29uZHMgPD0gZW5kRGF0ZUluTWlsbGlzZW9uZHNcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1cGRhdGVkUGFyYW1zID0ge1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICBicmFuY2g6IGJyYW5jaFsxXSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZXREYXRhKHVwZGF0ZWRQYXJhbXMpO1xuICAgICAgICByZXNwb25zZXNEYXRhLnB1c2goLi4ucmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZXNEYXRhIHx8IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIGRhdGEgZm9yIGEgYnJhbmNoIGZvciBhIGdpdmVuIHRpbWUgcmFuZ2UuXG4gICAqL1xuICBjb25zdCBnZXREYXRhID0gYXN5bmMgKHBhcmFtczogRWNvQ2lQYXJhbXMpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncmVlbkNvZGluZ0FQSS5nZXQ8c3RyaW5nLCBhbnk+KCdtZWFzdXJlbWVudHMnLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBzdGFydF9kYXRlOlxuICAgICAgICAgIHBhcmFtcy5zdGFydF9kYXRlPy50b1N0cmluZygpLnNwbGl0KCdUJylbMF0gfHwgcGFyYW1zLnN0YXJ0X2RhdGUsXG4gICAgICAgIGVuZF9kYXRlOiBwYXJhbXMuZW5kX2RhdGU/LnRvU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSB8fCBwYXJhbXMuZW5kX2RhdGUsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdCB8fCBbXTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0cyBlbmVyZ3kgYW5kIGNhcmJvbiBvZiB0aGUgc3BlY2lmaWVkIHJlcG8gd29ya2Zsb3cuXG4gICAqL1xuICBjb25zdCBnZXRSZXBvTWV0cmljcyA9IGFzeW5jIChwYXJhbXM6IEVjb0NpUGFyYW1zKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHBhcmFtcy5icmFuY2gudHJpbSgpID09PSAnYWxsJykge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgZ2V0QWxsQnJhbmNoZXNEYXRhRm9yVGltZVJhbmdlKHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGdldERhdGEocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZ2V0UmVwb01ldHJpY3MsXG4gIH07XG59O1xuIl19