James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 1 | #!/usr/bin/python3 |
| 2 | |
| 3 | # SPDX-License-Identifier: Apache-2.0 |
| 4 | # Copyright 2020 Intel Corp. |
| 5 | |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 6 | import argparse |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 7 | import subprocess |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 8 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 9 | from flask import Flask |
| 10 | |
| 11 | REPLACE_CHAR = "~" |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 12 | |
| 13 | app = Flask(__name__) |
| 14 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 15 | parser = argparse.ArgumentParser(description="Remote DBus Viewer") |
| 16 | parser.add_argument("-u", "--username", default="root") |
| 17 | parser.add_argument("-p", "--password", default="0penBmc") |
| 18 | parser.add_argument("-a", "--address", required=True) |
| 19 | parser.add_argument("-x", "--port", required=True) |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 20 | args = parser.parse_args() |
| 21 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 22 | busctl = "sshpass -p {} busctl -H {}@{} ".format( |
| 23 | args.password, args.username, args.address |
| 24 | ) |
| 25 | AVATAR_URL = "https://avatars1.githubusercontent.com/u/13670043?s=200&v=4" |
| 26 | header = f'<head><link rel="icon" href="{AVATAR_URL}" /></head>' |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 27 | |
| 28 | |
| 29 | def getBusNames(): |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 30 | out = subprocess.check_output(busctl + "list --acquired", shell=True) |
| 31 | out = out.split(b"\n") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 32 | out = out[1:] |
| 33 | names = [] |
| 34 | for line in out: |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 35 | name = line.split(b" ")[0] |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 36 | if name: |
| 37 | names.append(name.decode()) |
| 38 | return names |
| 39 | |
| 40 | |
| 41 | def doTree(busname): |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 42 | out = subprocess.check_output(busctl + "tree " + busname, shell=True) |
| 43 | out = out.split(b"\n") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 44 | tree = [] |
| 45 | for line in out: |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 46 | path = line.split(b"/", 1)[-1].decode() |
| 47 | path = "/" + path |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 48 | tree.append(path) |
| 49 | return tree |
| 50 | |
| 51 | |
| 52 | def doIntrospect(busname, path): |
| 53 | out = subprocess.check_output( |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 54 | busctl + "introspect {} {}".format(busname, path), shell=True |
| 55 | ) |
| 56 | return out.decode().split("\n") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 57 | |
| 58 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 59 | @app.route("/") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 60 | def root(): |
| 61 | out = header |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 62 | out += "<div><H2>Bus Names {}</H2></div>".format(args.address) |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 63 | for name in getBusNames(): |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 64 | out += "<div> " |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 65 | out += '<a href="{}"> {} </a>'.format(name, name) |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 66 | out += "</div>" |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 67 | return out |
| 68 | |
| 69 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 70 | @app.route("/favicon.ico") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 71 | def favicon(): |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 72 | return f'<link rel="icon" type="image/png" href="{AVATAR_URL}" />' |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 73 | |
| 74 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 75 | @app.route("/<name>") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 76 | def busname(name): |
| 77 | out = header |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 78 | out += "<div><H2>tree {}</H2></div>".format(name) |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 79 | for path in doTree(name): |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 80 | out += "<div> " |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 81 | out += '<a href="{}/{}"> {} </a>'.format( |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 82 | name, path.replace("/", REPLACE_CHAR), path |
| 83 | ) |
| 84 | out += "</div>" |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 85 | return out |
| 86 | |
| 87 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 88 | @app.route("/<name>/<path>") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 89 | def path(name, path): |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 90 | path = path.replace(REPLACE_CHAR, "/") |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 91 | out = header |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 92 | out += "<div><H2>introspect {} {}</H2></div>".format(name, path) |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 93 | for line in doIntrospect(name, path): |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 94 | out += "<div> " |
| 95 | out += "<pre> {} </pre>".format(line) |
| 96 | out += "</div>" |
James Feist | 7248e96 | 2020-09-10 11:10:47 -0700 | [diff] [blame] | 97 | return out |
| 98 | |
| 99 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 100 | app.run(port=args.port, host="0.0.0.0") |