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  }