Bläddra i källkod

测速结果增加线性图表

MortyFx 4 år sedan
förälder
incheckning
c02effbabe
6 ändrade filer med 58 tillägg och 244 borttagningar
  1. 4 0
      README.md
  2. 2 2
      backend/config.php
  3. 45 51
      chart.html
  4. 0 188
      chart_linear.html
  5. 0 2
      index.html
  6. 7 1
      results.html

+ 4 - 0
README.md

@@ -61,6 +61,10 @@ Jetbrains 全家桶教育许可,正规国内大学渠道,9.9 元,购买地
 
 ## 更新记录
 
+**2020/12/22**
+
+> 测速结果增加线性图表([@HuJK](https://github.com/HuJK))
+
 **2020/12/10**
 
 > 增加可配置项 `SAME_IP_MULTI_LOGS`,可设置是否允许同一IP记录多条测速结果

+ 2 - 2
backend/config.php

@@ -3,7 +3,7 @@
 /**
  * 最多保存多少条测试记录
  */
-const MAX_LOG_COUNT = 10000;
+const MAX_LOG_COUNT = 100;
 
 /**
  * IP运营商解析服务:(1) ip.sb | (2) ipinfo.io (如果1解析ip异常,请切换成2)
@@ -13,4 +13,4 @@ const IP_SERVICE = 'ip.sb';
 /**
  * 是否允许同一IP记录多条测速结果
  */
-const SAME_IP_MULTI_LOGS = true;
+const SAME_IP_MULTI_LOGS = false;

+ 45 - 51
chart.html

@@ -10,17 +10,17 @@
                 -moz-user-select: none;
                 -webkit-user-select: none;
                 -ms-user-select: none;
+                position: relative;
                 flex-grow: 1;
                 min-height: 0;
                 width: 100%;
                 height:100%;
         }
-        div {
-                width:100%;
-                height:100%;
-        }
-
-	</style>
+	div {
+		width:100%;
+		height:100%;
+	}
+        </style>
 </head>
 
 <body>
@@ -32,11 +32,11 @@
 
 async function mainfunc() {
     var color = Chart.helpers.color;
-    // console.log(color)
+    //console.log(color)
     var datareq = await fetch('backend/results-api.php');
-    // console.log(datareq)
+    //console.log(datareq)
     var dataraw = await datareq.text();
-    // console.log(dataraw)
+    //console.log(dataraw)
     try {
         dataraw = JSON.parse(dataraw);
     } catch {
@@ -73,18 +73,18 @@ async function mainfunc() {
     for (const [i, data] of datasets.entries()) {
         if (i === 0) {
             datasets[i]["borderColor"] = window.chartColors["red"];
-            datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
+	    datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
         } else if (i === 1) {
             datasets[i]["borderColor"] = "rgb(12, 176, 42)";
-            datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
+	    datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
         } else if (i === 2) {
             datasets[i]["borderColor"] = "rgb(2, 104, 219)";
-            datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
+	    datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
         }
-        else{
+	else{
             datasets[i]["borderColor"] = window.chartColors["gray"];;
             datasets[i]["backgroundColor"] = color(window.chartColors["gray"]).alpha(0.1).rgbString()
-        }
+	}
     }
     console.log(datasets);
     scatterChartData = {
@@ -99,32 +99,32 @@ async function mainfunc() {
                 display: true,
                 text: 'ISP Speed Chart'
             },
-                        tooltips: {
-                                        mode: 'nearest',
-                                        callbacks: {
-                                                title: function(TooltipItem, data){
-                                                        // console.log(TooltipItem);
-                                                        // console.log(data);
-                                                        // console.log(data["datasets"][TooltipItem[0]["datasetIndex"]]["label"])
+			tooltips: {
+					mode: 'nearest',
+					callbacks: {
+						title: function(TooltipItem, data){  
+							// console.log(TooltipItem);
+							// console.log(data); 
+							// console.log(data["datasets"][TooltipItem[0]["datasetIndex"]]["label"])
                                                         return data["datasets"][TooltipItem[0]["datasetIndex"]]["label"]
 						},
-                                                label:function(TooltipItem, data){
+						label:function(TooltipItem, data){
                                                         return data["datasets"][TooltipItem["datasetIndex"]]["data"][TooltipItem["index"]]["label"]["isp"];
-                                                },
-                                                footer: function(TooltipItem, data){
-                                                        // console.log(TooltipItem);
-                                                        // console.log(data);
-                                                        displaydata = data["datasets"][TooltipItem[0]["datasetIndex"]]["data"][TooltipItem[0]["index"]]["label"];
-                                                        showdict = {
-                                                            location:  displaydata["addr"],
-                                                            Download:  displaydata["dspeed"],
-                                                            Upload:  displaydata["uspeed"],
-                                                            Ping:  displaydata["ping"],
-                                                            Jitter:  displaydata["jitter"],
-                                                            IP:  displaydata["ip"],
+                                                }, 
+						footer: function(TooltipItem, data){
+							// console.log(TooltipItem);
+							// console.log(data); 
+							displaydata = data["datasets"][TooltipItem[0]["datasetIndex"]]["data"][TooltipItem[0]["index"]]["label"]; 
+							showdict = { 
+							    location:  displaydata["addr"],
+							    Download:  displaydata["dspeed"],
+							    Upload:  displaydata["uspeed"],
+							    Ping:  displaydata["ping"],
+							    Jitter:  displaydata["jitter"],
+							    IP:  displaydata["ip"],
 							    Time:  displaydata["created"],
-                                                            // ISP:  displaydata["isp"],
-                                                        };
+							    // ISP:  displaydata["isp"],
+							};
                                                         let showtext = ""
                                                         for (const k of Object.keys(showdict)){
                                                             showtext += k + ": " + showdict[k] + "\n";
@@ -132,22 +132,17 @@ async function mainfunc() {
                                                         return showtext
                                                 },
 
-
-                                        },
-                                        footerFontStyle: 'normal'
-                                },
-
-		scales: {
+						
+					},
+					footerFontStyle: 'normal'
+				},
+			scales: {
 					yAxes: [{
-						type: 'logarithmic',
+						type: 'linear',
 						position: 'bottom',
 						ticks: {
 							userCallback: function(tick) {
-								var remain = tick / (Math.pow(10, Math.floor(Chart.helpers.log10(tick))));
-								if (remain === 1 || remain === 2 || remain === 5) {
 									return tick.toString() + 'Mbps';
-								}
-								return '';
 							},
 						},
 						scaleLabel: {
@@ -161,10 +156,9 @@ async function mainfunc() {
 							userCallback: function(tick) {
 								return tick.toString() + ':00';
 							},
-                                                        beginAtZero: true,
+							beginAtZero: true,
 							stepSize: 3,
-                                                        max: 24
-
+							max: 24
 						},
 						scaleLabel: {
 							labelString: 'Time',
@@ -173,7 +167,7 @@ async function mainfunc() {
 					}]
 				},
 		responsive: true,
-                maintainAspectRatio: false
+		maintainAspectRatio: false
         }
     });
 

+ 0 - 188
chart_linear.html

@@ -1,188 +0,0 @@
-<!doctype html>
-<html>
-
-<head>
-        <title>ISP Speed Chart</title>
-    <script src="chartjs/Chart.min.js"></script>
-        <script src="chartjs/utils.js"></script>
-        <style>
-        canvas {
-                -moz-user-select: none;
-                -webkit-user-select: none;
-                -ms-user-select: none;
-                position: relative;
-                flex-grow: 1;
-                min-height: 0;
-                width: 100%;
-                height:100%;
-        }
-	div {
-		width:100%;
-		height:100%;
-	}
-        </style>
-</head>
-
-<body>
-        <div>
-                <canvas id="canvas"></canvas>
-        </div>
-        <script>
-                var color = Chart.helpers.color;
-
-async function mainfunc() {
-    var color = Chart.helpers.color;
-    //console.log(color)
-    var datareq = await fetch('backend/results-api.php');
-    //console.log(datareq)
-    var dataraw = await datareq.text();
-    //console.log(dataraw)
-    try {
-        dataraw = JSON.parse(dataraw);
-    } catch {
-        alert("Can't get data");
-        return 0;
-    }
-
-    data_sorted = {};
-    for (const data of dataraw["data"]) {
-        let data_isp = data["isp"].split(" ").length > 1 ? data["isp"].split(" ")[0] + " " + data["isp"].split(" ")[1] : data["isp"];
-        if (data_isp in data_sorted) {
-            data_sorted[data_isp] = data_sorted[data_isp].concat([data])
-        } else {
-            data_sorted[data_isp] = [data]
-        }
-    }
-    let datasets = []
-    for (const isp of Object.keys(data_sorted)) {
-        let ispdata_chart = {
-            label: isp,
-            data: []
-        }
-        for (const ispdata of data_sorted[isp]) {
-            let [t_h, t_m, t_s] = ispdata["created"].split(" ")[1].split(":");
-            ispdata_chart["data"] = ispdata_chart["data"].concat([{
-                x: t_h * 1.0 + t_m / 60 + t_s / 3600,
-                y: ispdata["dspeed"],
-				label: ispdata
-            }]);
-        }
-        datasets = datasets.concat([ispdata_chart])
-    }
-    datasets = datasets.sort((a, b) => a["data"].length < b["data"].length ? 1 : -1);
-    for (const [i, data] of datasets.entries()) {
-        if (i === 0) {
-            datasets[i]["borderColor"] = window.chartColors["red"];
-	    datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
-        } else if (i === 1) {
-            datasets[i]["borderColor"] = "rgb(12, 176, 42)";
-	    datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
-        } else if (i === 2) {
-            datasets[i]["borderColor"] = "rgb(2, 104, 219)";
-	    datasets[i]["backgroundColor"] = color(datasets[i]["borderColor"]).alpha(0.9).rgbString()
-        }
-	else{
-            datasets[i]["borderColor"] = window.chartColors["gray"];;
-            datasets[i]["backgroundColor"] = color(window.chartColors["gray"]).alpha(0.1).rgbString()
-	}
-    }
-    console.log(datasets);
-    scatterChartData = {
-        datasets: datasets
-    }
-
-    var ctx = document.getElementById('canvas').getContext('2d');
-    window.myScatter = Chart.Scatter(ctx, {
-        data: scatterChartData,
-        options: {
-            title: {
-                display: true,
-                text: 'ISP Speed Chart'
-            },
-			tooltips: {
-					mode: 'nearest',
-					callbacks: {
-						title: function(TooltipItem, data){  
-							// console.log(TooltipItem);
-							// console.log(data); 
-							// console.log(data["datasets"][TooltipItem[0]["datasetIndex"]]["label"])
-                                                        return data["datasets"][TooltipItem[0]["datasetIndex"]]["label"]
-						},
-						label:function(TooltipItem, data){
-                                                        return data["datasets"][TooltipItem["datasetIndex"]]["data"][TooltipItem["index"]]["label"]["isp"];
-                                                }, 
-						footer: function(TooltipItem, data){
-							// console.log(TooltipItem);
-							// console.log(data); 
-							displaydata = data["datasets"][TooltipItem[0]["datasetIndex"]]["data"][TooltipItem[0]["index"]]["label"]; 
-							showdict = { 
-							    location:  displaydata["addr"],
-							    Download:  displaydata["dspeed"],
-							    Upload:  displaydata["uspeed"],
-							    Ping:  displaydata["ping"],
-							    Jitter:  displaydata["jitter"],
-							    IP:  displaydata["ip"],
-							    Time:  displaydata["created"],
-							    // ISP:  displaydata["isp"],
-							};
-                                                        let showtext = ""
-                                                        for (const k of Object.keys(showdict)){
-                                                            showtext += k + ": " + showdict[k] + "\n";
-                                                        }
-                                                        return showtext
-                                                },
-
-						
-					},
-					footerFontStyle: 'normal'
-				},
-			scales: {
-					yAxes: [{
-						type: 'linear',
-						position: 'bottom',
-						ticks: {
-							userCallback: function(tick) {
-									return tick.toString() + 'Mbps';
-							},
-						},
-						scaleLabel: {
-							labelString: 'Speed',
-							display: true,
-						}
-					}],
-					xAxes: [{
-						type: 'linear',
-						ticks: {
-							userCallback: function(tick) {
-								return tick.toString() + ':00';
-							},
-							beginAtZero: true,
-							stepSize: 3,
-							max: 24
-						},
-						scaleLabel: {
-							labelString: 'Time',
-							display: true
-						}
-					}]
-				},
-		responsive: true,
-		maintainAspectRatio: false
-        }
-    });
-
-
-}
-
-
-
-                window.onload = function() {
-                        mainfunc();
-                };
-
-
-        </script>
-</body>
-
-</html>
-

+ 0 - 2
index.html

@@ -228,8 +228,6 @@ function I(id){return document.getElementById(id);}
 	</div>
 </div>
 <p><a href="./results.html" target="_blank">查看测速记录</a></p>
-<p><a href="./chart_linear.html" target="_blank">查看测速记录圖表(線性刻度)</a></p>
-<p><a href="./chart.html" target="_blank">查看测速记录圖表(對數刻度)</a></p>
 <p><a href="https://github.com/BadApple9/speedtest-x" target="_blank">speedtest-x 项目地址</a></p>
 <script type="text/javascript">
     initUI();

+ 7 - 1
results.html

@@ -11,12 +11,18 @@
     .footer {line-height: 30px; text-align: center;}
     .footer a{padding:0 6px; font-weight: 300;}
     .footer a:hover{color: green;}
-    .header {line-height: 30px; text-align: center;height:50px;padding-top:50px;}
+    .header {line-height: 30px; text-align: center;height:50px;padding-top:50px;margin-bottom: 10px;}
+    .header span>a {color:white;}
   </style>
 </head>
 <body>
 <div class="header">
   <h1>speedtest-x 测速结果</h1>
+<span class="layui-badge layui-bg-green"><a href="./chart.html" target="_blank">查看线性图表</a></span>
+  <a href="javascript:layer.tips('线性图表用于展示不同运营商在不同时段的速度表现,程序默认保留100条测速结果,可调大此数值以获得更准确的图表分析', '#tips', {
+  tips: [3, '#3595CC'],
+  time: 6000
+});"><span id="tips" class="layui-badge layui-bg-black">?</span></a>
 </div>
 
 <table class="layui-hide" id="test"></table>