Mercurial > hg > thermostat-ng > web-client
changeset 242:2d2b8cfc8091
Query for denser sample sets when updating jvm-io data
Reviewed-by: jkang
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-October/025283.html
author | Andrew Azores <aazores@redhat.com> |
---|---|
date | Wed, 11 Oct 2017 13:55:03 -0400 |
parents | 522b92fe4541 |
children | e73fafd4a1a6 |
files | mock-api/endpoints/jvm-io.endpoint.js src/app/components/jvm-info/jvm-io/jvm-io.controller.js src/app/components/jvm-info/jvm-io/jvm-io.controller.spec.js src/app/components/jvm-info/jvm-io/jvm-io.service.js src/app/components/jvm-info/jvm-io/jvm-io.service.spec.js |
diffstat | 5 files changed, 50 insertions(+), 70 deletions(-) [+] |
line wrap: on
line diff
--- a/mock-api/endpoints/jvm-io.endpoint.js Tue Oct 10 16:11:57 2017 -0400 +++ b/mock-api/endpoints/jvm-io.endpoint.js Wed Oct 11 13:55:03 2017 -0400 @@ -5,21 +5,18 @@ server.app.get('/jvm-io/0.0.1/jvms/:jvmId', function (req, res) { server.logRequest('jvm-io', req); + var jvmId = req.params.jvmId; var limit = req.query.limit; - var jvmId = req.params.jvmId; + var query = req.query.query; - var count; - if (limit == 0) { - count = 60; - } else if (limit == 1) { - count = 0; - } else { - count = 0; - } + var since = query.split('timeStamp>=')[1]; + var now = Date.now(); + var elapsed = now - since; + var count = _.floor(elapsed / 2000); var response = []; for (var i = count; i >= 0; i--) { - let date = Date.now() - (i * 10000); + let date = now - (i * 2000); let data = { agentId: 'foo-agentId', jvmId: jvmId, @@ -31,7 +28,6 @@ }; response.push(data); } - console.log(response); res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify(
--- a/src/app/components/jvm-info/jvm-io/jvm-io.controller.js Tue Oct 10 16:11:57 2017 -0400 +++ b/src/app/components/jvm-info/jvm-io/jvm-io.controller.js Wed Oct 11 13:55:03 2017 -0400 @@ -43,11 +43,12 @@ this._refreshRate = 10000; this._dataAgeLimit = 600000; + this._lastUpdate = this._getCurrentTimestamp(); + this._makeChartConfig(); } $onInit() { - this._loadHistoricalData(); this._start(); } @@ -150,11 +151,13 @@ _start () { this._stop(); + this._loadHistoricalData(); this._refresh = this._interval(() => this._update(), this._refreshRate); } _stop () { if (angular.isDefined(this._refresh)) { + this._clearData(); this._interval.cancel(this._refresh); delete this._refresh; } @@ -166,21 +169,31 @@ } _trimData () { - let now = Date.now(); + let now = this._getCurrentTimestamp(); let limit = now - this._dataAgeLimit; - while (this.config.data.rows.length > 1 && this.config.data.rows[1][0] < limit) { - this.config.data.rows.splice(1, 1); + let spliceCount = 1; + for (; spliceCount < this.config.data.rows.length; spliceCount++) { + let sample = this.config.data.rows[spliceCount]; + let sampleAge = sample[0]; + if (sampleAge >= limit) { + break; + } } + this.config.data.rows.splice(1, spliceCount - 1); } _loadHistoricalData () { - this._svc.getHistoricalData(this.jvmId, Date.now() - this._dataAgeLimit).then(updates => - updates.forEach(update => this._processUpdateRow(update))); + this._svc.getJvmIoData(this.jvmId, this._getCurrentTimestamp() - this._dataAgeLimit).then(updates => { + this._clearData(); + this._lastUpdate = this._getCurrentTimestamp(); + updates.forEach(update => this._processUpdateRow(update)); + }); } _update () { - this._svc.getJvmIoData(this.jvmId).then(update => { - this._processUpdateRow(update); + this._svc.getJvmIoData(this.jvmId, this._lastUpdate).then(updates => { + this._lastUpdate = this._getCurrentTimestamp(); + updates.forEach(update => this._processUpdateRow(update)); this._trimData(); }); } @@ -194,6 +207,10 @@ this._metricToNumber(update.writeSyscalls), ]); } + + _getCurrentTimestamp () { + return Date.now(); + } } export default angular
--- a/src/app/components/jvm-info/jvm-io/jvm-io.controller.spec.js Tue Oct 10 16:11:57 2017 -0400 +++ b/src/app/components/jvm-info/jvm-io/jvm-io.controller.spec.js Wed Oct 11 13:55:03 2017 -0400 @@ -40,9 +40,6 @@ getJvmIoData: sinon.stub().returns({ then: svcPromise }), - getHistoricalData: sinon.stub().returns({ - then: svcPromise - }), promise: svcPromise }; interval = sinon.stub().returns('intervalMock'); @@ -116,7 +113,7 @@ }); it('should load historical data', () => { - svc.getHistoricalData.should.be.calledOnce(); + svc.getJvmIoData.should.be.calledOnce(); }); it('should start periodic live updates', () => { @@ -218,9 +215,9 @@ interval.should.be.calledWith(sinon.match.func, 10000); let func = interval.args[0][0]; - svc.getJvmIoData.should.not.be.called(); + svc.getJvmIoData.should.be.calledOnce(); func(); - svc.getJvmIoData.should.be.calledOnce(); + svc.getJvmIoData.should.be.calledTwice(); }); }); @@ -271,13 +268,15 @@ svc.promise.should.be.calledWith(sinon.match.func); let stamp = Date.now(); svc.promise.args[0][0]( - { - timeStamp: { $numberLong: stamp.toString() }, - charactersRead: { $numberLong: '1000000' }, - charactersWritten: { $numberLong: '500000' }, - readSyscalls: { $numberLong: '100' }, - writeSyscalls: { $numberLong: '50' } - } + [ + { + timeStamp: { $numberLong: stamp.toString() }, + charactersRead: { $numberLong: '1000000' }, + charactersWritten: { $numberLong: '500000' }, + readSyscalls: { $numberLong: '100' }, + writeSyscalls: { $numberLong: '50' } + } + ] ); ctrl.config.data.rows.should.deepEqual([ ['date', 'characters read', 'characters written', 'read sys calls', 'write sys calls'],
--- a/src/app/components/jvm-info/jvm-io/jvm-io.service.js Tue Oct 10 16:11:57 2017 -0400 +++ b/src/app/components/jvm-info/jvm-io/jvm-io.service.js Wed Oct 11 13:55:03 2017 -0400 @@ -35,24 +35,15 @@ this._gatewayUrl = gatewayUrl; } - getHistoricalData (jvmId, since) { + getJvmIoData (jvmId, since) { let params = { - sort: '-timeStamp', + sort: '+timeStamp', limit: 0, query: `timeStamp>=${since}` }; return this._http.get(urlJoin(this._gatewayUrl, 'jvm-io', '0.0.1', 'jvms', jvmId), { params: params }) .then(res => res.data.response); } - - getJvmIoData (jvmId) { - let params = { - sort: '-timeStamp', - limit: 1 - }; - return this._http.get(urlJoin(this._gatewayUrl, 'jvm-io', '0.0.1', 'jvms', jvmId), { params: params }) - .then(res => res.data.response[0]); - } } export default angular
--- a/src/app/components/jvm-info/jvm-io/jvm-io.service.spec.js Tue Oct 10 16:11:57 2017 -0400 +++ b/src/app/components/jvm-info/jvm-io/jvm-io.service.spec.js Wed Oct 11 13:55:03 2017 -0400 @@ -54,30 +54,7 @@ should.exist(svc); }); - describe('getJvmIodata (jvmId)', () => { - it('should resolve mock data', done => { - let expected = { - response: [{ - timeStamp: { $numberLong: Date.now().toString() }, - charactersRead: { $numberLong: '100000' }, - charactersWritten: { $numberLong: '50000' }, - readSysCalls: { $numberLong: '100' }, - writeSysCalls: { $numberLong: '50' } - }] - }; - httpBackend.when('GET', 'http://example.com:1234/jvm-io/0.0.1/jvms/foo-jvmId?limit=1&sort=-timeStamp') - .respond(expected); - svc.getJvmIoData('foo-jvmId').then(res => { - res.should.deepEqual(expected.response[0]); - done(); - }); - httpBackend.expectGET('http://example.com:1234/jvm-io/0.0.1/jvms/foo-jvmId?limit=1&sort=-timeStamp'); - httpBackend.flush(); - scope.$apply(); - }); - }); - - describe('getHistoricalData (jvmId, since)', () => { + describe('getJvmIoData (jvmId, since)', () => { it('should resolve mock data', done => { let expected = { response: [ @@ -97,13 +74,13 @@ }, ] }; - httpBackend.when('GET', 'http://example.com:1234/jvm-io/0.0.1/jvms/foo-jvmId?limit=0&query=timeStamp%3E%3D150000&sort=-timeStamp') + httpBackend.when('GET', 'http://example.com:1234/jvm-io/0.0.1/jvms/foo-jvmId?limit=0&query=timeStamp%3E%3D150000&sort=%2BtimeStamp') .respond(expected); - svc.getHistoricalData('foo-jvmId', 150000).then(res => { + svc.getJvmIoData('foo-jvmId', 150000).then(res => { res.should.deepEqual(expected.response); done(); }); - httpBackend.expectGET('http://example.com:1234/jvm-io/0.0.1/jvms/foo-jvmId?limit=0&query=timeStamp%3E%3D150000&sort=-timeStamp'); + httpBackend.expectGET('http://example.com:1234/jvm-io/0.0.1/jvms/foo-jvmId?limit=0&query=timeStamp%3E%3D150000&sort=%2BtimeStamp'); httpBackend.flush(); scope.$apply(); });