diff --git a/httpdocs/js/graph_utils.js b/httpdocs/js/graph_utils.js index 77ba2f1f89..aadc8144d2 100644 --- a/httpdocs/js/graph_utils.js +++ b/httpdocs/js/graph_utils.js @@ -42,6 +42,8 @@ function getSerieLabel(schema, serie, visualization, serie_index) { return serie.tags.profile; else if(serie.tags.user_script) return serie.tags.user_script; + else if(serie.tags.command) + return serie.tags.command.substring(4).toUpperCase(); } else if(data_label != "bytes") { // single series if(serie.tags.protocol) return serie.tags.protocol + " (" + new_label + ")"; diff --git a/httpdocs/js/ntop.min.js b/httpdocs/js/ntop.min.js index 168291c1d4..ed304c6f16 100644 --- a/httpdocs/js/ntop.min.js +++ b/httpdocs/js/ntop.min.js @@ -1,3 +1,2 @@ -function datatableRemoveEmptyRow(table){$("tbody tr.emptyRow",$(table)).remove()}function datatableAddEmptyRow(table,empty_str){var columns=$("thead th",$(table)).filter(function(){return $(this).css("display")!="none"}).length;$("tbody",$(table)).html(''+empty_str+"")}function datatableGetNumDisplayedItems(table){return $("tr:not(.emptyRow)",$(table)).length-1}function datatableIsEmpty(table){return datatableGetNumDisplayedItems(table)==0}function datatableGetByForm(form){return $("table",$("#dt-top-details",$(form)).parent())}function datatableUndoAddRow(new_row,empty_str,bt_to_enable,callback_str){if(bt_to_enable)$(bt_to_enable).removeAttr("disabled");var form=$(new_row).closest("form");$(new_row).remove();aysUpdateForm(form);var dt=datatableGetByForm(form);if(datatableIsEmpty(dt))datatableAddEmptyRow(dt,empty_str);if(callback_str)window[callback_str](new_row)}function datatableForEachRow(table,callbacks){$("tr:not(:first)",table).each(function(row_i){if(typeof callbacks==="function"){callbacks.bind(this)(row_i)}else{var i;for(i=0;i'+label+"")}function datatableAddDeleteButtonCallback(td_idx,callback_str,label){datatableAddButtonCallback.bind(this)(td_idx,label,"label-danger",callback_str,"javascript:void(0)")}function datatableAddActionButtonCallback(td_idx,callback_str,label){datatableAddButtonCallback.bind(this)(td_idx,label,"label-info",callback_str,"javascript:void(0)")}function datatableAddLinkButtonCallback(td_idx,link,label){datatableAddButtonCallback.bind(this)(td_idx,label,"label-info","",link)}function datatableMakeSelectUnique(tr_obj,added_rows_prefix,options){options=paramsExtend({on_change:$.noop,selector_fn:function(obj){return obj.find("select").first()}},options);function datatableForeachSelectOtherThan(this_select,added_rows_prefix,selector_fn,callback){$("[id^="+added_rows_prefix+"]").each(function(){var other=selector_fn($(this));if(other[0]!=this_select[0])callback(other)})}function datatableOptionChangeStatus(option_obj,enable){if(enable){option_obj.removeAttr("disabled")}else{var select_obj=option_obj.closest("select");var should_reset=select_obj.val()==option_obj.val();option_obj.attr("disabled","disabled");if(should_reset){var new_val=select_obj.find("option:not([disabled])").first().val();select_obj.val(new_val);select_obj.attr("data-old-val",new_val)}}}function datatableOnSelectEntryChange(added_rows_prefix,selector_fn,change_callback){var old_value=$(this).attr("data-old-val")||"";var new_value=$(this).val()||"";var others=[];if(old_value==new_value)old_value="";datatableForeachSelectOtherThan($(this),added_rows_prefix,selector_fn,function(other){datatableOptionChangeStatus(other.find("option[value='"+old_value+"']"),true);datatableOptionChangeStatus(other.find("option[value='"+new_value+"']"),false);others.push(other)});change_callback($(this),old_value,new_value,others,datatableOptionChangeStatus);$(this).attr("data-old-val",new_value)}function datatableOnAddSelectEntry(select_obj,added_rows_prefix,selector_fn){select_obj.val("");datatableForeachSelectOtherThan(select_obj,added_rows_prefix,selector_fn,function(other){other.trigger("change")});var new_sel=select_obj.find("option:not([disabled])").first();var new_val=new_sel.val();select_obj.val(new_val);select_obj.trigger("change")}var select=options.selector_fn(tr_obj);select.on("change",function(){datatableOnSelectEntryChange.bind(this)(added_rows_prefix,options.selector_fn,options.on_change)});select.on("remove",function(){$(this).val("").trigger("change")});datatableOnAddSelectEntry(select,added_rows_prefix,options.selector_fn)}function datatableOrderedInsert(table,td_idx,to_insert,to_insert_val,cmp_fn){var cmp_fn=cmp_fn||function(a,b){return b-a};var inserted=false;datatableForEachRow(table,function(){if(inserted)return;var tr=$(this);var cmp_val=parseInt($("td:nth-child("+td_idx+")",tr).html());if(!isNaN(cmp_val)&&cmp_fn(cmp_val,to_insert_val)<0){tr.before(to_insert);inserted=true}});if(!inserted)$(table).append(to_insert)}function datatableIsLastPage(table){var lastpage=$("#dt-bottom-details .pagination li:nth-last-child(3)",$(table));return!(lastpage.length==1&&lastpage.hasClass("active")==false)}function datatableGetColumn(table,id_key,id_value){var res=table.data("datatable").resultset.data.filter(function(item){return item[id_key]===id_value});if(res)return res[0]}function datatableGetColumnIndex(table,column_key){var index=table.data("datatable").options.columns.findIndex(function(item){return item.field===column_key});return index}function datatableRefreshRows(table,column_id){var $dt=table.data("datatable");var rows=$dt.resultset.data;var ids=[];var id_to_row={};for(var row in rows){var data=rows[row];if(data[column_id]){var data_id=data[column_id];id_to_row[data_id]=row;ids.push(data_id)}}if(ids){var url=$dt.options.url;var params={custom_hosts:ids.join(",")};$.ajax({type:"GET",url:url,data:params,cache:false,success:function(result){for(var row in result.data){var data=result.data[row];var data_id=data[column_id];if(data_id&&id_to_row[data_id]){var row_idx=id_to_row[data_id];var row_html=$dt.rows[row_idx];var row_tds=$("td",row_html);for(var key in data){var col_idx=datatableGetColumnIndex(table,key);var cell=row_tds[col_idx];$(cell).html(data[key]!=0?data[key]:"")}}}}})}}function aysHandleForm(form_selector,options){if(!form_selector)form_selector="form";if(form_selector==="form"){form_selector='form:not([data-ays-ignore="true"])'}var default_options={submit_selector:'button[type="submit"]:not([data-ays-ignore="true"])',on_dirty_callback:$.noop,on_clean_callback:$.noop,handle_submit_buttons:true,handle_datatable:false,handle_tabs:false,disable_on_dirty:"",ays_options:{}};var o=$.extend(true,{},default_options,options);o.form_selector=form_selector;$(function(){$(o.form_selector).areYouSure(o.ays_options);if(o.handle_submit_buttons)$(o.form_selector).find(o.submit_selector).attr("disabled","disabled");$(o.form_selector).on("dirty.areYouSure",function(){if(o.handle_submit_buttons)$(this).find(o.submit_selector).removeAttr("disabled");if(o.handle_datatable){$(this).find("a.dropdown-toggle").attr("disabled","disabled");$(this).find("ul.pagination a").css("pointer-events","none").css("cursor","default")}if(o.handle_tabs){$(".nav-tabs").find("a").each(function(){if(!$(this).closest("li").hasClass("active"))$(this).removeAttr("data-toggle").closest("li").addClass("disabled")})}$(o.disable_on_dirty).addClass("disabled");o.on_dirty_callback.bind(this)()});$(o.form_selector).on("clean.areYouSure",function(){if(o.handle_submit_buttons)$(this).find(o.submit_selector).attr("disabled","disabled");if(o.handle_datatable){$(this).find("a.dropdown-toggle").removeAttr("disabled");$(this).find("ul.pagination a").css("pointer-events","").css("cursor","")}if(o.handle_tabs){$(".nav-tabs").find("a").each(function(){$(this).attr("data-toggle","tab").closest("li").removeClass("disabled")})}$(o.disable_on_dirty).removeClass("disabled");o.on_clean_callback.bind(this)()})})}function aysResetForm(form_selector){$(form_selector).trigger("reinitialize.areYouSure")}function aysUpdateForm(form_selector){$(form_selector).trigger("rescan.areYouSure")}function aysRecheckForm(form_selector){$(form_selector).trigger("checkform.areYouSure")}function aysGetDirty(form_selector,fields_selector){fields_selector=fields_selector||":input:not(input[type=submit]):not(input[type=button])";var getValue=function($field){if($field.hasClass("ays-ignore")||$field.hasClass("aysIgnore")||$field.attr("data-ays-ignore")||$field.attr("name")===undefined){return null}if($field.is(":disabled")){return"ays-disabled"}var val;var type=$field.attr("type");if($field.is("select")){type="select"}switch(type){case"checkbox":case"radio":val=$field.is(":checked");break;case"select":val="";$field.find("option").each(function(o){var $option=$(this);if($option.is(":selected")){val+=$option.val()}});break;default:val=$field.val()}return val};var isFieldDirty=function($field){var origValue=$field.data("ays-orig");var curValue=getValue($field);var dirty=undefined!==origValue&&origValue!=curValue;return{dirty:dirty,origValue:origValue,curValue:curValue}};var l=[];$(form_selector).find(fields_selector).each(function(){var dirty_status=isFieldDirty($(this));if(dirty_status.dirty){dirty_status.input=$(this);l.push(dirty_status)}});return l}var NTOPNG_MIN_VISUAL_VALUE=.005;function is_good_ipv4(ipv4){if(/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$/.test(ipv4)){return true}else{return false}}function is_good_ipv6(ipv6){if(/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\:){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test(ipv6)){return true}else{return false}}function isNumeric(value){return/^\d+$/.test(value)}function is_mac_address(what){return/^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$/.test(what)}function is_network_mask(what,optional_mask){var elems=what.split("/");var mask=null;var ip_addr;if(elems.length!=2){if(!optional_mask)return null;else ip_addr=what}else{ip_addr=elems[0];if(!isNumeric(elems[1]))return null;mask=parseInt(elems[1]);if(mask<0)return null}if(is_good_ipv4(ip_addr)){if(mask===null)mask=32;else if(mask>32)return null;return{type:"ipv4",address:ip_addr,mask:mask}}else if(is_good_ipv6(elems[0])){if(mask===null)mask=128;else if(mask>128)return false;return{type:"ipv6",address:ip_addr,mask:mask}}return null}function fbits(bits){if(typeof bits==="undefined")return"-";var sizes=["bps","Kbit/s","Mbit/s","Gbit/s","Tbit/s"];if(bits==0)return"0";if(bits>0&&bits=sizes.length){return"> "+sizes[sizes.length-1]}if(i<=1){return Math.round(bits/Math.pow(1e3,i)*100)/100+" "+sizes[i]}else{var ret=parseFloat(bits/Math.pow(1e3,i)).toFixed(2);if(ret%1==0)ret=Math.round(ret);return ret+" "+sizes[i]}}function export_rate(eps){if(typeof eps==="undefined")return"-";var sizes=["exp/s","Kexp/s"];if(eps==0)return"0";if(eps>0&&eps0&&exports0&&pps0&&pps0&&fps0&&mps'}else{return''}}function getOSIcon(name){var icon="";if(name.search("Linux")!=-1||name.search("Ubuntu")!=-1)icon=" ";else if(name.search("Android")!=-1)icon=" ";else if(name.search("Windows")!=-1||name.search("Win32")!=-1||name.search("MSIE")!=-1)icon=" ";else if(name.search("iPhone")!=-1||name.search("iPad")!=-1||name.search("OS X")!=-1)icon=" ";return icon}function abbreviateString(str,len){if(!str)return"";if(str.length=0&&bytes=kilobyte&&bytes=megabyte&&bytes=gigabyte&&bytes=terabyte)return(bytes/terabyte).toFixed(precision)+" TB";else return bytes.toFixed(precision)+" Bytes"}String.prototype.capitalizeSingleWord=function(){var uc=this.toUpperCase();if(uc=="ASN"||uc=="OS")return uc;else return this.charAt(0).toUpperCase()+this.slice(1)};String.prototype.capitalize=function(){var res=this.split(" ");for(var i in res){res[i]=res[i].capitalizeSingleWord()}return res.join(" ")};function drawTrend(current,last,withColor){if(current==last){return''}else if(current>last){return'"}else{return''}}function toggleAllTabs(enabled){if(enabled===true)$("#historical-tabs-container").find("li").removeClass("disabled").find("a").attr("data-toggle","tab");else $("#historical-tabs-container").find("li").addClass("disabled").find("a").removeAttr("data-toggle")}function disableAllDropdownsAndTabs(){$("select").each(function(){$(this).prop("disabled",true)});toggleAllTabs(false)}function enableAllDropdownsAndTabs(){$("select").each(function(){$(this).prop("disabled",false)});toggleAllTabs(true)}function capitalize(s){return s&&s[0].toUpperCase()+s.slice(1)}function addCommas(nStr){nStr+="";var x=nStr.split(".");var x1=x[0];var x2=x.length>1?"."+x[1]:"";var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1=x1.replace(rgx,"$1"+","+"$2")}return x1+x2}function scaleValue(val,sizes,scale){if(val==0)return[0,sizes[0]];var i=parseInt(Math.floor(Math.log(val)/Math.log(scale)));if(i<0||isNaN(i)){i=0}else if(i>=sizes.length)i=sizes.length-1;return[Math.round(val/Math.pow(scale,i)*10)/10,sizes[i]]}function formatValue(val){var sizes=["","K","M","G","T"];if(val==0)return"0";if(val>0&&val0&&value0&&bytes0&&bits0){years=Math.floor(days/365);if(years>0){days=days%365;msg=years+" year";if(years>1){msg+="s"}msg_array.push(msg);msg=""}msg=days+" day";if(days>1){msg+="s"}msg_array.push(msg);msg=""}if(hours>0){if(hours<10){msg="0"}msg+=hours+":"}if(minutes<10){msg+="0"}msg+=minutes+":";if(sec<10){msg+="0"}msg+=sec;msg_array.push(msg);return msg_array.join(", ")}Date.prototype.format=function(format){var o={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),S:this.getMilliseconds()};if(/(y+)/.test(format))format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length));for(var k in o)if(new RegExp("("+k+")").test(format))format=format.replace(RegExp.$1,RegExp.$1.length==1?o[k]:("00"+o[k]).substr((""+o[k]).length));return format};function epoch2Seen(epoch){var d=new Date(epoch*1e3);var tdiff=Math.floor((new Date).getTime()/1e3-epoch);return d.format("dd/MM/yyyy hh:mm:ss")+" ["+secondsToTime(tdiff)+" ago]"}function graphGetXAxisTicksFormat(diff_epoch){var tickFormat;if(diff_epoch<=86400){tickFormat="%H:%M:%S"}else if(diff_epoch<=2*86400){tickFormat="%b %e, %H:%M:%S"}else{tickFormat="%b %e"}return tickFormat}function paramsExtend(defaults,override){return $.extend({},defaults,override)}function paramsToForm(form,params){form=$(form);for(var k in params){if(params.hasOwnProperty(k)){var input=$('');input.appendTo(form)}}return form}function paramsPairsEncode(params){var i=0;var res={};for(var k in params){res["key_"+i]=k;res["val_"+i]=params[k];i=i+1}return res}jQuery.fn.extend({disable:function(state){return this.each(function(){var $this=$(this);if($this.is("input, button, textarea, select"))this.disabled=state;else $this.toggleClass("disabled",state)})}});function hostkey2hostInfo(host_key){var info;var hostinfo=[];host_key=host_key.replace(/____/g,":");host_key=host_key.replace(/___/g,"/");host_key=host_key.replace(/__/g,".");info=host_key.split("@");return info}function handle_tab_state(nav_object,default_tab){$("a",nav_object).click(function(e){e.preventDefault()});$(" > li > a",nav_object).on("shown.bs.tab",function(e){var id=$(e.target).attr("href").substr(1);if(history.replaceState){history.replaceState(null,null,"#"+id)}else{window.location.hash=id}});var hash=window.location.hash;if(!hash)hash="#"+default_tab;$('a[href="'+hash+'"]',nav_object).tab("show")}String.prototype.sformat=function(){var args=arguments;return this.replace(/{(\d+)}/g,function(match,number){return typeof args[number]!="undefined"?args[number]:match})};if(typeof String.prototype.contains==="undefined"){String.prototype.contains=function(s){return this.indexOf(s)!==-1}}function _add_find_host_link(form,name,data){$("").attr({type:"hidden",id:name,name:name,value:data}).appendTo(form)}function makeFindHostBeforeSubmitCallback(http_prefix){return function(form,data){if(data.type=="mac"){form.attr("action",http_prefix+"/lua/mac_details.lua")}else if(data.type=="network"){form.attr("action",http_prefix+"/lua/hosts_stats.lua");_add_find_host_link(form,"network",data.network)}else if(data.type=="snmp"){form.attr("action",http_prefix+"/lua/pro/enterprise/snmp_interface_details.lua");_add_find_host_link(form,"snmp_port_idx",data.snmp_port_idx);_add_find_host_link(form,"page","layer2")}else if(data.type=="snmp_device"){form.attr("action",http_prefix+"/lua/pro/enterprise/snmp_device_details.lua")}else if(data.type=="asn"){form.attr("action",http_prefix+"/lua/hosts_stats.lua");_add_find_host_link(form,"asn",data.asn)}else{form.attr("action",http_prefix+"/lua/host_details.lua")}return true}}function tstampToDateString(html_tag,format,tdiff){tdiff=tdiff||0;var timestamp=parseInt(html_tag.html())+tdiff;var localized=d3.time.format(format)(new Date(timestamp*1e3));html_tag.html(localized).removeClass("hidden");return localized}function noHtml(s){return s.replace(/<[^>]+>/g,"")}function cleanCustomHostUrl(host){return host.replace(/^http:\/\//gi,"").replace(/^https:\/\//gi,"").replace(/^www\./gi,"").replace(/[^0-9a-zA-Z\.:\/_-]/gi,"")}function parseQuery(queryString){var query={};var pairs=(queryString[0]==="?"?queryString.substr(1):queryString).split("&");for(var i=0;icount){console.error("points mismatch: serie '"+getSerieLabel(schema_name,series[i])+"' has "+data.length+" points, expected "+count);rv=false}else if(data.length.1)return res}function buildTimeArray(start_time,end_time,step){var arr=[];for(var t=start_time;t$.now())$("#btn-jump-time-ahead").addClass("disabled");else $("#btn-jump-time-ahead").removeClass("disabled")}function showQuerySlow(){$("#query-slow-alert").show()}function hideQuerySlow(){$("#query-slow-alert").hide()}function chart_data_sum(series){return series.reduce(function(acc,x){return acc+x.values.reduce(function(acc,pt){return acc+pt[1]||0},0)},0)}function attachStackedChartCallback(chart,schema_name,chart_id,zoom_reset_id,params,step,metric_type,align_step,show_all_smooth,initial_range,ts_table_shown){var pending_chart_request=null;var pending_table_request=null;var d3_sel=d3.select(chart_id);var $chart=$(chart_id);var $zoom_reset=$(zoom_reset_id);var $graph_zoom=$("#graph_zoom");var max_interval=findActualStep(step,params.epoch_begin)*8;var initial_interval=params.epoch_end-params.epoch_begin;var is_max_zoom=initial_interval<=max_interval;var url=http_prefix+"/lua/rest/get/timeseries/ts.lua";var first_load=true;var first_time_loaded=true;var manual_trigger_cmp_serie=false;var datetime_format="dd/MM/yyyy hh:mm:ss";var max_over_total_ratio=3;var query_timer=null;var seconds_before_query_slow=6;var query_completed=0;var query_was_aborted=false;chart.is_zoomed=current_zoom_level>0||has_initial_zoom();var spinner=$(''); -$chart.parent().css("position","relative");var chart_colors_full=["#69B87F","#94CFA4","#B3DEB6","#E5F1A6","#FFFCC6","#FEDEA5","#FFB97B","#FF8D6D","#E27B85"];var chart_colors_min=["#7CC28F","#FCD384","#FD977B"];var num_ticks_y1=null;var num_ticks_y2=null;var domain_y1=null;var domain_y2=null;var first_run=true;var update_chart_data=function(new_data){d3_sel.datum([]).call(chart);d3_sel.datum(new_data);d3_sel.transition().duration(500).call(chart);if(first_run){num_ticks_y1=chart.yAxis1.ticks();num_ticks_y2=chart.yAxis2.ticks();domain_y1=chart.yDomain1();domain_y2=chart.yDomain2();first_run=false}if(metric_type==="gauge"){var cur_domain_y1=chart.yAxis1.scale().domain();var cur_domain_y2=chart.yAxis2.scale().domain();cur_domain_y1=cur_domain_y1[1]-cur_domain_y1[0];cur_domain_y2=cur_domain_y2[1]-cur_domain_y2[0];if(chart.yAxis1.tickFormat()!=ffloat)chart.yAxis1.ticks(Math.min(cur_domain_y1,num_ticks_y1));if(chart.yAxis2.tickFormat()!=ffloat)chart.yAxis2.ticks(Math.min(cur_domain_y2,num_ticks_y2))}var y1_sum=chart_data_sum(new_data.filter(function(x){return x.yAxis==1}));var y2_sum=chart_data_sum(new_data.filter(function(x){return x.yAxis==2}));if(y1_sum==0)chart.yDomain1([0,1]);else chart.yDomain1(domain_y1);if(y2_sum==0)chart.yDomain2([0,1]);else chart.yDomain2(domain_y2);d3_sel.call(chart);nv.utils.windowResize(chart.update);spinner.remove()};function isLegendDisabled(key,default_val){if(typeof localStorage!=="undefined"){var val=localStorage.getItem("chart_series.disabled."+key);if(val!=null)return val==="true"}return default_val}chart.legend.dispatch.on("legendClick",function(d,i){if(d.legend_key.indexOf("ago")!=-1)manual_trigger_cmp_serie=true;if(typeof localStorage!=="undefined")localStorage.setItem("chart_series.disabled."+d.legend_key,!d.disabled?true:false)});chart.dispatch.on("zoom",function(e){var cur_zoom=[params.epoch_begin,params.epoch_end];var t_start=Math.floor(e.xDomain[0]);var t_end=Math.ceil(e.xDomain[1]);var old_zoomed=chart.is_zoomed;var is_user_zoom=typeof e.is_user_zoom!=="undefined"?e.is_user_zoom:true;chart.is_zoomed=true;if(chart.updateStackedChart(t_start,t_end,false,is_user_zoom)){if(is_user_zoom||e.push_state){current_zoom_level+=1;var url=getHistoryParameters({epoch_begin:t_start,epoch_end:t_end});history.pushState({zoom_level:current_zoom_level,range:[t_start,t_end]},"",url)}chart.fixChartButtons()}else chart.is_zoomed=old_zoomed});function updateZoom(zoom,is_user_zoom,force){var t_start=zoom[0];var t_end=zoom[1];chart.updateStackedChart(t_start,t_end,false,is_user_zoom,null,force);chart.fixChartButtons()}chart.zoom_in=function(){var cur_interval=params.epoch_end-params.epoch_begin;if(cur_interval>60){var delta=cur_interval/4;$("#period_begin").data("DateTimePicker").date(new Date((params.epoch_begin+delta)*1e3));$("#period_end").data("DateTimePicker").date(new Date((params.epoch_end-delta)*1e3));updateChartFromPickers()}};chart.zoom_out=function(){var cur_interval=params.epoch_end-params.epoch_begin;var delta=cur_interval/2;$("#period_begin").data("DateTimePicker").date(new Date((params.epoch_begin-delta)*1e3));$("#period_end").data("DateTimePicker").date(new Date((params.epoch_end+delta)*1e3));updateChartFromPickers()};$chart.on("dblclick",function(event){if($(event.target).hasClass("nv-legend-text"))return;chart.zoom_out()});$zoom_reset.on("click",function(){if(current_zoom_level){history.go(-current_zoom_level)}});window.addEventListener("popstate",function(e){var zoom=initial_range;if(e.state){zoom=e.state.range;current_zoom_level=e.state.zoom_level}else current_zoom_level=0;updateZoom(zoom,true,true)});chart.fixChartButtons=function(){if(current_zoom_level>0||has_initial_zoom()){$graph_zoom.find(".btn-warning:not(.custom-zoom-btn)").addClass("initial-zoom-sel").removeClass("btn-warning");$graph_zoom.find(".custom-zoom-btn").css("visibility","visible");var zoom_link=$graph_zoom.find(".custom-zoom-btn input");var link=zoom_link.val().replace(/&epoch_begin=.*/,"");link+="&epoch_begin="+params.epoch_begin+"&epoch_end="+params.epoch_end;zoom_link.val(link)}else{$graph_zoom.find(".initial-zoom-sel").addClass("btn-warning");$graph_zoom.find(".custom-zoom-btn").css("visibility","hidden");chart.is_zoomed=false}fixJumpButtons(params.epoch_begin,params.epoch_end);if(current_zoom_level>0)$zoom_reset.show();else $zoom_reset.hide()};function checkQueryCompleted(){var flows_dt=$("#chart1-flows");var wait_num_queries=ts_table_shown&&$("#chart1-flows").css("display")!=="none"?2:1;query_completed+=1;if(query_completed>=wait_num_queries){if(query_timer){clearInterval(query_timer);query_timer=null}hideQuerySlow()}}chart.queryWasAborted=function(){return query_was_aborted};chart.abortQuery=function(){query_was_aborted=true;if(pending_chart_request){pending_chart_request.abort();chart.noData(i18n.query_was_aborted);update_chart_data([])}if(pending_table_request)pending_table_request.abort();if(query_timer){clearInterval(query_timer);query_timer=null}hideQuerySlow()};chart.tableRequestCompleted=function(){checkQueryCompleted();pending_table_request=null};chart.getDataUrl=function(){var data_params=jQuery.extend({},params);delete data_params.zoom;delete data_params.ts_compare;data_params.extended=1;return url+"?"+$.param(data_params,true)};var old_start,old_end,old_interval;chart.updateStackedChart=function(tstart,tend,no_spinner,is_user_zoom,on_load_callback,force_update){if(tstart)params.epoch_begin=tstart;if(tend)params.epoch_end=tend;var cur_interval=params.epoch_end-params.epoch_begin;var actual_step=findActualStep(step,params.epoch_begin);max_interval=actual_step*6;if(cur_interval=Date.now()){params.epoch_begin=params.epoch_end-max_interval}else{params.epoch_begin=Math.floor(epoch-max_interval/2);params.epoch_end=Math.floor(epoch+max_interval/2)}is_max_zoom=true;chart.zoomType(null)}}else if(cur_interval>max_interval){is_max_zoom=false;chart.zoomType("x")}old_interval=cur_interval;if(!first_load||has_initial_zoom()||force_update)align_step=null;fixTimeRange(chart,params,align_step,actual_step);if(first_load)initial_range=[params.epoch_begin,params.epoch_end];if(old_start==params.epoch_begin&&old_end==params.epoch_end&&!force_update)return false;old_start=params.epoch_begin;old_end=params.epoch_end;if(pending_table_request)pending_table_request.abort();if(pending_chart_request)pending_chart_request.abort();else if(!no_spinner)spinner.appendTo($chart.parent());$("#period_begin").data("DateTimePicker").date(new Date(params.epoch_begin*1e3));$("#period_end").data("DateTimePicker").maxDate(new Date($.now())).date(new Date(Math.min(params.epoch_end*1e3,$.now())));if(query_timer)clearInterval(query_timer);query_timer=setInterval(showQuerySlow,seconds_before_query_slow*1e3);query_completed=0;query_was_aborted=false;chart.noData(i18n.no_data_available);hideQuerySlow();var req_params=$.extend({},params);if(!canCompareBackwards(req_params.epoch_begin,req_params.epoch_end))delete req_params.ts_compare;pending_chart_request=$.get(url,req_params,function(data){if(data&&data.error)chart.noData(data.error);if(!data||!data.series||!data.series.length||!checkSeriesConsinstency(schema_name,data.count,data.series)){update_chart_data([]);return}var tick_step=Math.ceil(chart.tick_step/data.step)*data.step;chart.xAxis.tickValues(buildTimeArray(data.start,data.start+data.count*data.step,tick_step));chart.xAxis.tickFormat(function(d){return d3.time.format(chart.x_fmt)(new Date(d*1e3))});var res=[];var series=data.series;var total_serie;var color_i=0;var chart_colors=series.length<=chart_colors_min.length?chart_colors_min:chart_colors_full;for(var j=0;jmax_over_total_ratio)is_disabled=true;res.push({key:capitaliseFirstLetter(key),yAxis:1,values:values,type:"line",classed:"line-dashed line-animated",color:"#7E91A0",legend_key:key,disabled:is_disabled})}}if(!data.no_trend&&has_full_data&&total_serie.length>=3){var num_smoothed_points=Math.min(Math.max(Math.floor(total_serie.length/5),3),12);var smooth_functions={trend:[graph_i18n.trend,"#62ADF6",smooth,num_smoothed_points],ema:["EMA","#F96BFF",exponentialMovingAverageArray,{periods:num_smoothed_points}],sma:["SMA","#A900FF",simpleMovingAverageArray,{periods:num_smoothed_points}],rsi:["RSI cur vs past","#00FF5D",relativeStrengthIndexArray,{periods:num_smoothed_points}]};function add_smoothed_serie(fn_to_use){var options=smooth_functions[fn_to_use];var smoothed;if(fn_to_use=="rsi"){if(!past_serie)return;var delta_serie=[];for(var i=0;i0){var aligned;if(fn_to_use!="ema"&&fn_to_use!="sma"&&fn_to_use!="rsi"){var scale=d3.max(total_serie)/max_val;var scaled=$.map(smoothed,function(x){return x*scale});aligned=upsampleSerie(scaled,data.count)}else{var remaining=data.count-smoothed.length;var to_fill=remaining0||enabled_series.length==0){for(var i=0;i0){chart.legend.updateState(false)}update_chart_data(res);first_time_loaded=false;if(data.source_aggregation)$("#data-aggr-dropdown > button > span:first").html(data.source_aggregation)}).fail(function(xhr,status,error){if(xhr.statusText=="abort"){return}console.error("Error while retrieving the timeseries data ["+status+"]: "+error);chart.noData(error);update_chart_data([])}).always(function(data,status,xhr){checkQueryCompleted();pending_chart_request=null});if(first_load){first_load=false;$(function(){var flows_dt=$("#chart1-flows").data("datatable");if(flows_dt)pending_table_request=flows_dt.pendingRequest})}else{var flows_dt=$("#chart1-flows");if(ts_table_shown){updateGraphsTableView(null,params);if($("#chart1-flows").css("display")!=="none")pending_table_request=flows_dt.data("datatable").pendingRequest}}if(typeof on_load_callback==="function")on_load_callback(chart);return true}}var graph_old_view=null;var graph_old_has_nindex=null;var graph_old_nindex_query=null;function tsQueryToTags(ts_query){return ts_query.split(",").reduce(function(params,value){var pos=value.indexOf(":");if(pos!=-1){var k=value.slice(0,pos);var v=value.slice(pos+1);params[k]=v}return params},{})}function recheckGraphTableEntries(){var table_view=graph_table_views;var tdiff=graph_params.epoch_end-graph_params.epoch_begin;var reset_selection=false;$("#chart1-flows").show();$("#graphs-table-selector").show();for(view_id in table_view){var view=table_view[view_id];var elem=$("#"+view.html_id);if(tdiff<=view.min_step){if(graph_old_view.id===view_id)reset_selection=true;elem.hide()}else elem.show()}var items_ul=$("#graphs-table-active-view").closest(".btn-group").find("ul:first");items_ul.find("li.dropdown-header").each(function(idx,e){var next_item=$(e).nextAll("li").filter(function(idx,e){return $(e).css("display")!=="none"||!$(e).attr("data-view-id")}).first();var divider=$(e).nextAll(".divider").first();if(!next_item.attr("data-view-id")){$(e).hide();divider.hide()}else{$(e).show();divider.show()}});if(reset_selection){var first_view=items_ul.find("li[data-view-id]").filter(function(idx,e){return $(e).css("display")!=="none"}).first();if(first_view.length)setActiveGraphsTableView(first_view.attr("data-view-id"));else{$("#chart1-flows").hide();$("#graphs-table-selector").hide()}return false}return true}function updateGraphsTableView(view,graph_params,has_nindex,nindex_query,per_page){if(view)graph_old_view=view;if(!recheckGraphTableEntries(graph_params)){return}if(view){graph_old_has_nindex=has_nindex;graph_old_nindex_query=nindex_query}else{view=graph_old_view;has_nindex=graph_old_has_nindex;nindex_query=graph_old_nindex_query}var graph_table=$("#chart1-flows");nindex_query=nindex_query+"&begin_time_clause="+graph_params.epoch_begin+"&end_time_clause="+graph_params.epoch_end;var nindex_buttons="";var params_obj=tsQueryToTags(graph_params.ts_query);if(!params_obj.host){nindex_buttons+='
"}nindex_buttons+='
";if(view.columns){var url=http_prefix+(view.nindex_view?"/lua/pro/get_nindex_flows.lua":"/lua/pro/get_ts_table.lua");var columns=view.columns.map(function(col){return{title:col[1],field:col[0],css:{textAlign:col[2],width:col[3]},hidden:col[4]?true:false}});columns.push({title:i18n.actions,field:"drilldown",css:{width:"1%","white-space":"nowrap","text-align":"center"}});var old_dt=graph_table.data("datatable");if(old_dt&&old_dt.pendingRequest)old_dt.pendingRequest.abort();graph_table.removeData("datatable");graph_table.html("");graph_table.datatable({title:"",url:url,perPage:per_page,noResultsMessage:function(){if(ts_chart.queryWasAborted())return i18n.query_was_aborted;else return i18n.no_results_found},post:function(){var params=$.extend({},graph_params);delete params.ts_compare;delete params.initial_point;params.limit=1;params.detail_view=view.id;return params},loadingYOffset:40,columns:columns,buttons:view.nindex_view?[nindex_buttons]:[],tableCallback:function(){var data=this.resultset;ts_chart.tableRequestCompleted();if(!data){return}if(data.currentPage>1)graph_table.data("has_interaction",true);var stats_div=$("#chart1-flows-stats");var has_drilldown=data&&data.data.some(function(row){return row.drilldown});if(!has_drilldown)$("table td:last-child, th:last-child",graph_table).remove();if(data&&data.stats&&data.stats.loading_time){$("#flows-load-time").html(data.stats.loading_time);$("#flows-processed-records").html(data.stats.num_records_processed);stats_div.show()}else stats_div.hide()},rowCallback:function(row,row_data){if(typeof row_data.tags==="object"&&(params_obj.category&&row_data.tags.category===params_obj.category||params_obj.protocol&&row_data.tags.protocol===params_obj.protocol)){row.addClass("info")}return row}})}}function draw_processes_graph(http_prefix,graph_div_id,host){var links;var nodes={};var url=http_prefix+"/lua/get_processes_graph_data.lua?host="+host;d3.json(url,function(error,json){if(error)return console.warn(error);links=json;var _link;links.forEach(function(link){if(link.source_pid==-1){_link=http_prefix+"/lua/host_details.lua?host="+link.source}else{_link=http_prefix+"/lua/process_details.lua?pid="+link.source_pid+"&pid_name="+link.source_name+"&host="+host+"&page=flows"}link.source=nodes[link.source]||(nodes[link.source]={name:link.source_name,num:link.source,link:_link,type:link.source_type,pid:link.source_pid});if(link.target_pid==-1){_link=http_prefix+"/lua/host_details.lua?host="+link.target}else{_link=http_prefix+"/lua/process_details.lua?pid="+link.target_pid+"&pid_name="+link.target_name+"&host="+host+"&page=flows"}link.target=nodes[link.target]||(nodes[link.target]={name:link.target_name,num:link.target,link:_link,type:link.target_type,pid:link.target_pid})});var width=960,height=500,arrow_size=6;var color=d3.scale.category10();color["proc"]="red";color["host"]="lightsteelblue";var force=d3.layout.force().nodes(d3.values(nodes)).links(links).size([width,height]).linkDistance(120).charge(-400).on("tick",tick).start();var svg=d3.select("#"+graph_div_id).append("svg").attr("id","ebpf_graph").attr("width",width).attr("height",height);svg.append("defs").selectAll("marker").data(["proc2proc","proc2host","host2proc","host2host"]).enter().append("marker").attr("id",function(d){return d}).attr("viewBox","0 -5 10 10").attr("refX",15).attr("refY",-1.5).attr("markerWidth",arrow_size).attr("markerHeight",arrow_size).attr("orient","auto").append("path").attr("d","M0,-5L10,0L0,5");var path=svg.append("g").selectAll("path").data(force.links()).enter().append("path").attr("class",function(d){return"link "+d.type}).attr("marker-end",function(d){return"url(#"+d.type+")"});var circle=svg.append("g").selectAll("circle").data(force.nodes()).enter().append("circle").attr("class","ebpf_circle").attr("r",8).style("fill",function(d){return color[d.type]}).call(force.drag).on("dblclick",function(d){window.location.href=d.link});var text=svg.append("g").selectAll("text").data(force.nodes()).enter().append("text").attr("class","ebpf_text").attr("x",12).attr("y",".31em").text(function(d){if(d.pid>=0)return d.name+" [pid: "+d.pid+"]";else{return d.name}});function tick(){path.attr("d",linkArc);circle.attr("transform",transform);text.attr("transform",transform)}function linkArc(d){var dx=d.target.x-d.source.x,dy=d.target.y-d.source.y,dr=Math.sqrt(dx*dx+dy*dy);return"M"+d.source.x+","+d.source.y+"A"+dr+","+dr+" 0 0,1 "+d.target.x+","+d.target.y}function transform(d){return"translate("+d.x+","+d.y+")"}})}function makeUniqueValidator(items_function){return function(field){var cmp_name=field.val();var count=0;if(!cmp_name)return true;items_function(field).each(function(){var name=$(this).val();if(name==cmp_name)count=count+1});return count==1}}function memberValueValidator(input){var member=input.val();if(member==="")return true;return is_mac_address(member)||is_network_mask(member,true)}function makePasswordPatternValidator(pattern){return function passwordPatternValidator(input){if(!input.val())return true;return $(input).val().match(pattern)}}function passwordMatchValidator(input){var other_input=$(input).closest("form").find("[data-passwordmatch]").not(input);if(!input.val()||!other_input.val())return true;return other_input.val()===input.val()}function poolnameValidator(input){if(!input.val())return true;return $(input).val().match(/^[a-z0-9_]*$/)}function passwordMatchRecheck(form){var items=$(form).find("[data-passwordmatch]");var not_empty=0;items.each(function(){if($(this).val()!="")not_empty++});if(not_empty==items.length)items.trigger("input")}function hostOrMacValidator(input){var host=input.val();if(host==="")return true;return is_mac_address(host)||is_good_ipv4(host)||is_good_ipv6(host)}function ipAddressValidator(input){var host=input.val();if(host==="")return true;return is_good_ipv4(host)||is_good_ipv6(host)} +function datatableRemoveEmptyRow(table){$("tbody tr.emptyRow",$(table)).remove()}function datatableAddEmptyRow(table,empty_str){var columns=$("thead th",$(table)).filter(function(){return $(this).css("display")!="none"}).length;$("tbody",$(table)).html(''+empty_str+"")}function datatableGetNumDisplayedItems(table){return $("tr:not(.emptyRow)",$(table)).length-1}function datatableIsEmpty(table){return datatableGetNumDisplayedItems(table)==0}function datatableGetByForm(form){return $("table",$("#dt-top-details",$(form)).parent())}function datatableUndoAddRow(new_row,empty_str,bt_to_enable,callback_str){if(bt_to_enable)$(bt_to_enable).removeAttr("disabled");var form=$(new_row).closest("form");$(new_row).remove();aysUpdateForm(form);var dt=datatableGetByForm(form);if(datatableIsEmpty(dt))datatableAddEmptyRow(dt,empty_str);if(callback_str)window[callback_str](new_row)}function datatableForEachRow(table,callbacks){$("tr:not(:first)",table).each(function(row_i){if(typeof callbacks==="function"){callbacks.bind(this)(row_i)}else{var i;for(i=0;i'+label+"")}function datatableAddDeleteButtonCallback(td_idx,callback_str,label){datatableAddButtonCallback.bind(this)(td_idx,label,"label-danger",callback_str,"javascript:void(0)")}function datatableAddActionButtonCallback(td_idx,callback_str,label){datatableAddButtonCallback.bind(this)(td_idx,label,"label-info",callback_str,"javascript:void(0)")}function datatableAddLinkButtonCallback(td_idx,link,label){datatableAddButtonCallback.bind(this)(td_idx,label,"label-info","",link)}function datatableMakeSelectUnique(tr_obj,added_rows_prefix,options){options=paramsExtend({on_change:$.noop,selector_fn:function(obj){return obj.find("select").first()}},options);function datatableForeachSelectOtherThan(this_select,added_rows_prefix,selector_fn,callback){$("[id^="+added_rows_prefix+"]").each(function(){var other=selector_fn($(this));if(other[0]!=this_select[0])callback(other)})}function datatableOptionChangeStatus(option_obj,enable){if(enable){option_obj.removeAttr("disabled")}else{var select_obj=option_obj.closest("select");var should_reset=select_obj.val()==option_obj.val();option_obj.attr("disabled","disabled");if(should_reset){var new_val=select_obj.find("option:not([disabled])").first().val();select_obj.val(new_val);select_obj.attr("data-old-val",new_val)}}}function datatableOnSelectEntryChange(added_rows_prefix,selector_fn,change_callback){var old_value=$(this).attr("data-old-val")||"";var new_value=$(this).val()||"";var others=[];if(old_value==new_value)old_value="";datatableForeachSelectOtherThan($(this),added_rows_prefix,selector_fn,function(other){datatableOptionChangeStatus(other.find("option[value='"+old_value+"']"),true);datatableOptionChangeStatus(other.find("option[value='"+new_value+"']"),false);others.push(other)});change_callback($(this),old_value,new_value,others,datatableOptionChangeStatus);$(this).attr("data-old-val",new_value)}function datatableOnAddSelectEntry(select_obj,added_rows_prefix,selector_fn){select_obj.val("");datatableForeachSelectOtherThan(select_obj,added_rows_prefix,selector_fn,function(other){other.trigger("change")});var new_sel=select_obj.find("option:not([disabled])").first();var new_val=new_sel.val();select_obj.val(new_val);select_obj.trigger("change")}var select=options.selector_fn(tr_obj);select.on("change",function(){datatableOnSelectEntryChange.bind(this)(added_rows_prefix,options.selector_fn,options.on_change)});select.on("remove",function(){$(this).val("").trigger("change")});datatableOnAddSelectEntry(select,added_rows_prefix,options.selector_fn)}function datatableOrderedInsert(table,td_idx,to_insert,to_insert_val,cmp_fn){var cmp_fn=cmp_fn||function(a,b){return b-a};var inserted=false;datatableForEachRow(table,function(){if(inserted)return;var tr=$(this);var cmp_val=parseInt($("td:nth-child("+td_idx+")",tr).html());if(!isNaN(cmp_val)&&cmp_fn(cmp_val,to_insert_val)<0){tr.before(to_insert);inserted=true}});if(!inserted)$(table).append(to_insert)}function datatableIsLastPage(table){var lastpage=$("#dt-bottom-details .pagination li:nth-last-child(3)",$(table));return!(lastpage.length==1&&lastpage.hasClass("active")==false)}function datatableGetColumn(table,id_key,id_value){var res=table.data("datatable").resultset.data.filter(function(item){return item[id_key]===id_value});if(res)return res[0]}function datatableGetColumnIndex(table,column_key){var index=table.data("datatable").options.columns.findIndex(function(item){return item.field===column_key});return index}function datatableRefreshRows(table,column_id){var $dt=table.data("datatable");var rows=$dt.resultset.data;var ids=[];var id_to_row={};for(var row in rows){var data=rows[row];if(data[column_id]){var data_id=data[column_id];id_to_row[data_id]=row;ids.push(data_id)}}if(ids){var url=$dt.options.url;var params={custom_hosts:ids.join(",")};$.ajax({type:"GET",url:url,data:params,cache:false,success:function(result){for(var row in result.data){var data=result.data[row];var data_id=data[column_id];if(data_id&&id_to_row[data_id]){var row_idx=id_to_row[data_id];var row_html=$dt.rows[row_idx];var row_tds=$("td",row_html);for(var key in data){var col_idx=datatableGetColumnIndex(table,key);var cell=row_tds[col_idx];$(cell).html(data[key]!=0?data[key]:"")}}}}})}}function aysHandleForm(form_selector,options){if(!form_selector)form_selector="form";if(form_selector==="form"){form_selector='form:not([data-ays-ignore="true"])'}var default_options={submit_selector:'button[type="submit"]:not([data-ays-ignore="true"])',on_dirty_callback:$.noop,on_clean_callback:$.noop,handle_submit_buttons:true,handle_datatable:false,handle_tabs:false,disable_on_dirty:"",ays_options:{}};var o=$.extend(true,{},default_options,options);o.form_selector=form_selector;$(function(){$(o.form_selector).areYouSure(o.ays_options);if(o.handle_submit_buttons)$(o.form_selector).find(o.submit_selector).attr("disabled","disabled");$(o.form_selector).on("dirty.areYouSure",function(){if(o.handle_submit_buttons)$(this).find(o.submit_selector).removeAttr("disabled");if(o.handle_datatable){$(this).find("a.dropdown-toggle").attr("disabled","disabled");$(this).find("ul.pagination a").css("pointer-events","none").css("cursor","default")}if(o.handle_tabs){$(".nav-tabs").find("a").each(function(){if(!$(this).closest("li").hasClass("active"))$(this).removeAttr("data-toggle").closest("li").addClass("disabled")})}$(o.disable_on_dirty).addClass("disabled");o.on_dirty_callback.bind(this)()});$(o.form_selector).on("clean.areYouSure",function(){if(o.handle_submit_buttons)$(this).find(o.submit_selector).attr("disabled","disabled");if(o.handle_datatable){$(this).find("a.dropdown-toggle").removeAttr("disabled");$(this).find("ul.pagination a").css("pointer-events","").css("cursor","")}if(o.handle_tabs){$(".nav-tabs").find("a").each(function(){$(this).attr("data-toggle","tab").closest("li").removeClass("disabled")})}$(o.disable_on_dirty).removeClass("disabled");o.on_clean_callback.bind(this)()})})}function aysResetForm(form_selector){$(form_selector).trigger("reinitialize.areYouSure")}function aysUpdateForm(form_selector){$(form_selector).trigger("rescan.areYouSure")}function aysRecheckForm(form_selector){$(form_selector).trigger("checkform.areYouSure")}function aysGetDirty(form_selector,fields_selector){fields_selector=fields_selector||":input:not(input[type=submit]):not(input[type=button])";var getValue=function($field){if($field.hasClass("ays-ignore")||$field.hasClass("aysIgnore")||$field.attr("data-ays-ignore")||$field.attr("name")===undefined){return null}if($field.is(":disabled")){return"ays-disabled"}var val;var type=$field.attr("type");if($field.is("select")){type="select"}switch(type){case"checkbox":case"radio":val=$field.is(":checked");break;case"select":val="";$field.find("option").each(function(o){var $option=$(this);if($option.is(":selected")){val+=$option.val()}});break;default:val=$field.val()}return val};var isFieldDirty=function($field){var origValue=$field.data("ays-orig");var curValue=getValue($field);var dirty=undefined!==origValue&&origValue!=curValue;return{dirty:dirty,origValue:origValue,curValue:curValue}};var l=[];$(form_selector).find(fields_selector).each(function(){var dirty_status=isFieldDirty($(this));if(dirty_status.dirty){dirty_status.input=$(this);l.push(dirty_status)}});return l}var NTOPNG_MIN_VISUAL_VALUE=.005;function is_good_ipv4(ipv4){if(/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$/.test(ipv4)){return true}else{return false}}function is_good_ipv6(ipv6){if(/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\:){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test(ipv6)){return true}else{return false}}function isNumeric(value){return/^\d+$/.test(value)}function is_mac_address(what){return/^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$/.test(what)}function is_network_mask(what,optional_mask){var elems=what.split("/");var mask=null;var ip_addr;if(elems.length!=2){if(!optional_mask)return null;else ip_addr=what}else{ip_addr=elems[0];if(!isNumeric(elems[1]))return null;mask=parseInt(elems[1]);if(mask<0)return null}if(is_good_ipv4(ip_addr)){if(mask===null)mask=32;else if(mask>32)return null;return{type:"ipv4",address:ip_addr,mask:mask}}else if(is_good_ipv6(elems[0])){if(mask===null)mask=128;else if(mask>128)return false;return{type:"ipv6",address:ip_addr,mask:mask}}return null}function fbits(bits){if(typeof bits==="undefined")return"-";var sizes=["bps","Kbit/s","Mbit/s","Gbit/s","Tbit/s"];if(bits==0)return"0";if(bits>0&&bits=sizes.length){return"> "+sizes[sizes.length-1]}if(i<=1){return Math.round(bits/Math.pow(1e3,i)*100)/100+" "+sizes[i]}else{var ret=parseFloat(bits/Math.pow(1e3,i)).toFixed(2);if(ret%1==0)ret=Math.round(ret);return ret+" "+sizes[i]}}function export_rate(eps){if(typeof eps==="undefined")return"-";var sizes=["exp/s","Kexp/s"];if(eps==0)return"0";if(eps>0&&eps0&&exports0&&pps0&&pps0&&fps0&&mps'}else{return''}}function getOSIcon(name){var icon="";if(name.search("Linux")!=-1||name.search("Ubuntu")!=-1)icon=" ";else if(name.search("Android")!=-1)icon=" ";else if(name.search("Windows")!=-1||name.search("Win32")!=-1||name.search("MSIE")!=-1)icon=" ";else if(name.search("iPhone")!=-1||name.search("iPad")!=-1||name.search("OS X")!=-1)icon=" ";return icon}function abbreviateString(str,len){if(!str)return"";if(str.length=0&&bytes=kilobyte&&bytes=megabyte&&bytes=gigabyte&&bytes=terabyte)return(bytes/terabyte).toFixed(precision)+" TB";else return bytes.toFixed(precision)+" Bytes"}String.prototype.capitalizeSingleWord=function(){var uc=this.toUpperCase();if(uc=="ASN"||uc=="OS")return uc;else return this.charAt(0).toUpperCase()+this.slice(1)};String.prototype.capitalize=function(){var res=this.split(" ");for(var i in res){res[i]=res[i].capitalizeSingleWord()}return res.join(" ")};function drawTrend(current,last,withColor){if(current==last){return''}else if(current>last){return'"}else{return''}}function toggleAllTabs(enabled){if(enabled===true)$("#historical-tabs-container").find("li").removeClass("disabled").find("a").attr("data-toggle","tab");else $("#historical-tabs-container").find("li").addClass("disabled").find("a").removeAttr("data-toggle")}function disableAllDropdownsAndTabs(){$("select").each(function(){$(this).prop("disabled",true)});toggleAllTabs(false)}function enableAllDropdownsAndTabs(){$("select").each(function(){$(this).prop("disabled",false)});toggleAllTabs(true)}function capitalize(s){return s&&s[0].toUpperCase()+s.slice(1)}function addCommas(nStr){nStr+="";var x=nStr.split(".");var x1=x[0];var x2=x.length>1?"."+x[1]:"";var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1=x1.replace(rgx,"$1"+","+"$2")}return x1+x2}function scaleValue(val,sizes,scale){if(val==0)return[0,sizes[0]];var i=parseInt(Math.floor(Math.log(val)/Math.log(scale)));if(i<0||isNaN(i)){i=0}else if(i>=sizes.length)i=sizes.length-1;return[Math.round(val/Math.pow(scale,i)*10)/10,sizes[i]]}function formatValue(val){var sizes=["","K","M","G","T"];if(val==0)return"0";if(val>0&&val0&&value0&&bytes0&&bits0){years=Math.floor(days/365);if(years>0){days=days%365;msg=years+" year";if(years>1){msg+="s"}msg_array.push(msg);msg=""}msg=days+" day";if(days>1){msg+="s"}msg_array.push(msg);msg=""}if(hours>0){if(hours<10){msg="0"}msg+=hours+":"}if(minutes<10){msg+="0"}msg+=minutes+":";if(sec<10){msg+="0"}msg+=sec;msg_array.push(msg);return msg_array.join(", ")}Date.prototype.format=function(format){var o={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),S:this.getMilliseconds()};if(/(y+)/.test(format))format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length));for(var k in o)if(new RegExp("("+k+")").test(format))format=format.replace(RegExp.$1,RegExp.$1.length==1?o[k]:("00"+o[k]).substr((""+o[k]).length));return format};function epoch2Seen(epoch){var d=new Date(epoch*1e3);var tdiff=Math.floor((new Date).getTime()/1e3-epoch);return d.format("dd/MM/yyyy hh:mm:ss")+" ["+secondsToTime(tdiff)+" ago]"}function graphGetXAxisTicksFormat(diff_epoch){var tickFormat;if(diff_epoch<=86400){tickFormat="%H:%M:%S"}else if(diff_epoch<=2*86400){tickFormat="%b %e, %H:%M:%S"}else{tickFormat="%b %e"}return tickFormat}function paramsExtend(defaults,override){return $.extend({},defaults,override)}function paramsToForm(form,params){form=$(form);for(var k in params){if(params.hasOwnProperty(k)){var input=$('');input.appendTo(form)}}return form}function paramsPairsEncode(params){var i=0;var res={};for(var k in params){res["key_"+i]=k;res["val_"+i]=params[k];i=i+1}return res}jQuery.fn.extend({disable:function(state){return this.each(function(){var $this=$(this);if($this.is("input, button, textarea, select"))this.disabled=state;else $this.toggleClass("disabled",state)})}});function hostkey2hostInfo(host_key){var info;var hostinfo=[];host_key=host_key.replace(/____/g,":");host_key=host_key.replace(/___/g,"/");host_key=host_key.replace(/__/g,".");info=host_key.split("@");return info}function handle_tab_state(nav_object,default_tab){$("a",nav_object).click(function(e){e.preventDefault()});$(" > li > a",nav_object).on("shown.bs.tab",function(e){var id=$(e.target).attr("href").substr(1);if(history.replaceState){history.replaceState(null,null,"#"+id)}else{window.location.hash=id}});var hash=window.location.hash;if(!hash)hash="#"+default_tab;$('a[href="'+hash+'"]',nav_object).tab("show")}String.prototype.sformat=function(){var args=arguments;return this.replace(/{(\d+)}/g,function(match,number){return typeof args[number]!="undefined"?args[number]:match})};if(typeof String.prototype.contains==="undefined"){String.prototype.contains=function(s){return this.indexOf(s)!==-1}}function _add_find_host_link(form,name,data){$("").attr({type:"hidden",id:name,name:name,value:data}).appendTo(form)}function makeFindHostBeforeSubmitCallback(http_prefix){return function(form,data){if(data.type=="mac"){form.attr("action",http_prefix+"/lua/mac_details.lua")}else if(data.type=="network"){form.attr("action",http_prefix+"/lua/hosts_stats.lua");_add_find_host_link(form,"network",data.network)}else if(data.type=="snmp"){form.attr("action",http_prefix+"/lua/pro/enterprise/snmp_interface_details.lua");_add_find_host_link(form,"snmp_port_idx",data.snmp_port_idx);_add_find_host_link(form,"page","layer2")}else if(data.type=="snmp_device"){form.attr("action",http_prefix+"/lua/pro/enterprise/snmp_device_details.lua")}else if(data.type=="asn"){form.attr("action",http_prefix+"/lua/hosts_stats.lua");_add_find_host_link(form,"asn",data.asn)}else{form.attr("action",http_prefix+"/lua/host_details.lua")}return true}}function tstampToDateString(html_tag,format,tdiff){tdiff=tdiff||0;var timestamp=parseInt(html_tag.html())+tdiff;var localized=d3.time.format(format)(new Date(timestamp*1e3));html_tag.html(localized).removeClass("hidden");return localized}function noHtml(s){return s.replace(/<[^>]+>/g,"")}function cleanCustomHostUrl(host){return host.replace(/^http:\/\//gi,"").replace(/^https:\/\//gi,"").replace(/^www\./gi,"").replace(/[^0-9a-zA-Z\.:\/_-]/gi,"")}function parseQuery(queryString){var query={};var pairs=(queryString[0]==="?"?queryString.substr(1):queryString).split("&");for(var i=0;icount){console.error("points mismatch: serie '"+getSerieLabel(schema_name,series[i])+"' has "+data.length+" points, expected "+count);rv=false}else if(data.length.1)return res}function buildTimeArray(start_time,end_time,step){var arr=[];for(var t=start_time;t$.now())$("#btn-jump-time-ahead").addClass("disabled");else $("#btn-jump-time-ahead").removeClass("disabled")}function showQuerySlow(){$("#query-slow-alert").show()}function hideQuerySlow(){$("#query-slow-alert").hide()}function chart_data_sum(series){return series.reduce(function(acc,x){return acc+x.values.reduce(function(acc,pt){return acc+pt[1]||0},0)},0)}function attachStackedChartCallback(chart,schema_name,chart_id,zoom_reset_id,params,step,metric_type,align_step,show_all_smooth,initial_range,ts_table_shown){var pending_chart_request=null;var pending_table_request=null;var d3_sel=d3.select(chart_id);var $chart=$(chart_id);var $zoom_reset=$(zoom_reset_id);var $graph_zoom=$("#graph_zoom");var max_interval=findActualStep(step,params.epoch_begin)*8;var initial_interval=params.epoch_end-params.epoch_begin;var is_max_zoom=initial_interval<=max_interval;var url=http_prefix+"/lua/rest/get/timeseries/ts.lua";var first_load=true;var first_time_loaded=true;var manual_trigger_cmp_serie=false;var datetime_format="dd/MM/yyyy hh:mm:ss";var max_over_total_ratio=3;var query_timer=null;var seconds_before_query_slow=6;var query_completed=0;var query_was_aborted=false;chart.is_zoomed=current_zoom_level>0||has_initial_zoom();var spinner=$('');$chart.parent().css("position","relative");var chart_colors_full=["#69B87F","#94CFA4","#B3DEB6","#E5F1A6","#FFFCC6","#FEDEA5","#FFB97B","#FF8D6D","#E27B85"];var chart_colors_min=["#7CC28F","#FCD384","#FD977B"];var num_ticks_y1=null;var num_ticks_y2=null;var domain_y1=null;var domain_y2=null;var first_run=true;var update_chart_data=function(new_data){d3_sel.datum([]).call(chart);d3_sel.datum(new_data);d3_sel.transition().duration(500).call(chart);if(first_run){num_ticks_y1=chart.yAxis1.ticks();num_ticks_y2=chart.yAxis2.ticks();domain_y1=chart.yDomain1();domain_y2=chart.yDomain2();first_run=false}if(metric_type==="gauge"){var cur_domain_y1=chart.yAxis1.scale().domain();var cur_domain_y2=chart.yAxis2.scale().domain();cur_domain_y1=cur_domain_y1[1]-cur_domain_y1[0];cur_domain_y2=cur_domain_y2[1]-cur_domain_y2[0];if(chart.yAxis1.tickFormat()!=ffloat)chart.yAxis1.ticks(Math.min(cur_domain_y1,num_ticks_y1));if(chart.yAxis2.tickFormat()!=ffloat)chart.yAxis2.ticks(Math.min(cur_domain_y2,num_ticks_y2))}var y1_sum=chart_data_sum(new_data.filter(function(x){return x.yAxis==1}));var y2_sum=chart_data_sum(new_data.filter(function(x){return x.yAxis==2}));if(y1_sum==0)chart.yDomain1([0,1]);else chart.yDomain1(domain_y1);if(y2_sum==0)chart.yDomain2([0,1]);else chart.yDomain2(domain_y2);d3_sel.call(chart);nv.utils.windowResize(chart.update);spinner.remove()};function isLegendDisabled(key,default_val){if(typeof localStorage!=="undefined"){var val=localStorage.getItem("chart_series.disabled."+key);if(val!=null)return val==="true"}return default_val}chart.legend.dispatch.on("legendClick",function(d,i){if(d.legend_key.indexOf("ago")!=-1)manual_trigger_cmp_serie=true;if(typeof localStorage!=="undefined")localStorage.setItem("chart_series.disabled."+d.legend_key,!d.disabled?true:false)});chart.dispatch.on("zoom",function(e){var cur_zoom=[params.epoch_begin,params.epoch_end];var t_start=Math.floor(e.xDomain[0]);var t_end=Math.ceil(e.xDomain[1]);var old_zoomed=chart.is_zoomed;var is_user_zoom=typeof e.is_user_zoom!=="undefined"?e.is_user_zoom:true;chart.is_zoomed=true;if(chart.updateStackedChart(t_start,t_end,false,is_user_zoom)){if(is_user_zoom||e.push_state){current_zoom_level+=1;var url=getHistoryParameters({epoch_begin:t_start,epoch_end:t_end});history.pushState({zoom_level:current_zoom_level,range:[t_start,t_end]},"",url)}chart.fixChartButtons()}else chart.is_zoomed=old_zoomed});function updateZoom(zoom,is_user_zoom,force){var t_start=zoom[0];var t_end=zoom[1];chart.updateStackedChart(t_start,t_end,false,is_user_zoom,null,force);chart.fixChartButtons()}chart.zoom_in=function(){var cur_interval=params.epoch_end-params.epoch_begin;if(cur_interval>60){var delta=cur_interval/4;$("#period_begin").data("DateTimePicker").date(new Date((params.epoch_begin+delta)*1e3));$("#period_end").data("DateTimePicker").date(new Date((params.epoch_end-delta)*1e3));updateChartFromPickers()}};chart.zoom_out=function(){var cur_interval=params.epoch_end-params.epoch_begin;var delta=cur_interval/2;$("#period_begin").data("DateTimePicker").date(new Date((params.epoch_begin-delta)*1e3));$("#period_end").data("DateTimePicker").date(new Date((params.epoch_end+delta)*1e3));updateChartFromPickers()};$chart.on("dblclick",function(event){if($(event.target).hasClass("nv-legend-text"))return;chart.zoom_out()});$zoom_reset.on("click",function(){if(current_zoom_level){history.go(-current_zoom_level)}});window.addEventListener("popstate",function(e){var zoom=initial_range;if(e.state){zoom=e.state.range;current_zoom_level=e.state.zoom_level}else current_zoom_level=0;updateZoom(zoom,true,true)});chart.fixChartButtons=function(){if(current_zoom_level>0||has_initial_zoom()){$graph_zoom.find(".btn-warning:not(.custom-zoom-btn)").addClass("initial-zoom-sel").removeClass("btn-warning");$graph_zoom.find(".custom-zoom-btn").css("visibility","visible");var zoom_link=$graph_zoom.find(".custom-zoom-btn input");var link=zoom_link.val().replace(/&epoch_begin=.*/,"");link+="&epoch_begin="+params.epoch_begin+"&epoch_end="+params.epoch_end;zoom_link.val(link)}else{$graph_zoom.find(".initial-zoom-sel").addClass("btn-warning");$graph_zoom.find(".custom-zoom-btn").css("visibility","hidden");chart.is_zoomed=false}fixJumpButtons(params.epoch_begin,params.epoch_end);if(current_zoom_level>0)$zoom_reset.show();else $zoom_reset.hide()};function checkQueryCompleted(){var flows_dt=$("#chart1-flows");var wait_num_queries=ts_table_shown&&$("#chart1-flows").css("display")!=="none"?2:1;query_completed+=1;if(query_completed>=wait_num_queries){if(query_timer){clearInterval(query_timer);query_timer=null}hideQuerySlow()}}chart.queryWasAborted=function(){return query_was_aborted};chart.abortQuery=function(){query_was_aborted=true;if(pending_chart_request){pending_chart_request.abort();chart.noData(i18n.query_was_aborted);update_chart_data([])}if(pending_table_request)pending_table_request.abort();if(query_timer){clearInterval(query_timer);query_timer=null}hideQuerySlow()};chart.tableRequestCompleted=function(){checkQueryCompleted();pending_table_request=null};chart.getDataUrl=function(){var data_params=jQuery.extend({},params);delete data_params.zoom;delete data_params.ts_compare;data_params.extended=1;return url+"?"+$.param(data_params,true)};var old_start,old_end,old_interval;chart.updateStackedChart=function(tstart,tend,no_spinner,is_user_zoom,on_load_callback,force_update){if(tstart)params.epoch_begin=tstart;if(tend)params.epoch_end=tend;var cur_interval=params.epoch_end-params.epoch_begin;var actual_step=findActualStep(step,params.epoch_begin);max_interval=actual_step*6;if(cur_interval=Date.now()){params.epoch_begin=params.epoch_end-max_interval}else{params.epoch_begin=Math.floor(epoch-max_interval/2);params.epoch_end=Math.floor(epoch+max_interval/2)}is_max_zoom=true;chart.zoomType(null)}}else if(cur_interval>max_interval){is_max_zoom=false;chart.zoomType("x")}old_interval=cur_interval;if(!first_load||has_initial_zoom()||force_update)align_step=null;fixTimeRange(chart,params,align_step,actual_step);if(first_load)initial_range=[params.epoch_begin,params.epoch_end];if(old_start==params.epoch_begin&&old_end==params.epoch_end&&!force_update)return false;old_start=params.epoch_begin;old_end=params.epoch_end;if(pending_table_request)pending_table_request.abort();if(pending_chart_request)pending_chart_request.abort();else if(!no_spinner)spinner.appendTo($chart.parent());$("#period_begin").data("DateTimePicker").date(new Date(params.epoch_begin*1e3));$("#period_end").data("DateTimePicker").maxDate(new Date($.now())).date(new Date(Math.min(params.epoch_end*1e3,$.now())));if(query_timer)clearInterval(query_timer);query_timer=setInterval(showQuerySlow,seconds_before_query_slow*1e3);query_completed=0;query_was_aborted=false;chart.noData(i18n.no_data_available);hideQuerySlow();var req_params=$.extend({},params);if(!canCompareBackwards(req_params.epoch_begin,req_params.epoch_end))delete req_params.ts_compare;pending_chart_request=$.get(url,req_params,function(data){if(data&&data.error)chart.noData(data.error);if(!data||!data.series||!data.series.length||!checkSeriesConsinstency(schema_name,data.count,data.series)){update_chart_data([]);return}var tick_step=Math.ceil(chart.tick_step/data.step)*data.step;chart.xAxis.tickValues(buildTimeArray(data.start,data.start+data.count*data.step,tick_step));chart.xAxis.tickFormat(function(d){return d3.time.format(chart.x_fmt)(new Date(d*1e3))});var res=[];var series=data.series;var total_serie;var color_i=0;var chart_colors=series.length<=chart_colors_min.length?chart_colors_min:chart_colors_full;for(var j=0;jmax_over_total_ratio)is_disabled=true;res.push({key:capitaliseFirstLetter(key),yAxis:1,values:values,type:"line",classed:"line-dashed line-animated",color:"#7E91A0",legend_key:key,disabled:is_disabled})}}if(!data.no_trend&&has_full_data&&total_serie.length>=3){var num_smoothed_points=Math.min(Math.max(Math.floor(total_serie.length/5),3),12);var smooth_functions={trend:[graph_i18n.trend,"#62ADF6",smooth,num_smoothed_points],ema:["EMA","#F96BFF",exponentialMovingAverageArray,{periods:num_smoothed_points}],sma:["SMA","#A900FF",simpleMovingAverageArray,{periods:num_smoothed_points}],rsi:["RSI cur vs past","#00FF5D",relativeStrengthIndexArray,{periods:num_smoothed_points}]};function add_smoothed_serie(fn_to_use){var options=smooth_functions[fn_to_use];var smoothed;if(fn_to_use=="rsi"){if(!past_serie)return;var delta_serie=[];for(var i=0;i0){var aligned;if(fn_to_use!="ema"&&fn_to_use!="sma"&&fn_to_use!="rsi"){var scale=d3.max(total_serie)/max_val;var scaled=$.map(smoothed,function(x){return x*scale});aligned=upsampleSerie(scaled,data.count)}else{var remaining=data.count-smoothed.length;var to_fill=remaining0||enabled_series.length==0){for(var i=0;i0){chart.legend.updateState(false)}update_chart_data(res);first_time_loaded=false;if(data.source_aggregation)$("#data-aggr-dropdown > button > span:first").html(data.source_aggregation)}).fail(function(xhr,status,error){if(xhr.statusText=="abort"){return}console.error("Error while retrieving the timeseries data ["+status+"]: "+error);chart.noData(error);update_chart_data([])}).always(function(data,status,xhr){checkQueryCompleted();pending_chart_request=null});if(first_load){first_load=false;$(function(){var flows_dt=$("#chart1-flows").data("datatable");if(flows_dt)pending_table_request=flows_dt.pendingRequest})}else{var flows_dt=$("#chart1-flows");if(ts_table_shown){updateGraphsTableView(null,params);if($("#chart1-flows").css("display")!=="none")pending_table_request=flows_dt.data("datatable").pendingRequest}}if(typeof on_load_callback==="function")on_load_callback(chart);return true}}var graph_old_view=null;var graph_old_has_nindex=null;var graph_old_nindex_query=null;function tsQueryToTags(ts_query){return ts_query.split(",").reduce(function(params,value){var pos=value.indexOf(":");if(pos!=-1){var k=value.slice(0,pos);var v=value.slice(pos+1);params[k]=v}return params},{})}function recheckGraphTableEntries(){var table_view=graph_table_views;var tdiff=graph_params.epoch_end-graph_params.epoch_begin;var reset_selection=false;$("#chart1-flows").show();$("#graphs-table-selector").show();for(view_id in table_view){var view=table_view[view_id];var elem=$("#"+view.html_id);if(tdiff<=view.min_step){if(graph_old_view.id===view_id)reset_selection=true;elem.hide()}else elem.show()}var items_ul=$("#graphs-table-active-view").closest(".btn-group").find("ul:first");items_ul.find("li.dropdown-header").each(function(idx,e){var next_item=$(e).nextAll("li").filter(function(idx,e){return $(e).css("display")!=="none"||!$(e).attr("data-view-id")}).first();var divider=$(e).nextAll(".divider").first();if(!next_item.attr("data-view-id")){$(e).hide();divider.hide()}else{$(e).show();divider.show()}});if(reset_selection){var first_view=items_ul.find("li[data-view-id]").filter(function(idx,e){return $(e).css("display")!=="none"}).first();if(first_view.length)setActiveGraphsTableView(first_view.attr("data-view-id"));else{$("#chart1-flows").hide();$("#graphs-table-selector").hide()}return false}return true}function updateGraphsTableView(view,graph_params,has_nindex,nindex_query,per_page){if(view)graph_old_view=view;if(!recheckGraphTableEntries(graph_params)){return}if(view){graph_old_has_nindex=has_nindex;graph_old_nindex_query=nindex_query}else{view=graph_old_view;has_nindex=graph_old_has_nindex;nindex_query=graph_old_nindex_query}var graph_table=$("#chart1-flows");nindex_query=nindex_query+"&begin_time_clause="+graph_params.epoch_begin+"&end_time_clause="+graph_params.epoch_end;var nindex_buttons="";var params_obj=tsQueryToTags(graph_params.ts_query);if(!params_obj.host){nindex_buttons+='
"}nindex_buttons+='
";if(view.columns){var url=http_prefix+(view.nindex_view?"/lua/pro/get_nindex_flows.lua":"/lua/pro/get_ts_table.lua");var columns=view.columns.map(function(col){return{title:col[1],field:col[0],css:{textAlign:col[2],width:col[3]},hidden:col[4]?true:false}});columns.push({title:i18n.actions,field:"drilldown",css:{width:"1%","white-space":"nowrap","text-align":"center"}});var old_dt=graph_table.data("datatable");if(old_dt&&old_dt.pendingRequest)old_dt.pendingRequest.abort();graph_table.removeData("datatable");graph_table.html("");graph_table.datatable({title:"",url:url,perPage:per_page,noResultsMessage:function(){if(ts_chart.queryWasAborted())return i18n.query_was_aborted;else return i18n.no_results_found},post:function(){var params=$.extend({},graph_params);delete params.ts_compare;delete params.initial_point;params.limit=1;params.detail_view=view.id;return params},loadingYOffset:40,columns:columns,buttons:view.nindex_view?[nindex_buttons]:[],tableCallback:function(){var data=this.resultset;ts_chart.tableRequestCompleted();if(!data){return}if(data.currentPage>1)graph_table.data("has_interaction",true);var stats_div=$("#chart1-flows-stats");var has_drilldown=data&&data.data.some(function(row){return row.drilldown});if(!has_drilldown)$("table td:last-child, th:last-child",graph_table).remove();if(data&&data.stats&&data.stats.loading_time){$("#flows-load-time").html(data.stats.loading_time);$("#flows-processed-records").html(data.stats.num_records_processed);stats_div.show()}else stats_div.hide()},rowCallback:function(row,row_data){if(typeof row_data.tags==="object"&&(params_obj.category&&row_data.tags.category===params_obj.category||params_obj.protocol&&row_data.tags.protocol===params_obj.protocol)){row.addClass("info")}return row}})}}function draw_processes_graph(http_prefix,graph_div_id,host){var links;var nodes={};var url=http_prefix+"/lua/get_processes_graph_data.lua?host="+host;d3.json(url,function(error,json){if(error)return console.warn(error);links=json;var _link;links.forEach(function(link){if(link.source_pid==-1){_link=http_prefix+"/lua/host_details.lua?host="+link.source}else{_link=http_prefix+"/lua/process_details.lua?pid="+link.source_pid+"&pid_name="+link.source_name+"&host="+host+"&page=flows"}link.source=nodes[link.source]||(nodes[link.source]={name:link.source_name,num:link.source,link:_link,type:link.source_type,pid:link.source_pid});if(link.target_pid==-1){_link=http_prefix+"/lua/host_details.lua?host="+link.target}else{_link=http_prefix+"/lua/process_details.lua?pid="+link.target_pid+"&pid_name="+link.target_name+"&host="+host+"&page=flows"}link.target=nodes[link.target]||(nodes[link.target]={name:link.target_name,num:link.target,link:_link,type:link.target_type,pid:link.target_pid})});var width=960,height=500,arrow_size=6;var color=d3.scale.category10();color["proc"]="red";color["host"]="lightsteelblue";var force=d3.layout.force().nodes(d3.values(nodes)).links(links).size([width,height]).linkDistance(120).charge(-400).on("tick",tick).start();var svg=d3.select("#"+graph_div_id).append("svg").attr("id","ebpf_graph").attr("width",width).attr("height",height);svg.append("defs").selectAll("marker").data(["proc2proc","proc2host","host2proc","host2host"]).enter().append("marker").attr("id",function(d){return d}).attr("viewBox","0 -5 10 10").attr("refX",15).attr("refY",-1.5).attr("markerWidth",arrow_size).attr("markerHeight",arrow_size).attr("orient","auto").append("path").attr("d","M0,-5L10,0L0,5");var path=svg.append("g").selectAll("path").data(force.links()).enter().append("path").attr("class",function(d){return"link "+d.type}).attr("marker-end",function(d){return"url(#"+d.type+")"});var circle=svg.append("g").selectAll("circle").data(force.nodes()).enter().append("circle").attr("class","ebpf_circle").attr("r",8).style("fill",function(d){return color[d.type]}).call(force.drag).on("dblclick",function(d){window.location.href=d.link});var text=svg.append("g").selectAll("text").data(force.nodes()).enter().append("text").attr("class","ebpf_text").attr("x",12).attr("y",".31em").text(function(d){if(d.pid>=0)return d.name+" [pid: "+d.pid+"]";else{return d.name}});function tick(){path.attr("d",linkArc);circle.attr("transform",transform);text.attr("transform",transform)}function linkArc(d){var dx=d.target.x-d.source.x,dy=d.target.y-d.source.y,dr=Math.sqrt(dx*dx+dy*dy);return"M"+d.source.x+","+d.source.y+"A"+dr+","+dr+" 0 0,1 "+d.target.x+","+d.target.y}function transform(d){return"translate("+d.x+","+d.y+")"}})}function makeUniqueValidator(items_function){return function(field){var cmp_name=field.val();var count=0;if(!cmp_name)return true;items_function(field).each(function(){var name=$(this).val();if(name==cmp_name)count=count+1});return count==1}}function memberValueValidator(input){var member=input.val();if(member==="")return true;return is_mac_address(member)||is_network_mask(member,true)}function makePasswordPatternValidator(pattern){return function passwordPatternValidator(input){if(!input.val())return true;return $(input).val().match(pattern)}}function passwordMatchValidator(input){var other_input=$(input).closest("form").find("[data-passwordmatch]").not(input);if(!input.val()||!other_input.val())return true;return other_input.val()===input.val()}function poolnameValidator(input){if(!input.val())return true;return $(input).val().match(/^[a-z0-9_]*$/)}function passwordMatchRecheck(form){var items=$(form).find("[data-passwordmatch]");var not_empty=0;items.each(function(){if($(this).val()!="")not_empty++});if(not_empty==items.length)items.trigger("input")}function hostOrMacValidator(input){var host=input.val();if(host==="")return true;return is_mac_address(host)||is_good_ipv4(host)||is_good_ipv6(host)}function ipAddressValidator(input){var host=input.val();if(host==="")return true;return is_good_ipv4(host)||is_good_ipv6(host)} //# sourceMappingURL=ntop.min.js.map \ No newline at end of file diff --git a/httpdocs/js/ntop.min.js.map b/httpdocs/js/ntop.min.js.map index f61ba39f0a..346c4b6db0 100644 --- a/httpdocs/js/ntop.min.js.map +++ b/httpdocs/js/ntop.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["datatable_utils.js","ays_utils.js","ntopng_utils.js","graph_utils.js","ebpf_utils.js","ntopng_validators.js"],"names":["datatableRemoveEmptyRow","table","$","remove","datatableAddEmptyRow","empty_str","columns","filter","this","css","length","html","datatableGetNumDisplayedItems","datatableIsEmpty","datatableGetByForm","form","parent","datatableUndoAddRow","new_row","bt_to_enable","callback_str","removeAttr","closest","aysUpdateForm","dt","window","datatableForEachRow","callbacks","each","row_i","bind","i","datatableAddButtonCallback","td_idx","label","bs_class","link","append","datatableAddDeleteButtonCallback","datatableAddActionButtonCallback","datatableAddLinkButtonCallback","datatableMakeSelectUnique","tr_obj","added_rows_prefix","options","paramsExtend","on_change","noop","selector_fn","obj","find","first","datatableForeachSelectOtherThan","this_select","callback","other","datatableOptionChangeStatus","option_obj","enable","select_obj","should_reset","val","attr","new_val","datatableOnSelectEntryChange","change_callback","old_value","new_value","others","push","datatableOnAddSelectEntry","trigger","new_sel","select","on","datatableOrderedInsert","to_insert","to_insert_val","cmp_fn","a","b","inserted","tr","cmp_val","parseInt","isNaN","before","datatableIsLastPage","lastpage","hasClass","datatableGetColumn","id_key","id_value","res","data","resultset","item","datatableGetColumnIndex","column_key","index","findIndex","field","datatableRefreshRows","column_id","$dt","rows","ids","id_to_row","row","data_id","url","params","custom_hosts","join","ajax","type","cache","success","result","row_idx","row_html","row_tds","key","col_idx","cell","aysHandleForm","form_selector","default_options","submit_selector","on_dirty_callback","on_clean_callback","handle_submit_buttons","handle_datatable","handle_tabs","disable_on_dirty","ays_options","o","extend","areYouSure","addClass","removeClass","aysResetForm","aysRecheckForm","aysGetDirty","fields_selector","getValue","$field","undefined","is","$option","isFieldDirty","origValue","curValue","dirty","l","dirty_status","input","NTOPNG_MIN_VISUAL_VALUE","is_good_ipv4","ipv4","test","is_good_ipv6","ipv6","isNumeric","value","is_mac_address","what","is_network_mask","optional_mask","elems","split","mask","ip_addr","address","fbits","bits","sizes","bits_log1000","Math","log","floor","round","pow","ret","parseFloat","toFixed","export_rate","eps","scaleValue","exports_format","exports","exports_label","i18n","toLowerCase","fbits_from_bytes","bytes","fpackets","pps","fpoints","fflows","fps","fmsgs","mps","falerts","aps","fint","x","toString","replace","ffloat","fpercent","fdate","when","epoch","d","Date","capitaliseFirstLetter","string","charAt","toUpperCase","slice","String","prototype","startsWith","indexOf","get_trend","actual","getOSIcon","name","icon","search","abbreviateString","str","len","substring","bytesToSize","precision","kilobyte","megabyte","gigabyte","terabyte","capitalizeSingleWord","uc","capitalize","drawTrend","current","last","withColor","toggleAllTabs","enabled","disableAllDropdownsAndTabs","prop","enableAllDropdownsAndTabs","s","addCommas","nStr","x1","x2","rgx","scale","formatValue","formatPackets","n","formatPoints","formatFlows","formatMessages","fmillis","bytesToVolume","bytesToVolumeAndLabel","bitsToSize","factor","secondsToTime","seconds","days","hours","minutes","sec","msg","msg_array","years","format","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","S","getMilliseconds","RegExp","$1","getFullYear","substr","k","epoch2Seen","tdiff","getTime","graphGetXAxisTicksFormat","diff_epoch","tickFormat","defaults","override","paramsToForm","hasOwnProperty","appendTo","paramsPairsEncode","jQuery","fn","disable","state","$this","disabled","toggleClass","hostkey2hostInfo","host_key","info","hostinfo","handle_tab_state","nav_object","default_tab","click","e","preventDefault","id","target","history","replaceState","location","hash","tab","sformat","args","arguments","match","number","contains","_add_find_host_link","makeFindHostBeforeSubmitCallback","http_prefix","network","snmp_port_idx","asn","tstampToDateString","html_tag","timestamp","localized","d3","time","noHtml","cleanCustomHostUrl","host","parseQuery","queryString","query","pairs","pair","decodeURIComponent","getHistoryParameters","cur_params","new_params","new_query","param","baseUrl","protocol","pathname","schema_2_label","data_2_label","graph_i18n","initLabelMaps","_schema_2_label","_data_2_label","_graph_i18n","getSerieLabel","schema","serie","visualization","serie_index","data_label","new_label","metrics_labels","ext_label","tags","category","l4proto","device","if_index","port","exporter","ifname","profile","user_script","traffic_volume","traffic","getValueFormatter","metric_type","series","custom_formatter","stats","formatters","console","error","as_counter","max_val","makeFlatLineValues","tstart","tstep","num","t","values","checkSeriesConsinstency","schema_name","count","rv","upsampleSerie","num_points","intervals","lerp","v0","v1","prev_i","next_i","min","ceil","v","buildTotalSerie","data_series","transpose","map","g","sum","arrayToNvSerie","serie_data","start","step","buildOtherSerie","total_serie","visual_total","warn","max","buildTimeArray","start_time","end_time","arr","fixTimeRange","chart","align_step","actual_step","epoch_end","epoch_begin","frame","align","tick_step","resolution","fmt","range_params","range","limit","x_fmt","findActualStep","raw_step","supported_steps","retention","now_ts","now","delta","partial","aggregation_dp","tframe","retention_dp","has_initial_zoom","current_zoom_level","canCompareBackwards","jump_duration","current_duration","fixJumpButtons","duration","showQuerySlow","show","hideQuerySlow","hide","chart_data_sum","reduce","acc","pt","attachStackedChartCallback","chart_id","zoom_reset_id","show_all_smooth","initial_range","ts_table_shown","pending_chart_request","pending_table_request","d3_sel","$chart","$zoom_reset","$graph_zoom","max_interval","initial_interval","is_max_zoom","first_load","first_time_loaded","manual_trigger_cmp_serie","datetime_format","max_over_total_ratio","query_timer","seconds_before_query_slow","query_completed","query_was_aborted","is_zoomed","spinner","chart_colors_full","chart_colors_min","num_ticks_y1","num_ticks_y2","domain_y1","domain_y2","first_run","update_chart_data","new_data","datum","call","transition","yAxis1","ticks","yAxis2","yDomain1","yDomain2","cur_domain_y1","domain","cur_domain_y2","y1_sum","yAxis","y2_sum","nv","utils","windowResize","update","isLegendDisabled","default_val","localStorage","getItem","legend","dispatch","legend_key","setItem","cur_zoom","t_start","xDomain","t_end","old_zoomed","is_user_zoom","updateStackedChart","push_state","pushState","zoom_level","fixChartButtons","updateZoom","zoom","force","zoom_in","cur_interval","date","updateChartFromPickers","zoom_out","event","go","addEventListener","zoom_link","checkQueryCompleted","flows_dt","wait_num_queries","clearInterval","queryWasAborted","abortQuery","abort","noData","tableRequestCompleted","getDataUrl","data_params","ts_compare","extended","old_start","old_end","old_interval","tend","no_spinner","on_load_callback","force_update","new_end","zoomType","maxDate","setInterval","no_data_available","req_params","get","xAxis","tickValues","color_i","chart_colors","j","visualization_options","current_step","axis","color","has_full_data","additional_series","total","other_serie","past_serie","ratio_over_total","is_disabled","classed","no_trend","num_smoothed_points","smooth_functions","trend","smooth","ema","exponentialMovingAverageArray","periods","sma","simpleMovingAverageArray","rsi","relativeStrengthIndexArray","add_smoothed_serie","fn_to_use","smoothed","delta_serie","aligned","scaled","remaining","to_fill","splice","yDomainRatioY2","formatter1","value_formatter","statistics","tot_formatter","stats_formatter","yAxis1_formatter","second_axis_series","formatter2","value_formatter2","yAxis2_formatter","stats_table","average","avg","total_cell","average_cell","min_cell","max_cell","perc_cell","min_val","min_val_idx","max_val_idx","enabled_series","updateState","source_aggregation","fail","xhr","status","statusText","always","pendingRequest","updateGraphsTableView","graph_old_view","graph_old_has_nindex","graph_old_nindex_query","tsQueryToTags","ts_query","pos","recheckGraphTableEntries","table_view","graph_table_views","graph_params","reset_selection","view_id","view","elem","html_id","min_step","items_ul","idx","next_item","nextAll","divider","first_view","setActiveGraphsTableView","has_nindex","nindex_query","per_page","graph_table","nindex_buttons","params_obj","nindex_view","col","title","textAlign","width","hidden","actions","white-space","text-align","old_dt","removeData","datatable","perPage","noResultsMessage","ts_chart","no_results_found","post","initial_point","detail_view","loadingYOffset","buttons","tableCallback","currentPage","stats_div","has_drilldown","some","drilldown","loading_time","num_records_processed","rowCallback","row_data","draw_processes_graph","graph_div_id","links","nodes","json","_link","forEach","source_pid","source","source_name","source_type","pid","target_pid","target_name","target_type","height","arrow_size","category10","layout","size","linkDistance","charge","tick","svg","selectAll","enter","path","circle","style","drag","href","text","linkArc","transform","dx","dy","y","dr","sqrt","makeUniqueValidator","items_function","cmp_name","memberValueValidator","member","makePasswordPatternValidator","pattern","passwordPatternValidator","passwordMatchValidator","other_input","not","poolnameValidator","passwordMatchRecheck","items","not_empty","hostOrMacValidator","ipAddressValidator"],"mappings":"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","file":"ntop.min.js"} \ No newline at end of file +{"version":3,"sources":["datatable_utils.js","ays_utils.js","ntopng_utils.js","graph_utils.js","ebpf_utils.js","ntopng_validators.js"],"names":["datatableRemoveEmptyRow","table","$","remove","datatableAddEmptyRow","empty_str","columns","filter","this","css","length","html","datatableGetNumDisplayedItems","datatableIsEmpty","datatableGetByForm","form","parent","datatableUndoAddRow","new_row","bt_to_enable","callback_str","removeAttr","closest","aysUpdateForm","dt","window","datatableForEachRow","callbacks","each","row_i","bind","i","datatableAddButtonCallback","td_idx","label","bs_class","link","append","datatableAddDeleteButtonCallback","datatableAddActionButtonCallback","datatableAddLinkButtonCallback","datatableMakeSelectUnique","tr_obj","added_rows_prefix","options","paramsExtend","on_change","noop","selector_fn","obj","find","first","datatableForeachSelectOtherThan","this_select","callback","other","datatableOptionChangeStatus","option_obj","enable","select_obj","should_reset","val","attr","new_val","datatableOnSelectEntryChange","change_callback","old_value","new_value","others","push","datatableOnAddSelectEntry","trigger","new_sel","select","on","datatableOrderedInsert","to_insert","to_insert_val","cmp_fn","a","b","inserted","tr","cmp_val","parseInt","isNaN","before","datatableIsLastPage","lastpage","hasClass","datatableGetColumn","id_key","id_value","res","data","resultset","item","datatableGetColumnIndex","column_key","index","findIndex","field","datatableRefreshRows","column_id","$dt","rows","ids","id_to_row","row","data_id","url","params","custom_hosts","join","ajax","type","cache","success","result","row_idx","row_html","row_tds","key","col_idx","cell","aysHandleForm","form_selector","default_options","submit_selector","on_dirty_callback","on_clean_callback","handle_submit_buttons","handle_datatable","handle_tabs","disable_on_dirty","ays_options","o","extend","areYouSure","addClass","removeClass","aysResetForm","aysRecheckForm","aysGetDirty","fields_selector","getValue","$field","undefined","is","$option","isFieldDirty","origValue","curValue","dirty","l","dirty_status","input","NTOPNG_MIN_VISUAL_VALUE","is_good_ipv4","ipv4","test","is_good_ipv6","ipv6","isNumeric","value","is_mac_address","what","is_network_mask","optional_mask","elems","split","mask","ip_addr","address","fbits","bits","sizes","bits_log1000","Math","log","floor","round","pow","ret","parseFloat","toFixed","export_rate","eps","scaleValue","exports_format","exports","exports_label","i18n","toLowerCase","fbits_from_bytes","bytes","fpackets","pps","fpoints","fflows","fps","fmsgs","mps","falerts","aps","fint","x","toString","replace","ffloat","fpercent","fdate","when","epoch","d","Date","capitaliseFirstLetter","string","charAt","toUpperCase","slice","String","prototype","startsWith","indexOf","get_trend","actual","getOSIcon","name","icon","search","abbreviateString","str","len","substring","bytesToSize","precision","kilobyte","megabyte","gigabyte","terabyte","capitalizeSingleWord","uc","capitalize","drawTrend","current","last","withColor","toggleAllTabs","enabled","disableAllDropdownsAndTabs","prop","enableAllDropdownsAndTabs","s","addCommas","nStr","x1","x2","rgx","scale","formatValue","formatPackets","n","formatPoints","formatFlows","formatMessages","fmillis","bytesToVolume","bytesToVolumeAndLabel","bitsToSize","factor","secondsToTime","seconds","days","hours","minutes","sec","msg","msg_array","years","format","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","S","getMilliseconds","RegExp","$1","getFullYear","substr","k","epoch2Seen","tdiff","getTime","graphGetXAxisTicksFormat","diff_epoch","tickFormat","defaults","override","paramsToForm","hasOwnProperty","appendTo","paramsPairsEncode","jQuery","fn","disable","state","$this","disabled","toggleClass","hostkey2hostInfo","host_key","info","hostinfo","handle_tab_state","nav_object","default_tab","click","e","preventDefault","id","target","history","replaceState","location","hash","tab","sformat","args","arguments","match","number","contains","_add_find_host_link","makeFindHostBeforeSubmitCallback","http_prefix","network","snmp_port_idx","asn","tstampToDateString","html_tag","timestamp","localized","d3","time","noHtml","cleanCustomHostUrl","host","parseQuery","queryString","query","pairs","pair","decodeURIComponent","getHistoryParameters","cur_params","new_params","new_query","param","baseUrl","protocol","pathname","schema_2_label","data_2_label","graph_i18n","initLabelMaps","_schema_2_label","_data_2_label","_graph_i18n","getSerieLabel","schema","serie","visualization","serie_index","data_label","new_label","metrics_labels","ext_label","tags","category","l4proto","device","if_index","port","exporter","ifname","profile","user_script","command","traffic_volume","traffic","getValueFormatter","metric_type","series","custom_formatter","stats","formatters","console","error","as_counter","max_val","makeFlatLineValues","tstart","tstep","num","t","values","checkSeriesConsinstency","schema_name","count","rv","upsampleSerie","num_points","intervals","lerp","v0","v1","prev_i","next_i","min","ceil","v","buildTotalSerie","data_series","transpose","map","g","sum","arrayToNvSerie","serie_data","start","step","buildOtherSerie","total_serie","visual_total","warn","max","buildTimeArray","start_time","end_time","arr","fixTimeRange","chart","align_step","actual_step","epoch_end","epoch_begin","frame","align","tick_step","resolution","fmt","range_params","range","limit","x_fmt","findActualStep","raw_step","supported_steps","retention","now_ts","now","delta","partial","aggregation_dp","tframe","retention_dp","has_initial_zoom","current_zoom_level","canCompareBackwards","jump_duration","current_duration","fixJumpButtons","duration","showQuerySlow","show","hideQuerySlow","hide","chart_data_sum","reduce","acc","pt","attachStackedChartCallback","chart_id","zoom_reset_id","show_all_smooth","initial_range","ts_table_shown","pending_chart_request","pending_table_request","d3_sel","$chart","$zoom_reset","$graph_zoom","max_interval","initial_interval","is_max_zoom","first_load","first_time_loaded","manual_trigger_cmp_serie","datetime_format","max_over_total_ratio","query_timer","seconds_before_query_slow","query_completed","query_was_aborted","is_zoomed","spinner","chart_colors_full","chart_colors_min","num_ticks_y1","num_ticks_y2","domain_y1","domain_y2","first_run","update_chart_data","new_data","datum","call","transition","yAxis1","ticks","yAxis2","yDomain1","yDomain2","cur_domain_y1","domain","cur_domain_y2","y1_sum","yAxis","y2_sum","nv","utils","windowResize","update","isLegendDisabled","default_val","localStorage","getItem","legend","dispatch","legend_key","setItem","cur_zoom","t_start","xDomain","t_end","old_zoomed","is_user_zoom","updateStackedChart","push_state","pushState","zoom_level","fixChartButtons","updateZoom","zoom","force","zoom_in","cur_interval","date","updateChartFromPickers","zoom_out","event","go","addEventListener","zoom_link","checkQueryCompleted","flows_dt","wait_num_queries","clearInterval","queryWasAborted","abortQuery","abort","noData","tableRequestCompleted","getDataUrl","data_params","ts_compare","extended","old_start","old_end","old_interval","tend","no_spinner","on_load_callback","force_update","new_end","zoomType","maxDate","setInterval","no_data_available","req_params","get","xAxis","tickValues","color_i","chart_colors","j","visualization_options","current_step","axis","color","has_full_data","additional_series","total","other_serie","past_serie","ratio_over_total","is_disabled","classed","no_trend","num_smoothed_points","smooth_functions","trend","smooth","ema","exponentialMovingAverageArray","periods","sma","simpleMovingAverageArray","rsi","relativeStrengthIndexArray","add_smoothed_serie","fn_to_use","smoothed","delta_serie","aligned","scaled","remaining","to_fill","splice","yDomainRatioY2","formatter1","value_formatter","statistics","tot_formatter","stats_formatter","yAxis1_formatter","second_axis_series","formatter2","value_formatter2","yAxis2_formatter","stats_table","average","avg","total_cell","average_cell","min_cell","max_cell","perc_cell","min_val","min_val_idx","max_val_idx","enabled_series","updateState","source_aggregation","fail","xhr","status","statusText","always","pendingRequest","updateGraphsTableView","graph_old_view","graph_old_has_nindex","graph_old_nindex_query","tsQueryToTags","ts_query","pos","recheckGraphTableEntries","table_view","graph_table_views","graph_params","reset_selection","view_id","view","elem","html_id","min_step","items_ul","idx","next_item","nextAll","divider","first_view","setActiveGraphsTableView","has_nindex","nindex_query","per_page","graph_table","nindex_buttons","params_obj","nindex_view","col","title","textAlign","width","hidden","actions","white-space","text-align","old_dt","removeData","datatable","perPage","noResultsMessage","ts_chart","no_results_found","post","initial_point","detail_view","loadingYOffset","buttons","tableCallback","currentPage","stats_div","has_drilldown","some","drilldown","loading_time","num_records_processed","rowCallback","row_data","draw_processes_graph","graph_div_id","links","nodes","json","_link","forEach","source_pid","source","source_name","source_type","pid","target_pid","target_name","target_type","height","arrow_size","category10","layout","size","linkDistance","charge","tick","svg","selectAll","enter","path","circle","style","drag","href","text","linkArc","transform","dx","dy","y","dr","sqrt","makeUniqueValidator","items_function","cmp_name","memberValueValidator","member","makePasswordPatternValidator","pattern","passwordPatternValidator","passwordMatchValidator","other_input","not","poolnameValidator","passwordMatchRecheck","items","not_empty","hostOrMacValidator","ipAddressValidator"],"mappings":"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"} \ No newline at end of file diff --git a/scripts/callbacks/system/minute/redis.lua b/scripts/callbacks/system/minute/redis.lua index c8d9483598..384a12a6c3 100644 --- a/scripts/callbacks/system/minute/redis.lua +++ b/scripts/callbacks/system/minute/redis.lua @@ -33,15 +33,36 @@ function probe.loadSchemas(ts_utils) }) schema:addTag("ifid") schema:addMetric("num_keys") + + -- Cache + schema = ts_utils.newSchema("redis:hits", {metrics_type = ts_utils.metrics.gauge}) + schema:addTag("ifid") + schema:addTag("command") + schema:addMetric("num_calls") end -- ############################################## function probe.getTimeseriesMenu(ts_utils) - return { + local menu = { {schema = "redis:memory", label = i18n("about.ram_memory")}, {schema = "redis:keys", label = i18n("system_stats.redis.redis_keys")}, + {separator=1, label=i18n("system_stats.redis.commands")}, } + + -- Populate individual commands timeseries + local series = ts_utils.listSeries("redis:hits", {ifid = getSystemInterfaceId()}, 0) + + for _, serie in pairsByField(series, "command", asc) do + menu[#menu + 1] = { + schema = "redis:hits", + label = i18n("system_stats.redis.command_hits", {cmd = string.upper(string.sub(serie.command, 5))}), + extra_params = {redis_command = serie.command}, + metrics_labels = {i18n("graphs.num_calls")}, + } + end + + return(menu) end -- ############################################## @@ -114,9 +135,30 @@ end function probe.runTask(when, ts_utils) local ifid = getSystemInterfaceId() local stats = probe.getStats() + local hits_key = "ntopng.cache.redis.stats" + local json = require("dkjson") + local old_hits_stats = ntop.getCache(hits_key) + local hits_stats = ntop.getCacheStats() + + if(not isEmptyString(old_hits_stats)) then + old_hits_stats = json.decode(old_hits_stats) or {} + else + old_hits_stats = {} + end ts_utils.append("redis:memory", {ifid = ifid, resident_bytes = stats["memory"]}, when) ts_utils.append("redis:keys", {ifid = ifid, num_keys = stats["dbsize"]}, when) + + for key, val in pairs(hits_stats) do + if(old_hits_stats[key] ~= nil) then + local delta = math.max(val - old_hits_stats[key], 0) + + -- Dump the delta value as a gauge + ts_utils.append("redis:hits", {ifid = ifid, command = key, num_calls = delta}, when) + end + end + + ntop.setCache(hits_key, json.encode(hits_stats)) end -- ############################################## diff --git a/scripts/locales/en.lua b/scripts/locales/en.lua index 70ee40be3f..a7f22d62c2 100644 --- a/scripts/locales/en.lua +++ b/scripts/locales/en.lua @@ -828,9 +828,9 @@ local lang = { ["last_calls_per_sec"] = "Last Calls/sec", ["last_duration"] = "Last Duration", ["last_num_calls"] = "Last Num Calls", - ["no_callbacks_defined"] = "No callbacks found", ["no_callbacks_available"] = "No callbacks available.", ["no_callbacks_available_disabled_alerts"] = "No callbacks available. Callbacks require alerts to be enabled from the Preferences", + ["no_callbacks_defined"] = "No callbacks found", ["note_add_custom_scripts"] = "%{product} looks for custom scripts in these directories.", ["note_create_custom_scripts"] = "Documentation to create custom scripts for the execution of callbacks is available at the following link .", ["note_flow_application_detected"] = "\"Application Detected\" callbacks are executed right after the detection of the application. This occurs within the first 12 packets of a flow for packet interfaces or immediately after a flow has been received for ZMQ interfaces.", @@ -3446,6 +3446,8 @@ local lang = { ["value"] = "Value", ["write_througput"] = "Write Througput", ["redis"] = { + ["command_hits"] = "%{cmd} Calls", + ["commands"] = "Commands", ["redis_health_green"] = "OK", ["redis_health_green_descr"] = "Redis is working OK.", ["redis_health_red"] = "Persistence Issues", @@ -3454,6 +3456,8 @@ local lang = { ["short_desc_redis_health"] = "Current Redis health.", ["short_desc_redis_keys"] = "Total keys in the Redis database.", ["short_desc_redis_ram_memory"] = "Total memory Redis has obtained from the operating system.", + ["top_redis_commands"] = "Top Commands Calls", + ["tot_calls"] = "Total Calls", }, }, ["telemetry_page"] = { diff --git a/scripts/lua/get_redis_stats.lua b/scripts/lua/get_redis_stats.lua index 9235a05c54..b246ea8c16 100644 --- a/scripts/lua/get_redis_stats.lua +++ b/scripts/lua/get_redis_stats.lua @@ -6,6 +6,7 @@ dirs = ntop.getDirs() package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path require "lua_utils" +local ts_utils = require("ts_utils") --local json = require("dkjson") sendHTTPContentTypeHeader('text/html') @@ -14,7 +15,13 @@ local stats = ntop.getCacheStats() for key,val in pairsByValues(stats, rev) do if(key ~= "num_reconnections") then - print(""..string.upper(string.sub(key, 5))..""..val.."\n") + local chart = "" + + if(ts_utils.exists("redis:hits", {ifid=getSystemInterfaceId(), command=key})) then + chart = '' + end + + print(""..string.upper(string.sub(key, 5)).."".. chart ..""..val.."\n") end end diff --git a/scripts/lua/modules/graph_utils.lua b/scripts/lua/modules/graph_utils.lua index e9de96d634..2ca7699461 100644 --- a/scripts/lua/modules/graph_utils.lua +++ b/scripts/lua/modules/graph_utils.lua @@ -298,7 +298,7 @@ local graph_menu_entries = {} -- the entry will be shown but will be grayed out (disabled state) -- - If timeseries exist for the entry in the visualized interval, the -- entry will be shown and will be clickable -function populateGraphMenuEntry(label, base_url, params, tab_id, needs_separator, separator_label, pending) +function populateGraphMenuEntry(label, base_url, params, tab_id, needs_separator, separator_label, pending, extra_params) local url = getPageUrl(base_url, params) local step = nil @@ -321,6 +321,7 @@ function populateGraphMenuEntry(label, base_url, params, tab_id, needs_separator separator_label = separator_label, pending = pending, -- true for batched operations step = step, + extra_params = extra_params, } graph_menu_entries[#graph_menu_entries + 1] = entry @@ -345,12 +346,14 @@ end function graphMenuGetActive(schema, params) -- These tags are used to determine the active timeseries entry - local match_tags = {ts_schema=1, ts_query=1, protocol=1, category=1, snmp_port_idx=1, exporter_ifname=1, l4proto=1} + local match_tags = {ts_schema=1, ts_query=1, protocol=1, category=1, snmp_port_idx=1, exporter_ifname=1, l4proto=1, command=1} for _, entry in pairs(graph_menu_entries) do + local extra_params = entry.extra_params or {} + if entry.schema == schema and entry.params then for k, v in pairs(params) do - if match_tags[k] and tostring(entry.params[k]) ~= tostring(v) then + if (match_tags[k] or extra_params[k]) and tostring(entry.params[k]) ~= tostring(v) then goto continue end end @@ -514,7 +517,7 @@ function printSeries(options, tags, start_time, end_time, base_url, params) local v = serie.label local exists = false local entry_tags = tags - local entry_params = params + local entry_params = table.merge(params, serie.extra_params) local entry_baseurl = base_url local override_link = nil @@ -577,7 +580,7 @@ function printSeries(options, tags, start_time, end_time, base_url, params) if exists then local entry = populateGraphMenuEntry(v, entry_baseurl, table.merge(entry_params, {ts_schema=k}), nil, - needs_separator, separator_label, #batch_ids --[[ pending ]], nil) + needs_separator, separator_label, #batch_ids --[[ pending ]], serie.extra_params) if entry then for _, batch_id in pairs(batch_ids) do diff --git a/scripts/lua/modules/http_lint.lua b/scripts/lua/modules/http_lint.lua index e9bd963ccf..3af3475639 100644 --- a/scripts/lua/modules/http_lint.lua +++ b/scripts/lua/modules/http_lint.lua @@ -1504,6 +1504,7 @@ local known_parameters = { ["rtt_host"] = validateSingleWord, ["rtt_max"] = validateEmptyOr(validateNumber), ["disabled_status"] = validateListOfTypeInline(validateNumber), + ["redis_command"] = validateSingleWord, -- Containers ["pod"] = validateSingleWord, diff --git a/scripts/lua/modules/system_scripts_utils.lua b/scripts/lua/modules/system_scripts_utils.lua index 22aec929f2..b1f2623b9b 100644 --- a/scripts/lua/modules/system_scripts_utils.lua +++ b/scripts/lua/modules/system_scripts_utils.lua @@ -205,10 +205,11 @@ function system_scripts.getAdditionalTimeseries(module_filter) if(probe.getTimeseriesMenu ~= nil) then local menu = probe.getTimeseriesMenu(ts_utils) or {} + --[[ table.insert(menu, 1, { separator = 1, label = probe.name or probe_name, - }) + })]] additional_ts = table.merge(additional_ts, menu) end diff --git a/scripts/lua/system/redis_stats.lua b/scripts/lua/system/redis_stats.lua index c030eb6f7d..4f0b437b71 100644 --- a/scripts/lua/system/redis_stats.lua +++ b/scripts/lua/system/redis_stats.lua @@ -139,7 +139,8 @@ elseif(page == "stats") then ]] print(i18n("please_wait_page.command")) print[[ - ]] print(i18n("total")) print[[ + ]] print(i18n("chart")) print[[ + ]] print(i18n("system_stats.redis.tot_calls")) print[[ @@ -172,10 +173,11 @@ setInterval(update_redis_table, 5000); elseif(page == "historical") then local schema = _GET["ts_schema"] or "redis:memory" local selected_epoch = _GET["epoch"] or "" - local tags = {ifid = getSystemInterfaceId()} + local tags = {ifid = getSystemInterfaceId(), command = _GET["redis_command"]} url = url.."&page=historical" drawGraphs(getSystemInterfaceId(), schema, tags, _GET["zoom"], url, selected_epoch, { + top_redis_hits = "top:redis:hits", timeseries = system_schemas, }) elseif((page == "alerts") and isAdministrator()) then