changeset 133:35be935626f7

jvm-gc stats can be added to multicharts Reviewed-by: almac Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-July/024199.html
author Andrew Azores <aazores@redhat.com>
date Thu, 20 Jul 2017 11:37:53 -0400
parents 349cb0c9bf64
children 3e5a357f275f
files src/app/components/jvm-info/jvm-gc/jvm-gc.controller.js src/app/components/jvm-info/jvm-gc/jvm-gc.controller.spec.js src/app/components/jvm-info/jvm-gc/jvm-gc.html src/app/components/jvm-info/jvm-gc/jvm-gc.service.js src/app/components/jvm-info/jvm-gc/jvm-gc.service.spec.js
diffstat 5 files changed, 64 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/app/components/jvm-info/jvm-gc/jvm-gc.controller.js	Thu Jul 20 11:37:29 2017 -0400
+++ b/src/app/components/jvm-info/jvm-gc/jvm-gc.controller.js	Thu Jul 20 11:37:53 2017 -0400
@@ -31,7 +31,7 @@
 
 class JvmGcController {
   constructor (jvmId, $scope, $interval, dateFilter, DATE_FORMAT,
-    metricToNumberFilter, jvmGcService) {
+    metricToNumberFilter, jvmGcService, sanitizeService) {
     'ngInject';
     this.jvmId = jvmId;
     this.scope = $scope;
@@ -40,6 +40,7 @@
     this.dateFormat = DATE_FORMAT;
     this.metricToNumberFilter = metricToNumberFilter;
     this.jvmGcService = jvmGcService;
+    this.scope.sanitize = sanitizeService.sanitize;
 
     this.scope.refreshRate = '1000';
     this.scope.dataAgeLimit = '30000';
@@ -218,6 +219,14 @@
     this.constructChartData();
   }
 
+  multichartFn (collector) {
+    return new Promise(resolve => {
+      this.jvmGcService.getJvmGcData(this.jvmId, 1, collector).then(resp => {
+        resolve(this.metricToNumberFilter(resp.data.response[0].wallTimeInMicros));
+      });
+    });
+  }
+
 }
 
 export default angular
--- a/src/app/components/jvm-info/jvm-gc/jvm-gc.controller.spec.js	Thu Jul 20 11:37:29 2017 -0400
+++ b/src/app/components/jvm-info/jvm-gc/jvm-gc.controller.spec.js	Thu Jul 20 11:37:53 2017 -0400
@@ -427,4 +427,31 @@
     });
   });
 
+  describe('multichartFn', () => {
+    it('should return a promise', () => {
+      let res = ctrl.multichartFn();
+      res.should.be.a.Promise();
+    });
+
+    it('should resolve jvm-gc stat', done => {
+      promise.then.should.be.calledOnce();
+      let res = ctrl.multichartFn();
+      res.then(v => {
+        v.should.equal(400);
+        done();
+      });
+      promise.then.should.be.calledTwice();
+      let prom = promise.then.secondCall.args[0];
+      prom({
+        data: {
+          response: [
+            {
+              wallTimeInMicros: { $numberLong: '400' }
+            }
+          ]
+        }
+      });
+    });
+  });
+
 });
--- a/src/app/components/jvm-info/jvm-gc/jvm-gc.html	Thu Jul 20 11:37:29 2017 -0400
+++ b/src/app/components/jvm-info/jvm-gc/jvm-gc.html	Thu Jul 20 11:37:53 2017 -0400
@@ -35,6 +35,7 @@
           </div>
           <div ng-repeat="collector in ctrl.collectors">
             <div class="card-pf-body text-center">
+              <mc-add class="pull-right" svc-name="{{ctrl.jvmId}}-{{sanitize(collector)}}-gc" get-fn="ctrl.multichartFn(collector)"></mc-add>
               <div pf-line-chart id="chart-{{collector}}" config="ctrl.chartConfigs[collector]"
                                                           chart-data="ctrl.chartData[collector]"
                                                           show-x-axis="true"
--- a/src/app/components/jvm-info/jvm-gc/jvm-gc.service.js	Thu Jul 20 11:37:29 2017 -0400
+++ b/src/app/components/jvm-info/jvm-gc/jvm-gc.service.js	Thu Jul 20 11:37:53 2017 -0400
@@ -35,14 +35,16 @@
     this.gatewayUrl = gatewayUrl;
   }
 
-  getJvmGcData (jvmId, limit = 1) {
-    return this.http.get(urlJoin(this.gatewayUrl, 'jvm-gc', '0.0.2'), {
-      params: {
-        l: limit,
-        s: '-timeStamp',
-        q: 'jvmId==' + jvmId
-      }
-    });
+  getJvmGcData (jvmId, limit = 1, collectorName) {
+    let params = {
+      l: limit,
+      s: '-timeStamp',
+      q: 'jvmId==' + jvmId
+    };
+    if (collectorName) {
+      params.q += ',collectorName==' + collectorName;
+    }
+    return this.http.get(urlJoin(this.gatewayUrl, 'jvm-gc', '0.0.2'), { params: params });
   }
 }
 
--- a/src/app/components/jvm-info/jvm-gc/jvm-gc.service.spec.js	Thu Jul 20 11:37:29 2017 -0400
+++ b/src/app/components/jvm-info/jvm-gc/jvm-gc.service.spec.js	Thu Jul 20 11:37:53 2017 -0400
@@ -54,7 +54,7 @@
     should.exist(svc);
   });
 
-  describe('getJvmGcdata(jvmId)', () => {
+  describe('getJvmGcdata(jvmId, limit, collectorName)', () => {
     it('should resolve mock data', done => {
       let expected = {
         metaspace: 100
@@ -84,6 +84,21 @@
       httpBackend.flush();
       scope.$apply();
     });
+
+    it('should allow specifying collectorName', done => {
+      let expected = {
+        metaspace: 100
+      };
+      httpBackend.when('GET', 'http://example.com:1234/jvm-gc/0.0.2?l=5&q=jvmId%3D%3Dfoo-jvmId,collectorName%3D%3DfooCollector&s=-timeStamp')
+        .respond(expected);
+      svc.getJvmGcData('foo-jvmId', 5, 'fooCollector').then(res => {
+        res.data.should.deepEqual(expected);
+        done();
+      });
+      httpBackend.expectGET('http://example.com:1234/jvm-gc/0.0.2?l=5&q=jvmId%3D%3Dfoo-jvmId,collectorName%3D%3DfooCollector&s=-timeStamp');
+      httpBackend.flush();
+      scope.$apply();
+    });
   });
 
 });