12 } from '@angular/core';
13 import { I18n } from '@ngx-translate/i18n-polyfill';
15 import * as _ from 'lodash';
17 import { Observable, Subscription } from 'rxjs';
18 import { CephServiceService } from '../../../../shared/api/ceph-service.service';
19 import { HostService } from '../../../../shared/api/host.service';
20 import { OrchestratorService } from '../../../../shared/api/orchestrator.service';
21 import { TableComponent } from '../../../../shared/datatable/table/table.component';
22 import { CellTemplate } from '../../../../shared/enum/cell-template.enum';
23 import { CdTableColumn } from '../../../../shared/models/cd-table-column';
24 import { CdTableFetchDataContext } from '../../../../shared/models/cd-table-fetch-data-context';
25 import { Daemon } from '../../../../shared/models/daemon.interface';
28 selector: 'cd-service-daemon-list',
29 templateUrl: './service-daemon-list.component.html',
30 styleUrls: ['./service-daemon-list.component.scss']
32 export class ServiceDaemonListComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {
33 @ViewChild('statusTpl', { static: true })
34 statusTpl: TemplateRef<any>;
36 @ViewChildren('daemonsTable')
37 daemonsTableTpls: QueryList<TemplateRef<TableComponent>>;
45 daemons: Daemon[] = [];
46 columns: CdTableColumn[] = [];
48 hasOrchestrator = false;
51 private daemonsTable: TableComponent;
52 private daemonsTableTplsSub: Subscription;
56 private hostService: HostService,
57 private cephServiceService: CephServiceService,
58 private orchService: OrchestratorService
64 name: this.i18n('Hostname'),
70 name: this.i18n('Daemon type'),
76 name: this.i18n('Daemon ID'),
82 name: this.i18n('Container ID'),
86 cellTransformation: CellTemplate.truncate,
87 customTemplateConfig: {
92 name: this.i18n('Container Image name'),
93 prop: 'container_image_name',
98 name: this.i18n('Container Image ID'),
99 prop: 'container_image_id',
102 cellTransformation: CellTemplate.truncate,
103 customTemplateConfig: {
108 name: this.i18n('Version'),
114 name: this.i18n('Status'),
118 cellTemplate: this.statusTpl
121 name: this.i18n('Last Refreshed'),
122 prop: 'last_refresh',
127 this.orchService.status().subscribe((data: { available: boolean }) => {
128 this.hasOrchestrator = data.available;
129 this.showDocPanel = !data.available;
134 if (!_.isUndefined(this.daemonsTable)) {
135 this.daemonsTable.reloadData();
140 this.daemonsTableTplsSub = this.daemonsTableTpls.changes.subscribe(
141 (tableRefs: QueryList<TableComponent>) => {
142 this.daemonsTable = tableRefs.first;
148 if (this.daemonsTableTplsSub) {
149 this.daemonsTableTplsSub.unsubscribe();
153 getStatusClass(status: number) {
156 '-1': 'badge-danger',
157 '0': 'badge-warning',
165 getDaemons(context: CdTableFetchDataContext) {
166 let observable: Observable<Daemon[]>;
168 observable = this.hostService.getDaemons(this.hostname);
169 } else if (this.serviceName) {
170 observable = this.cephServiceService.getDaemons(this.serviceName);
175 observable.subscribe(
176 (daemons: Daemon[]) => {
177 this.daemons = daemons;