Enhancement: auto-refresh logs
This commit is contained in:
parent
27155cb7e3
commit
90bd5cda88
@ -1,14 +1,19 @@
|
|||||||
<pngx-page-header title="Logs" i18n-title>
|
<pngx-page-header title="Logs" i18n-title>
|
||||||
|
<div class="form-check form-switch" (click)="toggleAutoRefresh()">
|
||||||
|
<input class="form-check-input" type="checkbox" role="switch" id="autoRefreshSwitch" [attr.checked]="autoRefreshInterval">
|
||||||
|
<label class="form-check-label" for="autoRefreshSwitch" i18n>Auto refresh</label>
|
||||||
|
</div>
|
||||||
</pngx-page-header>
|
</pngx-page-header>
|
||||||
|
|
||||||
<ul ngbNav #nav="ngbNav" [(activeId)]="activeLog" (activeIdChange)="reloadLogs()" class="nav-tabs">
|
<ul ngbNav #nav="ngbNav" [(activeId)]="activeLog" (activeIdChange)="reloadLogs()" class="nav-tabs">
|
||||||
<li *ngFor="let logFile of logFiles" [ngbNavItem]="logFile">
|
<li *ngFor="let logFile of logFiles" [ngbNavItem]="logFile">
|
||||||
<a ngbNavLink>{{logFile}}.log</a>
|
<a ngbNavLink>
|
||||||
|
{{logFile}}.log
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<div *ngIf="isLoading && !logFiles.length" class="pb-2">
|
<div *ngIf="isLoading || !logFiles.length" class="ps-2 d-flex align-items-center">
|
||||||
<div class="spinner-border spinner-border-sm me-2" role="status"></div>
|
<div class="spinner-border spinner-border-sm me-2" role="status"></div>
|
||||||
<ng-container i18n>Loading...</ng-container>
|
<ng-container *ngIf="!logFiles.length" i18n>Loading...</ng-container>
|
||||||
</div>
|
</div>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
import { ComponentFixture, TestBed } from '@angular/core/testing'
|
import {
|
||||||
|
ComponentFixture,
|
||||||
|
TestBed,
|
||||||
|
fakeAsync,
|
||||||
|
tick,
|
||||||
|
} from '@angular/core/testing'
|
||||||
import { LogService } from 'src/app/services/rest/log.service'
|
import { LogService } from 'src/app/services/rest/log.service'
|
||||||
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
|
import { PageHeaderComponent } from '../../common/page-header/page-header.component'
|
||||||
import { LogsComponent } from './logs.component'
|
import { LogsComponent } from './logs.component'
|
||||||
@ -26,6 +31,7 @@ describe('LogsComponent', () => {
|
|||||||
let fixture: ComponentFixture<LogsComponent>
|
let fixture: ComponentFixture<LogsComponent>
|
||||||
let logService: LogService
|
let logService: LogService
|
||||||
let logSpy
|
let logSpy
|
||||||
|
let reloadSpy
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
@ -42,7 +48,9 @@ describe('LogsComponent', () => {
|
|||||||
})
|
})
|
||||||
fixture = TestBed.createComponent(LogsComponent)
|
fixture = TestBed.createComponent(LogsComponent)
|
||||||
component = fixture.componentInstance
|
component = fixture.componentInstance
|
||||||
|
reloadSpy = jest.spyOn(component, 'reloadLogs')
|
||||||
window.HTMLElement.prototype.scroll = function () {} // mock scroll
|
window.HTMLElement.prototype.scroll = function () {} // mock scroll
|
||||||
|
jest.useFakeTimers()
|
||||||
fixture.detectChanges()
|
fixture.detectChanges()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -68,4 +76,14 @@ describe('LogsComponent', () => {
|
|||||||
component.reloadLogs()
|
component.reloadLogs()
|
||||||
expect(component.logs).toHaveLength(0)
|
expect(component.logs).toHaveLength(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should auto refresh, allow toggle', () => {
|
||||||
|
jest.advanceTimersByTime(6000)
|
||||||
|
expect(reloadSpy).toHaveBeenCalledTimes(2)
|
||||||
|
|
||||||
|
component.toggleAutoRefresh()
|
||||||
|
expect(component.autoRefreshInterval).toBeNull()
|
||||||
|
jest.advanceTimersByTime(6000)
|
||||||
|
expect(reloadSpy).toHaveBeenCalledTimes(2)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -27,6 +27,8 @@ export class LogsComponent implements OnInit, AfterViewChecked, OnDestroy {
|
|||||||
|
|
||||||
public isLoading: boolean = false
|
public isLoading: boolean = false
|
||||||
|
|
||||||
|
public autoRefreshInterval: any
|
||||||
|
|
||||||
@ViewChild('logContainer') logContainer: ElementRef
|
@ViewChild('logContainer') logContainer: ElementRef
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
@ -41,6 +43,7 @@ export class LogsComponent implements OnInit, AfterViewChecked, OnDestroy {
|
|||||||
this.activeLog = this.logFiles[0]
|
this.activeLog = this.logFiles[0]
|
||||||
this.reloadLogs()
|
this.reloadLogs()
|
||||||
}
|
}
|
||||||
|
this.toggleAutoRefresh()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,4 +94,15 @@ export class LogsComponent implements OnInit, AfterViewChecked, OnDestroy {
|
|||||||
behavior: 'auto',
|
behavior: 'auto',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleAutoRefresh(): void {
|
||||||
|
if (this.autoRefreshInterval) {
|
||||||
|
clearInterval(this.autoRefreshInterval)
|
||||||
|
this.autoRefreshInterval = null
|
||||||
|
} else {
|
||||||
|
this.autoRefreshInterval = setInterval(() => {
|
||||||
|
this.reloadLogs()
|
||||||
|
}, 5000)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user