| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- package main
- import (
- "encoding/json"
- "net/http"
- "os/exec"
- "strconv"
- "strings"
- )
- func healthCheckNetworkHandler(w http.ResponseWriter, r *http.Request) {
- var modem struct {
- ICCID string `json:"iccid"`
- RSSI string `json:"rssi"`
- }
- var net struct {
- Status string `json:"net_ok"`
- Type string `json:"net_type"`
- }
- var avar1, avar2, avar3, avar4, avar5, avar6 string
- avar1, avar2, avar3 = "已完成", "未通过", "网络服务异常"
- avar4, avar5, avar6 = "已完成", "未通过", "网络连接异常"
- if callRPCResult(r.Context(), 7000, "core.getNetStatus", nil, &net) != nil {
- goto done
- }
- avar1, avar2, avar3 = "已完成", "通过", "网络服务正常"
- if net.Status != "true" {
- goto done
- }
- avar4, avar5, avar6 = "已完成", "通过", "网络连接正常("+net.Type+"网络)"
- if net.Type != "蜂窝" {
- goto done
- }
- if callRPCResult(r.Context(), 7000, "core.getModemInfo", nil, &modem) != nil {
- avar5, avar6 = "未通过", "蜂窝模块异常"
- goto done
- }
- if modem.ICCID == "" {
- avar5, avar6 = "未通过", "SIM卡异常"
- goto done
- }
- avar6 = "网络连接正常(蜂窝网络,SIM卡正常," + getCSQDesc(modem.RSSI) + ")"
- done:
- w.Header().Set("Content-Type", "application/json; charset=utf-8")
- json.NewEncoder(w).Encode(map[string]string{"avar1": avar1, "avar2": avar2, "avar3": avar3,
- "avar4": avar4, "avar5": avar5, "avar6": avar6})
- }
- func getCSQDesc(csq string) string {
- n, err := strconv.Atoi(csq)
- if err != nil {
- return "信号未知"
- }
- switch {
- case n == 99 || n == 199:
- return "信号未知"
- case n >= 0 && n <= 9:
- return "信号较弱"
- case n >= 10 && n <= 19:
- return "信号一般"
- case n >= 20 && n <= 31:
- return "信号良好"
- case n >= 100 && n <= 191:
- return "信号有效"
- default:
- return "信号未知"
- }
- }
- func healthCheckTimeHandler(w http.ResponseWriter, r *http.Request) {
- var status struct {
- SystemTime string `json:"system_time"`
- TimeSource string `json:"time_source"`
- TimeSynced string `json:"time_synced"`
- }
- if err := callRPCResult(r.Context(), 7001, "core.getTimeSyncStatus", nil, &status); err != nil {
- json.NewEncoder(w).Encode(map[string]string{
- "bvar1": "已完成", "bvar2": "未通过", "bvar3": "时间服务检测失败",
- "bvar4": "已完成", "bvar5": "未通过", "bvar6": "时间同步检测失败",
- })
- return
- }
- result := map[string]string{"bvar1": "已完成", "bvar2": "通过", "bvar3": "时间服务正常",
- "bvar4": "已完成", "bvar5": "未通过", "bvar6": "系统时间未同步"}
- if status.TimeSynced == "true" {
- result["bvar5"] = "通过"
- result["bvar6"] = "系统时间已同步"
- }
- json.NewEncoder(w).Encode(result)
- }
- func healthCheckPositionHandler(w http.ResponseWriter, r *http.Request) {
- var pos struct {
- Lat string `json:"lat"`
- Lon string `json:"lon"`
- }
- if err := callRPCResult(r.Context(), 7002, "core.getPositionInfo", nil, &pos); err != nil {
- json.NewEncoder(w).Encode(map[string]string{
- "cvar1": "已完成", "cvar2": "未通过", "cvar3": "定位服务检测失败",
- "cvar4": "已完成", "cvar5": "未通过", "cvar6": "定位状态检测失败",
- })
- return
- }
- result := map[string]string{"cvar1": "已完成", "cvar2": "通过", "cvar3": "定位服务正常",
- "cvar4": "已完成", "cvar5": "未通过", "cvar6": "未能获取到确切的位置信息"}
- if pos.Lat != "" && pos.Lon != "" {
- result["cvar5"] = "通过"
- result["cvar6"] = "已获取到确切的位置信息"
- }
- json.NewEncoder(w).Encode(result)
- }
- func healthCheckCameraHandler(w http.ResponseWriter, r *http.Request) {
- var count string
- if err := callRPCResult(r.Context(), 7003, "core.getSupportedCameraCount", map[string]string{"type": "all"}, &count); err != nil {
- json.NewEncoder(w).Encode(map[string]string{
- "dvar1": "已完成", "dvar2": "未通过", "dvar3": "相机服务检测失败",
- "dvar4": "已完成", "dvar5": "未通过", "dvar6": "识别查找相机失败",
- })
- return
- }
- result := map[string]string{"dvar1": "已完成", "dvar2": "通过", "dvar3": "相机服务正常",
- "dvar4": "已完成", "dvar5": "未通过", "dvar6": "未找到相机"}
- if count != "" && count != "0" {
- result["dvar5"] = "通过"
- result["dvar6"] = "共找到(" + count + ")个相机"
- }
- json.NewEncoder(w).Encode(result)
- }
- func healthCheckCameraPhotoHandler(w http.ResponseWriter, r *http.Request) {
- var result struct {
- Mark map[string]interface{} `json:"mark"`
- Status string `json:"status"`
- }
- params := map[string]string{
- "format": "jpg",
- "outFilename": "/tmp/health_check.jpg",
- "timeoutMs": "300",
- }
- if err := callRPCResult(r.Context(), 7003, "core.takePhoto", params, &result); err != nil {
- json.NewEncoder(w).Encode(map[string]string{
- "dvar7": "已完成",
- "dvar8": "未通过",
- "dvar9": "测试相机拍照失败",
- })
- return
- }
- if result.Status == "success" {
- json.NewEncoder(w).Encode(map[string]string{
- "dvar7": "已完成",
- "dvar8": "通过",
- "dvar9": "测试相机拍照成功",
- })
- return
- } else {
- json.NewEncoder(w).Encode(map[string]string{
- "dvar7": "已完成",
- "dvar8": "未通过",
- "dvar9": "测试相机拍照失败",
- })
- return
- }
- }
- func healthCheckUserAppHandler(w http.ResponseWriter, r *http.Request) {
- var result = map[string]string{
- "evar1": "已完成",
- "evar2": "未通过",
- "evar3": "用户应用尚未安装",
- }
- out, err := exec.Command("systemctl", "show", "yfkj-user-app.service",
- "-p", "LoadState",
- "-p", "ActiveState",
- "-p", "SubState").Output()
- if err == nil {
- v := string(out)
- switch {
- case strings.Contains(v, "ActiveState=active") && strings.Contains(v, "SubState=running"):
- result["evar2"] = "通过"
- result["evar3"] = "用户应用已安装,运行正常"
- case strings.Contains(v, "LoadState=loaded"):
- result["evar3"] = "用户应用已安装,但未运行"
- }
- }
- json.NewEncoder(w).Encode(result)
- }
|