github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/ui/app/utils/classes/poll-logger.js (about) 1 import EmberObject from '@ember/object'; 2 import { task, timeout } from 'ember-concurrency'; 3 import { decode } from 'nomad-ui/utils/stream-frames'; 4 import AbstractLogger from './abstract-logger'; 5 import { fetchFailure } from './log'; 6 7 export default EmberObject.extend(AbstractLogger, { 8 interval: 1000, 9 10 start() { 11 return this.poll.linked().perform(); 12 }, 13 14 stop() { 15 return this.poll.cancelAll(); 16 }, 17 18 poll: task(function*() { 19 const { interval, logFetch } = this; 20 while (true) { 21 const url = this.fullUrl; 22 let response = yield logFetch(url).then(res => res, fetchFailure(url)); 23 24 if (!response) { 25 return; 26 } 27 28 let text = yield response.text(); 29 30 if (text) { 31 const { offset, message } = decode(text); 32 if (message) { 33 this.set('endOffset', offset); 34 this.write(message); 35 } 36 } 37 38 yield timeout(interval); 39 } 40 }), 41 });