X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plekit%2Ftable%2Fcolumns.js;h=32dbbf3d5e98383e07885c6e71a53ed291cff46e;hb=d694eb9fdfe0a7bcb9d8fc7b571751475f4227be;hp=115fc7c829a6750b6e256435075785700441ce64;hpb=07352939a3914a01359298f20b737db818186a7e;p=plewww.git diff --git a/plekit/table/columns.js b/plekit/table/columns.js index 115fc7c..32dbbf3 100644 --- a/plekit/table/columns.js +++ b/plekit/table/columns.js @@ -1,9 +1,307 @@ -/* $Id: table.js 13009 2009-04-10 10:49:28Z baris $ */ +/* $Id: column.js Panos $ */ var filtered_color = "grey"; var normal_color = "black"; +//Descriptions overriding the default ones set in Accessors_site.py and configuration + +var sourceComon = 'CoMon'; +var sourceTophat = 'TopHat'; +var sourceTophatAPI = 'TopHat API'; +var sourceMySlice = 'MySlice'; +var sourceCymru = 'Team Cymru'; +var sourceSonoma = 'SONoMA'; +var sourceMyPLC = 'MyPLC API'; +var sourceManiacs = 'MANIACS'; +var sourceMaxmind = 'MaxMind'; +var sourceMonitor = 'Monitor'; +var hardwareReqs = 'current PlanetLab hardware requirement'; +var selectReferenceNode ='
'; +var selectReferenceNodeRTT ='
'; + +var descHOSTNAME = "test"; + +var titleAU = 'Authority'; +var detailAU = 'The authority of the global PlanetLab federation that the site of the node belongs to.'; +var valuesAU = 'PLC (PlanetLab Central), PLE (PlanetLab Europe)'; +var sourceAU = 'Source: '+sourceMyPLC; +var descAU = ''+titleAU+'

'+detailAU+'

Values: '+valuesAU+'

Source: '+sourceMyPLC+'

'; + +var titleST = 'Status'; +var sourceST = 'Source: '+sourceMonitor; +var valuesST = 'Values: online (up and running), good (up and running recently), offline (unreachable today), down (node unreachable for more than one day), failboot (reachable, but only by administrators for debugging purposes).'; +var descST = ''+titleST+'

'+valuesST+'

'+sourceST+'

'; + +var titleA = 'Architecture name'; +var detailA = 'The node architecture.'; +var sourceA = 'Source: '+sourceMyPLC; +var valuesA = 'x86_64, i386, n/a'; +var descA = ''+titleA+'

'+detailA+'

Values: '+valuesA+'

'+sourceA+'

'; + +var titleAS = 'Autonomous system ID'; +var sourceAS = 'Source: '+sourceCymru+' (via '+sourceTophat+')'; +var valuesAS = 'Values: Integer between 0 and 65535, n/a'; +var descAS = ''+titleAS+'

'+valuesAS+'

' + sourceAS+'

'; + +var titleAST = 'Autonomous system type'; +var sourceAST = 'Source: '+sourceManiacs; +var valuesAST = 'Values: t1 (tier-1), t2 (tier-2), edu (university), comp (company), nic (network information centre -- old name for a domain name registry operator), ix (IXP), n/a'; +var descAST = ''+titleAST+'

'+valuesAST+'

'+sourceAST+'

'; + +var titleASN = 'Autonomous system name'; +var sourceASN = 'Source: '+sourceTophat; +var descASN = ''+titleASN+'

'+sourceASN+'

'; + +var selectPeriodBU = 'Select period: '; +var titleBU = 'Bandwidth utilization '; +var sourceBU = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; +var valuesBU ='Unit: Kbps'; +var detailBU = 'The average transmited bandwidh over the selected period. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.' +var descBU = ''+titleBU+'

'+detailBU+'

'+selectPeriodBU+'

'+valuesBU+'

'+sourceBU+'

'; + +var titleBW= 'Bandwidth limit'; +var sourceBW = 'Source: '+sourceComon; +var valuesBW = 'Unit: Kbps'; +var detailBW = 'The bandwidth limit is a cap on the total outbound bandwidth usage of a node. It is set by the site administrator (PI). For more details see Bandwidth Limits (planet-lab.org).'; +var descBW = ''+titleBW+'

'+detailBW+'

'+valuesBW+'

'+sourceBW+'

'; + +var titleCC = 'Number of CPU cores'; +var sourceCC = 'Source: '+sourceComon; +var detailCC = 'The number of CPU cores on the node. For reference, the '+hardwareReqs+' is 4 cores min. (Older nodes may have fewer cores).'; +var descCC = ''+titleCC+'

'+detailCC+'

'+sourceCC+'

'; + +var titleCN = 'Number of CPUs'; +var sourceCN = 'Source: '+sourceComon; +var detailCN = 'The number of CPUs on the node. For reference, the '+hardwareReqs+' is 1 (if quad core) or 2 (if dual core).'; +var descCN = ''+titleCN+'

'+detailCN+'

'+sourceCN+'

'; + +var titleCPC = 'Number of cores per CPU'; +var sourceCPC = 'Source: '+sourceComon; +var detailCPC = 'The number of cores per CPU on the node.'; +var descCPC = ''+titleCPC+'

'+detailCPC+'

'+sourceCPC+'

'; + +var titleCR = 'CPU clock rate'; +var detailCR = 'The clock rate for the CPUs on the node. For reference, the '+hardwareReqs+' is 2.4 GHz.'; +var sourceCR = 'Source: '+sourceComon; +var valuesCR = 'Unit: GHz'; +var descCR = ''+titleCR+'

'+detailCR+'

'+valuesCR+'

'+sourceCR+'

'; + +var selectPeriodCF = 'Select period: '; +var titleCF = 'Free CPU'; +var sourceCF = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; +var valuesCF = 'Unit: %'; +var detailCF = 'The average CPU percentage that gets allocated to a test slice named burb that is periodically run by CoMon.'; +var descCF = ''+titleCF+'

