12 } from '@angular/core';
14 import * as _ from 'lodash';
15 import { Observable, Subscription } from 'rxjs';
17 import { CephServiceService } from '../../../../shared/api/ceph-service.service';
18 import { HostService } from '../../../../shared/api/host.service';
19 import { OrchestratorService } from '../../../../shared/api/orchestrator.service';
20 import { TableComponent } from '../../../../shared/datatable/table/table.component';
21 import { CellTemplate } from '../../../../shared/enum/cell-template.enum';
22 import { CdTableColumn } from '../../../../shared/models/cd-table-column';
23 import { CdTableFetchDataContext } from '../../../../shared/models/cd-table-fetch-data-context';
24 import { Daemon } from '../../../../shared/models/daemon.interface';
27 selector: 'cd-service-daemon-list',
28 templateUrl: './service-daemon-list.component.html',
29 styleUrls: ['./service-daemon-list.component.scss']
31 export class ServiceDaemonListComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
32 @ViewChild('statusTpl', { static: true })
33 statusTpl: TemplateRef<any>;
35 @ViewChildren('daemonsTable')
36 daemonsTableTpls: QueryList<TemplateRef<TableComponent>>;
44 daemons: Daemon[] = [];
45 columns: CdTableColumn[] = [];
47 hasOrchestrator = false;
49 private daemonsTable: TableComponent;
50 private daemonsTableTplsSub: Subscription;
53 private hostService: HostService,
54 private cephServiceService: CephServiceService,
55 private orchService: OrchestratorService
61 name: $localize`Hostname`,
67 name: $localize`Daemon type`,
73 name: $localize`Daemon ID`,
79 name: $localize`Container ID`,
83 cellTransformation: CellTemplate.truncate,
84 customTemplateConfig: {
89 name: $localize`Container Image name`,
90 prop: 'container_image_name',
95 name: $localize`Container Image ID`,
96 prop: 'container_image_id',
99 cellTransformation: CellTemplate.truncate,
100 customTemplateConfig: {
105 name: $localize`Version`,
111 name: $localize`Status`,
115 cellTemplate: this.statusTpl
118 name: $localize`Last Refreshed`,
119 prop: 'last_refresh',
124 this.orchService.status().subscribe((data: { available: boolean }) => {
125 this.hasOrchestrator = data.available;
130 if (!_.isUndefined(this.daemonsTable)) {
131 this.daemonsTable.reloadData();
136 this.daemonsTableTplsSub = this.daemonsTableTpls.changes.subscribe(
137 (tableRefs: QueryList<TableComponent>) => {
138 this.daemonsTable = tableRefs.first;
144 if (this.daemonsTableTplsSub) {
145 this.daemonsTableTplsSub.unsubscribe();
149 getStatusClass(status: number) {
152 '-1': 'badge-danger',
153 '0': 'badge-warning',
161 getDaemons(context: CdTableFetchDataContext) {
162 let observable: Observable<Daemon[]>;
164 observable = this.hostService.getDaemons(this.hostname);
165 } else if (this.serviceName) {
166 observable = this.cephServiceService.getDaemons(this.serviceName);
171 observable.subscribe(
172 (daemons: Daemon[]) => {
173 this.daemons = daemons;