]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/blob
b18c7c4a2f76cc86fc7aa05bb724c49f10d0e7b4
[ceph.git] /
1 import { Component, Input, OnChanges, OnInit, TemplateRef, ViewChild } from '@angular/core';
2
3 import { I18n } from '@ngx-translate/i18n-polyfill';
4 import { Observable } from 'rxjs';
5
6 import { CephServiceService } from '../../../../shared/api/ceph-service.service';
7 import { HostService } from '../../../../shared/api/host.service';
8 import { TableComponent } from '../../../../shared/datatable/table/table.component';
9 import { CdTableColumn } from '../../../../shared/models/cd-table-column';
10 import { CdTableFetchDataContext } from '../../../../shared/models/cd-table-fetch-data-context';
11 import { Daemon } from '../../../../shared/models/daemon.interface';
12
13 @Component({
14   selector: 'cd-service-daemon-list',
15   templateUrl: './service-daemon-list.component.html',
16   styleUrls: ['./service-daemon-list.component.scss']
17 })
18 export class ServiceDaemonListComponent implements OnInit, OnChanges {
19   @ViewChild(TableComponent, { static: true })
20   table: TableComponent;
21   @ViewChild('lastSeenTpl', { static: true })
22   lastSeenTpl: TemplateRef<any>;
23
24   @Input()
25   serviceName?: string;
26
27   @Input()
28   hostname?: string;
29
30   daemons: Daemon[] = [];
31   columns: CdTableColumn[] = [];
32
33   constructor(
34     private i18n: I18n,
35     private hostService: HostService,
36     private cephServiceService: CephServiceService
37   ) {}
38
39   ngOnInit() {
40     this.columns = [
41       {
42         name: this.i18n('Hostname'),
43         prop: 'hostname',
44         flexGrow: 1,
45         filterable: true
46       },
47       {
48         name: this.i18n('Daemon type'),
49         prop: 'daemon_type',
50         flexGrow: 1,
51         filterable: true
52       },
53       {
54         name: this.i18n('Daemon ID'),
55         prop: 'daemon_id',
56         flexGrow: 1,
57         filterable: true
58       },
59       {
60         name: this.i18n('Container ID'),
61         prop: 'container_id',
62         flexGrow: 3,
63         filterable: true
64       },
65       {
66         name: this.i18n('Container Image name'),
67         prop: 'container_image_name',
68         flexGrow: 3,
69         filterable: true
70       },
71       {
72         name: this.i18n('Container Image ID'),
73         prop: 'container_image_id',
74         flexGrow: 3,
75         filterable: true
76       },
77       {
78         name: this.i18n('Version'),
79         prop: 'version',
80         flexGrow: 1,
81         filterable: true
82       },
83       {
84         name: this.i18n('Status'),
85         prop: 'status',
86         flexGrow: 1,
87         filterable: true
88       },
89       {
90         name: this.i18n('Status Description'),
91         prop: 'status_desc',
92         flexGrow: 1,
93         filterable: true
94       },
95       {
96         name: this.i18n('Last Refreshed'),
97         prop: 'last_refresh',
98         flexGrow: 2
99       }
100     ];
101   }
102
103   ngOnChanges() {
104     this.daemons = [];
105     this.table.reloadData();
106   }
107
108   updateData(daemons: Daemon[]) {
109     this.daemons = daemons;
110   }
111
112   getDaemons(context: CdTableFetchDataContext) {
113     let observable: Observable<Daemon[]>;
114     if (this.hostname) {
115       observable = this.hostService.getDaemons(this.hostname);
116     } else if (this.serviceName) {
117       observable = this.cephServiceService.getDaemons(this.serviceName);
118     } else {
119       this.daemons = [];
120       return;
121     }
122     observable.subscribe(
123       (daemons: Daemon[]) => {
124         this.daemons = daemons;
125       },
126       () => {
127         this.daemons = [];
128         context.error();
129       }
130     );
131   }
132 }