mirror of
				https://github.com/avatao-content/frontend-tutorial-framework
				synced 2025-11-04 13:52:55 +00:00 
			
		
		
		
	Implement ProcessLogService and hook it up to existing log features
This commit is contained in:
		@@ -27,6 +27,7 @@ import { TestmessengerComponent } from './testmessenger/testmessenger.component'
 | 
			
		||||
import { DeploymentNotificationService } from './services/deployment-notification.service';
 | 
			
		||||
import { SafePipe } from './pipes/safe.pipe';
 | 
			
		||||
import { ConsoleComponent } from './console/console.component';
 | 
			
		||||
import { ProcessLogService } from './services/processlog.service';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
@@ -57,7 +58,8 @@ import { ConsoleComponent } from './console/console.component';
 | 
			
		||||
    TerminadoService,
 | 
			
		||||
    FSMUpdateService,
 | 
			
		||||
    ProcessManagerService,
 | 
			
		||||
    DeploymentNotificationService
 | 
			
		||||
    DeploymentNotificationService,
 | 
			
		||||
    ProcessLogService
 | 
			
		||||
  ],
 | 
			
		||||
  bootstrap: [
 | 
			
		||||
    AppComponent
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,8 @@ export const config = {
 | 
			
		||||
  console: {
 | 
			
		||||
    route: 'console',
 | 
			
		||||
    defaultContent: '',
 | 
			
		||||
    rewriteContentWithNewLogs: 'stdout'
 | 
			
		||||
    rewriteContentWithProcessLogs: 'stdout',
 | 
			
		||||
    showLiveLogs: true
 | 
			
		||||
  },
 | 
			
		||||
  testmessenger: {
 | 
			
		||||
    route: 'testmessenger'
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ import { Component, OnInit } from '@angular/core';
 | 
			
		||||
import { WebSocketService } from '../services/websocket.service';
 | 
			
		||||
import { ConsoleCommand } from './console-command';
 | 
			
		||||
import { config } from '../config';
 | 
			
		||||
import { ProcessLogService } from '../services/processlog.service';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-console',
 | 
			
		||||
@@ -13,20 +14,22 @@ import { config } from '../config';
 | 
			
		||||
})
 | 
			
		||||
export class ConsoleComponent implements OnInit {
 | 
			
		||||
  console_content: string = config.console.defaultContent;
 | 
			
		||||
  rewriteContentWithNewLogs: string = config.console.rewriteContentWithNewLogs;
 | 
			
		||||
  rewriteContentWithProcessLogs: string = config.console.rewriteContentWithProcessLogs;
 | 
			
		||||
 | 
			
		||||
  command_handlers = {
 | 
			
		||||
    'write': this.writeHandler.bind(this),
 | 
			
		||||
    'read':  this.readHandler.bind(this)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  constructor(private webSocketService: WebSocketService) {}
 | 
			
		||||
  constructor(private webSocketService: WebSocketService,
 | 
			
		||||
              private processLogService: ProcessLogService) {}
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {
 | 
			
		||||
    this.webSocketService.connect();
 | 
			
		||||
    this.webSocketService.observeKey<ConsoleCommand>('console').subscribe((event) => {
 | 
			
		||||
      this.command_handlers[event.data.command](event.data);
 | 
			
		||||
    });
 | 
			
		||||
    this.webSocketService.observeKey<ConsoleCommand>('console').subscribe(
 | 
			
		||||
      (event) => this.command_handlers[event.data.command](event.data)
 | 
			
		||||
    );
 | 
			
		||||
    this.processLogService.newLog.subscribe((data) => this.newLogHandler(data));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  writeHandler(data: ConsoleCommand) {
 | 
			
		||||
@@ -38,8 +41,8 @@ export class ConsoleComponent implements OnInit {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  newLogHandler(logs: any) {
 | 
			
		||||
    if (this.rewriteContentWithNewLogs !== '') {
 | 
			
		||||
      const log = logs[this.rewriteContentWithNewLogs];
 | 
			
		||||
    if (this.rewriteContentWithProcessLogs !== '') {
 | 
			
		||||
      const log = logs[this.rewriteContentWithProcessLogs];
 | 
			
		||||
      if (log) {
 | 
			
		||||
        this.setContent(log);
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import { Subscription } from 'rxjs';
 | 
			
		||||
import { WebSocketService } from '../services/websocket.service';
 | 
			
		||||
import { LayoutCommand } from './layout-command';
 | 
			
		||||
import { config } from '../config';
 | 
			
		||||
import { ConsoleComponent } from '../console/console.component';
 | 
			
		||||
import { ProcessLogService } from '../services/processlog.service';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-dashboard',
 | 
			
		||||
@@ -21,7 +21,6 @@ export class DashboardComponent implements OnInit, OnDestroy {
 | 
			
		||||
  hide_messages: boolean = config.dashboard.hide_messages;
 | 
			
		||||
  iframeUrl: string = config.dashboard.iframeUrl;
 | 
			
		||||
  @ViewChild('webiframe') webiframe: ElementRef;
 | 
			
		||||
  @ViewChild(ConsoleComponent) childConsole: ConsoleComponent;
 | 
			
		||||
  selectedTerminalMenuItem = config.dashboard.terminalOrConsole;
 | 
			
		||||
 | 
			
		||||
  command_handlers = {'layout':          this.layoutHandler.bind(this),
 | 
			
		||||
@@ -31,7 +30,8 @@ export class DashboardComponent implements OnInit, OnDestroy {
 | 
			
		||||
 | 
			
		||||
  constructor(private deploymentNotificationService: DeploymentNotificationService,
 | 
			
		||||
              private webSocketService: WebSocketService,
 | 
			
		||||
              private changeDetectorRef: ChangeDetectorRef) {}
 | 
			
		||||
              private changeDetectorRef: ChangeDetectorRef,
 | 
			
		||||
              private processLogService: ProcessLogService) {}
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {
 | 
			
		||||
    this.webSocketService.connect();
 | 
			
		||||
@@ -103,9 +103,11 @@ export class DashboardComponent implements OnInit, OnDestroy {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setConsoleContent(logs: any) {
 | 
			
		||||
    this.childConsole.newLogHandler(logs);
 | 
			
		||||
    if (config.ide.showConsoleOnDeploy) {
 | 
			
		||||
      this.selectTerminalMenuItem('console');
 | 
			
		||||
    if (!config.console.showLiveLogs) {
 | 
			
		||||
      this.processLogService.newLog.next(logs);
 | 
			
		||||
      if (config.ide.showConsoleOnDeploy) {
 | 
			
		||||
        this.selectTerminalMenuItem('console');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								src/app/services/processlog-command.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/app/services/processlog-command.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
export class ProcessLogCommand {
 | 
			
		||||
  command: string;
 | 
			
		||||
  stdout: string;
 | 
			
		||||
  stderr: string;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								src/app/services/processlog.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/app/services/processlog.service.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
import { Injectable } from '@angular/core';
 | 
			
		||||
import { WebSocketService } from './websocket.service';
 | 
			
		||||
import { Subject } from 'rxjs/Subject';
 | 
			
		||||
import { ProcessLogCommand } from './processlog-command';
 | 
			
		||||
import { config } from '../config';
 | 
			
		||||
 | 
			
		||||
@Injectable()
 | 
			
		||||
export class ProcessLogService {
 | 
			
		||||
  newLog = new Subject<any>();
 | 
			
		||||
  showLiveLogs = config.console.showLiveLogs;
 | 
			
		||||
 | 
			
		||||
  command_handlers = {
 | 
			
		||||
    'new_log': this.newLogHandler.bind(this)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  constructor(private webSocketService: WebSocketService) {
 | 
			
		||||
    this.webSocketService.connect();
 | 
			
		||||
    this.webSocketService.observeKey<ProcessLogCommand>('processlog').subscribe(
 | 
			
		||||
      (event) => this.command_handlers[event.data.command](event.data)
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  newLogHandler(data: ProcessLogCommand) {
 | 
			
		||||
    if (this.showLiveLogs) {
 | 
			
		||||
      this.newLog.next({
 | 
			
		||||
        stdout: data.stdout,
 | 
			
		||||
        stderr: data.stderr
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user