Added files

This commit is contained in:
Phil 2023-09-12 21:49:15 +01:00
parent e9f79defce
commit 6b2c0d0d36
11 changed files with 20269 additions and 0 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
/*! jQuery Timepicker Addon - v1.6.3 - 2016-04-20
* http://trentrichardson.com/examples/timepicker
* Copyright (c) 2016 Trent Richardson; Licensed MIT */
.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:0 10px 10px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:0;margin:0;padding:0}.ui-timepicker-div .ui_tpicker_unit_hide{display:none}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input{background:0 0;color:inherit;border:0;outline:0;border-bottom:solid 1px #555;width:95%}.ui-timepicker-div .ui_tpicker_time .ui_tpicker_time_input:focus{border-bottom-color:#aaa}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px}.ui-timepicker-div.ui-timepicker-oneLine{padding-right:2px}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,.ui-timepicker-div.ui-timepicker-oneLine dt{display:none}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label{display:block;padding-top:2px}.ui-timepicker-div.ui-timepicker-oneLine dl{text-align:right}.ui-timepicker-div.ui-timepicker-oneLine dl dd,.ui-timepicker-div.ui-timepicker-oneLine dl dd>div{display:inline-block;margin:0}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before{content:':';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before{content:'.';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{display:none}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

18706
code.jquery.com/ui/1.12.1/jquery-ui.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

167
index.html Executable file
View File

@ -0,0 +1,167 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ping Results</title>
<script src="/cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.0/chart.min.js"></script>
<script src="/cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="stylesheet" href="/code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="/code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<!-- Include jQuery UI Timepicker addon -->
<link rel="stylesheet" href="/cdnjs.cloudflare.com/ajax/libs/jquery-ui-timepicker-addon/1.6.3/jquery-ui-timepicker-addon.min.css">
<script src="/cdnjs.cloudflare.com/ajax/libs/jquery-ui-timepicker-addon/1.6.3/jquery-ui-timepicker-addon.min.js"></script>
</head>
<body>
<h1>Ping Results</h1>
<div>
Start Date & Time: <input type="text" id="startDate">
End Date & Time: <input type="text" id="endDate">
<button id="applyFilterButton">Apply Filter</button>
</div>
<canvas id="pingChart" width="800" height="400"></canvas>
<script>
$(document).ready(function () {
// Initialize date pickers with time picker addon
$("#startDate").datetimepicker({
dateFormat: "yy-mm-dd",
timeFormat: "HH:mm:ss"
});
$("#endDate").datetimepicker({
dateFormat: "yy-mm-dd",
timeFormat: "HH:mm:ss"
});
$.ajax({
type: "GET",
url: "ping_data.csv", // Replace with the path to your CSV file
dataType: "text",
success: function (data) {
processData(data);
}
});
// Attach click event handler to Apply Filter button
$("#applyFilterButton").click(function () {
applyDateFilter();
});
});
let labels = [];
const datasets = {}; // Store datasets for each IP
let chart = null; // Declare a variable to store the Chart instance
function processData(csvData) {
const rows = csvData.split('\n');
for (let i = 1; i < rows.length; i++) {
const columns = rows[i].split(',');
const timestampStr = columns[0]; // Timestamp in "YYYY-MM-DD HH:MM:SS" format
const ip = columns[1];
if (!datasets[ip]) {
// Create a new dataset for the IP address
datasets[ip] = {
label: `Response Time (ms) - ${ip}`,
data: [],
borderColor: getRandomColor(), // Function to generate random colors
borderWidth: 1,
fill: false
};
}
const responseTime = parseFloat(columns[2]);
const formattedTimestamp = formatTimestamp(timestampStr); // Format timestamp
labels.push(formattedTimestamp);
datasets[ip].data.push(responseTime);
}
createChart(labels, Object.values(datasets));
}
function formatTimestamp(timestampStr) {
const timestamp = new Date(timestampStr);
return timestamp.toLocaleString(); // Format as date and time
}
function applyDateFilter() {
// Get selected start and end date/time
const startDate = $("#startDate").datetimepicker("getDate");
const endDate = $("#endDate").datetimepicker("getDate");
// Filter data based on selected date range
const filteredLabels = [];
const filteredDatasets = {};
labels.forEach((label, index) => {
const timestamp = new Date(label);
if (timestamp >= startDate && timestamp <= endDate) {
filteredLabels.push(label);
// Copy the datasets for IPs within the selected date range
Object.keys(datasets).forEach((ip) => {
if (!filteredDatasets[ip]) {
filteredDatasets[ip] = { ...datasets[ip] };
filteredDatasets[ip].data = [];
}
filteredDatasets[ip].data.push(datasets[ip].data[index]);
});
}
});
// Update the chart with filtered data
updateChart(filteredLabels, Object.values(filteredDatasets));
}
function createChart(labels, datasets) {
const ctx = document.getElementById('pingChart').getContext('2d');
chart = new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: datasets
},
options: {
scales: {
x: {
type: 'category', // Use category scale for date and time labels
position: 'bottom', // Position x-axis at the bottom
title: {
display: true,
text: 'Timestamp (Date + Time)'
}
},
y: {
beginAtZero: true,
title: {
display: true,
text: 'Response Time (ms)'
}
}
}
}
});
}
function updateChart(labels, datasets) {
if (chart) {
chart.destroy();
}
createChart(labels, datasets);
}
function getRandomColor() {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
</script>
</body>
</html>

50
ping_script.sh Executable file
View File

@ -0,0 +1,50 @@
#!/bin/bash
set -x
# Function to get the default gateway IP address
get_gateway_ip() {
gateway_ip=$(ip route | awk '/default/ {print $3}')
echo "$gateway_ip"
}
# Array of IP addresses to ping, including the gateway IP
ip_addresses=("9.9.9.9" "8.8.8.8" "1.1.1.1")
gateway_ip=$(get_gateway_ip)
if [ -n "$gateway_ip" ]; then
ip_addresses+=("$gateway_ip")
fi
# CSV file to store ping results
csv_file="ping_data.csv"
# Check if the CSV file already exists
if [ ! -e "$csv_file" ]; then
# Create the CSV file with a header including a timestamp column
echo "Timestamp,IP Address,Response Time (ms),Status" > "$csv_file"
fi
# Function to ping an IP address and log the result to the CSV file
ping_ip() {
ip="$1"
result=$(ping -c 4 -i 0.2 -q "$ip" | tail -1)
if [ $? -eq 0 ]; then
response_time=$(echo "$result" | awk -F'/' '{print $5}')
status="Success"
else
response_time="N/A"
status="Failed"
fi
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "$timestamp,$ip,$response_time,$status" >> "$csv_file"
}
# Loop through the IP addresses and ping them periodically
while true; do
for ip in "${ip_addresses[@]}"; do
ping_ip "$ip"
done
sleep 60 # Ping every 60 seconds, adjust as needed
done