'+detailCF+'

'+selectPeriodCF+'

'+valuesCF+'

'+sourceCF+'

'; + +var titleDN = 'Toplevel domain name'; +var sourceDN = 'Source: '+sourceMyPLC; +var descDN = ''+titleDN+'

'+sourceDN+'

'; + +var titleDA = 'Date added'; +var sourceDA = 'Source: '+sourceMyPLC; +var detailDA = 'The date that the node was added to PlanetLab.'; +var descDA = ''+titleDA+'

'+detailDA+'

'+sourceDA+'

'; + +var titleDL = 'Deployment'; +var detailDL = 'The deployment status.'; +var valuesDL = 'Values: alpha, beta, production, n/a'; +var sourceDL = 'Source: '+sourceMyPLC; +var descDL = ''+titleDL+'

'+detailDL+'

'+valuesDL+'

'+sourceDL+'

'; + +var titleDS = 'Disk size'; +var detailDS = 'The size of the hard disk available on the node. For reference, the '+hardwareReqs+' is 500 GB.'; +var sourceDS = 'Source: '+sourceComon; +var valuesDS = 'Unit: GB'; +var descDS = ''+titleDS+'

'+detailDS+'

'+valuesDS+'

'+sourceDS+'

'; + +var titleDU = 'Current disk utilization'; +var sourceDU = 'Source: '+sourceComon; +var valuesDU = 'Unit: GB'; +var detailDU = 'The amount of disk space currently consumed.'; +var descDU = ''+titleDU+'

'+detailDU+'

'+valuesDU+'

'+sourceDU+'

'; + +var titleDF = 'Disk space free'; +var sourceDF = 'Source: '+sourceComon; +var valuesDF = 'Unit: GB.'; +var detailDF = 'The amount of disk space currently available.'; +var descDF = ''+titleDF+'

'+detailDF+'

'+valuesDF+'

'+sourceDF+'

'; + +var titleHC = 'Hop count (pairwise)'; +var sourceHC = 'Source: '+sourceTophat; +var detailHC = 'TopHat conducts traceroutes every five minutes in a full mesh between all PlanetLab nodes. The hop count is the length of the traceroute from the node to the reference node, based upon the most recently reported traceroute.'; +var descHC = ''+titleHC+'

'+detailHC+'

'+selectReferenceNode+'

'+sourceHC+'

'; + +var titleIP = 'IP address'; +var sourceIP = 'Source: '+sourceMyPLC; +var descIP = ''+titleIP+'

'+sourceIP+'

'; + +var selectPeriodL = 'Select period: '; +var titleL= 'Load '; +var sourceL = 'Source: '+sourceComon; +var valuesL = 'Unit: 5-minute load'; +var detailL = 'The average 5-minute load (as reported by the Unix uptime command) over the selected period.'; +var descL = ''+titleL+'

'+detailL+'

'+selectPeriodL+'

'+valuesL+'

'+sourceL+'

'; + +var titleLON= 'Longitude'; +var sourceLON = 'Source: '+sourceTophat; +var descLON = ''+titleLON+'

'+sourceLON+'

'; + +var titleLAT= 'Latitude'; +var sourceLAT = 'Source: '+sourceTophat; +var descLAT = ''+titleLAT+'

'+sourceLAT+'

'; + +var titleLCN= 'Location (Country)'; +var sourceLCN = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; +var detailLCN = 'Based on the latitude and longitude information.'; +var descLCN = ''+titleLCN+'

'+detailLCN+'

'+sourceLCN+'

'; + +var titleLCT= 'Location (Continent)'; +var sourceLCT = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; +var detailLCT = 'Based on the latitude and longitude information.'; +var descLCT = ''+titleLCT+'

'+detailLCT+'

'+sourceLCT+'

'; + +var titleLCY= 'Location (City)'; +var sourceLCY = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; +var detailLCY = 'Based on the latitude and longitude information.'; +var descLCY = ''+titleLCY+'

'+detailLCY+'

'+sourceLCY+'

'; + +var titleLPR= 'Location precision radius'; +var sourceLPR = 'Source: '+sourceTophat; +var valuesLPR = 'Unit: float.'; +var detailLPR = 'The radius of the circle corresponding to the error in precision of the geolocalization estimate.'; +var descLPR = ''+titleLPR+'

'+detailLPR+'

'+valuesLPR+'

'+sourceLPR+'

'; + +var titleLRN= 'Location (Region)'; +var sourceLRN = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; +var detailLRN = 'Based on the latitude and longitude information.'; +var descLRN = ''+titleLRN+'

'+detailLRN+'

'+sourceLRN+'

'; + +var titleMS= 'Memory size'; +var detailMS = 'The memory size (RAM) available on the node. For reference, the '+hardwareReqs+' is 4 GB.'; +var sourceMS = 'Source: '+sourceComon; +var valuesMS = 'Unit: GB.'; +var descMS = ''+titleMS+'

'+detailMS+'

'+valuesMS+'

'+sourceMS+'

'; + +var selectPeriodMU = 'Select period: '; +var titleMU = 'Memory utilization'; +var sourceMU = 'Source: '+sourceComon; +var valuesMU = 'Unit: %'; +var detailMU = 'The average active memory utilization as reported by CoMon.'; +var descMU = ''+titleMU+'

'+detailMU+'

'+selectPeriodMU+'

'+valuesMU+'

'+sourceMU+'

'; + +var titleMA= 'Measurement agents'; +var sourceMA = 'Source: '+sourceTophat; +var valuesMA = 'Values: ETOMIC, SONoMA, TDMI, DIMES.'; +var detailMA = 'Co-located measurement agents.'; +var descMA = ''+titleMA+'

