From 482094becaf1d5cf6d75bef251d00cdfb650106f Mon Sep 17 00:00:00 2001 From: brichards64 Date: Wed, 11 Dec 2024 02:20:00 +0000 Subject: [PATCH 1/4] various fixes --- html-Common/Monitoring/index.html | 158 ++-- html-Common/Monitoring/monitoring.js | 784 +++++++++++------- html-Common/SubsystemReGenerate.sh | 25 + html-Common/favicon.ico | Bin 0 -> 318 bytes html-Common/includes/footer.html | 2 +- html-Common/monitoringplots/monitoringplots | 1 - .../DeviceConfig/SubsystemReGenerate.sh | 26 +- html-Detector/Config/SubsystemReGenerate.sh | 26 +- html-Detector/DAQ/SubsystemReGenerate.sh | 26 +- html-Detector/Shift/SubsystemReGenerate.sh | 26 +- .../SubSystemExample/SubsystemReGenerate.sh | 26 +- .../SubSystemTemplate/SubsystemReGenerate.sh | 26 +- html-Detector/SubsystemReGenerate.sh | 26 +- html-Detector/favicon.ico | Bin 318 -> 26 bytes html-Detector/includes/drawer.html | 2 +- html-Detector/includes/header.html | 8 +- html-Detector/includes/headerA.html | 8 +- html-Detector/includes/headerE.html | 2 +- html-Detector/includes/headerref.html | 2 +- html-Detector/includes/jump.mp3 | 1 + html-Detector/index.html | 6 +- .../DeviceConfig/SubsystemReGenerate.sh | 26 +- html-StandAlone/Config/SubsystemReGenerate.sh | 26 +- .../SubSystemExample/SubsystemReGenerate.sh | 26 +- .../SubSystemTemplate/SubsystemReGenerate.sh | 26 +- html-StandAlone/SubsystemReGenerate.sh | 26 +- html-StandAlone/favicon.ico | 1 + html-StandAlone/includes/jump.mp3 | 1 + 28 files changed, 627 insertions(+), 686 deletions(-) create mode 100755 html-Common/SubsystemReGenerate.sh create mode 100644 html-Common/favicon.ico delete mode 120000 html-Common/monitoringplots/monitoringplots mode change 100755 => 120000 html-Detector/Config/DeviceConfig/SubsystemReGenerate.sh mode change 100755 => 120000 html-Detector/Config/SubsystemReGenerate.sh mode change 100755 => 120000 html-Detector/DAQ/SubsystemReGenerate.sh mode change 100755 => 120000 html-Detector/Shift/SubsystemReGenerate.sh mode change 100755 => 120000 html-Detector/SubSystemExample/SubsystemReGenerate.sh mode change 100755 => 120000 html-Detector/SubSystemTemplate/SubsystemReGenerate.sh mode change 100755 => 120000 html-Detector/SubsystemReGenerate.sh mode change 100644 => 120000 html-Detector/favicon.ico create mode 120000 html-Detector/includes/jump.mp3 mode change 100755 => 120000 html-StandAlone/Config/DeviceConfig/SubsystemReGenerate.sh mode change 100755 => 120000 html-StandAlone/Config/SubsystemReGenerate.sh mode change 100755 => 120000 html-StandAlone/SubSystemExample/SubsystemReGenerate.sh mode change 100755 => 120000 html-StandAlone/SubSystemTemplate/SubsystemReGenerate.sh mode change 100755 => 120000 html-StandAlone/SubsystemReGenerate.sh create mode 120000 html-StandAlone/favicon.ico create mode 120000 html-StandAlone/includes/jump.mp3 diff --git a/html-Common/Monitoring/index.html b/html-Common/Monitoring/index.html index 595db492..8fa00523 100644 --- a/html-Common/Monitoring/index.html +++ b/html-Common/Monitoring/index.html @@ -1,80 +1,86 @@ - - ToolDAQ Webpage - - - - - - - -
-
- - - - -

Monitoring

- -
-
-
-
- -
-
-
- -
-
-
-
-
-
-
-
- - -
-
- -
-
- -
-

-
- -
-
- - + + + ToolDAQ Webpage + + + + + +
+
+ + + + + +

Monitoring

+ +
+

