# -*- coding: utf-8 -*-
from __future__ import absolute_import
-from typing import Any, Dict
-
import cherrypy
from .. import mgr
service_type = None # type: str
def get(self, service_id):
- schema_dict = mgr.get_perf_schema(self.service_type, str(service_id))
try:
- schema = schema_dict["{}.{}".format(self.service_type, service_id)]
- except KeyError as e:
- raise cherrypy.HTTPError(404, "{0} not found".format(e))
- counters = []
-
- for key, value in sorted(schema.items()):
- counter = dict()
- counter['name'] = str(key)
- counter['description'] = value['description']
- # pylint: disable=W0212
- if mgr._stattype_to_str(value['type']) == 'counter':
- counter['value'] = CephService.get_rate(
- self.service_type, service_id, key)
- counter['unit'] = mgr._unit_to_str(value['units'])
- else:
- counter['value'] = mgr.get_latest(
- self.service_type, service_id, key)
- counter['unit'] = ''
- counters.append(counter)
-
- return {
- 'service': {
- 'type': self.service_type,
- 'id': str(service_id)
- },
- 'counters': counters
- }
+ return CephService.get_service_perf_counters(self.service_type, str(service_id))
+ except KeyError as error:
+ raise cherrypy.HTTPError(404, "{0} not found".format(error))
@ApiController('perf_counters/mds', Scope.CEPHFS)
class RgwPerfCounter(PerfCounter):
service_type = 'rgw'
- def get(self, service_id: str) -> Dict[str, Any]:
- svc_data = CephService.get_service_data_by_metadata_id(self.service_type, service_id)
- service_map_id = svc_data['service_map_id']
- schema_dict = mgr.get_perf_schema(self.service_type, service_map_id)
- try:
- schema = schema_dict["{}.{}".format(self.service_type, service_map_id)]
- except KeyError as e:
- raise cherrypy.HTTPError(404, "{0} not found".format(e))
- counters = []
-
- for key, value in sorted(schema.items()):
- counter = dict()
- counter['name'] = str(key)
- counter['description'] = value['description']
- # pylint: disable=W0212
- if mgr._stattype_to_str(value['type']) == 'counter':
- counter['value'] = CephService.get_rate(
- self.service_type, service_map_id, key)
- counter['unit'] = mgr._unit_to_str(value['units'])
- else:
- counter['value'] = mgr.get_latest(
- self.service_type, service_map_id, key)
- counter['unit'] = ''
- counters.append(counter)
-
- return {
- 'service': {
- 'type': self.service_type,
- 'id': svc_data['id']
- },
- 'counters': counters
- }
-
@ApiController('perf_counters/rbd-mirror', Scope.RBD_MIRRORING)
@ControllerDoc("Rgw Mirroring Perf Counters Management API", "RgwMirrorPerfCounter")
# extract per-daemon service data and health
daemon = {
'id': metadata['id'],
+ 'service_map_id': service['id'],
'version': metadata['ceph_version'],
'server_hostname': hostname,
'zonegroup_name': metadata['zonegroup_name'],
export class RgwDaemon {
id: string;
+ service_map_id: string;
version: string;
server_hostname: string;
zonegroup_name: string;
i18n>Performance Counters</a>
<ng-template ngbNavContent>
<cd-table-performance-counter serviceType="rgw"
- [serviceId]="serviceId">
+ [serviceId]="serviceMapId">
</cd-table-performance-counter>
</ng-template>
</li>
import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
import { PerformanceCounterModule } from '~/app/ceph/performance-counter/performance-counter.module';
+import { RgwDaemon } from '~/app/ceph/rgw/models/rgw-daemon';
import { SharedModule } from '~/app/shared/shared.module';
import { configureTestBed } from '~/testing/unit-test-helper';
import { RgwDaemonDetailsComponent } from './rgw-daemon-details.component';
it('should create', () => {
expect(component).toBeTruthy();
});
+
+ it('should set service id and service map id on changes', () => {
+ const daemon = new RgwDaemon();
+ daemon.id = 'daemon1';
+ daemon.service_map_id = '4832';
+ component.selection = daemon;
+ component.ngOnChanges();
+
+ expect(component.serviceId).toBe(daemon.id);
+ expect(component.serviceMapId).toBe(daemon.service_map_id);
+ });
});
import _ from 'lodash';
+import { RgwDaemon } from '~/app/ceph/rgw/models/rgw-daemon';
import { RgwDaemonService } from '~/app/shared/api/rgw-daemon.service';
import { Permission } from '~/app/shared/models/permissions';
import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
export class RgwDaemonDetailsComponent implements OnChanges {
metadata: any;
serviceId = '';
+ serviceMapId = '';
grafanaPermission: Permission;
@Input()
- selection: any;
+ selection: RgwDaemon;
constructor(
private rgwDaemonService: RgwDaemonService,
}
ngOnChanges() {
- // Get the service id of the first selected row.
if (this.selection) {
this.serviceId = this.selection.id;
+ this.serviceMapId = this.selection.service_map_id;
}
}
super(SendCommandError, self).__init__(err, errno)
+# pylint: disable=too-many-public-methods
class CephService(object):
OSD_FLAG_NO_SCRUB = 'noscrub'
svc_data['status'] = mgr.get_daemon_status(svc_data['type'], svc_data['service_map_id'])
return svc_data
+ @classmethod
+ def get_service_perf_counters(cls, service_type: str, service_id: str) -> Dict[str, Any]:
+ schema_dict = mgr.get_perf_schema(service_type, service_id)
+ schema = schema_dict["{}.{}".format(service_type, service_id)]
+ counters = []
+ for key, value in sorted(schema.items()):
+ counter = {'name': str(key), 'description': value['description']}
+ # pylint: disable=W0212
+ if mgr._stattype_to_str(value['type']) == 'counter':
+ counter['value'] = cls.get_rate(
+ service_type, service_id, key)
+ counter['unit'] = mgr._unit_to_str(value['units'])
+ else:
+ counter['value'] = mgr.get_latest(
+ service_type, service_id, key)
+ counter['unit'] = ''
+ counters.append(counter)
+
+ return {
+ 'service': {
+ 'type': service_type,
+ 'id': str(service_id)
+ },
+ 'counters': counters
+ }
+
@classmethod
def get_pool_list(cls, application=None):
osd_map = mgr.get('osd_map')
RgwStub.get_settings()
mgr.list_servers.return_value = [{
'hostname': 'host1',
- 'services': [{'id': 'daemon1', 'type': 'rgw'}, {'id': 'daemon2', 'type': 'rgw'}]
+ 'services': [{'id': '4832', 'type': 'rgw'}, {'id': '5356', 'type': 'rgw'}]
}]
mgr.get_metadata.side_effect = [
{
self.assertStatus(200)
self.assertJsonBody([{
'id': 'daemon1',
+ 'service_map_id': '4832',
'version': 'ceph version master (dev)',
'server_hostname': 'host1',
'zonegroup_name': 'zg1',
},
{
'id': 'daemon2',
+ 'service_map_id': '5356',
'version': 'ceph version master (dev)',
'server_hostname': 'host1',
'zonegroup_name': 'zg2',