Skip to content

Commit 8362faf

Browse files
committed
feat: update to get data from governify-states-exporter
1 parent 1c5c034 commit 8362faf

File tree

1 file changed

+58
-17
lines changed

1 file changed

+58
-17
lines changed

esc/falcon/index.js

+58-17
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const governify = require('governify-commons');
66
const logger = governify.getLogger().tag('index');
77
const diff = require('deep-diff');
88
const configuration = require("./config.json");
9+
const axios = require('axios');
910

1011
let config = configuration;
1112

@@ -71,17 +72,11 @@ async function hookData(metricQueries, agreement){
7172
}).on('end', function () {
7273
resolve();
7374
});
74-
}else if(metricQuery.collector.type === 'POST-GET-V1'){
75-
const requestMetric = await governify.infrastructure.getService(collector.infrastructurePath).request({
76-
url: collector.endpoint,
77-
method: 'POST',
78-
data: { config: collector.config, metric: urlParams }
79-
}).catch(err => {
80-
const errorString = 'Error in Collector response ' + err.response.status + ':' + err.response.data;
81-
logger.error(errorString)
82-
});
83-
const collectorResponse = requestMetric.data;
84-
const monthMetrics = await getComputationV2(collector.infrastructurePath, '/' + collectorResponse.computation.replace(/^\//, ''), 60000).catch(err => {
75+
}else if(metricQuery.collector.type === 'POST-GET-V1'){
76+
const endpoint = 'http://localhost:6200/api/v1/states?';
77+
let agreementId = agreement.id.replace(/ans\d*$/, "ans");
78+
const params = `download=false&stateType=metrics&agreementId=${agreementId}&startDate=${urlParams.window.initial}&endDate=${urlParams.window.end}`;
79+
const monthMetrics = await getMetrics(endpoint + params, 60000).catch(err => {
8580
const errorString = 'Error obtaining computation from computer: (' + err + ')';
8681
logger.error(errorString)
8782
});
@@ -100,6 +95,10 @@ async function hookData(metricQueries, agreement){
10095
}
10196
// aggregate metrics in order to return all
10297
metricState.id = metric
98+
metricState.period = {
99+
from: urlParams.window.initial,
100+
to: urlParams.window.end
101+
}
103102
compositeResponse.push(metricState);
104103
});
105104
resolve();
@@ -131,12 +130,6 @@ async function hookData(metricQueries, agreement){
131130
logger.debug('TimedScope already exists in array index: ', tsIndex);
132131
}
133132

134-
let totalValueEvidences = 0;
135-
for (let evIndex = 0; evIndex < metricValue.evidences.length; evIndex++) {
136-
totalValueEvidences += parseInt(metricValue.evidences[evIndex].value);
137-
}
138-
metricValue.value = (totalValueEvidences / metricValue.evidences.length).toString();
139-
140133
// If array metricValues has no values for the index yet, we initialize it
141134
if (metricValues[tsIndex] == null) {
142135
metricValues[tsIndex] = {};
@@ -189,6 +182,54 @@ function computerToRegistryParser (computerScope, mapping) {
189182
return mappedScope;
190183
}
191184

185+
function getMetrics(endpoint,ttl) {
186+
return new Promise((resolve, reject) => {
187+
try {
188+
if (ttl < 0) { reject('Retries time surpased TTL.'); return; }
189+
const realTimeout = 1000; // Minimum = firstTimeout
190+
const firstTimeout = 10000;
191+
setTimeout(() => {
192+
axios.get(endpoint).then(response => {
193+
let data = response.data;
194+
let result = {};
195+
for (index in data) {
196+
let elem = data[index];
197+
const service = elem.scope.service;
198+
let record = elem.records[0];
199+
let dataResult = {};
200+
if (service in result) {
201+
dataResult = result[service];
202+
dataResult["value"] = dataResult["value"] + record.value;
203+
let evidences = dataResult["evidences"];
204+
dataResult["evidences"] = evidences.concat(record.evidences);
205+
} else {
206+
dataResult["scope"] = elem.scope;
207+
dataResult["value"] = record.value;
208+
dataResult["evidences"] = record.evidences;
209+
}
210+
result[service] = dataResult;
211+
}
212+
let resultList = [];
213+
Object.keys(result).forEach(function(key, index) {
214+
resultList.push(result[key])
215+
});
216+
resolve(resultList);
217+
}).catch (err => {
218+
if (err?.response?.status === 400) {
219+
logger.error('Failed obtaining metrics from states-exporter: ' + err.response.data.message + '\nEndpoint: ' + endpoint);
220+
resolve([]);
221+
} else {
222+
logger.error('Error when obtaining metrics from states-exporter: ' + '\nEndpoint: ' + endpoint + '- ERROR: ', err);
223+
reject(err);
224+
}
225+
});
226+
}, firstTimeout);
227+
} catch (err) {
228+
reject(err);
229+
}
230+
});
231+
}
232+
192233
function getComputationV2 (infrastructurePath, computationURL, ttl) {
193234
return new Promise((resolve, reject) => {
194235
try {

0 commit comments

Comments
 (0)