'+detailMA+'

'+valuesMA+'

'+sourceMA+'

'; + +var titleMAS= 'Measurement agent SONoMA'; +var sourceMAS = 'Source: '+sourceTophat; +var valuesMAS = 'Values: Node type (e.g., PLE, APE)'; +var detailMAS = 'The existence of a SONoMA agent. When an SONoMA is present, you have the possibility to have access to high-precision measurements through the '+sourceTophatAPI+'.'; +var descMAS = ''+titleMAS+'

'+detailMAS+'

'+valuesMAS+'

'+sourceMAS+'

'; + +var titleMAE= 'Measurement agent ETOMIC'; +var sourceMAE = 'Source: '+sourceTophat; +var valuesMAE = 'Values: yes/no'; +var detailMAE = 'The existence of a colocated ETOMIC box. When an ETOMIC box is present, you have the possibility to conduct high-precision measurements through the '+sourceTophatAPI+'.'; +var descMAE = ''+titleMAE+'

'+detailMAE+'

'+valuesMAE+'

'+sourceMAE+'

'; + +var titleMAT= 'Measurement agent TDMI'; +var sourceMAT = 'Source: '+sourceTophat; +var valuesMAT = 'Values: yes/no'; +var detailMAT = 'The existence of a colocated TDMI (TopHat Dedicated Measurement Infrastructure) agent. When a TDMI agent is present, you have access to a wide variety of network topology measurements through the '+sourceTophatAPI+'.'; +var descMAT = ''+titleMAT+'

'+detailMAT+'

'+valuesMAT+'

'+sourceMAT+'

'; + +var titleMAD= 'Measurement agent DIMES'; +var sourceMAD = 'Source: '+sourceTophat; +var valuesMAD = 'Values: yes/no'; +var detailMAD = 'The existence of a colocated DIMES agent. When a DIMES agent is present, you have access to DIMES measurements through the '+sourceTophatAPI+'.'; +var descMAD = ''+titleMAD+'

'+detailMAD+'

'+valuesMAD+'

'+sourceMAD+'

'; + +var titleNSF= 'Network information (spoof)'; +var sourceNSF = 'Source: '+sourceTophat; +var valuesNSF = 'Values: yes/no'; +var detailNSF = 'Whether the node can send packets successfully (or not) with a spoofed IP source address.'; +var descNSF = ''+titleNSF+'

'+detailNSF+'

'+valuesNSF+'

'+sourceNSF+'

'; + +var titleNSR= 'Network information (source route)'; +var sourceNSR = 'Source: '+sourceTophat; +var valuesNSR = 'Values: yes/no'; +var detailNSR = 'Whether the node can send packets packets using the IP source route option. See herefor more info.'; +var descNSR = ''+titleNSR+'

'+detailNSR+'

'+valuesNSR+'

'+sourceNSR+'

'; + +var titleNTP= 'Network information (timestamp)'; +var sourceNTP = 'Source: '+sourceTophat; +var valuesNTP = 'Values: yes/no'; +var detailNTP = 'Whether the node can send packets packets using the IP timestamp option. See herefor more info.'; +var descNTP = ''+titleNTP+'

'+detailNTP+'

'+valuesNTP+'

'+sourceNTP+'

'; + +var titleNRR= 'Network information (record route)'; +var sourceNRR = 'Source: '+sourceTophat; +var valuesNRR = 'Values: yes/no'; +var detailNRR = 'Whether the node can send packets packets using the IP record route option. See herefor more info.'; +var descNRR = ''+titleNRR+'

'+detailNRR+'

'+valuesNRR+'

'+sourceNRR+'

'; + +var titleOS = 'Operating system'; +var detailOS = 'Fedora or CentOS distribution to use for node or slivers.'; +var sourceOS = 'Source: '+sourceMyPLC; +var valuesOS = 'Values: f8, f12, Cent/OS, other, n/a'; +var descOS = ''+titleOS+'

'+detailOS+'

'+valuesOS+'

'+sourceOS+'

'; + +var titleRTT = 'Round Trip Time (pairwise)'; +var detailRTT = 'The round trip time between a selected SONoMA agent and PlanetLab nodes.'; +var sourceRTT = 'Source: '+sourceSonoma+' (via '+sourceTophat+ ')'; +var descRTT = ''+titleRTT+'

'+detailRTT+'

'+selectReferenceNodeRTT+'

'+sourceRTT+'

'; + +var selectPeriodR = 'Select period: '; +var titleR = 'Reliability'; +var sourceR = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; +var detailR = 'CoMon queries nodes every 5 minutes, for 255 queries per day. The average reliability is the percentage of queries over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; +var valuesR = 'Unit: %'; +var descR = ''+titleR+'

'+detailR+'

'+selectPeriodR+'

'+valuesR+'

'+sourceR+'

'; + +var titleRES = 'Reservation capabilities'; +var sourceRES = 'Source: '+sourceMyPLC; +//var valuesRES = 'Values: yes/no'; +var valuesRES = 'Values: -R- (if yes)'; +var detailRES = 'Whether the node can be reserved for a certain duration. Your slivers will be available only during timeslots where you have obtained leases (see tab above).

Please note that as of August 2010 this feature is experimental. Feedback is appreciated at devel@planet-lab.org

'; +var descRES = ''+titleRES+'

'+detailRES+'

'+valuesRES+'

'+sourceRES+'

'; + +var selectPeriodS = 'Select period: '; +var titleS = 'Active slices'; +var sourceS = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; +var valuesS = 'Unit: %'; +var detailS = 'Average number of active slices over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; +var descS = ''+titleS+'

'+detailS+'

'+selectPeriodS+'

'+valuesS+'

'+sourceS+'

'; + +var titleSM= 'Slices in memory'; +var detailSM = 'The total number of slices in memory (both active and inactive).'; +var sourceSM = 'Source: '+sourceComon; +var descSM = ''+titleSM+'

