github.com/emate/nomad@v0.8.2-wo-binpacking/ui/app/utils/classes/poll-logger.js (about) 1 import EmberObject from '@ember/object'; 2 import { task, timeout } from 'ember-concurrency'; 3 import AbstractLogger from './abstract-logger'; 4 import { fetchFailure } from './log'; 5 6 export default EmberObject.extend(AbstractLogger, { 7 interval: 1000, 8 9 start() { 10 return this.get('poll') 11 .linked() 12 .perform(); 13 }, 14 15 stop() { 16 return this.get('poll').cancelAll(); 17 }, 18 19 poll: task(function*() { 20 const { interval, logFetch } = this.getProperties('interval', 'logFetch'); 21 while (true) { 22 const url = this.get('fullUrl'); 23 let response = yield logFetch(url).then(res => res, fetchFailure(url)); 24 25 if (!response) { 26 return; 27 } 28 29 let text = yield response.text(); 30 31 if (text) { 32 const lines = text.replace(/\}\{/g, '}\n{').split('\n'); 33 const frames = lines.map(line => JSON.parse(line)); 34 frames.forEach(frame => (frame.Data = window.atob(frame.Data))); 35 36 this.set('endOffset', frames[frames.length - 1].Offset); 37 this.get('write')(frames.mapBy('Data').join('')); 38 } 39 40 yield timeout(interval); 41 } 42 }), 43 });