From b6a11c8b4db928a985fe2e47b536758d636fd05e Mon Sep 17 00:00:00 2001 From: Avan Thakkar Date: Thu, 17 Dec 2020 15:14:46 +0530 Subject: [PATCH] mgr/dashboard: Fix for copy2Clipboard failing to copy on the first time. Fixes: https://tracker.ceph.com/issues/48601 Signed-off-by: Avan Thakkar Fix for the copy2Clipboard button to work on the first click itself. --- .../app/ceph/cluster/logs/logs.component.html | 10 ++--- .../ceph/cluster/logs/logs.component.spec.ts | 37 ++++++++++++++++++- .../app/ceph/cluster/logs/logs.component.ts | 12 ++++-- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.html index b255854619b6b..ec56d3f25dcaa 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.html @@ -13,14 +13,13 @@ *ngIf="clog">
@@ -44,14 +43,13 @@ *ngIf="audit_log">
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.spec.ts index 46ae4e90060d1..69c6051d2d3d7 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.spec.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.spec.ts @@ -3,7 +3,10 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { NgbDatepickerModule, NgbNavModule, NgbTimepickerModule } from '@ng-bootstrap/ng-bootstrap'; +import { ToastrModule } from 'ngx-toastr'; +import { of } from 'rxjs'; +import { LogsService } from '~/app/shared/api/logs.service'; import { SharedModule } from '~/app/shared/shared.module'; import { configureTestBed } from '~/testing/unit-test-helper'; import { LogsComponent } from './logs.component'; @@ -11,6 +14,8 @@ import { LogsComponent } from './logs.component'; describe('LogsComponent', () => { let component: LogsComponent; let fixture: ComponentFixture; + let logsService: LogsService; + let logsServiceSpy: jasmine.Spy; configureTestBed({ imports: [ @@ -19,15 +24,18 @@ describe('LogsComponent', () => { SharedModule, FormsModule, NgbDatepickerModule, - NgbTimepickerModule + NgbTimepickerModule, + ToastrModule.forRoot() ], declarations: [LogsComponent] }); beforeEach(() => { + logsService = TestBed.inject(LogsService); + logsServiceSpy = spyOn(logsService, 'getLogs'); + logsServiceSpy.and.returnValue(of(null)); fixture = TestBed.createComponent(LogsComponent); component = fixture.componentInstance; - fixture.detectChanges(); }); it('should create', () => { @@ -133,4 +141,29 @@ describe('LogsComponent', () => { expect(component.clog[0].name).toBe('time'); }); }); + + describe('convert logs to text', () => { + it('convert cluster & audit logs to text', () => { + const logsPayload = { + clog: [ + { + name: 'priority', + stamp: '2019-02-21 09:39:49.572801', + message: 'Manager daemon localhost is now available', + priority: '[ERR]' + } + ], + audit_log: [ + { + stamp: '2020-12-22T11:18:13.896920+0000', + priority: '[INF]' + } + ] + }; + logsServiceSpy.and.returnValue(of(logsPayload)); + fixture.detectChanges(); + expect(component.clogText).toContain(logsPayload.clog[0].message); + expect(component.auditLogText).toContain(logsPayload.audit_log[0].priority); + }); + }); }); diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.ts index 4b10ffad920e3..04375b1ef7c96 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.ts @@ -16,7 +16,8 @@ export class LogsComponent implements OnInit, OnDestroy { clog: Array; audit_log: Array; icons = Icons; - logText: string; + clogText: string; + auditLogText: string; interval: number; priorities: Array<{ name: string; value: string }> = [ @@ -61,6 +62,8 @@ export class LogsComponent implements OnInit, OnDestroy { getInfo() { this.logsService.getLogs().subscribe((data: any) => { this.contentData = data; + this.clogText = this.logToText(this.contentData.clog); + this.auditLogText = this.logToText(this.contentData.audit_log); this.filterLogs(); }); } @@ -139,10 +142,10 @@ export class LogsComponent implements OnInit, OnDestroy { } logToText(log: object) { - this.logText = ''; + let logText = ''; for (const line of Object.keys(log)) { - this.logText = - this.logText + + logText = + logText + this.datePipe.transform(log[line].stamp, 'medium') + '\t' + log[line].priority + @@ -150,5 +153,6 @@ export class LogsComponent implements OnInit, OnDestroy { log[line].message + '\n'; } + return logText; } } -- 2.39.5