'+detailSM+'

'+sourceSM+'

'; + +var titleSN = 'Site name'; +var sourceSN = 'Source: '+sourceMyPLC; +var descSN = ''+titleSN+'

'+sourceSN+'

'; + +var selectPeriodSSH = 'Select period: '; +var titleSSH = 'Average SSH response delay'; +var valuesSSH = 'Unit: msecs'; +var detailSSH = 'The average response delay of the node to SSH logins over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; +var sourceSSH ='Source: '+sourceComon+' (via '+sourceMySlice+')'; +var descSSH = ''+titleSSH+'

'+detailSSH+'

'+selectPeriodSSH+'

'+valuesSSH+'

'+sourceSSH+'

'; + + +var titleUT = 'Uptime'; +var sourceUT = 'Source: '+sourceComon; +var valuesUT = 'Unit: days'; +var detailUT = 'The continuous uptime until the moment that the page is loaded, as reported by the CoMon html query API.'; +var descUT = ''+titleUT+'

'+detailUT+'

'+valuesUT+'

'+sourceUT+'

'; + + + +//Categorization of columns in different types, useful for filtering function inTypeA(header_name) { var typeA = ['ST','SN','RES','OS','NRR','NTP','NSR','NSF','NDS','NTH','NEC','LRN','LCY','LPR','LCN','LAT','LON','IP','ASN','AST']; @@ -25,172 +323,253 @@ function inTypeD(header_name) { return typeD.indexOf(header_name); } + +//Debugging function debugfilter(s) { document.getElementById('debug').innerHTML+=s; } -function scrollList(tableid) { -debugfilter("here"); - -if (event.keyCode == 40) - debugfilter("down"); -else if (event.keyCode == 38) - debugfilter("up"); - -} +//Called when a column is selected. It displays the detailed description +//on the right panel function highlightOption(divid) { -//debugfilter("highlighting option "+divid); - -for (var kk in column_headers) { + var columns = document.getElementsByName('columnlist'); + for(var j = 0; j < columns.length; j++) + columns[j].className = 'out'; -if (document.getElementById(kk)) - document.getElementById(kk).className = 'out'; -} + document.getElementById(divid).className = 'selected'; -document.getElementById(divid).className = 'selected'; + showDescription(divid); -showDescription(divid); +//panos: to IMPROVE + if (document.getElementById('selectperiod'+divid)) + document.getElementById('selectperiod'+divid).value = document.getElementById('period'+divid).value; } -function showDescription(h) { +//Displays the detailed column description - //debugfilter("showing description "+h); +function showDescription(h) { if (document.getElementById('selectdescr')) { + //Checks if there is a detailed description defined if (window['desc'+h]) document.getElementById('selectdescr').innerHTML = ""+window['desc'+h]; - else if (column_table[h] && column_table[h]['description']) - document.getElementById('selectdescr').innerHTML = column_table[h]['description']; else - document.getElementById('selectdescr').innerHTML = "No description provided"; + document.getElementById('selectdescr').innerHTML = "No detailed description provided"; } -} + if (document.getElementById('refnodes_div')) + document.getElementById('refnodes_div').innerHTML = ref_nodes_select; -function overrideTitles() { + if (document.getElementById('refnodes_rtt_div')) + document.getElementById('refnodes_rtt_div').innerHTML = ref_nodes_select_rtt; +} - //debugfilter("

