Poll webservice url for 200 OK on frontend load

This commit is contained in:
Kristóf Tóth 2019-08-30 15:59:49 +02:00
parent 4e60bfc8df
commit 62e0a99478
2 changed files with 18 additions and 16 deletions

View File

@ -7,7 +7,7 @@
<app-messages (newMessageEvent)="scrollMessagesToBottom()"></app-messages>
</div>
<div class="tfw-web tao-grid-top-left"
[ngClass]="{'deploy-blur': deploying || polling}">
[ngClass]="{'deploy-blur': deploying || (polling | async)}">
<div *ngIf="iframeUrl | async" class="iframe-container">
<div *ngIf="showUrlBar | async" class="urlbar-container">
<button class="refresh btn btn-sm rounded-circle" (click)="reloadIframe()">&#8635;</button>

View File

@ -1,6 +1,6 @@
import { Component, OnDestroy, OnInit, ChangeDetectorRef, ElementRef, ViewChild } from '@angular/core';
import { DeploymentNotificationService } from '../services/deployment-notification.service';
import { Subscription } from 'rxjs';
import { Subscription, BehaviorSubject } from 'rxjs';
import { WebSocketService } from '../services/websocket.service';
import { WebSocketMessage } from '../message-types/websocket-message';
import { DashboardConfigService } from '../services/config.service';
@ -14,7 +14,7 @@ import { delay, retryWhen, tap } from 'rxjs/operators';
})
export class DashboardComponent implements OnInit, OnDestroy {
deploying = false;
polling = false;
polling = new BehaviorSubject<boolean>(false);
deploymentNotificationSubscription: Subscription;
@ViewChild('webiframe', {static: false}) webiframe: ElementRef;
@ViewChild('tfwmessages', {static: false}) messages: ElementRef;
@ -42,12 +42,18 @@ export class DashboardComponent implements OnInit, OnDestroy {
ngOnInit() {
this.webSocketService.connect();
this.configService.init();
this.hideIframeUntilResponseOk();
this.subscribeResizeOnLayoutChange();
this.initCommandHandling();
this.initDeploymentNotifications();
this.sendReady();
}
hideIframeUntilResponseOk() {
// TODO: hide iframe and show it after this whole deal...
this.reloadIframeWhenResponseOk();
}
subscribeResizeOnLayoutChange() {
this.configService.layout.subscribe(() => this.emitResizeEvent());
}
@ -64,10 +70,7 @@ export class DashboardComponent implements OnInit, OnDestroy {
(deploying) => {
this.deploying = deploying;
if (!deploying && this.configService.reloadIframeOnDeploy.value) {
if (this.polling) {
this.iframeReloadSubscription.unsubscribe();
}
this.pollingServerForIframeReload();
this.reloadIframeWhenResponseOk();
}
});
}
@ -142,8 +145,11 @@ export class DashboardComponent implements OnInit, OnDestroy {
this.webiframe.nativeElement.contentWindow.frames.location.href = this.urlbar.nativeElement.value;
}
pollingServerForIframeReload() {
this.polling = true;
reloadIframeWhenResponseOk() {
if (this.polling.value) {
this.iframeReloadSubscription.unsubscribe();
}
this.polling.next(true);
this.iframeReloadSubscription = this.http.get(this.actualIframeUrl, {observe: 'response'}).pipe(
retryWhen(errors =>
errors.pipe(
@ -151,15 +157,11 @@ export class DashboardComponent implements OnInit, OnDestroy {
response => {
if (response.status === 200) {
this.iframeReloadSubscription.unsubscribe();
this.polling = false;
this.polling.next(false);
this.reloadIframe();
}
}
),
}}),
delay(1000)
)
)
).subscribe();
))).subscribe();
}
ngOnDestroy() {