@@ -55,11 +55,11 @@ const helpers = {
5555 ) ;
5656 }
5757
58- const modeTypes = [ 'kafka' , 'kubernetes' , 'microservices' ] ;
58+ const modeTypes = [ 'kafka' , 'kubernetes' , 'microservices' , 'docker' ] ;
5959
6060 if ( ! mode || ! modeTypes . includes ( mode ) ) {
6161 throw new Error (
62- 'You must input a mode into your chronos.config file. The mode may either be "kubernetes", "kafka", or "microservice "'
62+ 'You must input a mode into your chronos.config file. The mode may either be "kubernetes", "kafka", "microservice", or "docker "'
6363 ) ;
6464 }
6565
@@ -69,7 +69,7 @@ const helpers = {
6969 ) ;
7070 }
7171
72- if ( mode === 'kubernetes' ) {
72+ if ( mode === 'kubernetes' || mode === 'docker' ) {
7373 if (
7474 ! promService ||
7575 typeof promService !== 'string' ||
@@ -139,7 +139,7 @@ const helpers = {
139139 getMetricsURI : config => {
140140 if ( config . mode === 'kafka' ) {
141141 return config . jmxuri ;
142- } else if ( config . mode === 'kubernetes' ) {
142+ } else if ( config . mode === 'kubernetes' || config . mode === 'docker' ) {
143143 return `http://${ config . promService } :${ config . promPort } /api/v1/query?query=` ;
144144 } else {
145145 throw new Error ( 'Unrecognized mode' ) ;
@@ -153,14 +153,14 @@ const helpers = {
153153 */
154154 testMetricsQuery : async config => {
155155 let URI = helpers . getMetricsURI ( config ) ;
156- if ( config . mode === 'kubernetes' ) URI += 'up' ;
156+ URI += 'up' ;
157157 try {
158158 const response = await axios . get ( URI ) ;
159- if ( response . status !== 200 ) console . error ( 'Invalid response from metrics server:' , URI ) ;
159+ if ( response . status !== 200 ) console . error ( 'Invalid response from metrics server:' , URI , response . status , response . data ) ;
160160 else console . log ( 'Successful initial response from metrics server:' , URI ) ;
161161 return response ;
162162 } catch ( error ) {
163- console . log ( error ) ;
163+ console . error ( error ) ;
164164 throw new Error ( 'Unable to query metrics server: ' + URI ) ;
165165 }
166166 } ,
@@ -226,38 +226,30 @@ const helpers = {
226226 */
227227 promMetricsQuery : async config => {
228228 const URI = helpers . getMetricsURI ( config ) ;
229- const query = URI + encodeURIComponent ( '{__name__=~".+",container=""}' ) ;
230- try {
231- const response = await axios . get ( query ) ;
232- //console.log("response is: ", response);
233- return helpers . parseProm ( response . data . data . result ) ;
234- } catch ( error ) {
235- return console . error ( config . mode , '|' , 'Error fetching from URI:' , URI , '\n' , error ) ;
229+ let query ;
230+ if ( config . mode === 'docker' ) {
231+ query = URI + encodeURIComponent ( `{__name__=~".+",name="${ config . containerName } "}` ) ;
232+ } else {
233+ query = URI + encodeURIComponent ( '{__name__=~".+",container=""}' ) ;
236234 }
237- } ,
238-
239- promMetrics : async config => {
240- const URI = `http://${ config . promService } :${ config . promPort } /api/v1/query?query=` ;
241- const query = URI + encodeURIComponent ( '{__name__=~".+",container=""}' ) ;
242235 try {
243236 const response = await axios . get ( query ) ;
244- //console.log("response is: " , response);
245- return response . data . data . result ;
237+ //console.log('promMetricsQuery line 236:' , response.data.data.result );
238+ return helpers . parseProm ( config , response . data . data . result ) ;
246239 } catch ( error ) {
247- return console . error ( 'Error fetching from URI:' , URI , '\n' , error ) ;
240+ return console . error ( config . mode , '|' , 'Error fetching from URI:' , URI , '\n' , error ) ;
248241 }
249242 } ,
250243
251-
252244 /**
253245 * Parses response from Prometheus request and returns object with
254246 * @param {* } data
255247 * @returns bject with the gathered metric, value, time gathered, and category of event
256248 */
257- parseProm : data => {
249+ parseProm : ( config , data ) => {
258250 const res = [ ] ;
259251 const time = Date . now ( ) ;
260- const category = 'Event' ;
252+ const category = config . mode === 'docker' ? ` ${ config . containerName } ` : 'Event' ;
261253
262254 /**
263255 * Opportunity for improvement: Prometheus may query metrics that have the same job + instance + metric
@@ -272,10 +264,18 @@ const helpers = {
272264 const names = new Set ( ) ;
273265
274266 for ( const info of data ) {
275- if ( ! info . metric . job ) continue ;
276- // Set the base name using the job, IP, and metric __name__
277- let wholeName = info . metric . job + '/' + info . metric . instance + '/' + info . metric [ '__name__' ] ;
278- let name = wholeName . replace ( / .* \/ .* \/ / g, '' ) ;
267+ let wholeName ;
268+ let name ;
269+ if ( config . mode === 'docker' ) {
270+ if ( ! info . metric . name ) continue ;
271+ wholeName = info . metric [ '__name__' ] ;
272+ name = wholeName . replace ( / .* \/ .* \/ / g, '' ) ;
273+ } else {
274+ if ( ! info . metric . job ) continue ;
275+ // Set the base name using the job, IP, and metric __name__
276+ wholeName = info . metric . job + '/' + info . metric . instance + '/' + info . metric [ '__name__' ] ;
277+ name = wholeName . replace ( / .* \/ .* \/ / g, '' ) ;
278+ }
279279 if ( names . has ( name ) ) continue ;
280280 else {
281281 names . add ( name ) ;
@@ -303,6 +303,8 @@ const helpers = {
303303 return res ;
304304 } ,
305305
306+
307+
306308 createGrafanaDashboard : async (
307309 metric ,
308310 datasource ,
0 commit comments