github.com/hernad/nomad@v1.6.112/ui/app/components/agent-monitor.js (about)

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