diff --git a/httpdocs/js/ntop.min.js b/httpdocs/js/ntop.min.js
index f9d5041252..1d60d90e1e 100644
--- a/httpdocs/js/ntop.min.js
+++ b/httpdocs/js/ntop.min.js
@@ -1,2 +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").removeClass("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,"badge-danger",callback_str,"javascript:void(0)")}function datatableAddActionButtonCallback(td_idx,callback_str,label){datatableAddButtonCallback.bind(this)(td_idx,label,"badge-info",callback_str,"javascript:void(0)")}function datatableAddLinkButtonCallback(td_idx,link,label){datatableAddButtonCallback.bind(this)(td_idx,label,"badge-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 datatableInitRefreshRows(table,column_id,refresh_interval,trend_columns){var $dt=table.data("datatable");var rows=$dt.resultset.data;var old_timer=table.data("dt-rr-timer");var old_req=table.data("dt-rr-ajax");trend_columns=trend_columns||{};if(old_timer){clearInterval(old_timer);table.removeData("dt-rr-timer")}if(old_req){old_req.abort();table.removeData("dt-rr-ajax")}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)return false;var params={custom_hosts:ids.join(",")};var url=$dt.options.url;var first_load=true;var _process_result=function(result){if(typeof result==="string")result=JSON.parse(result);if(!result){console.error("Bad JSON result");return}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];var $cell=$(cell);var old_val=$cell.data("dt-rr-cur-val")||$(cell).html();var trend_value_formatter=trend_columns[key];var new_val=data[key];var arrows="";if(trend_value_formatter){if(parseFloat(new_val)!=new_val)console.warn("Invalid number: "+new_val);if(!first_load)arrows=" "+drawTrend(parseFloat(new_val),parseFloat(old_val));$cell.data("dt-rr-cur-val",new_val);new_val=trend_value_formatter(new_val)}$(cell).html(new_val!=0?new_val+arrows:"")}}}first_load=false;table.removeData("dt-rr-ajax")};table.data("dt-rr-timer",setInterval(function(){var old_req=table.data("dt-rr-ajax");if(old_req)return;table.data("dt-rr-ajax",$.ajax({type:"GET",url:url,data:params,cache:false,success:_process_result}))},refresh_interval));_process_result($dt.resultset)}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;const REGEXES={ipv4:"^(?:(?: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])$",ipv6:"^(([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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*$",domainName:"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])$",macAddress:"^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$",username:"^(?=[a-zA-Z0-9._]{3,20}$)(?!.*[_.]{2})[^_.].*[^_.]$",email:"^[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$",https:"^https?://.+$"};function init_data_patterns(){$(`input[data-pattern]`).each(function(){const data_pattern=$(this).data("pattern");if(!data_pattern)return;const pattern=data_pattern.split("|").map(p=>REGEXES[p]).join("|");$(this).attr("pattern",pattern);$(this).removeAttr("data-pattern")})}function is_good_ipv4(ipv4){return new RegExp(REGEXES.ipv4).test(ipv4)}function is_good_ipv6(ipv6){return new RegExp(REGEXES.ipv6).test(ipv6)}function is_mac_address(mac){return new RegExp(REGEXES.macAddress).test(mac)}function isNumeric(value){return/^\d+$/.test(value)}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){const sizes=["bit/s","Kbit/s","Mbit/s","Gbit/s","Tbit/s"];if(typeof bits==="undefined")return"-";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,decimals){if(val==0)return[0,sizes[0]];let factor=decimals?10*decimals:10;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)*factor)/factor,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","layer_2")}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");_add_find_host_link(form,"mode","restore")}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;i{if(check_status_code(xhr.status,xhr.statusText,$("#import-error"))){$button.removeAttr("disabled");return}if(!d.success){$("#import-error").text(d.error).show();$button.removeAttr("disabled");params.reset_csrf(d.csrf)}else{location.reload()}}).fail(({status:status,statusText:statusText})=>{check_status_code(status,statusText,$("#import-error"));$button.removeAttr("disabled")})}};reader.readAsText(file,"UTF-8")}});$("#import-modal").on("submit","form",function(e){e.preventDefault();$("#btn-import").trigger("click")})}function serializeFormArray(serializedArray){const serialized={};serializedArray.forEach(obj=>{if(obj.name.includes("[]")){return}else{serialized[obj.name]=obj.value}});return serialized}function cleanForm(formSelector){$(formSelector).find("input,select,textarea").each(function(i,input){$(this).removeClass(`is-valid`).removeClass(`is-invalid`)});$(formSelector)[0].reset()}$(document).ready(function(){init_data_patterns()});var schema_2_label={};var data_2_label={};var graph_i18n={};function initLabelMaps(_schema_2_label,_data_2_label,_graph_i18n){schema_2_label=_schema_2_label;data_2_label=_data_2_label;graph_i18n=_graph_i18n}function getSerieLabel(schema,serie,visualization,serie_index){var data_label=serie.label;var new_label=data_2_label[data_label];if(visualization&&visualization.metrics_labels&&visualization.metrics_labels[serie_index])return visualization.metrics_labels[serie_index];if(serie.ext_label)return serie.ext_label;else if(schema=="top:local_senders"||schema=="top:local_receivers"){if(serie.ext_label)return serie.ext_label;else return serie.tags.host}else if(schema.startsWith("top:")){if(serie.tags.protocol)return serie.tags.protocol;else if(serie.tags.category)return serie.tags.category;else if(serie.tags.l4proto)return serie.tags.l4proto;else if(serie.tags.dscp_class)return serie.tags.dscp_class;else if(serie.tags.device&&serie.tags.if_index){if(serie.ext_label!="")return serie.ext_label;else return"("+serie.tags.if_index+")"}else if(serie.tags.device&&serie.tags.port)return serie.tags.port;else if(serie.tags.exporter&&serie.tags.ifname)return serie.tags.ifname;else if(serie.tags.profile)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"){if(serie.tags.protocol)return serie.tags.protocol+" ("+new_label+")";else if(serie.tags.category)return serie.tags.category+" ("+new_label+")";else if(serie.tags.device&&serie.tags.if_index)return serie.ext_label+" ("+new_label+")";else if(serie.tags.device&&serie.tags.port)return serie.tags.port+" ("+new_label+")"}else{if(serie.tags.protocol)return serie.tags.protocol;else if(serie.tags.category)return serie.tags.category;else if(serie.tags.profile)return serie.tags.profile;else if(data_label=="bytes"){if(schema.contains("volume"))return graph_i18n.traffic_volume;else return graph_i18n.traffic}}if(schema_2_label[schema])return capitaliseFirstLetter(schema_2_label[schema]);if(new_label)return capitaliseFirstLetter(new_label);return capitaliseFirstLetter(data_label)}function getValueFormatter(schema,metric_type,series,custom_formatter,stats){if(series&&series.length&&series[0].label){if(custom_formatter){var formatters=[];if(typeof custom_formatter!="object")custom_formatter=[custom_formatter];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 redrawExtraLines(chart,chart_id,extra_lines){d3.selectAll(chart_id+" line.extra-line").remove();if(extra_lines.length>0){var xValueScale=chart.xAxis.scale();var yValueScale=chart.yAxis1.scale();var g=d3.select(chart_id+" .stack1Wrap");for(var i=0;i0||has_initial_zoom();let extra_lines=[];let unreachable_timestamps={};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 split_directions_colors=["#69B87F","#FF7C00","#FF4700"];function format_unreachable(formatter){return function(y,d){if(d&&unreachable_timestamps[d[0]])return i18n.unreachable_host;return formatter(y)}}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(function(){chart.update();redrawExtraLines(chart,chart_id,extra_lines)});redrawExtraLines(chart,chart_id,extra_lines);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){manual_trigger_extra_series[d.legend_key]=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").datetimepicker("date",new Date((params.epoch_begin+delta)*1e3));$("#period_end").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").datetimepicker("date",new Date((params.epoch_begin-delta)*1e3));$("#period_end").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");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;const series_formatted_labels={};const now=Date.now()/1e3;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=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").datetimepicker("date",new Date(params.epoch_begin*1e3));$("#period_end").datetimepicker("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;if(visualization.show_unreachable)req_params.no_fill=1;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_cmp_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(visualization&&visualization.extra_series){for(var i=0;imax_line_over_total_ratio)is_disabled=true;res.push({key:serie.label,yAxis:serie.axis||1,values:arrayToNvSerie(upsampleSerie([serie.value],data.count),data.start,data.step),type:serie.type||"line",color:serie.color||"red",classed:serie.class,legend_key:serie.label,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={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){var ref_serie=res[0].values;let tok=ref_serie[0][0];let was_unreachable=false;unreachable_timestamps={};for(var i=0;inow&&now0)serie[serie.length]=[now,serie[serie.length-1][1]]}}var enabled_series=res.filter(function(d){return d.disabled!==true});if(second_axis_series.length>0||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+="IP Version";nindex_buttons+='
"}nindex_buttons+='';nindex_buttons+="Explorer";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)}const INDEX_SEARCH_COLUMN=3;$.fn.dataTable.ext.buttons.filterScripts={className:"filter-scripts-button",init:function(dt,node,config){const button_id=config.attr.id;$(node).removeClass("btn").removeClass("btn-secondary");const button_text=$(node).html();let count=0;if(button_id=="all-scripts"){count=dt.data().length}else if(button_id=="enabled-scripts"){dt.data().each(d=>{const parsed=d.is_enabled;if(parsed)count+=1})}else if(button_id=="disabled-scripts"){dt.data().each(d=>{const parsed=d.is_enabled;if(!parsed)count+=1})}$(node).html(`${button_text} (${count})`)},action:function(e,dt,node,config){const button_id=config.attr.id;$("#all-scripts, #enabled-scripts, #disabled-scripts").removeClass("active");if(button_id=="all-scripts"){dt.columns(INDEX_SEARCH_COLUMN).search("").draw();window.history.replaceState(undefined,undefined,"#all")}else if(button_id=="enabled-scripts"){dt.columns(INDEX_SEARCH_COLUMN).search("true").draw();window.history.replaceState(undefined,undefined,"#enabled")}else if(button_id=="disabled-scripts"){dt.columns(INDEX_SEARCH_COLUMN).search("false").draw();window.history.replaceState(undefined,undefined,"#disabled")}$(`span[data-toggle='popover']`).popover({trigger:"manual",html:true,animation:false}).on("mouseenter",function(){let self=this;$(this).popover("show");$(".popover").on("mouseleave",function(){$(self).popover("hide")})}).on("mouseleave",function(){let self=this;setTimeout(function(){if(!$(".popover:hover").length){$(self).popover("hide")}},50)});$(`#${button_id}`).addClass("active")}};const registerServiceWorker=()=>{if("serviceWorker"in navigator){navigator.serviceWorker.register("/sw.js")}};const NOTIFICATION_DEBUG=false;class PushNotificationBuilder{constructor(title="Hello World"){this.title=title;this.options={};this.options.actions=[];this.options.icon="/img/icons/icon-128x128.png";this.options.badge="/img/icons/icon-72x72.png"}setTitle(title){this.title=title;return this}setBody(body){this.options.body=body;return this}setIcon(icon){this.options.icon=icon;return this}setLang(lang){this.options.lang=lang;return this}setRequireInteraction(interaction){this.options.requireInteraction=interaction;return this}setTimestamp(timestamp){this.options.timestamp=timestamp;return this}setOnClick(callback){this.callback=callback;return this}build(){const n=new Notification(this.title,this.options);if(this.callback){n.onclick=this.callback}return n}}class NotificationManager{static enableNotification(){try{Notification.requestPermission(status=>{if(NOTIFICATION_DEBUG)console.info(status)})}catch(err){console.error("Something went wrong! ☹️",err)}}static push(pushNotification={title:"Hello World",options:{}}){if(!pushNotification)throw"The notification object cannot be null!";if(NotificationManager.canReceiveNotification){(async()=>{try{const registration=await navigator.serviceWorker.getRegistration();registration.showNotification(pushNotification.title,pushNotification.options)}catch(err){console.error(err)}})()}}static get canReceiveNotification(){return NotificationManager.permissionNotification=="granted"}static get permissionNotification(){return Notification.permission}}(function($){let modal_id_ctr=0;class ModalHandler{constructor(element,options){if(typeof options.csrf==="undefined")throw"ModalHandler: Missing CSRF token!";this.element=element;this.dialog=$(element).closest(".modal");this.options=options;this.csrf=options.csrf;this.dontDisableSubmit=options.dontDisableSubmit;this.observer=new MutationObserver(list=>{this.bindFormValidation()});this.observer.observe(this.element[0],{childList:true,subtree:true});const submitButton=$(this.element).find(`[type='submit']`);if(submitButton.length==0)throw"The submit button was not found inside the form!";this.cleanFormOnModalClose()}cleanFormOnModalClose(){const self=this;$(this.element).parents(".modal").on("hidden.bs.modal",function(){self.cleanForm()})}fillFormModal(){return this.options.loadFormData()}invokeModalInit(){const self=this;this.options.onModalInit(this.fillFormModal());$(this.element).parents(".modal").on("show.bs.modal",function(){self.options.onModalShow()});this.delegateResetButton()}delegateSubmit(){this.bindFormValidation();const self=this;this.submitHandler=function(e){if(!self.options.isSyncRequest){e.preventDefault();e.stopPropagation();self.makeRequest()}else{aysResetForm(self.form_sel)}};$(this.element).on("submit",this.submitHandler)}bindFormValidation(){$(this.element).find(`input,select,textarea`).each(function(i,input){const $input=$(this);function checkValidation(insertError){const $parent=$input.parent();let $error=$parent.find(`.invalid-feedback`);if($error.length==0)$error=$(` `);if(!input.validity.valid&&input.validationMessage){$input.addClass("is-invalid");$error.text(input.validationMessage);if(insertError)$parent.append($error)}else{$input.removeClass("is-invalid");$error.remove()}}$(this).off("input").on("input",function(e){if(!$input.attr("formnovalidate"))checkValidation(false)});$(this).off("invalid").on("invalid",function(e){e.preventDefault();if(!$input.attr("formnovalidate"))checkValidation(true)})})}cleanForm(){$(this.element).find("input,textarea,select").each(function(i,input){$(this).removeClass(`is-valid`).removeClass(`is-invalid`)});$(this.element)[0].reset()}makeRequest(){const submitButton=$(this.element).find(`[type='submit']`);let dataToSend=this.options.beforeSumbit();dataToSend.csrf=this.csrf;dataToSend=$.extend(dataToSend,this.options.submitOptions);submitButton.attr("disabled","disabled");let request;const self=this;if(self.options.method=="post"){request=$.ajax({url:this.options.endpoint,data:JSON.stringify(dataToSend),method:self.options.method,dataType:"json",contentType:"application/json; charset=utf-8"})}else{request=$.get(this.options.endpoint,dataToSend)}request.done(function(response,textStatus){if(self.options.resetAfterSubmit)self.cleanForm();self.options.onSubmitSuccess(response,dataToSend,self);$(self.element).off("submit",self.submitHandler);self.delegateSubmit();if(!self.dontDisableSubmit)aysResetForm(self.form_sel)}).fail(function(jqxhr,textStatus,errorThrown){self.options.onSubmitError(dataToSend,textStatus,errorThrown)}).always(function(d){submitButton.removeAttr("disabled")})}delegateResetButton(){const self=this;const resetButton=$(this.element).find(`[type='reset']`);if(resetButton.length==0)return;const defaultValues=serializeFormArray($(this.element).serializeArray());resetButton.click(function(e){e.preventDefault();$(self.element).find("input:visible,select").each(function(i,input){const key=$(input).attr("name");$(input).val(defaultValues[key]).removeClass("is-invalid").removeClass("is-valid")})})}}$.fn.modalHandler=function(args){if(this.length!=1)throw new Error("Only a form element can by initialized!");const options=$.extend({csrf:"",endpoint:"",resetAfterSubmit:true,dontDisableSubmit:false,isSyncRequest:false,method:"get",loadFormData:function(){},onModalInit:function(loadedData){},onModalShow:function(){},beforeSumbit:function(){return{}},onSubmitSuccess:function(response){},onSubmitError:function(sent,textStatus,errorThrown){},onModalReset:function(defaultData){}},args);const mh=new ModalHandler(this,options);mh.delegateSubmit();return mh}})(jQuery);jQuery.fn.dataTableExt.sErrMode="console";jQuery.fn.dataTableExt.formatSecondsToHHMMSS=((data,type,row)=>{if(isNaN(data))return data;if(type=="display")return secondsToTime(data);return data});class DataTableUtils{static getStdDatatableConfig(dtButtons=[],dom="<'d-flex'<'mr-auto'l><'dt-search'f>B>rtip"){return{dom:dom,pagingType:"full_numbers",lengthMenu:[[10,25,50,-1],[10,25,50,`${i18n.all}`]],language:{info:i18n.showing_x_to_y_rows,search:i18n.script_search,infoFiltered:"",paginate:{previous:"<",next:">",first:"«",last:"»"}},saveState:true,buttons:{buttons:dtButtons,dom:{button:{className:"btn btn-link"},container:{className:"border-left ml-1 float-right"}}}}}static setAjaxConfig(config,url,dataSrc="",method="get",params={}){config.ajax={url:url,type:method,dataSrc:dataSrc,data:function(d){return $.extend({},d,params)}};return config}static extendConfig(config,extension){if(extension.hasFilters){extension.stateSaveCallback=function(settings,data){localStorage.setItem("DataTables_"+settings.sInstance,JSON.stringify(data))};extension.stateLoadCallback=function(settings){return JSON.parse(localStorage.getItem("DataTables_"+settings.sInstance))};extension.stateSaveParams=function(settings,data){$("[data-filter]").each(function(){const activeFilter=$(this).find(`li.active`).data("filter-key");if(!activeFilter)return;if(!data.filters)data.filters={};data.filters[$(this).data("filter")]=activeFilter})}}return $.extend({},config,extension)}static addFilterDropdown(title,filters=[],columnIndex,filterID,tableAPI){const createEntry=(val,key,callback)=>{const $entry=$(`${val} `);$entry.click(function(e){if($dropdownTitle.parent().find(`i.fas`).length==0){$dropdownTitle.parent().prepend(` `)}$dropdownTitle.text($entry.text());$dropdownTitle.attr(`data-filter-key`,key);$menuContainer.find("li").removeClass(`active`);$entry.addClass(`active`);if(callback)callback(e)});return $entry};const filterKey=title.toLowerCase().split(" ").join("_");const dropdownId=`${filterKey}-filter-menu`;const $dropdownContainer=$(`
`);const $dropdownButton=$(` `);const $dropdownTitle=$(`${title} `);$dropdownButton.append($dropdownTitle);const $menuContainer=$(``);for(let filter of filters){const $entry=createEntry(filter.label,filter.key,e=>{tableAPI.column(columnIndex).search(filter.regex,true,false).draw()});$menuContainer.append($entry)}const $allEntry=createEntry(i18n.all,"all",e=>{$dropdownTitle.parent().find("i.fas.fa-filter").remove();$dropdownTitle.html(`${title}`).removeAttr(`data-filter-key`);tableAPI.columns(columnIndex).search("").draw(true)});$(filterID).prepend($dropdownContainer.append($dropdownButton,$menuContainer.prepend($allEntry)));DataTableUtils.setCurrentFilter(tableAPI)}static setCurrentFilter(tableAPI){if(!tableAPI.state)return;if(!tableAPI.state.loaded())return;if(!tableAPI.state.loaded().filters)return;const filters=tableAPI.state.loaded().filters;if(!filters)return;for(let[key,value]of Object.entries(filters)){if(value=="all")continue;const entry=$(`li[data-filter-key='${value}']`);entry.addClass("active");$(`#${key}-filter-menu button`).prepend(` `).find(`span`).html(entry.text())}tableAPI.state.save()}static secondsToHHMMSS(seconds){const padZeroes=n=>`${n}`.padStart(2,"0");const sec=seconds%60;const mins=Math.floor(seconds/60)%60;const hours=Math.floor(seconds/3600);return`${padZeroes(hours)}:${padZeroes(mins)}:${padZeroes(sec)}`}}const alertNotifications={};let alertNotificationUtilsId=0;class AlertNotification{constructor({title:title,body:body,link:link,delay:delay=0,id:id,style:style}={}){this.title=title;this.body=body;this.link=link;this.delay=delay;this.id=id;this.style=style}render(){const self=this;const $toast=$(`
`);if(this.delay!==0){$toast.data("autohide",true);$toast.data("delay",this.delay)}else{$toast.data("autohide",false)}$toast.data("notification-id",this.id);const $toastHeader=$(``);const $toastBody=$(`${this.body}
`);if(this.link!=undefined&&this.link!=""){const $anchor=$(`Click! `);$toastBody.append($anchor)}$toast.append($toastHeader,$toastBody);$toast.toast("show");$toast.on("hidden.bs.toast",function(){AlertNotificationUtils.hideAlert(self.id)});this.$element=$toast;return $toast}updateBody(body){if(this.$element==undefined)throw"[AlertNotification] :: The notification has not been rendered yet!";this.$element.find(".toast-body span").text(body)}destroy(){this.$element.toast("dispose");this.$element.empty()}}class AlertNotificationUtils{static initAlerts(){$(`.toast.alert-notification`).each(function(){const noScope=$(this).data("notificationNoScope");const pages=noScope==""||noScope==undefined?[]:noScope.split(";");if(pages.length>0&&pages.some(page=>location.href.contains(page))){$(this).remove()}$(this).toast("show")})}static hideAlert(notificationId){if(!notificationId){console.warn("[AlertNotificationUtils] :: The notification id cannot be null!");return}if(!(notificationId in alertNotifications)){console.warn("[AlertNotificationUtils] :: The notification hasn't been found!");return}alertNotifications[notificationId].destroy();delete alertNotifications[notificationId]}static updateNotification(notificationId,body){if(!(notificationId in alertNotifications)){throw"[AlertNotificationUtils] :: The notification was not found!"}alertNotifications[notificationId].updateBody(body)}static showAlert(option){const styles={warning:{bg:"warning",text:"text-dark",icon:"fa-exclamation-circle"},info:{bg:"info",text:"text-white",icon:"fa-info-circle"},success:{bg:"success",text:"text-white",icon:"fa-check-circle"}};const style=styles[option.level]||styles.warning;if(option.id===undefined)throw"[AlertNotificationUtils] :: An AlertNotification must have an in id!";if(option.id in alertNotifications)return;if(option.title===undefined)throw"[AlertNotificationUtils]:: An AlertNotification must have a title!";if(option.body===undefined)throw"[AlertNotificationUtils]:: An AlertNotification must have a body!";option.style=style;const notification=new AlertNotification(option);$(`#main-container`).prepend(notification.render());alertNotifications[option.id]=notification;return notification}static bindClosingEvent(){$(".toast.alert-notification[data-notification-id]").on("hidden.bs.toast",function(){$.post(`${http_prefix}/lua/handler_alert_notification.lua`,{notification_id:$(this).data("notificationId"),action:`disposed`})})}}
+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").removeClass("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,"badge-danger",callback_str,"javascript:void(0)")}function datatableAddActionButtonCallback(td_idx,callback_str,label){datatableAddButtonCallback.bind(this)(td_idx,label,"badge-info",callback_str,"javascript:void(0)")}function datatableAddLinkButtonCallback(td_idx,link,label){datatableAddButtonCallback.bind(this)(td_idx,label,"badge-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 datatableInitRefreshRows(table,column_id,refresh_interval,trend_columns){var $dt=table.data("datatable");var rows=$dt.resultset.data;var old_timer=table.data("dt-rr-timer");var old_req=table.data("dt-rr-ajax");trend_columns=trend_columns||{};if(old_timer){clearInterval(old_timer);table.removeData("dt-rr-timer")}if(old_req){old_req.abort();table.removeData("dt-rr-ajax")}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)return false;var params={custom_hosts:ids.join(",")};var url=$dt.options.url;var first_load=true;var _process_result=function(result){if(typeof result==="string")result=JSON.parse(result);if(!result){console.error("Bad JSON result");return}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];var $cell=$(cell);var old_val=$cell.data("dt-rr-cur-val")||$(cell).html();var trend_value_formatter=trend_columns[key];var new_val=data[key];var arrows="";if(trend_value_formatter){if(parseFloat(new_val)!=new_val)console.warn("Invalid number: "+new_val);if(!first_load)arrows=" "+drawTrend(parseFloat(new_val),parseFloat(old_val));$cell.data("dt-rr-cur-val",new_val);new_val=trend_value_formatter(new_val)}$(cell).html(new_val!=0?new_val+arrows:"")}}}first_load=false;table.removeData("dt-rr-ajax")};table.data("dt-rr-timer",setInterval(function(){var old_req=table.data("dt-rr-ajax");if(old_req)return;table.data("dt-rr-ajax",$.ajax({type:"GET",url:url,data:params,cache:false,success:_process_result}))},refresh_interval));_process_result($dt.resultset)}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;const REGEXES={ipv4:"^(?:(?: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])$",ipv6:"^(([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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*$",domainName:"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])$",macAddress:"^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$",username:"^(?=[a-zA-Z0-9._]{3,20}$)(?!.*[_.]{2})[^_.].*[^_.]$",email:"^[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$",https:"^https?://.+$"};function init_data_patterns(){$(`input[data-pattern]`).each(function(){const data_pattern=$(this).data("pattern");if(!data_pattern)return;const pattern=data_pattern.split("|").map(p=>REGEXES[p]).join("|");$(this).attr("pattern",pattern);$(this).removeAttr("data-pattern")})}function is_good_ipv4(ipv4){return new RegExp(REGEXES.ipv4).test(ipv4)}function is_good_ipv6(ipv6){return new RegExp(REGEXES.ipv6).test(ipv6)}function is_mac_address(mac){return new RegExp(REGEXES.macAddress).test(mac)}function isNumeric(value){return/^\d+$/.test(value)}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){const sizes=["bit/s","Kbit/s","Mbit/s","Gbit/s","Tbit/s"];if(typeof bits==="undefined")return"-";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,decimals){if(val==0)return[0,sizes[0]];let factor=decimals?10*decimals:10;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)*factor)/factor,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","layer_2")}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");_add_find_host_link(form,"mode","restore")}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;i{if(check_status_code(xhr.status,xhr.statusText,$("#import-error"))){$button.removeAttr("disabled");return}if(!d.success){$("#import-error").text(d.error).show();$button.removeAttr("disabled");params.reset_csrf(d.csrf)}else{location.reload()}}).fail(({status:status,statusText:statusText})=>{check_status_code(status,statusText,$("#import-error"));$button.removeAttr("disabled")})}};reader.readAsText(file,"UTF-8")}});$("#import-modal").on("submit","form",function(e){e.preventDefault();$("#btn-import").trigger("click")})}function serializeFormArray(serializedArray){const serialized={};serializedArray.forEach(obj=>{if(obj.name.includes("[]")){return}else{serialized[obj.name]=obj.value}});return serialized}function cleanForm(formSelector){$(formSelector).find("input,select,textarea").each(function(i,input){$(this).removeClass(`is-valid`).removeClass(`is-invalid`)});$(formSelector)[0].reset()}$(document).ready(function(){init_data_patterns()});var schema_2_label={};var data_2_label={};var graph_i18n={};function initLabelMaps(_schema_2_label,_data_2_label,_graph_i18n){schema_2_label=_schema_2_label;data_2_label=_data_2_label;graph_i18n=_graph_i18n}function getSerieLabel(schema,serie,visualization,serie_index){var data_label=serie.label;var new_label=data_2_label[data_label];if(visualization&&visualization.metrics_labels&&visualization.metrics_labels[serie_index])return visualization.metrics_labels[serie_index];if(serie.ext_label)return serie.ext_label;else if(schema=="top:local_senders"||schema=="top:local_receivers"){if(serie.ext_label)return serie.ext_label;else return serie.tags.host}else if(schema.startsWith("top:")){if(serie.tags.protocol)return serie.tags.protocol;else if(serie.tags.category)return serie.tags.category;else if(serie.tags.l4proto)return serie.tags.l4proto;else if(serie.tags.dscp_class)return serie.tags.dscp_class;else if(serie.tags.device&&serie.tags.if_index){if(serie.ext_label!="")return serie.ext_label;else return"("+serie.tags.if_index+")"}else if(serie.tags.device&&serie.tags.port)return serie.tags.port;else if(serie.tags.exporter&&serie.tags.ifname)return serie.tags.ifname;else if(serie.tags.profile)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"){if(serie.tags.protocol)return serie.tags.protocol+" ("+new_label+")";else if(serie.tags.category)return serie.tags.category+" ("+new_label+")";else if(serie.tags.device&&serie.tags.if_index)return serie.ext_label+" ("+new_label+")";else if(serie.tags.device&&serie.tags.port)return serie.tags.port+" ("+new_label+")"}else{if(serie.tags.protocol)return serie.tags.protocol;else if(serie.tags.category)return serie.tags.category;else if(serie.tags.profile)return serie.tags.profile;else if(data_label=="bytes"){if(schema.contains("volume"))return graph_i18n.traffic_volume;else return graph_i18n.traffic}}if(schema_2_label[schema])return capitaliseFirstLetter(schema_2_label[schema]);if(new_label)return capitaliseFirstLetter(new_label);return capitaliseFirstLetter(data_label)}function getValueFormatter(schema,metric_type,series,custom_formatter,stats){if(series&&series.length&&series[0].label){if(custom_formatter){var formatters=[];if(typeof custom_formatter!="object")custom_formatter=[custom_formatter];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 redrawExtraLines(chart,chart_id,extra_lines){d3.selectAll(chart_id+" line.extra-line").remove();if(extra_lines.length>0){var xValueScale=chart.xAxis.scale();var yValueScale=chart.yAxis1.scale();var g=d3.select(chart_id+" .stack1Wrap");for(var i=0;i0||has_initial_zoom();let extra_lines=[];let unreachable_timestamps={};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 split_directions_colors=["#69B87F","#FF7C00","#FF4700"];function format_unreachable(formatter){return function(y,d){if(d&&unreachable_timestamps[d[0]])return i18n.unreachable_host;return formatter(y)}}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(function(){chart.update();redrawExtraLines(chart,chart_id,extra_lines)});redrawExtraLines(chart,chart_id,extra_lines);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){manual_trigger_extra_series[d.legend_key]=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").datetimepicker("date",new Date((params.epoch_begin+delta)*1e3));$("#period_end").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").datetimepicker("date",new Date((params.epoch_begin-delta)*1e3));$("#period_end").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");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;const series_formatted_labels={};const now=Date.now()/1e3;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=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").datetimepicker("date",new Date(params.epoch_begin*1e3));$("#period_end").datetimepicker("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;if(visualization.show_unreachable)req_params.no_fill=1;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_cmp_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(visualization&&visualization.extra_series){for(var i=0;imax_line_over_total_ratio)is_disabled=true;res.push({key:serie.label,yAxis:serie.axis||1,values:arrayToNvSerie(upsampleSerie([serie.value],data.count),data.start,data.step),type:serie.type||"line",color:serie.color||"red",classed:serie.class,legend_key:serie.label,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={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){var ref_serie=res[0].values;let tok=ref_serie[0][0];let was_unreachable=false;unreachable_timestamps={};for(var i=0;inow&&now0)serie[serie.length]=[now,serie[serie.length-1][1]]}}var enabled_series=res.filter(function(d){return d.disabled!==true});if(second_axis_series.length>0||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+="IP Version";nindex_buttons+='
"}nindex_buttons+='';nindex_buttons+="Explorer";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)}const INDEX_SEARCH_COLUMN=3;$.fn.dataTable.ext.buttons.filterScripts={className:"filter-scripts-button",init:function(dt,node,config){const button_id=config.attr.id;$(node).removeClass("btn").removeClass("btn-secondary");const button_text=$(node).html();let count=0;if(button_id=="all-scripts"){count=dt.data().length}else if(button_id=="enabled-scripts"){dt.data().each(d=>{const parsed=d.is_enabled;if(parsed)count+=1})}else if(button_id=="disabled-scripts"){dt.data().each(d=>{const parsed=d.is_enabled;if(!parsed)count+=1})}$(node).html(`${button_text} (${count})`)},action:function(e,dt,node,config){const button_id=config.attr.id;$("#all-scripts, #enabled-scripts, #disabled-scripts").removeClass("active");if(button_id=="all-scripts"){dt.columns(INDEX_SEARCH_COLUMN).search("").draw();window.history.replaceState(undefined,undefined,"#all")}else if(button_id=="enabled-scripts"){dt.columns(INDEX_SEARCH_COLUMN).search("true").draw();window.history.replaceState(undefined,undefined,"#enabled")}else if(button_id=="disabled-scripts"){dt.columns(INDEX_SEARCH_COLUMN).search("false").draw();window.history.replaceState(undefined,undefined,"#disabled")}$(`span[data-toggle='popover']`).popover({trigger:"manual",html:true,animation:false}).on("mouseenter",function(){let self=this;$(this).popover("show");$(".popover").on("mouseleave",function(){$(self).popover("hide")})}).on("mouseleave",function(){let self=this;setTimeout(function(){if(!$(".popover:hover").length){$(self).popover("hide")}},50)});$(`#${button_id}`).addClass("active")}};const registerServiceWorker=()=>{if("serviceWorker"in navigator){navigator.serviceWorker.register("/sw.js")}};const NOTIFICATION_DEBUG=false;class PushNotificationBuilder{constructor(title="Hello World"){this.title=title;this.options={};this.options.actions=[];this.options.icon="/img/icons/icon-128x128.png";this.options.badge="/img/icons/icon-72x72.png"}setTitle(title){this.title=title;return this}setBody(body){this.options.body=body;return this}setIcon(icon){this.options.icon=icon;return this}setLang(lang){this.options.lang=lang;return this}setRequireInteraction(interaction){this.options.requireInteraction=interaction;return this}setTimestamp(timestamp){this.options.timestamp=timestamp;return this}setOnClick(callback){this.callback=callback;return this}build(){const n=new Notification(this.title,this.options);if(this.callback){n.onclick=this.callback}return n}}class NotificationManager{static enableNotification(){try{Notification.requestPermission(status=>{if(NOTIFICATION_DEBUG)console.info(status)})}catch(err){console.error("Something went wrong! ☹️",err)}}static push(pushNotification={title:"Hello World",options:{}}){if(!pushNotification)throw"The notification object cannot be null!";if(NotificationManager.canReceiveNotification){(async()=>{try{const registration=await navigator.serviceWorker.getRegistration();registration.showNotification(pushNotification.title,pushNotification.options)}catch(err){console.error(err)}})()}}static get canReceiveNotification(){return NotificationManager.permissionNotification=="granted"}static get permissionNotification(){return Notification.permission}}(function($){let modal_id_ctr=0;class ModalHandler{constructor(element,options){if(typeof options.csrf==="undefined")throw"ModalHandler: Missing CSRF token!";this.element=element;this.dialog=$(element).closest(".modal");this.options=options;this.csrf=options.csrf;this.dontDisableSubmit=options.dontDisableSubmit;this.observer=new MutationObserver(list=>{this.bindFormValidation()});this.observer.observe(this.element[0],{childList:true,subtree:true});const submitButton=$(this.element).find(`[type='submit']`);if(submitButton.length==0)throw"The submit button was not found inside the form!";this.cleanFormOnModalClose()}cleanFormOnModalClose(){const self=this;$(this.element).parents(".modal").on("hidden.bs.modal",function(){self.cleanForm()})}fillFormModal(){return this.options.loadFormData()}invokeModalInit(){const self=this;this.options.onModalInit(this.fillFormModal());$(this.element).parents(".modal").on("show.bs.modal",function(){self.options.onModalShow()});this.delegateResetButton()}delegateSubmit(){this.bindFormValidation();const self=this;this.submitHandler=function(e){if(!self.options.isSyncRequest){e.preventDefault();e.stopPropagation();self.makeRequest()}else{aysResetForm(self.form_sel)}};$(this.element).on("submit",this.submitHandler)}bindFormValidation(){$(this.element).find(`input,select,textarea`).each(function(i,input){const $input=$(this);function checkValidation(insertError){const $parent=$input.parent();let $error=$parent.find(`.invalid-feedback`);if($error.length==0)$error=$(` `);if(!input.validity.valid&&input.validationMessage){$input.addClass("is-invalid");$error.text(input.validationMessage);if(insertError)$parent.append($error)}else{$input.removeClass("is-invalid");$error.remove()}}$(this).off("input").on("input",function(e){if(!$input.attr("formnovalidate"))checkValidation(false)});$(this).off("invalid").on("invalid",function(e){e.preventDefault();if(!$input.attr("formnovalidate"))checkValidation(true)})})}cleanForm(){$(this.element).find("input,textarea,select").each(function(i,input){$(this).removeClass(`is-valid`).removeClass(`is-invalid`)});$(this.element)[0].reset()}makeRequest(){const submitButton=$(this.element).find(`[type='submit']`);let dataToSend=this.options.beforeSumbit();dataToSend.csrf=this.csrf;dataToSend=$.extend(dataToSend,this.options.submitOptions);submitButton.attr("disabled","disabled");let request;const self=this;if(self.options.method=="post"){request=$.ajax({url:this.options.endpoint,data:JSON.stringify(dataToSend),method:self.options.method,dataType:"json",contentType:"application/json; charset=utf-8"})}else{request=$.get(this.options.endpoint,dataToSend)}request.done(function(response,textStatus){if(self.options.resetAfterSubmit)self.cleanForm();self.options.onSubmitSuccess(response,dataToSend,self);$(self.element).off("submit",self.submitHandler);self.delegateSubmit();if(!self.dontDisableSubmit)aysResetForm(self.form_sel)}).fail(function(jqxhr,textStatus,errorThrown){self.options.onSubmitError(dataToSend,textStatus,errorThrown)}).always(function(d){submitButton.removeAttr("disabled")})}delegateResetButton(){const self=this;const resetButton=$(this.element).find(`[type='reset']`);if(resetButton.length==0)return;const defaultValues=serializeFormArray($(this.element).serializeArray());resetButton.click(function(e){e.preventDefault();$(self.element).find("input:visible,select").each(function(i,input){const key=$(input).attr("name");$(input).val(defaultValues[key]).removeClass("is-invalid").removeClass("is-valid")})})}}$.fn.modalHandler=function(args){if(this.length!=1)throw new Error("Only a form element can by initialized!");const options=$.extend({csrf:"",endpoint:"",resetAfterSubmit:true,dontDisableSubmit:false,isSyncRequest:false,method:"get",loadFormData:function(){},onModalInit:function(loadedData){},onModalShow:function(){},beforeSumbit:function(){return{}},onSubmitSuccess:function(response){},onSubmitError:function(sent,textStatus,errorThrown){},onModalReset:function(defaultData){}},args);const mh=new ModalHandler(this,options);mh.delegateSubmit();return mh}})(jQuery);jQuery.fn.dataTableExt.sErrMode="console";jQuery.fn.dataTableExt.formatSecondsToHHMMSS=((data,type,row)=>{if(isNaN(data))return data;if(type=="display")return secondsToTime(data);return data});class DataTableUtils{static getStdDatatableConfig(dtButtons=[],dom="<'d-flex'<'mr-auto'l><'dt-search'f>B>rtip"){return{dom:dom,pagingType:"full_numbers",lengthMenu:[[10,25,50,-1],[10,25,50,`${i18n.all}`]],language:{info:i18n.showing_x_to_y_rows,search:i18n.script_search,infoFiltered:"",paginate:{previous:"<",next:">",first:"«",last:"»"}},saveState:true,buttons:{buttons:dtButtons,dom:{button:{className:"btn btn-link"},container:{className:"border-left ml-1 float-right"}}}}}static setAjaxConfig(config,url,dataSrc="",method="get",params={}){config.ajax={url:url,type:method,dataSrc:dataSrc,data:function(d){return $.extend({},d,params)}};return config}static extendConfig(config,extension){if(extension.hasFilters){extension.stateSaveCallback=function(settings,data){localStorage.setItem("DataTables_"+settings.sInstance,JSON.stringify(data))};extension.stateLoadCallback=function(settings){return JSON.parse(localStorage.getItem("DataTables_"+settings.sInstance))};extension.stateSaveParams=function(settings,data){$("[data-filter]").each(function(){const activeFilter=$(this).find(`li.active`).data("filter-key");if(!activeFilter)return;if(!data.filters)data.filters={};data.filters[$(this).data("filter")]=activeFilter})}}return $.extend({},config,extension)}static addFilterDropdown(title,filters=[],columnIndex,filterID,tableAPI){const createEntry=(val,key,callback)=>{const $entry=$(`${val} `);$entry.click(function(e){if($dropdownTitle.parent().find(`i.fas`).length==0){$dropdownTitle.parent().prepend(` `)}$dropdownTitle.text($entry.text());$dropdownTitle.attr(`data-filter-key`,key);$menuContainer.find("li").removeClass(`active`);$entry.addClass(`active`);if(callback)callback(e)});return $entry};const filterKey=title.toLowerCase().split(" ").join("_");const dropdownId=`${filterKey}-filter-menu`;const $dropdownContainer=$(`
`);const $dropdownButton=$(` `);const $dropdownTitle=$(`${title} `);$dropdownButton.append($dropdownTitle);const $menuContainer=$(``);for(let filter of filters){const $entry=createEntry(filter.label,filter.key,e=>{if(filter.callback){filter.callback()}tableAPI.column(columnIndex).search(filter.regex,true,false).draw()});$menuContainer.append($entry)}const $allEntry=createEntry(i18n.all,"all",e=>{$dropdownTitle.parent().find("i.fas.fa-filter").remove();$dropdownTitle.html(`${title}`).removeAttr(`data-filter-key`);tableAPI.columns(columnIndex).search("").draw(true)});$(filterID).prepend($dropdownContainer.append($dropdownButton,$menuContainer.prepend($allEntry)));DataTableUtils.setCurrentFilter(tableAPI)}static setCurrentFilter(tableAPI){if(!tableAPI.state)return;if(!tableAPI.state.loaded())return;if(!tableAPI.state.loaded().filters)return;const filters=tableAPI.state.loaded().filters;if(!filters)return;for(let[key,value]of Object.entries(filters)){if(value=="all")continue;const entry=$(`li[data-filter-key='${value}']`);entry.addClass("active");$(`#${key}-filter-menu button`).prepend(` `).find(`span`).html(entry.text())}tableAPI.state.save()}static secondsToHHMMSS(seconds){const padZeroes=n=>`${n}`.padStart(2,"0");const sec=seconds%60;const mins=Math.floor(seconds/60)%60;const hours=Math.floor(seconds/3600);return`${padZeroes(hours)}:${padZeroes(mins)}:${padZeroes(sec)}`}}const alertNotifications={};let alertNotificationUtilsId=0;class AlertNotification{constructor({title:title,body:body,link:link,delay:delay=0,id:id,style:style}={}){this.title=title;this.body=body;this.link=link;this.delay=delay;this.id=id;this.style=style}render(){const self=this;const $toast=$(`
`);if(this.delay!==0){$toast.data("autohide",true);$toast.data("delay",this.delay)}else{$toast.data("autohide",false)}$toast.data("notification-id",this.id);const $toastHeader=$(``);const $toastBody=$(`${this.body}
`);if(this.link!=undefined&&this.link!=""){const $anchor=$(`Click! `);$toastBody.append($anchor)}$toast.append($toastHeader,$toastBody);$toast.toast("show");$toast.on("hidden.bs.toast",function(){AlertNotificationUtils.hideAlert(self.id)});this.$element=$toast;return $toast}updateBody(body){if(this.$element==undefined)throw"[AlertNotification] :: The notification has not been rendered yet!";this.$element.find(".toast-body span").text(body)}destroy(){this.$element.toast("dispose");this.$element.empty()}}class AlertNotificationUtils{static initAlerts(){$(`.toast.alert-notification`).each(function(){const noScope=$(this).data("notificationNoScope");const pages=noScope==""||noScope==undefined?[]:noScope.split(";");if(pages.length>0&&pages.some(page=>location.href.contains(page))){$(this).remove()}$(this).toast("show")})}static hideAlert(notificationId){if(!notificationId){console.warn("[AlertNotificationUtils] :: The notification id cannot be null!");return}if(!(notificationId in alertNotifications)){console.warn("[AlertNotificationUtils] :: The notification hasn't been found!");return}alertNotifications[notificationId].destroy();delete alertNotifications[notificationId]}static updateNotification(notificationId,body){if(!(notificationId in alertNotifications)){throw"[AlertNotificationUtils] :: The notification was not found!"}alertNotifications[notificationId].updateBody(body)}static showAlert(option){const styles={warning:{bg:"warning",text:"text-dark",icon:"fa-exclamation-circle"},info:{bg:"info",text:"text-white",icon:"fa-info-circle"},success:{bg:"success",text:"text-white",icon:"fa-check-circle"}};const style=styles[option.level]||styles.warning;if(option.id===undefined)throw"[AlertNotificationUtils] :: An AlertNotification must have an in id!";if(option.id in alertNotifications)return;if(option.title===undefined)throw"[AlertNotificationUtils]:: An AlertNotification must have a title!";if(option.body===undefined)throw"[AlertNotificationUtils]:: An AlertNotification must have a body!";option.style=style;const notification=new AlertNotification(option);$(`#main-container`).prepend(notification.render());alertNotifications[option.id]=notification;return notification}static bindClosingEvent(){$(".toast.alert-notification[data-notification-id]").on("hidden.bs.toast",function(){$.post(`${http_prefix}/lua/handler_alert_notification.lua`,{notification_id:$(this).data("notificationId"),action:`disposed`})})}}
//# 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 c9e6d83bba..2b4e490fa9 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","plugin-script-datatable.js","main.js","notification-daemon.js","utils/modal-utils.js","utils/datatable-utils.js","utils/alert-notifications-utils.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","removeClass","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","datatableInitRefreshRows","column_id","refresh_interval","trend_columns","$dt","rows","old_timer","old_req","clearInterval","removeData","abort","ids","id_to_row","row","data_id","params","custom_hosts","join","url","first_load","_process_result","result","JSON","parse","console","error","row_idx","row_html","row_tds","key","col_idx","cell","$cell","old_val","trend_value_formatter","arrows","parseFloat","warn","drawTrend","setInterval","ajax","type","cache","success","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","aysResetForm","aysRecheckForm","aysGetDirty","fields_selector","getValue","$field","undefined","is","$option","isFieldDirty","origValue","curValue","dirty","l","dirty_status","input","NTOPNG_MIN_VISUAL_VALUE","REGEXES","ipv4","ipv6","domainName","macAddress","username","email","https","init_data_patterns","data_pattern","pattern","split","map","p","is_good_ipv4","RegExp","test","is_good_ipv6","is_mac_address","mac","isNumeric","value","is_network_mask","what","optional_mask","elems","mask","ip_addr","address","fbits","bits","sizes","bits_log1000","Math","log","floor","round","pow","ret","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","current","last","withColor","toggleAllTabs","enabled","disableAllDropdownsAndTabs","prop","enableAllDropdownsAndTabs","s","addCommas","nStr","x1","x2","rgx","scale","decimals","factor","formatValue","formatPackets","n","formatPoints","formatFlows","formatMessages","fmillis","bytesToVolume","bytesToVolumeAndLabel","bitsToSize","secondsToTime","seconds","days","hours","minutes","sec","msg","msg_array","years","format","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","S","getMilliseconds","$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","check_status_code","status_code","status_text","$error_label","is_different","text","request_failed_message","show","alert","importModalHelper","load_config_xhr","hide","off","$button","file","files","no_file","reader","FileReader","onload","json_conf","invalid_file","done","status","xhr","statusText","reset_csrf","csrf","reload","fail","readAsText","serializeFormArray","serializedArray","serialized","forEach","includes","cleanForm","formSelector","reset","document","ready","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","dscp_class","device","if_index","port","exporter","ifname","profile","user_script","command","traffic_volume","traffic","getValueFormatter","metric_type","series","custom_formatter","stats","formatters","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","g","sum","arrayToNvSerie","serie_data","start","step","buildOtherSerie","total_serie","visual_total","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","hideQuerySlow","chart_data_sum","reduce","acc","pt","redrawExtraLines","chart_id","extra_lines","selectAll","xValueScale","xAxis","yValueScale","yAxis1","style","attachStackedChartCallback","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_time_loaded","manual_trigger_extra_series","datetime_format","max_cmp_over_total_ratio","max_line_over_total_ratio","query_timer","seconds_before_query_slow","query_completed","query_was_aborted","last_known_t","visualization_options","is_zoomed","unreachable_timestamps","spinner","chart_colors_full","chart_colors_min","split_directions_colors","format_unreachable","formatter","y","num_ticks_y1","num_ticks_y2","domain_y1","domain_y2","first_run","update_chart_data","new_data","datum","call","transition","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","datetimepicker","updateChartFromPickers","zoom_out","event","go","addEventListener","zoom_link","checkQueryCompleted","flows_dt","wait_num_queries","queryWasAborted","abortQuery","noData","tableRequestCompleted","getDataUrl","data_params","ts_compare","extended","old_start","old_end","old_interval","tend","no_spinner","on_load_callback","force_update","series_formatted_labels","new_end","zoomType","no_data_available","req_params","show_unreachable","no_fill","get","tickValues","color_i","chart_colors","j","current_step","serie_type","serie_color","split_directions","axis","color","has_full_data","additional_series","total","other_serie","past_serie","ratio_over_total","is_disabled","classed","extra_series","class","no_trend","num_smoothed_points","smooth_functions","rsi","relativeStrengthIndexArray","periods","add_smoothed_serie","fn_to_use","smoothed","delta_serie","aligned","scaled","remaining","to_fill","splice","yDomainRatioY2","ref_serie","tok","was_unreachable","is_unreachable","tval","tlast","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","perc_val","by_serie","enabled_series","updateState","source_aggregation","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","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","source_pid","source","source_name","source_type","pid","target_pid","target_name","target_type","height","arrow_size","category10","layout","size","linkDistance","charge","tick","svg","enter","path","circle","drag","href","linkArc","transform","dx","dy","dr","sqrt","makeUniqueValidator","items_function","cmp_name","memberValueValidator","member","makePasswordPatternValidator","passwordPatternValidator","passwordMatchValidator","other_input","not","poolnameValidator","passwordMatchRecheck","items","not_empty","hostOrMacValidator","ipAddressValidator","INDEX_SEARCH_COLUMN","dataTable","ext","filterScripts","className","init","node","config","button_id","button_text","parsed","is_enabled","action","draw","popover","animation","self","setTimeout","registerServiceWorker","navigator","serviceWorker","register","NOTIFICATION_DEBUG","PushNotificationBuilder","[object Object]","badge","body","lang","interaction","requireInteraction","Notification","onclick","NotificationManager","requestPermission","err","pushNotification","canReceiveNotification","registration","getRegistration","showNotification","permissionNotification","permission","modal_id_ctr","ModalHandler","element","dialog","dontDisableSubmit","observer","MutationObserver","list","bindFormValidation","observe","childList","subtree","submitButton","cleanFormOnModalClose","parents","loadFormData","onModalInit","fillFormModal","onModalShow","delegateResetButton","submitHandler","isSyncRequest","stopPropagation","makeRequest","form_sel","$input","checkValidation","insertError","$parent","$error","validity","valid","validationMessage","dataToSend","beforeSumbit","submitOptions","request","method","endpoint","stringify","dataType","contentType","response","textStatus","resetAfterSubmit","onSubmitSuccess","delegateSubmit","jqxhr","errorThrown","onSubmitError","resetButton","defaultValues","serializeArray","modalHandler","Error","loadedData","sent","onModalReset","defaultData","mh","dataTableExt","sErrMode","formatSecondsToHHMMSS","DataTableUtils","dtButtons","dom","pagingType","lengthMenu","all","language","showing_x_to_y_rows","script_search","infoFiltered","paginate","previous","next","saveState","button","container","dataSrc","extension","hasFilters","stateSaveCallback","settings","sInstance","stateLoadCallback","stateSaveParams","activeFilter","filters","columnIndex","filterID","tableAPI","createEntry","$entry","$dropdownTitle","prepend","$menuContainer","filterKey","dropdownId","$dropdownContainer","$dropdownButton","column","regex","$allEntry","setCurrentFilter","loaded","Object","entries","entry","save","padZeroes","padStart","mins","alertNotifications","alertNotificationUtilsId","AlertNotification","delay","$toast","$toastHeader","bg","$toastBody","$anchor","toast","AlertNotificationUtils","hideAlert","$element","empty","noScope","pages","page","notificationId","destroy","updateBody","option","styles","warning","level","notification","render","notification_id"],"mappings":"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"}
\ 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","plugin-script-datatable.js","main.js","notification-daemon.js","utils/modal-utils.js","utils/datatable-utils.js","utils/alert-notifications-utils.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","removeClass","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","datatableInitRefreshRows","column_id","refresh_interval","trend_columns","$dt","rows","old_timer","old_req","clearInterval","removeData","abort","ids","id_to_row","row","data_id","params","custom_hosts","join","url","first_load","_process_result","result","JSON","parse","console","error","row_idx","row_html","row_tds","key","col_idx","cell","$cell","old_val","trend_value_formatter","arrows","parseFloat","warn","drawTrend","setInterval","ajax","type","cache","success","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","aysResetForm","aysRecheckForm","aysGetDirty","fields_selector","getValue","$field","undefined","is","$option","isFieldDirty","origValue","curValue","dirty","l","dirty_status","input","NTOPNG_MIN_VISUAL_VALUE","REGEXES","ipv4","ipv6","domainName","macAddress","username","email","https","init_data_patterns","data_pattern","pattern","split","map","p","is_good_ipv4","RegExp","test","is_good_ipv6","is_mac_address","mac","isNumeric","value","is_network_mask","what","optional_mask","elems","mask","ip_addr","address","fbits","bits","sizes","bits_log1000","Math","log","floor","round","pow","ret","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","current","last","withColor","toggleAllTabs","enabled","disableAllDropdownsAndTabs","prop","enableAllDropdownsAndTabs","s","addCommas","nStr","x1","x2","rgx","scale","decimals","factor","formatValue","formatPackets","n","formatPoints","formatFlows","formatMessages","fmillis","bytesToVolume","bytesToVolumeAndLabel","bitsToSize","secondsToTime","seconds","days","hours","minutes","sec","msg","msg_array","years","format","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","S","getMilliseconds","$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","check_status_code","status_code","status_text","$error_label","is_different","text","request_failed_message","show","alert","importModalHelper","load_config_xhr","hide","off","$button","file","files","no_file","reader","FileReader","onload","json_conf","invalid_file","done","status","xhr","statusText","reset_csrf","csrf","reload","fail","readAsText","serializeFormArray","serializedArray","serialized","forEach","includes","cleanForm","formSelector","reset","document","ready","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","dscp_class","device","if_index","port","exporter","ifname","profile","user_script","command","traffic_volume","traffic","getValueFormatter","metric_type","series","custom_formatter","stats","formatters","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","g","sum","arrayToNvSerie","serie_data","start","step","buildOtherSerie","total_serie","visual_total","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","hideQuerySlow","chart_data_sum","reduce","acc","pt","redrawExtraLines","chart_id","extra_lines","selectAll","xValueScale","xAxis","yValueScale","yAxis1","style","attachStackedChartCallback","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_time_loaded","manual_trigger_extra_series","datetime_format","max_cmp_over_total_ratio","max_line_over_total_ratio","query_timer","seconds_before_query_slow","query_completed","query_was_aborted","last_known_t","visualization_options","is_zoomed","unreachable_timestamps","spinner","chart_colors_full","chart_colors_min","split_directions_colors","format_unreachable","formatter","y","num_ticks_y1","num_ticks_y2","domain_y1","domain_y2","first_run","update_chart_data","new_data","datum","call","transition","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","datetimepicker","updateChartFromPickers","zoom_out","event","go","addEventListener","zoom_link","checkQueryCompleted","flows_dt","wait_num_queries","queryWasAborted","abortQuery","noData","tableRequestCompleted","getDataUrl","data_params","ts_compare","extended","old_start","old_end","old_interval","tend","no_spinner","on_load_callback","force_update","series_formatted_labels","new_end","zoomType","no_data_available","req_params","show_unreachable","no_fill","get","tickValues","color_i","chart_colors","j","current_step","serie_type","serie_color","split_directions","axis","color","has_full_data","additional_series","total","other_serie","past_serie","ratio_over_total","is_disabled","classed","extra_series","class","no_trend","num_smoothed_points","smooth_functions","rsi","relativeStrengthIndexArray","periods","add_smoothed_serie","fn_to_use","smoothed","delta_serie","aligned","scaled","remaining","to_fill","splice","yDomainRatioY2","ref_serie","tok","was_unreachable","is_unreachable","tval","tlast","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","perc_val","by_serie","enabled_series","updateState","source_aggregation","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","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","source_pid","source","source_name","source_type","pid","target_pid","target_name","target_type","height","arrow_size","category10","layout","size","linkDistance","charge","tick","svg","enter","path","circle","drag","href","linkArc","transform","dx","dy","dr","sqrt","makeUniqueValidator","items_function","cmp_name","memberValueValidator","member","makePasswordPatternValidator","passwordPatternValidator","passwordMatchValidator","other_input","not","poolnameValidator","passwordMatchRecheck","items","not_empty","hostOrMacValidator","ipAddressValidator","INDEX_SEARCH_COLUMN","dataTable","ext","filterScripts","className","init","node","config","button_id","button_text","parsed","is_enabled","action","draw","popover","animation","self","setTimeout","registerServiceWorker","navigator","serviceWorker","register","NOTIFICATION_DEBUG","PushNotificationBuilder","[object Object]","badge","body","lang","interaction","requireInteraction","Notification","onclick","NotificationManager","requestPermission","err","pushNotification","canReceiveNotification","registration","getRegistration","showNotification","permissionNotification","permission","modal_id_ctr","ModalHandler","element","dialog","dontDisableSubmit","observer","MutationObserver","list","bindFormValidation","observe","childList","subtree","submitButton","cleanFormOnModalClose","parents","loadFormData","onModalInit","fillFormModal","onModalShow","delegateResetButton","submitHandler","isSyncRequest","stopPropagation","makeRequest","form_sel","$input","checkValidation","insertError","$parent","$error","validity","valid","validationMessage","dataToSend","beforeSumbit","submitOptions","request","method","endpoint","stringify","dataType","contentType","response","textStatus","resetAfterSubmit","onSubmitSuccess","delegateSubmit","jqxhr","errorThrown","onSubmitError","resetButton","defaultValues","serializeArray","modalHandler","Error","loadedData","sent","onModalReset","defaultData","mh","dataTableExt","sErrMode","formatSecondsToHHMMSS","DataTableUtils","dtButtons","dom","pagingType","lengthMenu","all","language","showing_x_to_y_rows","script_search","infoFiltered","paginate","previous","next","saveState","button","container","dataSrc","extension","hasFilters","stateSaveCallback","settings","sInstance","stateLoadCallback","stateSaveParams","activeFilter","filters","columnIndex","filterID","tableAPI","createEntry","$entry","$dropdownTitle","prepend","$menuContainer","filterKey","dropdownId","$dropdownContainer","$dropdownButton","column","regex","$allEntry","setCurrentFilter","loaded","Object","entries","entry","save","padZeroes","padStart","mins","alertNotifications","alertNotificationUtilsId","AlertNotification","delay","$toast","$toastHeader","bg","$toastBody","$anchor","toast","AlertNotificationUtils","hideAlert","$element","empty","noScope","pages","page","notificationId","destroy","updateBody","option","styles","warning","level","notification","render","notification_id"],"mappings":"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"}
\ No newline at end of file
diff --git a/httpdocs/js/pages/pools/host-members.js b/httpdocs/js/pages/pools/host-members.js
index e1805f391d..cd13f483d9 100644
--- a/httpdocs/js/pages/pools/host-members.js
+++ b/httpdocs/js/pages/pools/host-members.js
@@ -2,30 +2,58 @@
* (C) ntop.org - 2020
* This script manage the GUI for Host Pool Members page
*/
-$(document).ready(function() {
- let memberRowData;
+$(document).ready(function () {
- let dtConfig = DataTableUtils.getStdDatatableConfig( [
+ let memberRowData = null;
+
+ // this is the current filtering type for the datatable
+ let currentType = null;
+
+ const filters = [
+ {
+ regex: `${REGEXES.ipv4}|${REGEXES.ipv6}`,
+ label: i18n.ip_filter,
+ key: 'ip_filter',
+ callback: () => { currentType = "ip"; $hostMembersTable.rows().invalidate(); }
+ },
+ {
+ regex: REGEXES.macAddress,
+ label: i18n.mac_filter,
+ key: 'mac_filter',
+ callback: () => { currentType = "mac"; $hostMembersTable.rows().invalidate(); }
+ },
+ ];
+
+ let dtConfig = DataTableUtils.getStdDatatableConfig([
{
text: ' ',
action: () => { $(`#add-member-modal`).modal('show'); }
}
]);
- dtConfig = DataTableUtils.setAjaxConfig(
- dtConfig,
- `${http_prefix}/lua/rest/v1/get/host/pool/members.lua?pool=${queryPoolId}`,
- `rsp`
- );
+ dtConfig = DataTableUtils.setAjaxConfig(dtConfig, `${http_prefix}/lua/rest/v1/get/host/pool/members.lua?pool=${queryPoolId}`, `rsp`);
dtConfig = DataTableUtils.extendConfig(dtConfig, {
stateSave: true,
+ hasFilters: true,
columns: [
- { data: 'name', type: 'ip-address' },
+ {
+ data: 'name',
+ render: function (data, type, row) {
+
+ if (type == "sort" || type == "type") {
+ if (currentType == "mac")
+ return $.fn.dataTableExt.oSort["mac-address-pre"](data);
+ return $.fn.dataTableExt.oSort["ip-address-pre"](data);
+ }
+
+ return data;
+ }
+ },
{
data: 'vlan',
width: '5',
className: 'text-center',
- render: function(data, type, row) {
+ render: function (data, type, row) {
if (data == 0 && type == "display") return "";
return data;
@@ -34,7 +62,7 @@ $(document).ready(function() {
{
data: null, targets: -1, className: 'text-center',
width: "10%",
- render: function() {
+ render: function () {
return (`
@@ -44,7 +72,14 @@ $(document).ready(function() {
`);
}
}
- ]
+ ],
+ initComplete: function (settings, json) {
+
+ const tableAPI = settings.oInstance.api();
+ DataTableUtils.addFilterDropdown(
+ i18n.member_type, filters, 0, '#host-members-table_filter', tableAPI
+ );
+ }
});
const $hostMembersTable = $(`#host-members-table`).DataTable(dtConfig);
@@ -54,17 +89,17 @@ $(document).ready(function() {
$removeModalHandler.invokeModalInit();
});
- $(`#select-host-pool`).change(function() {
+ $(`#select-host-pool`).change(function () {
// update selected pool information
selectedPool = { name: $(`#select-host-pool option:selected`).text(), id: $(this).val() };
// update the datatable
$hostMembersTable.ajax.url(`${http_prefix}/lua/rest/v1/get/host/pool/members.lua?pool=${selectedPool.id}`).load().draw(false);
queryPoolId = selectedPool.id;
- history.pushState({pool: queryPoolId}, '', location.href.replace(/pool\=[0-9]+/, `pool=${queryPoolId}`));
+ history.pushState({ pool: queryPoolId }, '', location.href.replace(/pool\=[0-9]+/, `pool=${queryPoolId}`));
});
- $(window).on('popstate', function(e) {
- const {state} = e.originalEvent;
+ $(window).on('popstate', function (e) {
+ const { state } = e.originalEvent;
$(`#select-host-pool`).val(state.pool).trigger('change');
});
@@ -73,15 +108,15 @@ $(document).ready(function() {
csrf: addCsrf,
resetAfterSubmit: false,
endpoint: `${http_prefix}/lua/rest/v1/bind/host/pool/member.lua`,
- onModalShow: function() {
+ onModalShow: function () {
// hide the fields and select default type entry
const macAndNetworkFields = "#add-member-modal .mac-fields, #add-member-modal .network-fields";
$(macAndNetworkFields).hide();
$(`#add-modal-feedback`).hide();
},
- onModalInit: function() {
+ onModalInit: function () {
// on select member type shows only the fields interested
- $(`#add-member-modal select[name='member_type']`).change(function() {
+ $(`#add-member-modal select[name='member_type']`).change(function () {
const value = $(this).val();
// clean the members and show the selected one
@@ -91,7 +126,7 @@ $(document).ready(function() {
$(`#add-member-modal form [type='submit']`).removeAttr("disabled");
});
},
- beforeSumbit: function() {
+ beforeSumbit: function () {
let member;
const typeSelected = $(`#add-member-modal select[name='member_type']`).val();
@@ -114,7 +149,7 @@ $(document).ready(function() {
member = `${network}/${cidr}@${vlan}`;
}
- return {pool: selectedPool.id, member: member };
+ return { pool: selectedPool.id, member: member };
},
onSubmitSuccess: function (response, textStatus, modalHandler) {
@@ -134,15 +169,15 @@ $(document).ready(function() {
method: 'post',
csrf: removeCsrf,
endpoint: `${http_prefix}/lua/rest/v1/bind/host/pool/member.lua`,
- onModalShow: function() {
+ onModalShow: function () {
$(`#remove-modal-feedback`).hide();
},
- onModalInit: function() {
+ onModalInit: function () {
$(`#remove-member-name`).html(`${memberRowData.name} `);
$(`#remove-pool-name`).html(`${selectedPool.name} `);
},
- beforeSumbit: function() {
- return { pool: defaultPoolId, member: memberRowData.member};
+ beforeSumbit: function () {
+ return { pool: defaultPoolId, member: memberRowData.member };
},
onSubmitSuccess: function (response, textStatus, modalHandler) {
diff --git a/httpdocs/js/utils/datatable-macsorting.js b/httpdocs/js/utils/datatable-macsorting.js
new file mode 100644
index 0000000000..9193d43eee
--- /dev/null
+++ b/httpdocs/js/utils/datatable-macsorting.js
@@ -0,0 +1,17 @@
+/**
+ * This is a pluginf for the Spyrmedia Datatables.
+ * This plugins sort the columns containing IP Addresses.
+ * Thanks to: https://datatables.net/plug-ins/sorting/ip-address
+ */
+jQuery.extend( jQuery.fn.dataTableExt.oSort, {
+ "mac-address-pre": function (mac) {
+ const associatedNumber = mac.split(":").map(byte => parseInt(byte, 16)).join("");
+ return (associatedNumber);
+ },
+ "mac-address-asc": function ( a, b ) {
+ return ((a < b) ? -1 : ((a > b) ? 1 : 0));
+ },
+ "mac-address-desc": function ( a, b ) {
+ return ((a < b) ? 1 : ((a > b) ? -1 : 0));
+ }
+});
\ No newline at end of file
diff --git a/httpdocs/js/utils/datatable-utils.js b/httpdocs/js/utils/datatable-utils.js
index 1c64c5644b..c24ed0071e 100644
--- a/httpdocs/js/utils/datatable-utils.js
+++ b/httpdocs/js/utils/datatable-utils.js
@@ -132,6 +132,10 @@ class DataTableUtils {
for (let filter of filters) {
const $entry = createEntry(filter.label, filter.key, (e) => {
+ // if the filter have a callback then call it
+ if (filter.callback) {
+ filter.callback();
+ }
tableAPI.column(columnIndex).search(filter.regex, true, false).draw();
});
diff --git a/httpdocs/templates/pages/manage_host_members.template b/httpdocs/templates/pages/manage_host_members.template
index 848ceb2ced..f6cc5c43cd 100644
--- a/httpdocs/templates/pages/manage_host_members.template
+++ b/httpdocs/templates/pages/manage_host_members.template
@@ -56,6 +56,7 @@
+