github.com/manicqin/nomad@v0.9.5/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  });