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  }