Ad-hoc Plot from Monitoring Table

+ + + + + +

+ + + +

+ +
+ + +
+
+ +
+
+
+ +
+ +
+ + + +
+

Retrieve Plot from RootPlots Table

+
+

+ +
+ + +
+ + + + + + + + - - - - + + + + + diff --git a/html-Common/Monitoring/monitoring.js b/html-Common/Monitoring/monitoring.js index 53c4caa2..767cc524 100644 --- a/html-Common/Monitoring/monitoring.js +++ b/html-Common/Monitoring/monitoring.js @@ -1,305 +1,501 @@ -// Initialize global variables -let last; -let updateinterval; -let data = []; -let updating = false; - -const output = document.getElementById("output"); -const tableselect = document.getElementById("tableselect"); -const select = document.querySelector('select'); -const graphDiv = document.getElementById("graph"); -const loader = document.getElementById("loader"); - -if (document.readyState !== 'loading') { - Init(); -} else { - document.addEventListener("DOMContentLoaded", function () { - Init(); - }); +"use strict;" +import { GetPSQLTable } from "/includes/functions.js"; + +var last; +var updateinterval; +var output = document.getElementById("output"); +var tableselect = document.getElementById("tableselect"); +var data =[]; +var drawnDevices = new Map(); +var select = document.querySelector('select'); +var graphDiv = document.getElementById("graph"); +var updating=false; +var abandonupdate=false; + +//update dropdown called on startup +updatedropdown(); + +//function for updating dropdown box with monitoring sources +function updatedropdown(){ + + //var xhr = new XMLHttpRequest(); + + //var url = "/cgi-bin/sqltable.cgi"; + + //var user ="root"; + //var db="daq"; + + var command="SELECT distinct(device) from monitoring" + + + // Set the request method to POST + //xhr.open("POST", url); + + // Set the request header to indicate that the request body contains form data + //xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + + + //var dataString = "user=" + user + "&db=" + db + "&command=" + command; + + + // Send the request + //xhr.send(dataString); + + + + //xhr.onreadystatechange = function() { + //if (this.readyState == 4 && this.status == 200) { + + gettable(command).then(function(result){ + + output.innerHTML = result; + var table = document.getElementById("table"); + + for( var i=1; i < table.rows.length; i++){ + tableselect.options.add(new Option( table.rows[i].innerText, table.rows[i].innerText)); + } + + tableselect.selectedIndex=-1; + output.innerHTML = ""; + tableselect.dispatchEvent(new Event("change")); + + }); + } -function init() { - updatedropdown(); - - select.addEventListener('change', function () { - if (tableselect.selectedIndex === -1) return; - makePlot(); - updateinterval = setInterval(updatePlot, 2000); - }); +//generic funcion for returning SQL table +function gettable(command){ + return GetPSQLTable(command, 'root', 'daq', true); } -// Function to update dropdown with monitoring sources -async function updatedropdown() { - try { - // Show the loader while data is being fetched - loader.style.display = 'block'; - - const command = "SELECT DISTINCT(device) FROM monitoring"; - const result = await getTable(command); - output.innerHTML = result; - - const table = document.getElementById("table"); - for (let i = 1; i < table.rows.length; i++) { - const optionText = table.rows[i].innerText; - tableselect.options.add(new Option(optionText, optionText)); - } - - tableselect.selectedIndex = -1; - output.innerHTML = ""; - tableselect.dispatchEvent(new Event("change")); - - // Hide the loader once the dropdown is updated - loader.style.display = 'none'; - } catch (error) { - console.error('Error updating dropdown:', error); - output.innerHTML = 'Error loading data.'; - - // Hide the loader if an error occurs - loader.style.display = 'none'; - } -} - -// Generic function to return SQL table data -async function getTable(command) { - const xhr = new XMLHttpRequest(); - const url = "/cgi-bin/sqlquery.cgi"; - const user = "root"; - const db = "daq"; - const dataString = `user=${user}&db=${db}&command=${command}`; - - return new Promise((resolve, reject) => { - xhr.open("POST", url); - xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - resolve(xhr.responseText); - } else { - reject(new Error('Failed to load data')); - } - } - }; - xhr.send(dataString); - }); -} - -// Function to generate the Plotly plot -async function makePlot() { - // Show loader before generating plot - loader.style.display = 'block'; - - clearInterval(updateinterval); - - if (select.options.length > 0) { - const selectedOption = select.options[select.selectedIndex]; - const command = `SELECT * FROM monitoring WHERE device='${selectedOption.value}' ORDER BY time ASC`; - - try { - const result = await getTable(command); - output.innerHTML = result; - - const table = document.getElementById("table"); - table.style.display = "none"; - - const xdata = new Map(); - const ydata = new Map(); - - for (let i = 1; i < table.rows.length; i++) { - const jsonData = JSON.parse(table.rows[i].cells[2].innerText); - - for (let key in jsonData) { - if (!xdata.has(key)) { - xdata.set(key, [table.rows[i].cells[0].innerText.slice(0, -3)]); - ydata.set(key, [jsonData[key]]); - } else { - xdata.get(key).push(table.rows[i].cells[0].innerText.slice(0, -3)); - ydata.get(key).push(jsonData[key]); - } - } - } - - data = []; - for (let [key, value] of xdata) { - data.push({ - name: `${selectedOption.value}:${key}`, - mode: 'lines', - x: value, - y: ydata.get(key) - }); - } - - const layout = { - title: 'Monitor Time Series with Range Slider and Selectors', - xaxis: { - rangeselector: selectorOptions, - rangeslider: {} - }, - responsive: true - }; - - // Clear previous plot traces if necessary - if (graphDiv.data && graphDiv.data.length > 0) { - Plotly.deleteTraces(graphDiv, 0); - } - - Plotly.plot(graphDiv, data, layout); +// actions to take when dropdown changes +select.addEventListener('change', function(){ + + if(tableselect.selectedIndex==-1) return; + makeplot(); + + if(document.getElementById("autoUpdate").checked){ + let refreshrate = document.getElementById("refreshRate").value; + if(refreshrate<1) refreshrate=1; + updateinterval = setInterval(updateplot, refreshrate*1000); + } + +}); + +// action to take when auto-update is checked +document.getElementById("autoUpdate").addEventListener("change", (event) => { + + if(tableselect.selectedIndex==-1) return; + + if(event.currentTarget.checked){ + let refreshrate = document.getElementById("refreshRate").value; + if(refreshrate<1) refreshrate=1; + updateinterval = setInterval(updateplot, refreshrate*1000); + // since this doesn't fire immediately, call it now + updateplot(); + } + else { + clearInterval(updateinterval); + } + +}); + +// action to take when auto-update refresh rate is changed +document.getElementById("refreshRate").addEventListener("change", (event) => { + + if(tableselect.selectedIndex==-1) return; + + if(document.getElementById("autoUpdate").checked){ + let refreshrate = document.getElementById("refreshRate").value; + if(refreshrate<1) refreshrate=1; + clearInterval(updateinterval); + updateinterval = setInterval(updateplot, refreshrate*1000); + // since this doesn't fire immediately, call it now + updateplot(); + } + +}); + +// action to take when history length is changed +document.getElementById("historyLength").addEventListener("change", (event) => { + + if(tableselect.selectedIndex==-1) return; + + // if history length has reduced, we just need to drop points, + // which can be done by calling trimplot + // but if history length has been increased, we need to fetch older data, + // which our regular calls to 'updateplot' will not do. + // simplest is just to re-run makeplot. + const numrows = document.getElementById("historyLength").value; + if( data.length == 0 || data[0].x.length < numrows ){ + makeplot(); + } else { + trimplot(); + } + +}); + +//function to generate plotly plot +function makeplot(){ + + try { + + // Get the selected option + if (select.options.length <= 0){ + return; + } + + var selectedOption = select.options[select.selectedIndex]; + + // check if the selected option is already drawn + if(drawnDevices.has(selectedOption.value)){ + // maybe the user has un-checked the 'draw on same plot' option and wants to clear other traces + if(document.getElementById("same").checked || (graphDiv.data != undefined && graphDiv.data.length ==1)){ + console.log(`skipping already drawn option ${selectedOption.value}`); + return; + } + } + + // unregister the plot for updating while we alter it + clearInterval(updateinterval); + + // check if the plot is actively undergoing an update + if(updating){ + abandonupdate=true; // tell it not to bother + // (prevents an existing async callback overwriting our graph div) + } + + // TODO add alternative limit based on time range rather than number of rows? + let numrows = document.getElementById("historyLength").value; + if(numrows <= 0) numrows = 200; + var command = `select * from monitoring where device='${selectedOption.value}' order by time desc LIMIT ${numrows}`; + + //console.log("makeplot submitting query"); + gettable(command).then(function(result){ + //console.log("makeplot got query result"); + + output.innerHTML=result; + var table = document.getElementById("table"); + table.style.display = "none"; + var xdata= new Map(); + var ydata= new Map(); + + // SQL query returns time descending (most recent first, seems sensible as that's the most relevant data) + // but to append new data on update calls, we want to be able to push (append to back), so data arrays + // needs to be ordered with earliest data first. So parse the sql response from last to first + //for( var i=1; i< table.rows.length; i++){ + for( var i=table.rows.length-1; i>0 ; i--){ + + //let jsonstring = table.rows[i].cells[2].innerText; + var jsondata = JSON.parse(table.rows[i].cells[2].innerText); + let xval = table.rows[i].cells[0].innerText.slice(0,-3); + + for (let key in jsondata) { + + //if( i == 1 ){ + if(!xdata.has(key)){ + + xdata.set(key,[xval]); + ydata.set(key,[jsondata[key]]); + + } else { + xdata.get(key).push(xval); + ydata.get(key).push(jsondata[key]); + + } + } + } + + data = []; + for(let [key, value] of xdata){ + + data.push({ + name: selectedOption.value + ":" +key, + //mode: 'lines', // 'mode' aka 'type' + mode: 'markers', + //mode:'lines+markers', // aka 'scatter' + x: value, + y: ydata.get(key) + }); + + } + + /* + // remove any existing plot to prevent memory leaks + while(!document.getElementById("same").checked && graphDiv.data != undefined && graphDiv.data.length >0){ + Plotly.deleteTraces(graphDiv, 0); + // Plotly.deleteTraces(graphDiv, [0]); + } + //Plotly.deleteTraces('graph', 0); + */ + + if(!document.getElementById("same").checked){ + //console.log("purge it"); + Plotly.purge(graphDiv); + drawnDevices.clear(); + } + + drawnDevices.set(selectedOption.value, 1); + + // react does not seem to work, seems like 'react' does not make new traces, just updates existing ones? + if(true || drawnDevices.size==1){ + //console.log("new plot time"); + Plotly.purge(graphDiv); + Plotly.newPlot(graphDiv, data, layout); // Plotly.plot ...? + } else { + //console.log("updated plot time"); + layout.datarevision = Math.random(); + Plotly.react(graphDiv, data, layout); + } + + // only set this back to false at the end of the thenable, + // when our callback has finished (or on error) + //console.log("done making plot"); + + }); + + } catch(err){ + console.error(err); + } + +}; - window.addEventListener('resize', function() { - Plotly.Plots.resize(graphDiv); - }); - // Hide loader once the plot is generated - loader.style.display = 'none'; - } catch (error) { - console.error('Error generating plot:', error); - output.innerHTML = 'Error generating plot.'; +//function to update plot +function updateplot(){ + + if(updating) return; + updating=true; + console.log("checking for new data..."); + + try { + // Get the selected option + if (select.options.length == 0) return; + var selectedOption = select.options[select.selectedIndex]; + + //var command = "select '*' from monitoring where source=\""+ selectedOption.value + "\" and time>to_timestamp(" + ((last.valueOf())/1000.0) + "); "; + + last=data[0].x[data[0].x.length-1]; + //console.log(`timestamp of last retreived data: ${last}`); + //last = data[0].x[0]; + + let numrows = document.getElementById("historyLength").value; + if(numrows <= 0) numrows = 200; + + //var command = `select * from monitoring where device='${selectedOption.value}' and time>'${last.valueOf()}' order by time desc LIMIT ${numrows};`; + var command = `select * from monitoring where device='${selectedOption.value}' and time>'${last.valueOf()}' order by time desc LIMIT ${numrows};`; + + //console.log("updateplot submitting query"); + gettable(command).then(function(result){ + if(abandonupdate){ + abandonupdate=false; + //console.log("abandoning update"); + updating=false; + return; + } + + //console.log("updateplot processing result"); + + output.innerHTML=result; + var table = document.getElementById("table"); + table.style.display = "none"; + var xdata= new Map(); + var ydata= new Map(); + + //for( var i=1; i< table.rows.length; i++){ + for( var i=table.rows.length-1; i>0 ; i--){ + + const xval = table.rows[i].cells[0].innerText.slice(0,-3); + let jsonstring = table.rows[i].cells[2].innerText; + var jsondata = JSON.parse(table.rows[i].cells[2].innerText); + + for (let key in jsondata) { + + //if( i == 1 ){ + if(!xdata.has(key)){ + + xdata.set(key,[xval]); + ydata.set(key,[jsondata[key]]); + + } else { + + xdata.get(key).push(xval); + ydata.get(key).push(jsondata[key]); + + } + } + } + + + for(let [key, value] of xdata){ + for( var i=0; i< data.length; i++){ + if(data[i].name == selectedOption.value + ":" +key){ + data[i].x=data[i].x.concat(value); + data[i].y=data[i].y.concat(ydata.get(key)); + // since we only append data we need to truncate to numrows at most + data[i].x = data[i].x.slice(-numrows); + data[i].y = data[i].y.slice(-numrows); + } + } + } + + /* + while(!document.getElementById("same").checked && graphDiv.data != undefined && graphDiv.data.length >0){ + Plotly.deleteTraces(graphDiv, 0); + Plotly.deleteTraces(graphDiv, [0]); + } + */ + + // tell plotly the data has changed + layout.datarevision = Math.random(); + + //Plotly.plot(graphDiv, data, layout); + //Plotly.redraw(graphDiv,data, layout); -- deprecated in ~2017? can't find it in the docs + Plotly.react(graphDiv,data,layout); // -- believe this may be the more efficient current way + + // reset updating at end of callback + updating=false; + + //console.log("done updating plot"); + + }); + + } catch(err){ + console.error(err); + // reset this on error + updating=false; + } + +}; - // Hide loader if an error occurs - loader.style.display = 'none'; - } - } +// function to drop older values when history length is reduced +function trimplot(){ + + const numrows = document.getElementById("historyLength").value; + + // update trace data arrays + for( var i=0; i< data.length; i++){ + data[i].x = data[i].x.slice(-numrows); + data[i].y = data[i].y.slice(-numrows); + } + + // tell plotly the data has changed + layout.datarevision = Math.random(); + + // trigger redraw + Plotly.react(graphDiv,data,layout); + } -// Function to update the plot periodically -async function updatePlot() { - if (updating) return; - updating = true; - - // Show loader while updating plot - loader.style.display = 'block'; - - if (select.options.length > 0) { - const selectedOption = select.options[select.selectedIndex]; - last = data[0].x[data[0].x.length - 1]; - - const command = `SELECT * FROM monitoring WHERE device='${selectedOption.value}' AND time>'${last.valueOf()}' ORDER BY time ASC`; - - try { - const result = await getTable(command); - output.innerHTML = result; - - const table = document.getElementById("table"); - table.style.display = "none"; - - const xdata = new Map(); - const ydata = new Map(); - - for (let i = 1; i < table.rows.length; i++) { - const jsonData = JSON.parse(table.rows[i].cells[2].innerText); - - for (let key in jsonData) { - if (!xdata.has(key)) { - xdata.set(key, [table.rows[i].cells[0].innerText.slice(0, -3)]); - ydata.set(key, [jsonData[key]]); - } else { - xdata.get(key).push(table.rows[i].cells[0].innerText.slice(0, -3)); - ydata.get(key).push(jsonData[key]); - } - } - } - - // Update the data - for (let [key, value] of xdata) { - for (let i = 0; i < data.length; i++) { - if (data[i].name === `${selectedOption.value}:${key}`) { - data[i].x = data[i].x.concat(value); - data[i].y = data[i].y.concat(ydata.get(key)); - } - } - } - - const layout = { - title: 'Monitor Time Series with Range Slider and Selectors', - xaxis: { - rangeselector: selectorOptions, - rangeslider: {} - }, - responsive: true - }; - - Plotly.redraw(graphDiv, data, layout); - - window.addEventListener('resize', function() { - Plotly.Plots.resize(graphDiv); - }); - - // Hide loader once update is complete - loader.style.display = 'none'; - updating = false; - } catch (error) { - console.error('Error updating plot:', error); - output.innerHTML = 'Error updating plot.'; +// TODO tie these up with history length +// XXX must be defined before 'layout' as layout references this in rangeselector +var selectorOptions = { + buttons: [ { + step: 'hour', + stepmode: 'backward', + count: 1, + label: '1hr' + }, { + step: 'hour', + stepmode: 'backward', + count: 3, + label: '3hr' + }, { + step: 'hour', + stepmode: 'backward', + count: 6, + label: '6hr' + }, { + step: 'hour', + stepmode: 'backward', + count: 12, + label: '12hr' + }, { + step: 'day', + stepmode: 'backward', + count: 1, + label: '1d' + }, { + step: 'day', + stepmode: 'backward', + count: 3, + label: '3d' + }, { + step: 'week', + stepmode: 'backward', + count: 1, + label: '1w' + }, { + step: 'week', + stepmode: 'backward', + count: 2, + label: '2w' + }, { + step: 'month', + stepmode: 'backward', + count: 1, + label: '1m' + }, { + step: 'month', + stepmode: 'backward', + count: 6, + label: '6m' + }, { + step: 'year', + stepmode: 'todate', + count: 1, + label: 'YTD' + }, { + step: 'year', + stepmode: 'backward', + count: 1, + label: '1y' + }, { + step: 'all' + }], +}; - // Hide loader if an error occurs - loader.style.display = 'none'; - updating = false; - } - } -} -// Plot options definitions -const selectorOptions = { - buttons: [{ - step: 'hour', - stepmode: 'backward', - count: 1, - label: '1hr' - }, { - step: 'hour', - stepmode: 'backward', - count: 3, - label: '3hr' - }, { - step: 'hour', - stepmode: 'backward', - count: 6, - label: '6hr' - }, { - step: 'hour', - stepmode: 'backward', - count: 12, - label: '12hr' - }, { - step: 'day', - stepmode: 'backward', - count: 1, - label: '1d' - }, { - step: 'day', - stepmode: 'backward', - count: 3, - label: '3d' - }, { - step: 'week', - stepmode: 'backward', - count: 1, - label: '1w' - }, { - step: 'week', - stepmode: 'backward', - count: 2, - label: '2w' - }, { - step: 'month', - stepmode: 'backward', - count: 1, - label: '1m' - }, { - step: 'month', - stepmode: 'backward', - count: 6, - label: '6m' - }, { - step: 'year', - stepmode: 'todate', - count: 1, - label: 'YTD' - }, { - step: 'year', - stepmode: 'backward', - count: 1, - label: '1y' - }, { - step: 'all' - }] +//plot options +var layout = { + title: 'Monitor Time series with range slider and selectors', + hovermode: 'closest', + xaxis: { + rangeselector: selectorOptions, + rangeslider: {}, // add a scrubber on the bottom + uirevision: true, + }, + yaxis: { + fixedrange: false, + autorange: true, + //rangemode: 'nonnegative', + uirevision: true, + }, + /* + // demo: add a horizontal cursor + shapes: [ + { + type: 'line', + xref: 'paper', + x0: 0, + x1: 1, + y0: 2500000, + y1: 2500000, + opacity: 0.2, + line: { + color: 'rgb(255, 0, 0)', + //width: 4, + //dash: 'dashdot' + }, + // N.B. shape labels stopped working since 2.32.0 ¬_¬ + label: { + text: 'Alarm Threshold', + xanchor: 'right', + textposition: 'end', // or 'start' or 'middle' + font: { size: 10, color: 'red' }, + //yanchor: 'bottom', + }, + }, + ], + */ + dragmode: 'zoom', // required with a rangeslider to stop it restricting zoom to x-axis only }; diff --git a/html-Common/SubsystemReGenerate.sh b/html-Common/SubsystemReGenerate.sh new file mode 100755 index 00000000..35ddfa27 --- /dev/null +++ b/html-Common/SubsystemReGenerate.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +subsystem=$(basename `pwd`) + +cat ../includes/headerC.html >subheader.html + +for folder in `more tablist` +do + echo "$folder + + + + " >>subheader.html +done + +for folder in `more protected_tablist` +do + echo "$folder + + + + " >>subheader.html +done + +cat ../includes/headerD.html >>subheader.html diff --git a/html-Common/favicon.ico b/html-Common/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..763deacd9c08eb60e110f8db64697e4584e3020d GIT binary patch literal 318 zcmZQzU<5(|0RbS%!l1#(z#zuJz@P!d0zj+)#2|4HXaJKC0wf0m|65=zYS4^=f?#8S zHh?Svx(5ZrtpK?i1PIY^4Okif|1&Uv@DF - + diff --git a/html-Common/monitoringplots/monitoringplots b/html-Common/monitoringplots/monitoringplots deleted file mode 120000 index e819e043..00000000 --- a/html-Common/monitoringplots/monitoringplots +++ /dev/null @@ -1 +0,0 @@ -html-Common/monitoringplots \ No newline at end of file diff --git a/html-Detector/Config/DeviceConfig/SubsystemReGenerate.sh b/html-Detector/Config/DeviceConfig/SubsystemReGenerate.sh deleted file mode 100755 index 35ddfa27..00000000 --- a/html-Detector/Config/DeviceConfig/SubsystemReGenerate.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -subsystem=$(basename `pwd`) - -cat ../includes/headerC.html >subheader.html - -for folder in `more tablist` -do - echo "$folder - - - - " >>subheader.html -done - -for folder in `more protected_tablist` -do - echo "$folder - - - - " >>subheader.html -done - -cat ../includes/headerD.html >>subheader.html diff --git a/html-Detector/Config/DeviceConfig/SubsystemReGenerate.sh b/html-Detector/Config/DeviceConfig/SubsystemReGenerate.sh new file mode 120000 index 00000000..71af26f4 --- /dev/null +++ b/html-Detector/Config/DeviceConfig/SubsystemReGenerate.sh @@ -0,0 +1 @@ +../../../html-Common/SubsystemReGenerate.sh \ No newline at end of file diff --git a/html-Detector/Config/SubsystemReGenerate.sh b/html-Detector/Config/SubsystemReGenerate.sh deleted file mode 100755 index 35ddfa27..00000000 --- a/html-Detector/Config/SubsystemReGenerate.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -subsystem=$(basename `pwd`) - -cat ../includes/headerC.html >subheader.html - -for folder in `more tablist` -do - echo "$folder - - - - " >>subheader.html -done - -for folder in `more protected_tablist` -do - echo "$folder - - - - " >>subheader.html -done - -cat ../includes/headerD.html >>subheader.html diff --git a/html-Detector/Config/SubsystemReGenerate.sh b/html-Detector/Config/SubsystemReGenerate.sh new file mode 120000 index 00000000..fd48d1c0 --- /dev/null +++ b/html-Detector/Config/SubsystemReGenerate.sh @@ -0,0 +1 @@ +../../html-Common/SubsystemReGenerate.sh \ No newline at end of file diff --git a/html-Detector/DAQ/SubsystemReGenerate.sh b/html-Detector/DAQ/SubsystemReGenerate.sh deleted file mode 100755 index 35ddfa27..00000000 --- a/html-Detector/DAQ/SubsystemReGenerate.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -subsystem=$(basename `pwd`) - -cat ../includes/headerC.html >subheader.html - -for folder in `more tablist` -do - echo "$folder - - - - " >>subheader.html -done - -for folder in `more protected_tablist` -do - echo "$folder - - - - " >>subheader.html -done - -cat ../includes/headerD.html >>subheader.html diff --git a/html-Detector/DAQ/SubsystemReGenerate.sh b/html-Detector/DAQ/SubsystemReGenerate.sh new file mode 120000 index 00000000..fd48d1c0 --- /dev/null +++ b/html-Detector/DAQ/SubsystemReGenerate.sh @@ -0,0 +1 @@ +../../html-Common/SubsystemReGenerate.sh \ No newline at end of file diff --git a/html-Detector/Shift/SubsystemReGenerate.sh b/html-Detector/Shift/SubsystemReGenerate.sh deleted file mode 100755 index 35ddfa27..00000000 --- a/html-Detector/Shift/SubsystemReGenerate.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -subsystem=$(basename `pwd`) - -cat ../includes/headerC.html >subheader.html - -for folder in `more tablist` -do - echo "$folder - - - - " >>subheader.html -done - -for folder in `more protected_tablist` -do - echo "$folder - - - - " >>subheader.html -done - -cat ../includes/headerD.html >>subheader.html diff --git a/html-Detector/Shift/SubsystemReGenerate.sh b/html-Detector/Shift/SubsystemReGenerate.sh new file mode 120000 index 00000000..fd48d1c0 --- /dev/null +++ b/html-Detector/Shift/SubsystemReGenerate.sh @@ -0,0 +1 @@ +../../html-Common/SubsystemReGenerate.sh \ No newline at end of file diff --git a/html-Detector/SubSystemExample/SubsystemReGenerate.sh b/html-Detector/SubSystemExample/SubsystemReGenerate.sh deleted file mode 100755 index 35ddfa27..00000000 --- a/html-Detector/SubSystemExample/SubsystemReGenerate.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -subsystem=$(basename `pwd`) - -cat ../includes/headerC.html >subheader.html - -for folder in `more tablist` -do - echo "$folder - - - - " >>subheader.html -done - -for folder in `more protected_tablist` -do - echo "$folder - - - - " >>subheader.html -done - -cat ../includes/headerD.html >>subheader.html diff --git a/html-Detector/SubSystemExample/SubsystemReGenerate.sh b/html-Detector/SubSystemExample/SubsystemReGenerate.sh new file mode 120000 index 00000000..fd48d1c0 --- /dev/null +++ b/html-Detector/SubSystemExample/SubsystemReGenerate.sh @@ -0,0 +1 @@ +../../html-Common/SubsystemReGenerate.sh \ No newline at end of file diff --git a/html-Detector/SubSystemTemplate/SubsystemReGenerate.sh b/html-Detector/SubSystemTemplate/SubsystemReGenerate.sh deleted file mode 100755 index 35ddfa27..00000000 --- a/html-Detector/SubSystemTemplate/SubsystemReGenerate.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -subsystem=$(basename `pwd`) - -cat ../includes/headerC.html >subheader.html - -for folder in `more tablist` -do - echo "$folder - - - - " >>subheader.html -done - -for folder in `more protected_tablist` -do - echo "$folder - - - - " >>subheader.html -done - -cat ../includes/headerD.html >>subheader.html diff --git a/html-Detector/SubSystemTemplate/SubsystemReGenerate.sh b/html-Detector/SubSystemTemplate/SubsystemReGenerate.sh new file mode 120000 index 00000000..fd48d1c0 --- /dev/null +++ b/html-Detector/SubSystemTemplate/SubsystemReGenerate.sh @@ -0,0 +1 @@ +../../html-Common/SubsystemReGenerate.sh \ No newline at end of file diff --git a/html-Detector/SubsystemReGenerate.sh b/html-Detector/SubsystemReGenerate.sh deleted file mode 100755 index 35ddfa27..00000000 --- a/html-Detector/SubsystemReGenerate.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -subsystem=$(basename `pwd`) - -cat ../includes/headerC.html >subheader.html - -for folder in `more tablist` -do - echo "$folder - - - - " >>subheader.html -done - -for folder in `more protected_tablist` -do - echo "$folder - - - - " >>subheader.html -done - -cat ../includes/headerD.html >>subheader.html diff --git a/html-Detector/SubsystemReGenerate.sh b/html-Detector/SubsystemReGenerate.sh new file mode 120000 index 00000000..caaef31c --- /dev/null +++ b/html-Detector/SubsystemReGenerate.sh @@ -0,0 +1 @@ +../html-Common/SubsystemReGenerate.sh \ No newline at end of file diff --git a/html-Detector/favicon.ico b/html-Detector/favicon.ico deleted file mode 100644 index 763deacd9c08eb60e110f8db64697e4584e3020d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmZQzU<5(|0RbS%!l1#(z#zuJz@P!d0zj+)#2|4HXaJKC0wf0m|65=zYS4^=f?#8S zHh?Svx(5ZrtpK?i1PIY^4Okif|1&Uv@DF - + logo