overriding..."); - for (var kk in column_headers) { +//Overrides the titles of the columns as they are shown in the column selection panel. +//If no overriding variable exists the tag's description is used +function overrideTitles() { - //debugfilter("here "+kk); + var columns = document.getElementsByName('columnlist'); - if (document.getElementById(kk) && window['title'+kk]) - document.getElementById('htitle'+kk).innerHTML = window['title'+kk]; + for(var j = 0; j < columns.length; j++) + { + var kk = columns[j].id; + if (window['title'+kk]) + document.getElementById('htitle'+kk).innerHTML = window['title'+kk]; } + } +//When the checkbox is clicked. Adds/removes column respectively function changeCheckStatus(column) { + var h = document.getElementById(column).value; -if (document.getElementById('selectdescr')) -{ -showDescription(document.getElementById(column).value); + if (document.getElementById('selectdescr')) + showDescription(h); -if (document.getElementById(column).checked) - addColumn(document.getElementById(column).value); -else - deleteColumn(document.getElementById(column).value); -} + //debugfilter("HERE: "+column+" - "+document.getElementById('type '+column).value); + //debugfilter("HERE: "+column); -} -function updatePeriod(h) { - deleteColumn2(h, h+'w'); - deleteColumn2(h, h+'m'); - deleteColumn2(h, h+'y'); - addColumn(h); + if (document.getElementById(column).checked) + addColumn(h, true, document.getElementById('type'+h).value); + else + deleteColumn(h); } -function filterByType(selectedtype) { -var notselectedyet = true; -for (var kk in column_headers) { +//This function is used when the alternative "quick" selection list is used +function changeSelectStatus(column) { - if (document.getElementById(kk)) + var optionClass = ""; + var selected_index = document.getElementById('quicklist').selectedIndex; + + if (document.getElementById('quicklist') && selected_index != 0) { - if (window['type'+kk] == selectedtype) - { - document.getElementById(kk).className = 'in'; - if (notselectedyet) - highlightOption(kk); - notselectedyet = false; - } - else - document.getElementById(kk).className = 'out'; + + optionClass = document.getElementById('quicklist').options[selected_index].className; + + if (optionClass == "in") + { + deleteColumn(document.getElementById('quicklist').value); + document.getElementById('quicklist').options[selected_index].className = "out"; + document.getElementById('quicklist').value="0"; + } + else + { + addColumn(document.getElementById('quicklist').value, true); + document.getElementById('quicklist').options[selected_index].className = "in"; + document.getElementById('quicklist').value="0"; + } } } + +function updateReferenceNode(select_id, new_ref_node) { + + var old_ref_node = document.getElementById(select_id).value; + document.getElementById(select_id).value=new_ref_node; + + //debugfilter("changed "+old_ref_node+" with "+new_ref_node+" and column is "+document.getElementById('checkHC').checked); + + if (select_id == 'refnodeHC' && document.getElementById('checkHC').checked) + { + document.getElementById('fetchedHC').value = "false"; + addColumnAjax('HC', 'HC'); + //debugfilter("replacing "+old_ref_node+" with "+new_ref_node); + replaceColumnConfiguration('HC:'+old_ref_node,'HC:'+new_ref_node); + } + else if (select_id == 'refnodeRTT' && document.getElementById('checkRTT').checked) + { + document.getElementById('fetchedRTT').value = "false"; + addColumnAjax('RTT', 'RTT'); + //debugfilter("replacing "+old_ref_node+" with "+new_ref_node); + replaceColumnConfiguration('RTT:'+old_ref_node,'RTT:'+new_ref_node); + } + } +//When the period of an already selected column is changed +function updatePeriod(h, new_period) { + + var old_period = document.getElementById('period'+h).value; + document.getElementById('period'+h).value=new_period; + + //debugfilter(h+''+old_period+'-'+h+''+new_period); + if (document.getElementById('check'+h).checked) + { + deleteColumnCells(h+''+old_period); + addColumnCells(h+''+new_period); + addColumnAjax(h, h+''+new_period); + + replaceColumnConfiguration(h+''+old_period,h+''+new_period); + } +} + /* RESET/SAVE CONFIGURATION + */ +function getHTTPObject() +{ + if (typeof XMLHttpRequest != 'undefined') + { return new XMLHttpRequest(); } -function resetColumns() { + try + { return new ActiveXObject("Msxml2.XMLHTTP"); } + catch (e) + { + try { return new ActiveXObject("Microsoft.XMLHTTP"); } + catch (e) {} + } + return false; +} - for (var kk in column_table) { +function closeMessage(tab) +{ + var current_conf = document.getElementById('show_configuration').value; + var value = ''; - if (column_table[kk]['visible'] == true && column_table[kk]['fetch'] == false) - deleteColumn(kk); - else if (column_table[kk]['visible'] == false && column_table[kk]['fetch'] == true) - addColumn(kk); - } + if (current_conf != "") + current_conf += ";"; -} + if (tab == 'reservable') { + document.getElementById('note_reservable_div').style.display = "none"; + if (current_conf.indexOf('reservable') != -1) + return; + value = current_conf+'reservable'; + } -function resetCols(which_conf) { + if (tab == 'columns') { + document.getElementById('note_columns_div').style.display = "none"; + if (current_conf.indexOf('columns') != -1) + return; + value = current_conf+'columns'; + } - var target_configuration = "|"+document.getElementById(which_conf).value+"|"; + var slice_id = document.getElementById('slice_id').value; + var person_id = document.getElementById('person_id').value; + var tag_id = document.getElementById('show_tag_id').value; - //debugfilter("

Target configuration = "+target_configuration); + var url = "/plekit/php/updateConfiguration.php?value="+value+"&slice_id="+slice_id+"&person_id="+person_id+"&tag_name=showconf&tag_id="+tag_id; + //debugfilter("updating conf with "+url); + document.getElementById('show_configuration').value = value; - for (var kk in column_table) { - //debugfilter("in "+kk+" "); + var req = getHTTPObject(); + req.open('GET', url, true); + req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + req.onreadystatechange = + function() { + if (req.readyState == 4) + { debugfilter(req.responseText); } + } + req.send(null); - if (target_configuration.indexOf("|"+kk+"|")>=0) - { - if (document.getElementById('check'+kk)) - if (document.getElementById('check'+kk).checked == false) - { - debugfilter("

Adding "+kk); - addColumn(kk); - } - } - else - { - if (document.getElementById('check'+kk)) - if (document.getElementById('check'+kk).checked == true) - { - debugfilter("

