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 }