github.com/blixtra/nomad@v0.7.2-0.20171221000451-da9a1d7bb050/ui/app/utils/classes/poll-logger.js (about)

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