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 }