Deleting "+kk); - deleteColumn(kk); - } - } - } } -function saveConfiguration(which_conf) + +function updateColumnConfiguration(value, reload) { + var person_id = document.getElementById('person_id').value; var slice_id = document.getElementById('slice_id').value; + var tag_id = document.getElementById('conf_tag_id').value; + var full_column_configuration = document.getElementById('full_column_configuration').value; - var target_configuration = document.getElementById(which_conf).value; + //debugfilter("
OLD = "+full_column_configuration); + //debugfilter("
value = "+value); + // + + var old_columns = full_column_configuration.split(";"); + var new_columns = new Array(); - debugfilter("saving configuration "+target_configuration); - updateColumnConfiguration(slice_id, target_configuration); -} + for (var column_index = 0; column_index < old_columns.length ; column_index++) { + new_columns.push(old_columns[column_index]); + if (old_columns[column_index] != slice_id) + new_columns.push(old_columns[++column_index]); + else + { + if (value != "") + new_columns.push(value); + else + new_columns.push("default"); + + column_index++; + } + } -function updateColumnConfiguration(slice_id, value) -{ + var new_configuration = new_columns.join(";"); + //debugfilter("
NEW = "+new_configuration); if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari @@ -205,52 +584,66 @@ function updateColumnConfiguration(slice_id, value) if (xmlhttp.readyState==4) // && xmlhttp.status==200) { //value=xmlhttp.responseText; - //debugfilter(value); - if (document.getElementById('column_configuration')) + //debugfilter(value+"-----"+new_configuration); document.getElementById('column_configuration').value=value; + document.getElementById('full_column_configuration').value=new_configuration; + + if (reload) + window.location.reload(true); } } - xmlhttp.open("GET","/plekit/php/updateConf.php?value="+value+"&slice_id="+slice_id+"&tagName=Configuration",true); + + xmlhttp.open("GET","/plekit/php/updateConfiguration.php?value="+new_configuration+"&slice_id="+slice_id+"&person_id="+person_id+"&tag_name=columnconf&tag_id="+tag_id,true); + //xmlhttp.open("GET","/plekit/php/updateConf.php?value="+value+"&slice_id="+slice_id+"&person_id="+person_id+"&tagName=Columnconf",true); xmlhttp.send(); } +function logSortingAction(person_id, slice_id, value) +{ -function resetConfiguration(which_conf) -{ + var req = getHTTPObject(); + var url = "/plekit/php/logSorting.php?value="+value+"&slice_id="+slice_id+"&person_id="+person_id; + + req.open('GET', url, true); + req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + req.onreadystatechange = + function() { + if (req.readyState == 4) + { debugfilter(req.responseText); } + } + req.send(null); +} + +function sortCompleteCallback(tableid) { + var slice_id = document.getElementById('slice_id').value; - var target_configuration = document.getElementById(which_conf).value; + var person_id = document.getElementById('person_id').value; - debugfilter("reseting configuration "+target_configuration); + var ths = document.getElementById(tableid).getElementsByTagName("th"); + for(var i = 0, th; th = ths[i]; i++) { + if (th.className.indexOf("Sort") != -1) + { + //debugfilter("sorted"+th.getAttribute("name")); - if (window.XMLHttpRequest) - {// code for IE7+, Firefox, Chrome, Opera, Safari - xmlhttp=new XMLHttpRequest(); - } - else - {// code for IE6, IE5 - xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); - } - xmlhttp.onreadystatechange=function() - { - if (xmlhttp.readyState==4) // && xmlhttp.status==200) - { - //value=xmlhttp.responseText; - //debugfilter(value); - window.location.reload(true); - } - } - xmlhttp.open("GET","/plekit/php/updateConf.php?value="+target_configuration+"&slice_id="+slice_id+"&tagName=Configuration",true); + var column_name = th.getAttribute("name"); + var hclass = th.className; + var column = hclass.substr(hclass.indexOf("column"),hclass.indexOf("column")+1); + var sortdirection = "forward"; + if (hclass.indexOf("reverse")!=-1) + sortdirection = "reverse"; - xmlhttp.send(); + if (column.indexOf("column-1")==-1 && column.indexOf("column-0")==-1) + logSortingAction(person_id, slice_id, tableid+"|"+column_name+"|"+sortdirection); + } + } } -function addColumnToConfiguration(column) { +function addColumnToConfiguration(column) { var old_configuration = document.getElementById('column_configuration').value; - var slice_id = document.getElementById('slice_id').value; var new_configuration = ""; @@ -261,10 +654,49 @@ function addColumnToConfiguration(column) { //debugfilter("new configuration = "+new_configuration); - updateColumnConfiguration(slice_id, new_configuration); + updateColumnConfiguration(new_configuration, false); } +function deleteColumnFromConfiguration(column) { + + var old_configuration = document.getElementById('column_configuration').value; + + var old_columns = old_configuration.split("|"); + var new_columns = new Array(); + + for (var column_index = 0; column_index < old_columns.length ; column_index++) { + var conf = old_columns[column_index].split(':'); + if (conf[0] != column) + new_columns.push(old_columns[column_index]); + } + + var new_configuration = new_columns.join("|"); + updateColumnConfiguration(new_configuration, false); + +} + +function replaceColumnConfiguration(column_old, column_new) { + + var old_configuration = document.getElementById('column_configuration').value; + + var old_columns = old_configuration.split("|"); + var new_columns = new Array(); + + var olds = column_old.split(':'); + + for (var column_index = 0; column_index < old_columns.length ; column_index++) { + var conf = old_columns[column_index].split(':'); + if (conf[0] != olds[0]) + new_columns.push(old_columns[column_index]); + else + new_columns.push(column_new); + } + + var new_configuration = new_columns.join("|"); + + updateColumnConfiguration(new_configuration); +} /* @@ -272,24 +704,39 @@ ADD/REMOVE COLUMNS */ +function convert_data(value, data_source, data_type, tagname) { -function getHTTPObject() -{ - if (typeof XMLHttpRequest != 'undefined') - { return new XMLHttpRequest(); } + //debugfilter("v["+tagname+"]="+value+"-"); - try - { return new ActiveXObject("Msxml2.XMLHTTP"); } - catch (e) - { - try { return new ActiveXObject("Microsoft.XMLHTTP"); } - catch (e) {} - } - return false; + if (value == "" || value == "n/a" || value == null || value == "NaN" || value == "None") + return "n/a"; + + if (tagname == "uptime") { + return parseInt((parseFloat(value) / 86400)); + } + + if (data_type == "date") { + + var date = new Date(value*1000); + + var year = date.getFullYear(); + var month = date.getMonth()+1; + if (month < 10) + month = "0"+month; + var day = date.getDate(); + if (day < 10) + day = "0"+day; + + return year + '-' + month + '-' + day; + } + + return value; } -function load_html(column, url) { +function load_data(column, header, url, data_source, data_type, tagname) { + + //debugfilter("
loading "+url); var req = getHTTPObject(); var res; req.open('GET', url, true); @@ -297,21 +744,26 @@ function load_html(column, url) { req.onreadystatechange = function() { if (req.readyState == 4) - { updateColumnData(column, req.responseText); } + { updateColumnData(column, header, req.responseText, data_source, data_type, tagname); } } req.send(null); } -function updateColumnData(column,data) { +function updateColumnData(column, header, data, data_source, data_type, tagname) { -var headers = column.split("|"); +var headers = header.split("|"); var data_table = data.split("|"); //debugfilter("

