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