github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/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 import classic from 'ember-classic-decorator'; 7 8 @classic 9 export default class PollLogger extends EmberObject.extend(AbstractLogger) { 10 interval = 1000; 11 12 start() { 13 return this.poll.linked().perform(); 14 } 15 16 stop() { 17 return this.poll.cancelAll(); 18 } 19 20 @task(function*() { 21 const { interval, logFetch } = this; 22 while (true) { 23 const url = this.fullUrl; 24 let response = yield logFetch(url).then(res => res, fetchFailure(url)); 25 26 if (!response) { 27 return; 28 } 29 30 let text = yield response.text(); 31 32 if (text) { 33 const { offset, message } = decode(text); 34 if (message) { 35 this.set('endOffset', offset); 36 this.write(message); 37 } 38 } 39 40 yield timeout(interval); 41 } 42 }) 43 poll; 44 }