headers[0] = "+headers[0]); -//debugfilter("

sample line = "+data_table[2]); +//debugfilter("

data[2] = "+data_table[2]); +//debugfilter("data = "+data + " with type "+data_type + " and source "+data_source); +//debugfilter("

data table length = "+data_table.length); +if (data_table.length > 1) +{ + var node_data; var table_id1 = 'nodes'; @@ -332,26 +784,35 @@ var data_table = data.split("|"); for (var h_index=0; h_index < headers.length; h_index++) { - if (node_data[h_index+1] == "") + if (node_data[h_index+1] == "" || node_data[h_index+1] == "None") data_array1[node_data[0]][h_index] = "n/a"; else - data_array1[node_data[0]][h_index] = node_data[h_index+1]; + data_array1[node_data[0]][h_index] = convert_data(node_data[h_index+1], data_source, data_type, tagname); } } + if (rows) for (var row_index = 0; row_index < rows.length ; row_index++) { var tr=rows[row_index]; for (var column_index=0; column_index < tr.cells.length; column_index++) { - //debugfilter("

node id = "+tr.cells[0].innerHTML); + //debugfilter("

node id = "+tr.cells[0].innerHTML+" - "+tr.cells[column_index].getAttribute('name')); + if (tr.cells[column_index].getAttribute('name')) + { var found_index = headers.indexOf(tr.cells[column_index].getAttribute('name')); if (found_index != -1) + //debugfilter(tr.cells[0].innerHTML+"-"+found_index); tr.cells[column_index].innerHTML = data_array1[tr.cells[0].innerHTML][found_index]; + } } } + //debugfilter("Reset sorting ....."); + //tablePaginater.init(table_id1); + fdTableSort.init(table_id1); + //potential nodes if (data_table[node_index] == '---potential---') { @@ -377,7 +838,7 @@ if (data_table[node_index] == '---potential---') if (node_data[h_index+1] == "") data_array2[node_data[0]][h_index] = "n/a"; else - data_array2[node_data[0]][h_index] = node_data[h_index+1]; + data_array2[node_data[0]][h_index] = convert_data(node_data[h_index+1], data_source, data_type, tagname); } } @@ -386,35 +847,40 @@ if (data_table[node_index] == '---potential---') var tr=rows2[row_index]; for (var column_index=0; column_index < tr.cells.length; column_index++) { + if (tr.cells[column_index].getAttribute('name')) + { var found_index = headers.indexOf(tr.cells[column_index].getAttribute('name')); if (found_index != -1) tr.cells[column_index].innerHTML = data_array2[tr.cells[0].innerHTML][found_index]; + } } } + fdTableSort.init(table_id2); + //tablePaginater.init(table_id2); } - document.getElementById('loadingDiv').innerHTML = "" + //fdTableSort.removeTableCache(table_id2); + //document.getElementById('loading'+column).innerHTML = ""; + } +document.getElementById('loading'+column).innerHTML = ""; +} -function addColumnCells(column,header) { - - //debugfilter("adding cells now: "+column+":"+header); - column_table[header]['visible']=true; +function addColumnCells(header) { var cells = document.getElementsByName(header); - //debugfilter("got cells -"+cells+"- for "+header); for(var j = 0; j < cells.length; j++) cells[j].style.display = "table-cell"; } -function addColumnSamples(column) { +function addSampleCells(column) { var cellsheader = document.getElementsByName("confheader"+column); for(var j = 0; j < cellsheader.length; j++) @@ -422,69 +888,196 @@ function addColumnSamples(column) { } -function addColumnAjax(column) { - - var selectedperiod=""; +function addColumnAjax(column, header) { - if (document.getElementById('selectperiod'+column)) - selectedperiod = document.getElementById('selectperiod'+column).value; + //var t = document.getElementById('check'+column).name; + var t = document.getElementById('tagname'+header).value; + var slice_id = document.getElementById('slice_id').value; - var header = column+""+selectedperiod; + var selectedperiod = document.getElementById('period'+column).value; + var fetched = document.getElementById('fetched'+column).value; + var data_source = document.getElementById('source'+column).value; + var data_type = document.getElementById('type'+column).value; + var to_load = false; - addColumnCells(column, header); + //debugfilter("
adding "+column+","+header+','+fetched+','+t+','+data_source+','+data_type); - var t = column_table[header]['tagname']; - var slice_id = document.getElementById('slice_id').value; - document.getElementById('loadingDiv').innerHTML = "LOADING ..."; - var url = "/plekit/php/updateColumn.php?slice_id="+slice_id+"&tagName="+t; - load_html(header, url); + if (fetched.indexOf("false")!=-1) + { + to_load = true; + document.getElementById('fetched'+column).value = ','+selectedperiod+',true'; + } + else if (fetched.indexOf(','+selectedperiod+',')==-1) + { + to_load = true; + document.getElementById('fetched'+column).value = ','+selectedperiod+''+fetched; + } - addColumnToConfiguration(header); + if (to_load) + { + //debugfilter("ready to load ... "); + document.getElementById('loading'+column).innerHTML = ""; + var url = "/plekit/php/updateColumn.php?slice_id="+slice_id+"&tagName="+t+"&data_type="+data_type+"&data_source="+data_source; + if (t == "hopcount") + url = url+"&ref_node="+document.getElementById('selected_reference_node').value; + //debugfilter("calling "+url); + load_data(column, header, url, data_source, data_type, t); + } } -function addColumn2(column) { + +function addColumn(column, fetch) { var selectedperiod=""; + var header=column; + var conf=""; + + + if (inTypeC(column)!=-1) + { + column = column.substring(0,column.length-1); + } + + selectedperiod = document.getElementById('period'+column).value; + header = column+""+selectedperiod; + + if (inTypeD(column)!=-1) + { + //conf = header+":"+document.getElementById('reference_node').value; + //document.getElementById('selected_reference_node').value=document.getElementById('reference_node').value; + conf = header+":"+document.getElementById('refnodeHC').value; + document.getElementById('selected_reference_node').value=document.getElementById('refnodeHC').value; + } + else + conf = header; + + //debugfilter("adding column "+column+" and header "+header+" and conf = "+conf); + + addColumnCells(header); - if (document.getElementById('selectperiod'+column)) - selectedperiod = document.getElementById('selectperiod'+column).value; + if (fetch) + addColumnAjax(column, header); - var header = column+""+selectedperiod; + addColumnToConfiguration(conf); +} - addColumnCells(column,header); - addColumnToConfiguration(column); +function deleteColumnCells(header) { + + var cells = document.getElementsByName(header); + for(var j = 0; j < cells.length; j++) + cells[j].style.display = "none"; - checkDataToFetch(); } -function addColumn(column) { + +function deleteColumn(column) { var selectedperiod=""; var header=column; - //debugfilter("adding column "+column+" and header "+header); + selectedperiod = document.getElementById('period'+column).value; + header = column+""+selectedperiod; - if (inTypeC(column)!=-1) - { - column = column.substring(0,column.length-1); + //debugfilter("deleting "+column+","+header); + + deleteColumnCells(header); + + deleteColumnFromConfiguration(header); +} + + + +/* +EXTRA + + +function removeSelectHandler(object) +{ + debugfilter(object); + object.onclick = null; +} + +//to be used for scrolling the column list with down/up arrows + +function scrollList() { +debugfilter("here "+document.getElementById('scrolldiv').focused); +if (event.keyCode == 40) + debugfilter("down"); +else if (event.keyCode == 38) + debugfilter("up"); +} + +function resetColumns() { + + for (var kk in column_table) { + + if (column_table[kk]['visible'] == true && column_table[kk]['fetch'] == false) + deleteColumn(kk); + else if (column_table[kk]['visible'] == false && column_table[kk]['fetch'] == true) + addColumn(kk, true); } - else if (document.getElementById('selectperiod'+column)) - { - selectedperiod = document.getElementById('selectperiod'+column).value; - header = column+""+selectedperiod; + +} + +function resetCols(which_conf) { + + var target_configuration = "|"+document.getElementById(which_conf).value+"|"; + + //debugfilter("

