github.com/hernad/nomad@v1.6.112/ui/app/utils/classes/poll-logger.js (about) 1 /** 2 * Copyright (c) HashiCorp, Inc. 3 * SPDX-License-Identifier: MPL-2.0 4 */ 5 6 import EmberObject from '@ember/object'; 7 import { task, timeout } from 'ember-concurrency'; 8 import { decode } from 'nomad-ui/utils/stream-frames'; 9 import AbstractLogger from './abstract-logger'; 10 import { fetchFailure } from './log'; 11 import classic from 'ember-classic-decorator'; 12 13 @classic 14 export default class PollLogger extends EmberObject.extend(AbstractLogger) { 15 interval = 1000; 16 17 start() { 18 return this.poll.linked().perform(); 19 } 20 21 stop() { 22 return this.poll.cancelAll(); 23 } 24 25 @task(function* () { 26 const { interval, logFetch } = this; 27 while (true) { 28 const url = this.fullUrl; 29 let response = yield logFetch(url).then((res) => res, fetchFailure(url)); 30 31 if (!response) { 32 return; 33 } 34 35 let text = yield response.text(); 36 37 if (text) { 38 const { offset, message } = decode(text); 39 if (message) { 40 this.set('endOffset', offset); 41 this.write(message); 42 } 43 } 44 45 yield timeout(interval); 46 } 47 }) 48 poll; 49 }