diff --git a/app/controllers/.gitkeep b/app/controllers/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/app/controllers/deployments/single.js b/app/controllers/deployments/single.js index cd0b8dc87d7042f302fb68d7167095f6da77a98e..d03195c2d6e2c555c55389e4408190dba99534be 100644 --- a/app/controllers/deployments/single.js +++ b/app/controllers/deployments/single.js @@ -9,6 +9,7 @@ const observables = [ export default Ember.Controller.extend({ graphingService: Ember.inject.service(), + changelogQueue: Ember.inject.service(), init() { this.debug('initializing controller'); @@ -31,4 +32,9 @@ export default Ember.Controller.extend({ this.debug('creating graph', filteredInstances); return this.get('graphingService').createGraph(filteredInstances); // TODO: update instead of complete recalculation? }), + actions: { + applyQueueUpdates() { + this.get('changelogQueue').apply(); + } + } }); \ No newline at end of file diff --git a/app/services/changelog-queue.js b/app/services/changelog-queue.js new file mode 100644 index 0000000000000000000000000000000000000000..61c39118e0912495a1be49f8b6ff91fae9ec4b8e --- /dev/null +++ b/app/services/changelog-queue.js @@ -0,0 +1,25 @@ +import Ember from 'ember'; + +export default Ember.Service.extend({ + changelogParser: Ember.inject.service(), + _private: { + queue: Ember.A() + }, + reset() { + this.get('_private.queue').clear(); + }, + append(changelogs){ + const queue = this.get('_private.queue'); + queue.pushObjects(changelogs); + }, + apply() { + this.get('changelogParser').parse(this.get('_private.queue')); + this.reset(); + }, + available: Ember.computed('empty', function() { + return !this.get('empty'); + }), + empty: Ember.computed('_private.queue.[]', function() { + return this.get('_private.queue.length') === 0; + }) +}); \ No newline at end of file diff --git a/app/services/changelog-stream.js b/app/services/changelog-stream.js index a1eee0b9d7e2f57a4c60d48d89c07abd3c2cb8f5..ec511b9c954f88a905908932867e2a80f7c9a417 100644 --- a/app/services/changelog-stream.js +++ b/app/services/changelog-stream.js @@ -1,8 +1,8 @@ import Ember from 'ember'; export default Ember.Service.extend({ + changelogQueue: Ember.inject.service(), shouldClose: false, - changelogParser: Ember.inject.service(), init() { this._super(...arguments); this.debug('session', this.get('systemId')); @@ -11,7 +11,7 @@ export default Ember.Service.extend({ this.set('shouldClose', false); this.debug('setting up websocket', systemId); - const socket = new WebSocket(`ws://localhost:8080/v1/changelogstream/${systemId}`); + const socket = new WebSocket(`ws://localhost:8080/v1/changelogstream/${systemId}`); // TODO: from environment! this.set('socket', socket); socket.onopen = this.get('events.onOpen').bind(this); @@ -33,6 +33,7 @@ export default Ember.Service.extend({ window.onbeforeunload = this.get('disconnect').bind(this); }, disconnect() { + this.get('changelogQueue').reset(); this.debug('disconnect'); this.set('shouldClose', true); this.get('socket').close(); @@ -49,12 +50,12 @@ export default Ember.Service.extend({ }, onMessage(message) { const changelogsJson = message.data; - this.debug('new changelog received', changelogsJson); + this.debug('new changelogs received', changelogsJson); try { - const changelog = JSON.parse(changelogsJson); - this.get('changelogParser').parse(changelog); + const changelogs = JSON.parse(changelogsJson); + this.get('changelogQueue').append(changelogs); } catch (e) { - console.error('could not parse changelog json', e, changelogsJson); + console.error('could not parse changelogs json', e, changelogsJson); } } } diff --git a/app/templates/deployments/single.hbs b/app/templates/deployments/single.hbs index 369bd73de964b292b1d53e533ab09b9f7aa742d6..326f84ae40f93ba6d7a6b05fed68a01fb3fbe418 100644 --- a/app/templates/deployments/single.hbs +++ b/app/templates/deployments/single.hbs @@ -1,4 +1,9 @@ {{#architecture-viewer graph=graphModel}} + + <button {{action 'applyQueueUpdates'}} type="button" class="btn {{if changelogQueue.empty 'btn-default' 'btn-warning'}}" disabled={{ changelogQueue.empty }} title="Updates are possible when the deployment changed and new information is ready to get visualized!"> + <i class="glyphicon glyphicon-refresh"></i> Apply Updates + </button> + {{!-- show entity details in sidebar if subroute (details) is used --}} {{outlet}} {{/architecture-viewer}} \ No newline at end of file