import { FormsModule } from '@angular/forms';
import { RouterModule } from '@angular/router';
-import { AccordionModule, TabsModule } from 'ngx-bootstrap';
+import { TabsModule } from 'ngx-bootstrap';
import { ComponentsModule } from '../../shared/components/components.module';
import { SharedModule } from '../../shared/shared.module';
import { PerformanceCounterModule } from '../performance-counter/performance-counter.module';
CommonModule,
PerformanceCounterModule,
ComponentsModule,
- AccordionModule,
TabsModule,
SharedModule,
RouterModule,
-<accordion>
- <accordion-group *ngFor="let osd of selected"
- [heading]="osd.tree.name"
- [isOpen]="true">
- <div *ngIf="osd.loaded">
- <tabset>
- <tab heading="Attributes (OSD map)">
- <cd-table-key-value [data]="osd.details.osd_map">
- </cd-table-key-value>
- </tab>
- <tab heading="Metadata">
- <cd-table-key-value *ngIf="osd.details.osd_metadata"
- (fetchData)="osd.autoRefresh()"
- [data]="osd.details.osd_metadata">
- </cd-table-key-value>
- </tab>
- <tab heading="Performance counter">
- <cd-table-performance-counter serviceType="osd"
- [serviceId]="osd.id">
- </cd-table-performance-counter>
- </tab>
- <tab heading="Histogram">
- <h3 *ngIf="osd.histogram_failed">
- Histogram not available -> <span class="text-warning">{{ osd.histogram_failed }}</span>
- </h3>
- <div class="row" *ngIf="osd.details.histogram">
- <div class="col-md-6">
- <h4>Writes</h4>
- <cd-osd-performance-histogram [histogram]="osd.details.histogram.osd.op_w_latency_in_bytes_histogram">
- </cd-osd-performance-histogram>
- </div>
- <div class="col-md-6">
- <h4>Reads</h4>
- <cd-osd-performance-histogram [histogram]="osd.details.histogram.osd.op_r_latency_out_bytes_histogram">
- </cd-osd-performance-histogram>
- </div>
- </div>
- </tab>
- </tabset>
+<tabset>
+ <tab heading="Attributes (OSD map)">
+ <cd-table-key-value *ngIf="osd.loaded"
+ [data]="osd.details.osd_map">
+ </cd-table-key-value>
+ </tab>
+ <tab heading="Metadata">
+ <cd-table-key-value *ngIf="osd.loaded"
+ (fetchData)="osd.autoRefresh()"
+ [data]="osd.details.osd_metadata">
+ </cd-table-key-value>
+ </tab>
+ <tab heading="Performance counter">
+ <cd-table-performance-counter *ngIf="osd.loaded"
+ serviceType="osd"
+ [serviceId]="osd.id">
+ </cd-table-performance-counter>
+ </tab>
+ <tab heading="Histogram">
+ <h3 *ngIf="osd.loaded && osd.histogram_failed">
+ Histogram not available -> <span class="text-warning">{{ osd.histogram_failed }}</span>
+ </h3>
+ <div class="row" *ngIf="osd.loaded && osd.details.histogram">
+ <div class="col-md-6">
+ <h4>Writes</h4>
+ <cd-osd-performance-histogram [histogram]="osd.details.histogram.osd.op_w_latency_in_bytes_histogram">
+ </cd-osd-performance-histogram>
+ </div>
+ <div class="col-md-6">
+ <h4>Reads</h4>
+ <cd-osd-performance-histogram [histogram]="osd.details.histogram.osd.op_r_latency_out_bytes_histogram">
+ </cd-osd-performance-histogram>
+ </div>
</div>
- </accordion-group>
-</accordion>
+ </tab>
+</tabset>
import { HttpClientModule } from '@angular/common/http';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { AccordionConfig, AccordionModule, TabsModule } from 'ngx-bootstrap';
+import { TabsModule } from 'ngx-bootstrap';
import { DataTableModule } from '../../../../shared/datatable/datatable.module';
import { PerformanceCounterModule } from '../../../performance-counter/performance-counter.module';
TestBed.configureTestingModule({
imports: [
HttpClientModule,
- AccordionModule,
- TabsModule,
+ TabsModule.forRoot(),
PerformanceCounterModule,
DataTableModule
],
OsdDetailsComponent,
OsdPerformanceHistogramComponent
],
- providers: [OsdService, AccordionConfig]
+ providers: [OsdService]
})
.compileComponents();
}));
styleUrls: ['./osd-details.component.scss']
})
export class OsdDetailsComponent implements OnInit {
- @Input() selected?: any[];
+ osd: any;
+
+ @Input() selected?: any[] = [];
constructor(private osdService: OsdService) {}
ngOnInit() {
- _.each(this.selected, (osd) => {
- this.refresh(osd);
- osd.autoRefresh = () => {
- this.refresh(osd);
+ this.osd = {
+ loaded: false
+ };
+ if (this.selected.length > 0) {
+ this.osd = this.selected[0];
+ this.osd.autoRefresh = () => {
+ this.refresh();
};
- });
+ this.refresh();
+ }
}
- refresh(osd: any) {
- this.osdService.getDetails(osd.tree.id).subscribe((data: any) => {
- osd.details = data;
- if (!_.isObject(data.histogram)) {
- osd.histogram_failed = data.histogram;
- osd.details.histogram = undefined;
- }
- osd.loaded = true;
- });
+ refresh() {
+ this.osdService.getDetails(this.osd.tree.id)
+ .subscribe((data: any) => {
+ this.osd.details = data;
+ if (!_.isObject(data.histogram)) {
+ this.osd.histogram_failed = data.histogram;
+ this.osd.details.histogram = undefined;
+ }
+ this.osd.loaded = true;
+ });
}
-
}
<cd-table [data]="osds"
(fetchData)="getOsdList()"
[columns]="columns"
- [detailsComponent]="detailsComponent">
+ [detailsComponent]="detailsComponent"
+ [beforeShowDetails]="beforeShowDetails">
</cd-table>
<ng-template #statusColor
let-value="value">
import { HttpClientModule } from '@angular/common/http';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { AccordionModule, TabsModule } from 'ngx-bootstrap';
+import { TabsModule } from 'ngx-bootstrap';
import { DataTableModule } from '../../../../shared/datatable/datatable.module';
import { DimlessPipe } from '../../../../shared/pipes/dimless.pipe';
TestBed.configureTestingModule({
imports: [
HttpClientModule,
- AccordionModule,
PerformanceCounterModule,
TabsModule,
DataTableModule
import { CellTemplate } from '../../../../shared/enum/cell-template.enum';
import { CdTableColumn } from '../../../../shared/models/cd-table-column';
+import { CdTableSelection } from '../../../../shared/models/cd-table-selection';
import { DimlessPipe } from '../../../../shared/pipes/dimless.pipe';
import { OsdService } from '../osd.service';
const select = (onState, offState) => osd[onState] ? onState : offState;
return [select('up', 'down'), select('in', 'out')];
}
+
+ beforeShowDetails(selection: CdTableSelection) {
+ return selection.hasSingleSelection;
+ }
}
}
if (_.isFunction(this.beforeShowDetails)) {
if (!this.beforeShowDetails(this.selection)) {
+ this.detailTemplate.viewContainerRef.clear();
return;
}
}