取消限制
This commit is contained in:
parent
ee338d2a09
commit
49aee3a2ed
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
9
.idea/angle_dtu.iml
generated
Normal file
9
.idea/angle_dtu.iml
generated
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true" />
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/angle_dtu.iml" filepath="$PROJECT_DIR$/.idea/angle_dtu.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
187
http_server.go
187
http_server.go
@ -4,21 +4,21 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"time"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 启动HTTP服务器
|
||||
func StartHTTPServer(address string) error {
|
||||
http.HandleFunc("/", handleIndex)
|
||||
|
||||
|
||||
http.HandleFunc("/api/data", handleGetData)
|
||||
http.HandleFunc("/api/sensors", handleGetSensors)
|
||||
http.HandleFunc("/api/clients", handleGetClients)
|
||||
http.HandleFunc("/api/clients", handleGetClients)
|
||||
fmt.Printf("HTTP服务器已启动,正在监听 %s\n", address)
|
||||
return http.ListenAndServe(address, nil)
|
||||
}
|
||||
@ -26,24 +26,24 @@ func StartHTTPServer(address string) error {
|
||||
// 处理主页
|
||||
func handleIndex(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("接收到主页请求: %s", r.URL.Path)
|
||||
|
||||
|
||||
templatePath := "templates/index.html"
|
||||
absPath, _ := filepath.Abs(templatePath)
|
||||
|
||||
|
||||
_, err := os.Stat(templatePath)
|
||||
if os.IsNotExist(err) {
|
||||
log.Printf("错误: 模板文件不存在: %s", absPath)
|
||||
http.Error(w, "模板文件不存在", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
tmpl, err := template.ParseFiles(templatePath)
|
||||
if err != nil {
|
||||
log.Printf("错误: 无法解析模板: %v", err)
|
||||
http.Error(w, "无法加载模板:"+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
log.Printf("模板加载成功,开始渲染")
|
||||
err = tmpl.Execute(w, nil)
|
||||
if err != nil {
|
||||
@ -55,103 +55,114 @@ func handleIndex(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// 处理获取传感器数据的API
|
||||
func handleGetData(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("接收到获取数据请求: %s", r.URL.String())
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
sensorIDStr := r.URL.Query().Get("sensor_id")
|
||||
limitStr := r.URL.Query().Get("limit")
|
||||
startDateStr := r.URL.Query().Get("start_date")
|
||||
endDateStr := r.URL.Query().Get("end_date")
|
||||
|
||||
limit := 500
|
||||
|
||||
var sensorID int
|
||||
var err error
|
||||
if sensorIDStr != "" && sensorIDStr != "all" {
|
||||
sensorID, err = strconv.Atoi(sensorIDStr)
|
||||
if err != nil {
|
||||
log.Printf("错误: 无效的传感器ID: %s", sensorIDStr)
|
||||
http.Error(w, "无效的传感器ID", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if limitStr != "" {
|
||||
limit, err = strconv.Atoi(limitStr)
|
||||
if err != nil || limit <= 0 {
|
||||
log.Printf("错误: 无效的记录数限制: %s", limitStr)
|
||||
http.Error(w, "无效的记录数限制", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var startDate, endDate time.Time
|
||||
if startDateStr != "" {
|
||||
startDate, err = time.Parse("2006-01-02T15:04", startDateStr)
|
||||
if err != nil {
|
||||
log.Printf("错误: 无效的开始日期: %s, %v", startDateStr, err)
|
||||
http.Error(w, "无效的开始日期", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if endDateStr != "" {
|
||||
endDate, err = time.Parse("2006-01-02T15:04", endDateStr)
|
||||
if err != nil {
|
||||
log.Printf("错误: 无效的结束日期: %s, %v", endDateStr, err)
|
||||
http.Error(w, "无效的结束日期", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var data []SensorData
|
||||
if sensorIDStr == "all" || sensorIDStr == "" {
|
||||
data, err = GetAllSensorData(limit, startDate, endDate)
|
||||
} else {
|
||||
data, err = GetSensorData(sensorID, limit, startDate, endDate)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Printf("错误: 获取数据失败: %v", err)
|
||||
http.Error(w, "获取数据失败:"+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("成功获取到 %d 条数据记录", len(data))
|
||||
|
||||
if err := json.NewEncoder(w).Encode(data); err != nil {
|
||||
log.Printf("错误: 编码JSON失败: %v", err)
|
||||
http.Error(w, "编码JSON失败:"+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
log.Printf("接收到获取数据请求: %s", r.URL.String())
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
sensorIDStr := r.URL.Query().Get("sensor_id")
|
||||
limitStr := r.URL.Query().Get("limit")
|
||||
startDateStr := r.URL.Query().Get("start_date")
|
||||
endDateStr := r.URL.Query().Get("end_date")
|
||||
|
||||
limit := 500 // 默认限制为500条数据
|
||||
noLimit := false // 是否不限制数据条数
|
||||
|
||||
var sensorID int
|
||||
var err error
|
||||
if sensorIDStr != "" && sensorIDStr != "all" {
|
||||
sensorID, err = strconv.Atoi(sensorIDStr)
|
||||
if err != nil {
|
||||
log.Printf("错误: 无效的传感器ID: %s", sensorIDStr)
|
||||
http.Error(w, "无效的传感器ID", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if limitStr != "" {
|
||||
if limitStr == "all" {
|
||||
noLimit = true
|
||||
limit = 1000000 // 使用一个非常大的数值作为实际上的"无限制"
|
||||
} else {
|
||||
limit, err = strconv.Atoi(limitStr)
|
||||
if err != nil || limit <= 0 {
|
||||
log.Printf("错误: 无效的记录数限制: %s", limitStr)
|
||||
http.Error(w, "无效的记录数限制", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var startDate, endDate time.Time
|
||||
if startDateStr != "" {
|
||||
startDate, err = time.Parse("2006-01-02T15:04", startDateStr)
|
||||
if err != nil {
|
||||
log.Printf("错误: 无效的开始日期: %s, %v", startDateStr, err)
|
||||
http.Error(w, "无效的开始日期", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if endDateStr != "" {
|
||||
endDate, err = time.Parse("2006-01-02T15:04", endDateStr)
|
||||
if err != nil {
|
||||
log.Printf("错误: 无效的结束日期: %s, %v", endDateStr, err)
|
||||
http.Error(w, "无效的结束日期", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var data []SensorData
|
||||
if sensorIDStr == "all" || sensorIDStr == "" {
|
||||
data, err = GetAllSensorData(limit, startDate, endDate)
|
||||
} else {
|
||||
data, err = GetSensorData(sensorID, limit, startDate, endDate)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Printf("错误: 获取数据失败: %v", err)
|
||||
http.Error(w, "获取数据失败:"+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if noLimit {
|
||||
log.Printf("成功获取到所有数据记录(%d条)", len(data))
|
||||
} else {
|
||||
log.Printf("成功获取到 %d 条数据记录(限制:%d条)", len(data), limit)
|
||||
}
|
||||
|
||||
if err := json.NewEncoder(w).Encode(data); err != nil {
|
||||
log.Printf("错误: 编码JSON失败: %v", err)
|
||||
http.Error(w, "编码JSON失败:"+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
// 处理获取所有传感器ID的API
|
||||
func handleGetSensors(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("接收到获取传感器列表请求")
|
||||
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
|
||||
sensorIDs, err := GetAllSensorIDs()
|
||||
if err != nil {
|
||||
log.Printf("错误: 获取传感器ID失败: %v", err)
|
||||
http.Error(w, "获取传感器ID失败:"+err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
log.Printf("成功获取到 %d 个传感器ID", len(sensorIDs))
|
||||
|
||||
|
||||
if err := json.NewEncoder(w).Encode(sensorIDs); err != nil {
|
||||
log.Printf("错误: 编码JSON失败: %v", err)
|
||||
http.Error(w, "编码JSON失败:"+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
func handleGetClients(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
clients := getAllClients()
|
||||
|
||||
if err := json.NewEncoder(w).Encode(clients); err != nil {
|
||||
log.Printf("错误: 编码客户端信息JSON失败: %v", err)
|
||||
http.Error(w, "编码JSON失败:"+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
clients := getAllClients()
|
||||
|
||||
if err := json.NewEncoder(w).Encode(clients); err != nil {
|
||||
log.Printf("错误: 编码客户端信息JSON失败: %v", err)
|
||||
http.Error(w, "编码JSON失败:"+err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
@ -159,6 +159,7 @@
|
||||
<option value="1000">1000</option>
|
||||
<option value="2000">2000</option>
|
||||
<option value="5000">5000</option>
|
||||
<option value="all">全部</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@ -328,7 +329,7 @@
|
||||
function resetFilters() {
|
||||
initializeDatePickers();
|
||||
document.getElementById('sensorSelect').value = 'all';
|
||||
document.getElementById('limitSelect').value = '100';
|
||||
document.getElementById('limitSelect').value = '500';
|
||||
loadData();
|
||||
}
|
||||
|
||||
@ -394,7 +395,7 @@
|
||||
params.push(`sensor_id=${sensorID}`);
|
||||
}
|
||||
|
||||
if (limit) {
|
||||
if (limit && limit !== 'all') {
|
||||
params.push(`limit=${limit}`);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user