(self, inbuf, cmd)
| 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) |
nothing calls this directly
no test coverage detected