Add 6 tools tracking dbus.
[platform/upstream/bcc.git] / tools / dbus-message-size.py
1 #works only on sockets
2 #!/usr/bin/python
3
4 #old version
5
6 from bcc import BPF
7 from time import sleep
8 from ctypes import c_ushort, c_int, c_ulonglong
9 from sys import argv
10
11
12 def usage():
13         print("USAGE: %s [--histogram]" % argv[0])
14         exit()
15
16 mode = 0
17
18 if len(argv) > 2:
19         usage()
20         exit(1)
21 if len(argv) == 2:
22         if argv[1] == "--histogram":
23                 mode = 1
24         else:
25                 usage()
26
27 print("Hit Ctrl-C to end.")
28 count = 100
29 interval = 5
30 loop = 0
31
32 # load BPF program
33
34 b = BPF(src_file="dbus-message-size.c")
35 if mode == 1:
36         b.attach_uretprobe(name="dbus-1", sym="do_writing", fn_name="do_write_exit")
37         b.attach_uretprobe(name="dbus-1", sym="do_authentication", fn_name="do_write_exit")
38 b.attach_uretprobe(name="dbus-1", sym="_dbus_write_socket_with_unix_fds_two", fn_name="do_return")
39 b.attach_uretprobe(name="dbus-1", sym="_dbus_write_socket_two", fn_name="do_return")
40 b.attach_uretprobe(name="dbus-1", sym="_dbus_write_socket", fn_name="do_return")
41
42 while (1):
43         if count > 0:
44                 loop += 1
45                 if loop > count:
46                         exit()
47         sleep(interval)
48         print ("%d : \n" % loop)
49         stats_t = b["size_sent"]
50         if mode == 0:
51                 print ("%10s %20s %20s" % ("PID", "NAME", "BYTES SENT"))
52                 for v, p in sorted(stats_t.items(), key=lambda stats_t: stats_t[1].bytes, reverse=True):
53                         print("%10d %20s %20d \n" % (v.pid, v.comm.encode('string-escape'), p.bytes))
54         b["sizes"].print_log2_hist("bytes");