package agent
import (
+ "fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/iotbzh/xds-agent/lib/apiv1"
- common "github.com/iotbzh/xds-common/golib"
)
// getInfo : return various information about server
for _, svr := range s.xdsServers {
res := apiv1.VersionData{}
if err := svr.GetVersion(&res); err != nil {
- common.APIError(c, "Cannot retrieve version of XDS server ID %s : %v", svr.ID, err.Error())
- return
+ errMsg := fmt.Sprintf("Cannot retrieve version of XDS server ID %s : %v", svr.ID, err.Error())
+ s.Log.Warning(errMsg)
+ res.ID = svr.ID
+ res.Version = errMsg
}
svrVer = append(svrVer, res)
}
return Observable.of(curSvr);
}
- private _updateCurServer() {
+ private _updateCurServer(): IXDServerCfg {
this._curServer = this._getCurServer();
this.curServer$.next(this._curServer);
+ return this._curServer;
}
private _getCurServer(url?: string): IXDServerCfg {
<div class="form-group row">
<label class="col-sm-3 col-form-label">XDS Server URL</label>
<div class="col-sm-8">
- <input type="url" class="form-control" [ngClass]="{ 'form-control-danger': !server.connected }" id="inputServerUrl" [(ngModel)]="xdsServerUrl" name="serverUrl" (ngModelChange)="configFormChanged=true" [disabled]="connecting">
+ <input type="url" class="form-control" [ngClass]="{ 'form-control-danger': !server?.connected }" id="inputServerUrl" [(ngModel)]="xdsServerUrl" name="serverUrl" (ngModelChange)="configFormChanged=true" [disabled]="applying">
</div>
<div class="col-sm-1">
- <span *ngIf="!connecting" class="fa fa-fw fa-exchange fa-size-x2 vcenter" [style.color]="server.connected?'green':'red'"></span>
- <span *ngIf="connecting" class="fa fa-gear faa-spin animated fa-size-x2 vcenter"></span>
+ <span class="fa fa-fw fa-exchange faa-burst fa-size-x2 vcenter" [ngClass]="{'animated': applying}" [style.color]="(server?.connected && !animated)?'green':'red'" ></span>
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label">XDS Server connection retry</label>
- <div class="col-sm-8">
+ <div class="col-sm-8" *ngIf="server">
<input type="number" class="form-control" id="inputServerConnRetry" [(ngModel)]="server.connRetry" name="serverRetry" (ngModelChange)="configFormChanged=true">
</div>
</div>
-
- <div class="form-group row">
- <div class="offset-sm-3 col-sm-9">
- <button type="submit" class="btn btn-primary" [disabled]="
- connecting || (server.connected && !configFormChanged)">Apply</button>
- </div>
- </div>
</form>
</nb-card-body>
+ <nb-card-footer>
+ <div class="col-12">
+ <div class="offset-sm-5 col-sm-2">
+ <button class="btn btn-primary" (click)="onSubmit()" [disabled]="
+ applying || (server?.connected && !configFormChanged)">{{ applying ?"Applying... ":"Apply" }}
+ <span *ngIf="applying" class="fa fa-gear faa-spin animated fa-size-x2"></span>
+ </button>
+ </div>
+ </div>
+ </nb-card-footer>
</nb-card>
</div>
</div>
}
.fa-size-x2 {
- font-size: 20px;
+ font-size: 22px;
}
.vcenter {
styleUrls: ['./config-xds.component.scss'],
templateUrl: './config-xds.component.html',
})
-export class ConfigXdsComponent implements OnInit {
+export class ConfigXdsComponent {
// TODO: cleanup agentStatus$: Observable<IAgentStatus>;
- connecting = false;
+ applying = false;
xdsServerUrl = '';
server: IXDServerCfg;
private XdsConfigSvr: XDSConfigService,
private alert: AlertService,
) {
- }
-
- ngOnInit() {
// FIXME support multiple servers
-
- this.server = this.XdsConfigSvr.getCurServer();
- this.xdsServerUrl = this.server.url;
-
this.XdsConfigSvr.onCurServer().subscribe(svr => {
this.xdsServerUrl = svr.url;
- this.server = svr;
+ this.server = Object.assign({}, svr);
});
}
return;
}
this.configFormChanged = false;
- this.connecting = true;
+ this.applying = true;
this.server.url = this.xdsServerUrl;
this.XdsConfigSvr.setCurServer(this.server)
.subscribe(cfg => {
- this.connecting = false;
- },
+ this.alert.info('XDS Server successfully connected (' + cfg.url + ')');
+ this.server = Object.assign({}, cfg);
+ this.applying = false;
+ },
err => {
- this.connecting = false;
+ this.applying = false;
this.alert.error(err);
});
}
"use-pipe-transform-interface": true,
"component-class-suffix": true,
"directive-class-suffix": true,
- "no-access-missing-member": true,
+ "no-access-missing-member": false,
"templates-use-public": true,
"invoke-injectable": true
}