github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/app/components/agent-monitor.js (about)

     1  import { inject as service } from '@ember/service';
     2  import Component from '@ember/component';
     3  import { computed } from '@ember/object';
     4  import { assert } from '@ember/debug';
     5  import { tagName } from '@ember-decorators/component';
     6  import classic from 'ember-classic-decorator';
     7  import Log from 'nomad-ui/utils/classes/log';
     8  
     9  const LEVELS = ['error', 'warn', 'info', 'debug', 'trace'];
    10  
    11  @classic
    12  @tagName('')
    13  export default class AgentMonitor extends Component {
    14    @service token;
    15  
    16    client = null;
    17    server = null;
    18    level = LEVELS[2];
    19    onLevelChange() {}
    20  
    21    levels = LEVELS;
    22    monitorUrl = '/v1/agent/monitor';
    23    isStreaming = true;
    24    logger = null;
    25  
    26    @computed('client.id', 'level', 'server.{id,region}')
    27    get monitorParams() {
    28      assert(
    29        'Provide a client OR a server to AgentMonitor, not both.',
    30        this.server != null || this.client != null
    31      );
    32  
    33      const type = this.server ? 'server_id' : 'client_id';
    34      const id = this.server ? this.server.id : this.client && this.client.id;
    35  
    36      const params = {
    37        log_level: this.level,
    38        [type]: id,
    39      };
    40  
    41      if (this.server) {
    42        params.region = this.server.region;
    43      }
    44  
    45      return params;
    46    }
    47  
    48    didInsertElement() {
    49      super.didInsertElement(...arguments);
    50      this.updateLogger();
    51    }
    52  
    53    updateLogger() {
    54      let currentTail = this.logger ? this.logger.tail : '';
    55      if (currentTail) {
    56        currentTail += `\n...changing log level to ${this.level}...\n\n`;
    57      }
    58      this.set(
    59        'logger',
    60        Log.create({
    61          logFetch: (url) => this.token.authorizedRequest(url),
    62          params: this.monitorParams,
    63          url: this.monitorUrl,
    64          tail: currentTail,
    65        })
    66      );
    67    }
    68  
    69    setLevel(level) {
    70      this.logger.stop();
    71      this.set('level', level);
    72      this.onLevelChange(level);
    73      this.updateLogger();
    74    }
    75  
    76    toggleStream() {
    77      this.set('streamMode', 'streaming');
    78      this.toggleProperty('isStreaming');
    79    }
    80  }