From 9e594885b2106db39945c387f4b2d746ae0123b9 Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Fri, 12 Jun 2020 23:50:56 -0700 Subject: [PATCH] Implement the log streaming portion of the AgentMonitor component --- ui/app/components/agent-monitor.js | 39 +++++++++++++++++++ ui/app/templates/components/agent-monitor.hbs | 6 +-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/ui/app/components/agent-monitor.js b/ui/app/components/agent-monitor.js index 69acceda7..ce0c20eb6 100644 --- a/ui/app/components/agent-monitor.js +++ b/ui/app/components/agent-monitor.js @@ -1,5 +1,9 @@ +import { inject as service } from '@ember/service'; import Component from '@ember/component'; +import { computed } from '@ember/object'; +import { assert } from '@ember/debug'; import { tagName } from '@ember-decorators/component'; +import { logger } from 'nomad-ui/utils/classes/log'; const LEVELS = ['error', 'warn', 'info', 'debug', 'trace'].map(level => ({ value: level, @@ -8,6 +12,8 @@ const LEVELS = ['error', 'warn', 'info', 'debug', 'trace'].map(level => ({ @tagName('') export default class AgentMonitor extends Component { + @service token; + levels = LEVELS; client = null; server = null; @@ -19,6 +25,9 @@ export default class AgentMonitor extends Component { // Private object interface (value, label) _level = null; + monitorUrl = '/v1/agent/monitor'; + isStreaming = true; + init() { super.init(...arguments); this.set('_level', LEVELS.findBy('value', 'info')); @@ -28,8 +37,38 @@ export default class AgentMonitor extends Component { this.set('_level', LEVELS.findBy('value', this.level)); } + @computed('level', 'client.id', 'server.id') + get monitorParams() { + assert( + 'Provide a client OR a server to AgentMonitor, not both.', + this.server != null || this.client != null + ); + + const type = this.server ? 'server_id' : 'client_id'; + const id = this.server ? this.server.id : this.client && this.client.id; + + return { + log_level: this.level, + [type]: id, + }; + } + + @logger('monitorUrl', 'monitorParams', function logFetch() { + return url => + this.token.authorizedRequest(url).then(response => { + return response; + }); + }) + logger; + setLevel(level) { + this.logger.stop(); this.set('_level', level); this.onLevelChange(level); } + + toggleStream() { + this.set('streamMode', 'streaming'); + this.toggleProperty('isStreaming'); + } } diff --git a/ui/app/templates/components/agent-monitor.hbs b/ui/app/templates/components/agent-monitor.hbs index e38a17c7e..b50429049 100644 --- a/ui/app/templates/components/agent-monitor.hbs +++ b/ui/app/templates/components/agent-monitor.hbs @@ -10,11 +10,11 @@ @onChange={{action setLevel}} as |level|> Level: {{level.label}} -
-
Monitor goes here
+