github.com/emate/nomad@v0.8.2-wo-binpacking/ui/app/utils/classes/poll-logger.js (about)

     1  import EmberObject from '@ember/object';
     2  import { task, timeout } from 'ember-concurrency';
     3  import AbstractLogger from './abstract-logger';
     4  import { fetchFailure } from './log';
     5  
     6  export default EmberObject.extend(AbstractLogger, {
     7    interval: 1000,
     8  
     9    start() {
    10      return this.get('poll')
    11        .linked()
    12        .perform();
    13    },
    14  
    15    stop() {
    16      return this.get('poll').cancelAll();
    17    },
    18  
    19    poll: task(function*() {
    20      const { interval, logFetch } = this.getProperties('interval', 'logFetch');
    21      while (true) {
    22        const url = this.get('fullUrl');
    23        let response = yield logFetch(url).then(res => res, fetchFailure(url));
    24  
    25        if (!response) {
    26          return;
    27        }
    28  
    29        let text = yield response.text();
    30  
    31        if (text) {
    32          const lines = text.replace(/\}\{/g, '}\n{').split('\n');
    33          const frames = lines.map(line => JSON.parse(line));
    34          frames.forEach(frame => (frame.Data = window.atob(frame.Data)));
    35  
    36          this.set('endOffset', frames[frames.length - 1].Offset);
    37          this.get('write')(frames.mapBy('Data').join(''));
    38        }
    39  
    40        yield timeout(interval);
    41      }
    42    }),
    43  });