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 & 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 & 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"><<</button> 119*b65280ffSSui Chen <button id="btn_pan_right">>></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