19 from collections
import OrderedDict
22 from datetime
import datetime
23 import prettytable.prettytable
as prettytable
24 from prettytable
import PrettyTable
30 LOG = logging.getLogger(__name__)
34 table = PrettyTable([
'Property',
'Forward',
'Reverse'], border=border,
36 for k, v
in flow[
'forward'].items():
39 table.add_row([
'flowpath:latency_ns', v[
'latency_ns'],
40 flow[
'reverse'][k][
'latency_ns']])
42 table.add_row([k, v, flow[
'reverse'][k]])
44 table.add_row([
'path',
print_path(flow[
'forward'], border),
51 path = flow[
'flowpath'][
'path']
52 keys = [
'switch_id',
'port_no',
'segment_latency',
'seq_id']
53 table = PrettyTable(keys, border=border, vrules=prettytable.NONE,
54 hrules=prettytable.HEADER,
58 table.add_row([p.get(x,
None)
for x
in keys])
64 table = PrettyTable([
'Isl'], border=border)
66 child_table = PrettyTable([
'Property',
'Value'], border=border)
67 for k, v
in isl.items():
70 for kk, vv
in p.items():
72 [
'path:{}:{}'.
format(p[
'seq_id'], kk), vv])
74 child_table.add_row([k, v])
75 table.add_row([child_table])
88 for kk, vv
in p.items():
89 d[
'p{}:{}'.
format(p[
'seq_id'], kk)] = vv
91 columns.update(d.keys())
93 columns -= {
'id',
'path',
'message_type',
'p0:segment_latency',
94 'created_in_cache',
'updated_in_cache',
'clazz'}
96 sorted_columns = [
'id'] + sorted(list(columns)) + [
'created_in_cache',
99 sorted_columns_with_names = OrderedDict(
100 zip(sorted_columns, sorted_columns))
102 sorted_columns_with_names.update({
'available_bandwidth':
'av/bw',
103 'created_in_cache':
'created',
104 'updated_in_cache':
'updated',
105 'latency_ns':
'lat'})
107 table = PrettyTable(sorted_columns_with_names.values(),
110 vrules=prettytable.FRAME,
111 hrules=prettytable.FRAME)
116 table.add_row([d.get(x,
'-')
for x
in sorted_columns_with_names.keys()])
123 for time_field
in [
'created_in_cache',
'updated_in_cache']:
125 r[time_field] = datetime.utcfromtimestamp(r[time_field])
132 columns = set(switches[0].keys())
133 columns -= {
'switch_id',
'created_in_cache',
'updated_in_cache'}
135 sorted_columns = [
'switch_id'] + sorted(columns) + [
'created_in_cache',
138 sorted_columns_with_names = OrderedDict(
139 zip(sorted_columns, sorted_columns))
141 sorted_columns_with_names.update({
'created_in_cache':
'created',
142 'updated_in_cache':
'updated'})
144 table = PrettyTable(sorted_columns_with_names.values(),
147 vrules=prettytable.FRAME,
148 hrules=prettytable.FRAME)
153 table.add_row([s[x]
for x
in sorted_columns_with_names.keys()])
159 flows = payload[
'state'][
'flow'][
'flows']
170 isls = payload[
'state'][
'network'][
'isls']
176 switches = payload[
'state'][
'network'][
'switches']
188 for record
in records:
189 data = json.loads(record.value)
190 payload = data[
'payload']
191 LOG.debug(pprint.pformat(data))
192 table = PrettyTable([
'Topology',
'Component',
'Task ID'],
195 [payload[
'topology'], payload[
'component'], payload[
'task_id']])
199 clazz = payload[
'state'][
'clazz']
200 if clazz ==
'org.openkilda.messaging.ctrl.state.CacheBoltState':
202 elif clazz ==
'org.openkilda.messaging.ctrl.state.CrudBoltState':
205 print(pprint.pformat(payload[
'state']))
210 @click.command(name=
'dump-state')
211 @click.argument(
'destination')
212 @click.option(
'--border/--no-border', default=
True)
213 @click.option(
'--table',
'output_type', flag_value=
'table', default=
True)
214 @click.option(
'--json',
'output_type', flag_value=
'json')
215 @click.option(
'--allow-dangerous-operation/--prevent-dangerous-operation', default=
False)
219 if not allow_dangerous_operation:
220 click.secho(
"DON'T RUN ON PRODUCTION MAY CAUSE OVERSIZED KAFKA MESSAGE",
221 blink=
True, bold=
True)
225 LOG.debug(
'command = {}'.
format(message.serialize()))
230 if output_type ==
'table':
232 elif output_type ==
'json':
233 for record
in records:
234 data = json.loads(record.value)
235 print(pprint.pformat(data))
def convert_timefied_to_human(data)
def print_table(records, border)
def print_flow(flow, border)
def print_isls(isls, border)
def print_switches(switches, border)
def send_with_context(context, message)
def create_dump_state(correlation_id, destination)
def receive_with_context_async(context, expected_count=None)
def cache_bolt_print_table(payload, border)
def print_path(flow, border)
def print_isls_tower(isls, border)
def crud_bolt_print_table(payload, border)
def print_flows_from_payload(payload, border)
def dump_state_command(ctx, destination, border, output_type, allow_dangerous_operation)