MCPcopy Create free account
hub / github.com/ceph/ceph / handle_command

Method handle_command

src/pybind/mgr/osd_perf_query/module.py:91–198  ·  view source on GitHub ↗
(self, inbuf, cmd)

Source from the content-addressed store, hash-verified

89 queries = {}
90
91 def handle_command(self, inbuf, cmd):
92 if cmd['prefix'] == "osd perf query add":
93 if cmd['query'] == 'rbd_image_id':
94 query = self.RBD_IMAGE_ID_QUERY
95 elif cmd['query'] == 'client_id':
96 query = self.CLIENT_ID_QUERY
97 else:
98 query = self.ALL_SUBKEYS_QUERY
99 query_id = self.add_osd_perf_query(query)
100 if query_id is None:
101 return -errno.EINVAL, "", "Invalid query"
102 self.queries[query_id] = [query, time()]
103 return 0, str(query_id), "added query " + cmd['query'] + " with id " + str(query_id)
104 elif cmd['prefix'] == "osd perf query remove":
105 if cmd['query_id'] not in self.queries:
106 return -errno.ENOENT, "", "unknown query id " + str(cmd['query_id'])
107 self.remove_osd_perf_query(cmd['query_id'])
108 del self.queries[cmd['query_id']]
109 return 0, "", "removed query with id " + str(cmd['query_id'])
110 elif cmd['prefix'] == "osd perf counters get":
111 if cmd['query_id'] not in self.queries:
112 return -errno.ENOENT, "", "unknown query id " + str(cmd['query_id'])
113
114 query = self.queries[cmd['query_id']][0]
115 res = self.get_osd_perf_counters(cmd['query_id'])
116 now = time()
117 last_update = self.queries[cmd['query_id']][1]
118 descriptors = query['performance_counter_descriptors']
119
120 if query == self.RBD_IMAGE_ID_QUERY:
121 column_names = ["POOL_ID", "RBD IMAGE ID"]
122 else:
123 column_names = [sk['type'].upper() for sk in query['key_descriptor']]
124 for d in descriptors:
125 desc = d
126 if d in ['bytes']:
127 continue
128 elif d in ['write_bytes', 'read_bytes']:
129 desc += '/sec'
130 elif d in ['write_latency', 'read_latency']:
131 desc += '(msec)'
132 column_names.append(desc.upper())
133
134 table = prettytable.PrettyTable(tuple(column_names),
135 hrules=prettytable.FRAME)
136 table.left_padding_width = 0
137 table.right_padding_width = 2
138
139 if query == self.RBD_IMAGE_ID_QUERY:
140 # typical output:
141 # {'k': [['3'], ['', '16fe5b5a8435e']],
142 # 'c': [[1024, 0], [1, 0], ...]}
143 # pool id fixup: if the object_name regex has matched pool id
144 # use it as the image pool id
145 for c in res['counters']:
146 if c['k'][1][0]:
147 c['k'][0][0] = c['k'][1][0]
148 # group by (pool_id, image_id)

Callers

nothing calls this directly

Calls 9

tupleClass · 0.85
get_human_readableFunction · 0.85
sortMethod · 0.80
add_osd_perf_queryMethod · 0.45
remove_osd_perf_queryMethod · 0.45
get_osd_perf_countersMethod · 0.45
appendMethod · 0.45
indexMethod · 0.45
get_stringMethod · 0.45

Tested by

no test coverage detected