<%# LuCI - Lua Configuration Interface Copyright (C) 2014, QA Cafe, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 $Id$ -%> <fieldset class="cbi-section"> <legend><%:Start network capture%></legend> <div class="cbi-section-node"> <table class="cbi-section-table"> <tr> <th><%:Interface%></th> <th colspan='2'><%:seconds, packets, bytes%></th> <th><%:Filter%></th> <th><%:Actions%></th> </tr> <tr> <td> <select title="<%:Interface%>" style="width:auto" id="s_interfaces"> <% local nixio = require "nixio" for k, v in ipairs(nixio.getifaddrs()) do if v.family == "packet" then %> <option value="<%=v.name%>"><%=v.name%> </option> <% end end %> <option value="any"><%:any%></option> </select> </td> <td colspan='2'> <input id="tx_value" type="text" value="0" /> <select title="<%:timeout, bytes, seconds%>" id="s_value_type" style="width:auto"> <option value="T"><%:seconds%></option> <option value="P"><%:packets%></option> <option value="S"><%:bytes%></option> </select> </td> <td> <input style="margin: 5px 0" type="text" title="<%:Filter%>" placeholder="filter" id="i_filter" /> </td> <td> <input type="button" id="bt_action" data-action="start" value="<%:Start capture%>" class="cbi-button" /> </td> </tr> </table> </div> </fieldset> <fieldset class="cbi-section"> <span id="cshark-rc-output"></span> </fieldset> <hr/> <fieldset class="cbi-section"> <legend><%:Capture links%></legend> <div class="cbi-section-node"> <table id="t_link_list" class="cbi-section-table"> <tr class="cbi-section-table-titles"> <th class="cbi-section-table-cell"><%:Capture URL%></th> <th class="cbi-section-table-cell"><%:Capture time%></th> </tr> </table> </div> </fieldset> <fieldset class="cbi-section"> <a href="https://support.cloudshark.org/openwrt/openwrt-cloudshark.html" target="_blank">Visit support.cloudshark.org for help.</a> </fieldset> <hr/> <script type="text/javascript">//<![CDATA[ var capture_running = 0; var pid_file = 0; var bt_action = document.getElementById('bt_action'); var a_clear_links = document.getElementById('a_clear_links'); var output = document.getElementById('cshark-rc-output'); var loader = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> '; var msg = { 'start' : '<%:Waiting for capture to complete...%>', 'stop' : '<%:Waiting for upload to complete...%>' }; var status_msg = msg['start']; function get_date(timestamp) { function pad_str(str) { return (str < 10) ? "0" + str : str; } var current_date = new Date(timestamp * 1000); return current_date.getFullYear() + "-" + pad_str(current_date.getMonth() + 1) + "-" + pad_str(current_date.getDate()) + " " + pad_str(current_date.getHours()) + ":" + pad_str(current_date.getMinutes()) + ":" + pad_str(current_date.getSeconds()); } bt_action.onclick = function() { var action = this.getAttribute("data-action"); var csxhr = new XHR(); if (action == "stop") { update_status(action); bt_action.disabled = true; csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_stop', null, function(x) { if (!x || x.responseText.trim() != "0") { update_status("failed", "Invalid response on stop."); } }); } else if (action == "start") { var s_interfaces = document.getElementById('s_interfaces'); var s_value_type = document.getElementById('s_value_type'); var i_filter = document.getElementById('i_filter'); var if_n = s_interfaces.selectedIndex; var t_n = s_value_type.selectedIndex; var ifname = s_interfaces.options[if_n].value.trim(); var filter_val = i_filter.value.trim(); var tx_val = document.getElementById('tx_value').value.trim(); var type_val = s_value_type.options[t_n].value.trim(); if (type_val != 'P' && type_val != 'T' && type_val != 'S') type_val = 'T'; if (!ifname || !type_val) return; if (isNaN(tx_val)) return alert("<%:value for [seconds, packets, bytes] must be Integer%>"); update_status(action); csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_start/' + ifname + '/' + tx_val + '/' + type_val + '/'+ filter_val, null, function(x) { if (!x) update_status("failed", "Invalid response on start."); else update_status("running"); }); } } function update_status(status, message) { switch (status) { case 'start': case 'stop': status_msg = msg[status]; output.innerHTML = loader + status_msg; break case 'running': if (capture_running) break;; output.innerHTML = loader + status_msg; bt_action.value = '<%:Stop capture%>'; bt_action.setAttribute('data-action', 'stop'); capture_running = 1; break; case 'completed': case 'failed': if (!capture_running) break; if (status == "completed") { link_list_update(); } output.innerHTML = "<pre>" + message + "</pre>"; bt_action.value = '<%:Start capture%>'; bt_action.setAttribute('data-action', 'start'); bt_action.disabled = false; capture_running = 0; break; } } function check_status() { XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "network")%>/cshark_check_status', null, function(x, data) { if (!x) { if (capture_running) update_status("failed", "Invalid response when fetching status."); return; } console.log(data) update_status( (data.status == 1) && "running" || "completed", data.msg); }) } function link_list_clear() { var csxhr_del = new XHR(); csxhr_del.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_clear', null, function(x) { if (!x) return false; link_list_update(); }); } function link_list_update() { var t_link = document.getElementById("t_link_list"); if (!t_link) return; var row_count = t_link.rows.length; while(--row_count) t_link.deleteRow(row_count); var cell = t_link.insertRow(-1).insertCell(0); cell.colSpan = 2; cell.innerHTML = loader; var csxhr_link = new XHR(); csxhr_link.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_get', null, function(x, entries) { var row = t_link.deleteRow(1); if (!x) return; if (!entries || !entries.length) { var cell = t_link.insertRow(-1).insertCell(0); cell.colSpan = 2; cell.innerHTML = '<em><br />There are no captures available yet.</em>'; return; } for (var i = 0, len = entries.length; i < len ; i++) { var entry = entries[i][0]; if (!entry) continue; var data = entry.split(","); var url = data[0]; var timestamp = data[1]; var row = t_link.insertRow(-1); row.insertCell(0).innerHTML = '<a href="'+url+'" target="_blank">'+url+'</a>'; row.insertCell(1).innerHTML = get_date(timestamp); } var cell = t_link.insertRow(-1).insertCell(0); cell.colSpan = 2; cell.style.textAlign="center"; cell.innerHTML = '<input type="button" onclick="link_list_clear()" class="cbi-button" value ="<%:Clear list%>" />'; }) } check_status(); link_list_update(); //]]></script>