Target configuration = "+target_configuration); + + for (var kk in column_table) { + //debugfilter("in "+kk+" "); + + if (target_configuration.indexOf("|"+kk+"|")>=0) + { + if (document.getElementById('check'+kk)) + if (document.getElementById('check'+kk).checked == false) + { + debugfilter("

Adding "+kk); + addColumn(kk, true); + } + } + else + { + if (document.getElementById('check'+kk)) + if (document.getElementById('check'+kk).checked == true) + { + debugfilter("

Deleting "+kk); + deleteColumn(kk); + } + } } +} - //debugfilter("adding "+column+","+header); +function filterByType(selectedtype) { - addColumnCells(column, header); +var notselectedyet = true; - addColumnToConfiguration(header); +for (var kk in column_headers) { + + if (document.getElementById(kk)) + { + if (window['type'+kk] == selectedtype) + { + document.getElementById(kk).className = 'in'; + if (notselectedyet) + highlightOption(kk); + notselectedyet = false; + } + else + document.getElementById(kk).className = 'out'; + } +} +} + + +function deleteColumnSample() { + var cellsheader = document.getElementsByName("confheader"+column); + for(var j = 0; j < cellsheader.length; j++) + cellsheader[j].style.display = "none"; - column_table[header]['visible'] = true; - - checkDataToFetch(); } function checkDataToFetch() { @@ -538,85 +1131,9 @@ if (column_table[kk]['visible'] == true && column_table[kk]['fetch'] == false) var slice_id = document.getElementById('slice_id').value; document.getElementById('loadingDiv').innerHTML = "    Loading data. Please wait ..."; var url = "/plekit/php/updateColumn.php?slice_id="+slice_id+"&tagName="+tagnames; - load_html(headers, url); + load_data(headers, url); } -function deleteColumnCells(column, header) { - - column_table[header]['visible']=false; - - var cells = document.getElementsByName(header); - for(var j = 0; j < cells.length; j++) - cells[j].style.display = "none"; - -} - -function deleteColumnSample() { - var cellsheader = document.getElementsByName("confheader"+column); - for(var j = 0; j < cellsheader.length; j++) - cellsheader[j].style.display = "none"; - -} - -function deleteColumnFromConfiguration(column) { - - - var old_configuration = document.getElementById('column_configuration').value; - var slice_id = document.getElementById('slice_id').value; - - var old_columns = old_configuration.split("|"); - var new_columns = new Array(); - - for (var column_index = 0; column_index < old_columns.length ; column_index++) { - var conf = old_columns[column_index].split(':'); - if (conf[0] != column) - new_columns.push(old_columns[column_index]); - } - - var new_configuration = new_columns.join("|"); - updateColumnConfiguration(slice_id, new_configuration); - - checkDataToFetch(); -} - -function deleteColumn2(column, header) { - - deleteColumnCells(column,header); - - deleteColumnFromConfiguration(column); - - column_table[header]['visible'] = false; - document.getElementById('check'+column).checked = false; -} - -function deleteColumn(column) { - - var selectedperiod=""; - var header=column; - - if (inTypeC(column)!=-1) - { - column = column.substring(0,column.length-1); - } - else if (document.getElementById('selectperiod'+column)) - { - selectedperiod = document.getElementById('selectperiod'+column).value; - header = column+""+selectedperiod; - } - - //debugfilter("deleting "+column+","+header); - - deleteColumnCells(column,header); - - deleteColumnFromConfiguration(header); - - column_table[header]['visible'] = false; - - //document.getElementById('check'+column).checked = false; -} - - - /*