@@ -6,6 +6,7 @@ const governify = require('governify-commons');
6
6
const logger = governify . getLogger ( ) . tag ( 'index' ) ;
7
7
const diff = require ( 'deep-diff' ) ;
8
8
const configuration = require ( "./config.json" ) ;
9
+ const axios = require ( 'axios' ) ;
9
10
10
11
let config = configuration ;
11
12
@@ -71,17 +72,11 @@ async function hookData(metricQueries, agreement){
71
72
} ) . on ( 'end' , function ( ) {
72
73
resolve ( ) ;
73
74
} ) ;
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 ( / a n s \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 => {
85
80
const errorString = 'Error obtaining computation from computer: (' + err + ')' ;
86
81
logger . error ( errorString )
87
82
} ) ;
@@ -100,6 +95,10 @@ async function hookData(metricQueries, agreement){
100
95
}
101
96
// aggregate metrics in order to return all
102
97
metricState . id = metric
98
+ metricState . period = {
99
+ from : urlParams . window . initial ,
100
+ to : urlParams . window . end
101
+ }
103
102
compositeResponse . push ( metricState ) ;
104
103
} ) ;
105
104
resolve ( ) ;
@@ -131,12 +130,6 @@ async function hookData(metricQueries, agreement){
131
130
logger . debug ( 'TimedScope already exists in array index: ' , tsIndex ) ;
132
131
}
133
132
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
-
140
133
// If array metricValues has no values for the index yet, we initialize it
141
134
if ( metricValues [ tsIndex ] == null ) {
142
135
metricValues [ tsIndex ] = { } ;
@@ -189,6 +182,54 @@ function computerToRegistryParser (computerScope, mapping) {
189
182
return mappedScope ;
190
183
}
191
184
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
+
192
233
function getComputationV2 ( infrastructurePath , computationURL , ttl ) {
193
234
return new Promise ( ( resolve , reject ) => {
194
235
try {
0 commit comments