xref: /openbmc/openbmc-tools/dbus-vis/index.html (revision b65280ff745c47dbb1e668e68e156bf3de6b6e93)
1*b65280ffSSui Chen<!DOCTYPE html>
2*b65280ffSSui Chen<!-- Caution: Electron does not allow inline scripts or styles! -->
3*b65280ffSSui Chen<html>
4*b65280ffSSui Chen  <head>
5*b65280ffSSui Chen    <meta charset="UTF-8">
6*b65280ffSSui Chen    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
7*b65280ffSSui Chen    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
8*b65280ffSSui Chen    <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
9*b65280ffSSui Chen    <title>DBus &amp; IPMI Request Visualizer</title>
10*b65280ffSSui Chen  </head>
11*b65280ffSSui Chen  <body>
12*b65280ffSSui Chen    <div id="div_title"><span>
13*b65280ffSSui Chen    <b>DBus &amp; IPMI Request Visualizer</b>
14*b65280ffSSui Chen		</span>
15*b65280ffSSui Chen		</div>
16*b65280ffSSui Chen    <div id="title_mode_select">
17*b65280ffSSui Chen			<span>
18*b65280ffSSui Chen				<input type="radio" id="radio_open_file" name="mode" value="open_file"></input>
19*b65280ffSSui Chen  			<label for="radio_open_file">Open an existing file</label>
20*b65280ffSSui Chen  			<input type="radio" id="radio_capture" name="mode" value="capture"></input>
21*b65280ffSSui Chen  			<label for="radio_capture">Capture on a BMC</label>
22*b65280ffSSui Chen      </span>
23*b65280ffSSui Chen		</div>
24*b65280ffSSui Chen		<div id="title_open_file">
25*b65280ffSSui Chen			<span><b>File name: </b></span>
26*b65280ffSSui Chen			<span id="file_name"></span>
27*b65280ffSSui Chen			<button id="btn_open_file">Open file</button>
28*b65280ffSSui Chen			<br />
29*b65280ffSSui Chen		</div>
30*b65280ffSSui Chen		<div id="title_capture">
31*b65280ffSSui Chen			<span><b>Capture: </b></span>
32*b65280ffSSui Chen			<input type="text" id="text_hostname" value=""></input>
33*b65280ffSSui Chen			<button id="btn_start_capture">Start Capture</button>
34*b65280ffSSui Chen			<button id="btn_stop_capture">Stop Capture</button>
35*b65280ffSSui Chen			<select id="select_capture_mode">
36*b65280ffSSui Chen				<option value="live">Live</option>
37*b65280ffSSui Chen				<option value="staged">Staged (IPMI detailed)</option>
38*b65280ffSSui Chen				<option value="staged2">Staged (DBus + IPMI)</option>
39*b65280ffSSui Chen			</select>
40*b65280ffSSui Chen    </div>
41*b65280ffSSui Chen		<div id="title_capture_info">
42*b65280ffSSui Chen			<div id="capture_info">Info will appear here</div>
43*b65280ffSSui Chen		</div>
44*b65280ffSSui Chen
45*b65280ffSSui Chen    <hr/>
46*b65280ffSSui Chen
47*b65280ffSSui Chen		<div id="div_group_by">
48*b65280ffSSui Chen    <span id="span_group_by_dbus">
49*b65280ffSSui Chen				Group DBus Requests by:
50*b65280ffSSui Chen				<input type="checkbox" id="dbus_column1" value="Type">Type</input>
51*b65280ffSSui Chen				<input type="checkbox" id="dbus_column2" value="Serial">Serial</input>
52*b65280ffSSui Chen				<input type="checkbox" id="dbus_column3" value="Sender">Sender</input>
53*b65280ffSSui Chen				<input type="checkbox" id="dbus_column4" value="Destination">Destination</input>
54*b65280ffSSui Chen				<input type="checkbox" id="dbus_column5" value="Path"checked>Path</input>
55*b65280ffSSui Chen				<input type="checkbox" id="dbus_column6" value="Interface" checked>Interface</input>
56*b65280ffSSui Chen				<input type="checkbox" id="dbus_column7" value="Member">Member</input>
57*b65280ffSSui Chen    </span>
58*b65280ffSSui Chen    <span id="span_group_by_ipmi">
59*b65280ffSSui Chen			  Group IPMI Requests by:
60*b65280ffSSui Chen				<input type="checkbox" id="c1" value="NetFN" checked>NetFN</input>
61*b65280ffSSui Chen				<input type="checkbox" id="c2" value="CMD"     checked>CMD</input>
62*b65280ffSSui Chen    </span>
63*b65280ffSSui Chen    <div id="span_group_by_boost_asio_handler">
64*b65280ffSSui Chen			  Group Asio Handlers by:
65*b65280ffSSui Chen				<input type="checkbox" id="bah1" value="Layout Level" checked>Layout Level</input>
66*b65280ffSSui Chen				<input type="checkbox" id="bah2" value="Description">Description</input>
67*b65280ffSSui Chen				<input type="checkbox" id="bah3" value="Description1">Description w/ addresses removed</input>
68*b65280ffSSui Chen    </div>
69*b65280ffSSui Chen		</div>
70*b65280ffSSui Chen
71*b65280ffSSui Chen		<div id="div_canvas">
72*b65280ffSSui Chen				<div id="blocker">
73*b65280ffSSui Chen						<div id="blocker_caption">AAAAA</div>
74*b65280ffSSui Chen				</div>
75*b65280ffSSui Chen				<div id="welcome_screen">
76*b65280ffSSui Chen						<div id="welcome_screen_content">
77*b65280ffSSui Chen								<br/><span>Welcome! Please <button id="btn_open_file2">Open file</button> to get timeline view/s.<span>
78*b65280ffSSui Chen								<br/>
79*b65280ffSSui Chen								<br/>Supported file types:
80*b65280ffSSui Chen								<ol>
81*b65280ffSSui Chen										<li>DBus pcap file</li>
82*b65280ffSSui Chen										<li>Boost ASIO handler log file</li>
83*b65280ffSSui Chen								</ol>
84*b65280ffSSui Chen								One file from each type (2 files in total) can be viewed simultaneously.
85*b65280ffSSui Chen						</div>
86*b65280ffSSui Chen						<hr />
87*b65280ffSSui Chen						<div id="dbus_pcap_status_content">
88*b65280ffSSui Chen							dbus-pcap status goes here
89*b65280ffSSui Chen						</div>
90*b65280ffSSui Chen						<div id="dbus_pcap_error_content">
91*b65280ffSSui Chen							The <b>dbus-pcap</b> script is not found; dbus-vis needs <b>dbus-pcap</b> for parsing PCAP files.<br/><br/>
92*b65280ffSSui Chen							Click to down <b>dbus-pcap</b> from: <br/>
93*b65280ffSSui Chen								https://raw.githubusercontent.com/openbmc/openbmc-tools/08ce0a5bad2b5c970af567c2e9888d444afe3946/dbus-pcap/dbus-pcap<br/><br/>
94*b65280ffSSui Chen							<button id="btn_download_dbus_pcap">Download to dbus-vis folder</button>
95*b65280ffSSui Chen						</div>
96*b65280ffSSui Chen						<div id="scapy_error_content">
97*b65280ffSSui Chen							The <b>scapy</b> Python module is not installed. dbus-vis depends on dbus-pcap, which in turn depends on the scapy Python module.
98*b65280ffSSui Chen
99*b65280ffSSui Chen							Please install it using either of the following commands:<br/>
100*b65280ffSSui Chen							<br/>
101*b65280ffSSui Chen							python3 -m pip install scapy<br/>
102*b65280ffSSui Chen							sudo apt install python3-scapy<br/>
103*b65280ffSSui Chen							<br/>
104*b65280ffSSui Chen							After installation, refresh dbus-vis with Ctrl+R.
105*b65280ffSSui Chen						</div>
106*b65280ffSSui Chen				</div>
107*b65280ffSSui Chen				<canvas id="my_canvas_dbus" width="1400" height="600"></canvas>
108*b65280ffSSui Chen				<canvas id="my_canvas_ipmi" width="1400" height="200"></canvas>
109*b65280ffSSui Chen				<canvas id="my_canvas_boost_asio_handler" width="1400" height="200"></canvas>
110*b65280ffSSui Chen		</div>
111*b65280ffSSui Chen
112*b65280ffSSui Chen		<div id="div_navi_and_replay">
113*b65280ffSSui Chen			<div>
114*b65280ffSSui Chen			  <span>
115*b65280ffSSui Chen				Navigation Control:
116*b65280ffSSui Chen				<button id="btn_zoom_in">Zoom In</button>
117*b65280ffSSui Chen				<button id="btn_zoom_out">Zoom Out</button>
118*b65280ffSSui Chen				<button id="btn_pan_left">&lt;&lt;</button>
119*b65280ffSSui Chen				<button id="btn_pan_right">&gt;&gt;</button>
120*b65280ffSSui Chen				<button id="btn_zoom_reset">Reset</button>
121*b65280ffSSui Chen				</span>
122*b65280ffSSui Chen			</div>
123*b65280ffSSui Chen			<div>Keyboard: [Left]/[right] arrow keys to pan; [Up]/[down] arrow keys to zoom in/out; Hold [shift] to move faster<br/>Mouse: [Left click]: highlight an interval; [wheel up/down]: zoom in/out; click overflow triangles to warp to out-of-viewport requests
124*b65280ffSSui Chen			</div>
125*b65280ffSSui Chen			<div id="highlight_hint">Click highlighted region to zoom into the region</div>
126*b65280ffSSui Chen			<div>
127*b65280ffSSui Chen				<input type="checkbox" id="cb_debuginfo">Show Debug Info</input>
128*b65280ffSSui Chen			</div>
129*b65280ffSSui Chen			<br/>
130*b65280ffSSui Chen			<div id="ipmi_replay">
131*b65280ffSSui Chen				<span>Generate replay commands for the </span><span id="highlight_count">0</span><span> highlighted IPMI requests:</span>
132*b65280ffSSui Chen				<br/>
133*b65280ffSSui Chen				<span>For replaying through "ipmitool" on host or BMC:
134*b65280ffSSui Chen				<button id="gen_replay_ipmitool1">Individual calls</button>
135*b65280ffSSui Chen				<button id="gen_replay_ipmitool2">exec command list</button></span>
136*b65280ffSSui Chen				<br/>
137*b65280ffSSui Chen				<span>For replaying through "busctl" on BMC:
138*b65280ffSSui Chen				<button id="gen_replay_ipmid_legacy">Legacy Interface (for btbridged)</button>
139*b65280ffSSui Chen				<button id="gen_replay_ipmid_new">New Interface (for kcsbridged / netipmid)</button></span>
140*b65280ffSSui Chen				<textarea rows="10" cols="150" id="ipmi_replay_output"></textarea>
141*b65280ffSSui Chen			</div>
142*b65280ffSSui Chen		</div> <!-- navi and replay -->
143*b65280ffSSui Chen    <br/>
144*b65280ffSSui Chen
145*b65280ffSSui Chen    <!-- You can also require other files to run in this process -->
146*b65280ffSSui Chen    <script src="./timeline_view.js"></script>
147*b65280ffSSui Chen    <script src="./dbus_timeline_vis.js"></script>
148*b65280ffSSui Chen    <script src="./ipmi_timeline_vis.js"></script>
149*b65280ffSSui Chen		<script src="./boost_handler_timeline_vis.js"></script>
150*b65280ffSSui Chen    <script src="./ipmi_parse.js"></script>
151*b65280ffSSui Chen    <script src="./ipmi_capture.js"></script>
152*b65280ffSSui Chen    <script src="./renderer.js"></script>
153*b65280ffSSui Chen		<script src="./dbus_pcap_loader.js"></script>
154*b65280ffSSui Chen		<script src="./initialization.js"></script>
155*b65280ffSSui Chen		<link rel="stylesheet" href="./dbus_vis.css">
156*b65280ffSSui Chen  </body>
157*b65280ffSSui Chen</html>
158