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