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;
50 private daemonsTable: TableComponent;
51 private daemonsTableTplsSub: Subscription;
55 private hostService: HostService,
56 private cephServiceService: CephServiceService,
57 private orchService: OrchestratorService
63 name: this.i18n('Hostname'),
69 name: this.i18n('Daemon type'),
75 name: this.i18n('Daemon ID'),
81 name: this.i18n('Container ID'),
85 cellTransformation: CellTemplate.truncate,
86 customTemplateConfig: {
91 name: this.i18n('Container Image name'),
92 prop: 'container_image_name',
97 name: this.i18n('Container Image ID'),
98 prop: 'container_image_id',
101 cellTransformation: CellTemplate.truncate,
102 customTemplateConfig: {
107 name: this.i18n('Version'),
113 name: this.i18n('Status'),
117 cellTemplate: this.statusTpl
120 name: this.i18n('Last Refreshed'),
121 prop: 'last_refresh',
126 this.orchService.status().subscribe((data: { available: boolean }) => {
127 this.hasOrchestrator = data.available;
132 if (!_.isUndefined(this.daemonsTable)) {
133 this.daemonsTable.reloadData();
138 this.daemonsTableTplsSub = this.daemonsTableTpls.changes.subscribe(
139 (tableRefs: QueryList<TableComponent>) => {
140 this.daemonsTable = tableRefs.first;
146 if (this.daemonsTableTplsSub) {
147 this.daemonsTableTplsSub.unsubscribe();
151 getStatusClass(status: number) {
154 '-1': 'badge-danger',
155 '0': 'badge-warning',
163 getDaemons(context: CdTableFetchDataContext) {
164 let observable: Observable<Daemon[]>;
166 observable = this.hostService.getDaemons(this.hostname);
167 } else if (this.serviceName) {
168 observable = this.cephServiceService.getDaemons(this.serviceName);
173 observable.subscribe(
174 (daemons: Daemon[]) => {
175 this.daemons = daemons;