From e871758bd82d9a4fbce42e43c9665d869c240dfb Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期一, 21 十月 2019 15:12:11 +0800
Subject: [PATCH] feat: add api for system clock update
---
controllers/syssetcont.go | 214 +++++++++++++++++++-------
extend/sys/system.go | 113 ++++++++++++++
extend/util/util.go | 66 ++++----
router/router.go | 57 +++---
4 files changed, 332 insertions(+), 118 deletions(-)
diff --git a/controllers/syssetcont.go b/controllers/syssetcont.go
index 977aeb5..6cd0e0a 100644
--- a/controllers/syssetcont.go
+++ b/controllers/syssetcont.go
@@ -1,45 +1,54 @@
package controllers
import (
- "basic.com/dbapi.git"
- "github.com/gin-gonic/gin"
"webserver/extend/code"
"webserver/extend/config"
+ "webserver/extend/sys"
"webserver/extend/util"
+
+ "basic.com/dbapi.git"
+ "github.com/gin-gonic/gin"
)
type SysSetController struct {
-
}
type LocalConfigVo struct {
- Id string `json:"id"`
- AlarmIp string `json:"alarm_ip,omitempty" example:"192.168.1.182"`
- AlarmPort int `json:"alarm_port,omitempty" example:"22122"`
- AlarmThresholdType int `json:"alarm_threshold_type"`//鎶ヨ闃堝�肩被鍨嬭缃細1:鎸夋渶楂樺垎,2:鎸夐槇鍊间互涓�
- AlarmThreshold int `json:"alarm_threshold"`//鎶ヨ闃堝��
- WebPicIp string `json:"web_pic_ip,omitempty" example:""`
- WebPicPort int `json:"web_pic_port,omitempty" example:"22122"`
- EsPicIp string `json:"es_pic_ip,omitempty" example:""`
- EsPicPort int `json:"es_pic_port,omitempty" example:"22122"`
- CutMaxDuration int `json:"cut_max_duration,omitempty" example:"20"`
- CutMinDuration int `json:"cut_min_duration,omitempty" example:"5"`
- ServerId string `json:"server_id,omitempty" example:"鍒嗘瀽璁惧id"`
- ServerName string `json:"server_name,omitempty" example:"鍒嗘瀽璁惧鍚嶇О"`
- ServerType int `json:"server_type,omitempty" example:"1"`
- Reserved string `json:"reserved,omitempty" example:"1"`
- RealMax int `json:"real_max"`//瀹炴椂澶勭悊鐨勬渶澶ц矾鏁�
+ Id string `json:"id"`
+ AlarmIp string `json:"alarm_ip,omitempty" example:"192.168.1.182"`
+ AlarmPort int `json:"alarm_port,omitempty" example:"22122"`
+ AlarmThresholdType int `json:"alarm_threshold_type"` //鎶ヨ闃堝�肩被鍨嬭缃細1:鎸夋渶楂樺垎,2:鎸夐槇鍊间互涓�
+ AlarmThreshold int `json:"alarm_threshold"` //鎶ヨ闃堝��
+ WebPicIp string `json:"web_pic_ip,omitempty" example:""`
+ WebPicPort int `json:"web_pic_port,omitempty" example:"22122"`
+ EsPicIp string `json:"es_pic_ip,omitempty" example:""`
+ EsPicPort int `json:"es_pic_port,omitempty" example:"22122"`
+ CutMaxDuration int `json:"cut_max_duration,omitempty" example:"20"`
+ CutMinDuration int `json:"cut_min_duration,omitempty" example:"5"`
+ ServerId string `json:"server_id,omitempty" example:"鍒嗘瀽璁惧id"`
+ ServerName string `json:"server_name,omitempty" example:"鍒嗘瀽璁惧鍚嶇О"`
+ ServerType int `json:"server_type,omitempty" example:"1"`
+ Reserved string `json:"reserved,omitempty" example:"1"`
+ RealMax int `json:"real_max"` //瀹炴椂澶勭悊鐨勬渶澶ц矾鏁�
}
type Gb28181ConfigVo struct {
- Id string `json:"Id"`
- ServerIp string `json:"ServerIp" example:"鍥芥爣鏈嶅姟鍣↖P"`
- ServerPort int `json:"ServerPort" example:"骞冲彴鏈嶅姟绔彛:7060"`
- PublicId string `json:"PublicId" example:"骞冲彴鏈嶅姟Id"`
- GbServerPort int `json:"GbServerPort" example:"鍥芥爣鏈嶅姟绔彛:8060"`
- IsAuth bool `json:"IsAuth" example:"鏄惁寮�鍚壌鏉�:true"`
- Password string `json:"Password" example:"瀵嗙爜"`
- UpdateTime string `json:"UpdateTime"`
+ Id string `json:"Id"`
+ ServerIp string `json:"ServerIp" example:"鍥芥爣鏈嶅姟鍣↖P"`
+ ServerPort int `json:"ServerPort" example:"骞冲彴鏈嶅姟绔彛:7060"`
+ PublicId string `json:"PublicId" example:"骞冲彴鏈嶅姟Id"`
+ GbServerPort int `json:"GbServerPort" example:"鍥芥爣鏈嶅姟绔彛:8060"`
+ IsAuth bool `json:"IsAuth" example:"鏄惁寮�鍚壌鏉�:true"`
+ Password string `json:"Password" example:"瀵嗙爜"`
+ UpdateTime string `json:"UpdateTime"`
+}
+
+type SysClockConfigVo struct {
+ TimeZone string `json:"timeZone" example:"鏃跺尯"`
+ NTP bool `json:"ntp" example:"NTP鏍℃椂"`
+ NTPServer string `json:"ntpServer" example:"NTP鏈嶅姟鍣ㄥ湴鍧�"`
+ Interval int `json:"interval" example:"鑷姩鏍℃椂闂撮殧"`
+ NewTime string `json:"newTime" example:"鎵嬪姩鎸囧畾鏃堕棿"`
}
// @Summary 瀛樺偍淇℃伅鏌ヨ
@@ -50,13 +59,13 @@
// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
// @Router /data/api-v/sysset/alarmServerShow [GET]
-func (sset SysSetController) AlarmServerShow(c *gin.Context){
+func (sset SysSetController) AlarmServerShow(c *gin.Context) {
var api dbapi.SysSetApi
b, sysconf := api.GetServerInfo()
- if b{
- util.ResponseFormat(c,code.Success,sysconf)
+ if b {
+ util.ResponseFormat(c, code.Success, sysconf)
} else {
- util.ResponseFormat(c,code.ComError,"鏌ヨ澶辫触")
+ util.ResponseFormat(c, code.ComError, "鏌ヨ澶辫触")
}
}
@@ -72,17 +81,17 @@
func (sset SysSetController) AlarmEdit(c *gin.Context) {
var args LocalConfigVo
err := c.BindJSON(&args)
- if err !=nil {
- util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
return
}
var api dbapi.SysSetApi
paramBody := util.Struct2Map(args)
- b,data := api.AlarmEdit(paramBody)
+ b, data := api.AlarmEdit(paramBody)
if b {
- util.ResponseFormat(c,code.Success,data)
- }else {
- util.ResponseFormat(c,code.ComError,"淇濆瓨澶辫触")
+ util.ResponseFormat(c, code.Success, data)
+ } else {
+ util.ResponseFormat(c, code.ComError, "淇濆瓨澶辫触")
}
}
@@ -94,7 +103,7 @@
// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
// @Router /data/api-v/sysset/videoLenShow [GET]
-func (sset SysSetController) VideoLenShow(c *gin.Context){
+func (sset SysSetController) VideoLenShow(c *gin.Context) {
var api dbapi.SysSetApi
b, sysconf := api.GetServerInfo()
if b {
@@ -104,7 +113,7 @@
// 瀛樺湪鍒欎慨鏀�
util.ResponseFormat(c, code.Success, resData)
} else {
- util.ResponseFormat(c,code.ComError,"鏌ヨ澶辫触")
+ util.ResponseFormat(c, code.ComError, "鏌ヨ澶辫触")
}
}
@@ -125,11 +134,11 @@
max_video_len := c.Request.FormValue("max_video_len")
min_video_len := c.Request.FormValue("min_video_len")
var api dbapi.SysSetApi
- b,data := api.VideoLenEdit(max_video_len,min_video_len)
- if b{
- util.ResponseFormat(c,code.UpdateSuccess,data)
+ b, data := api.VideoLenEdit(max_video_len, min_video_len)
+ if b {
+ util.ResponseFormat(c, code.UpdateSuccess, data)
} else {
- util.ResponseFormat(c,code.ComError,"淇濆瓨澶辫触")
+ util.ResponseFormat(c, code.ComError, "淇濆瓨澶辫触")
}
}
@@ -146,8 +155,8 @@
b, sysconf := api.GetServerInfo()
resData := make(map[string]string, 0)
if !b { // 鏌ヨ鏄惁瀛樺湪
- util.ResponseFormat(c, code.ServiceInsideError,"鏌ヨ澶辫触")
- }else {
+ util.ResponseFormat(c, code.ServiceInsideError, "鏌ヨ澶辫触")
+ } else {
resData["server_id"] = sysconf.GetServerId()
resData["server_name"] = sysconf.GetServerName()
ipv4, mask, _ := util.GetLocalIP(config.Server.NetworkAdapter)
@@ -178,20 +187,19 @@
// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
// @Router /data/api-v/sysset/saveDevInfo [POST]
-func (sset SysSetController) SaveDevInfo(c *gin.Context){
+func (sset SysSetController) SaveDevInfo(c *gin.Context) {
dev_name := c.PostForm("server_name")
var api dbapi.SysSetApi
- paramBody :=make(map[string]interface{},0)
+ paramBody := make(map[string]interface{}, 0)
paramBody["serverName"] = dev_name
- b,data := api.SaveServerInfo(paramBody)
+ b, data := api.SaveServerInfo(paramBody)
if b { // 鏌ヨ鏄惁瀛樺湪
- util.ResponseFormat(c,code.Success,data)
- } else { // 瀛樺湪鍙婁慨鏀� 涓嶅瓨鍦� 鍗虫坊鍔�
- util.ResponseFormat(c,code.ComError,"淇濆瓨澶辫触")
+ util.ResponseFormat(c, code.Success, data)
+ } else { // 瀛樺湪鍙婁慨鏀� 涓嶅瓨鍦� 鍗虫坊鍔�
+ util.ResponseFormat(c, code.ComError, "淇濆瓨澶辫触")
}
}
-
// @Summary GB28181璁剧疆鏌ヨ
// @Description GB28181璁剧疆淇℃伅鏌ヨ
@@ -205,9 +213,9 @@
var api dbapi.SysSetApi
b, data := api.Gb28181ConfigShow()
if b {
- util.ResponseFormat(c,code.Success,data)
+ util.ResponseFormat(c, code.Success, data)
} else {
- util.ResponseFormat(c,code.ComError,"鏌ヨ澶辫触")
+ util.ResponseFormat(c, code.ComError, "鏌ヨ澶辫触")
}
}
@@ -223,16 +231,106 @@
func (sset SysSetController) Gb28181ConfigEdit(c *gin.Context) {
var args Gb28181ConfigVo
err := c.BindJSON(&args)
- if err !=nil {
- util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
return
}
var api dbapi.SysSetApi
paramBody := util.Struct2Map(args)
b, data := api.Gb28181ConfigEdit(paramBody)
if b {
- util.ResponseFormat(c,code.UpdateSuccess,data)
+ util.ResponseFormat(c, code.UpdateSuccess, data)
} else {
- util.ResponseFormat(c,code.ComError,"鏇存柊澶辫触")
+ util.ResponseFormat(c, code.ComError, "鏇存柊澶辫触")
}
}
+
+// @Summary 鑾峰彇鏃堕棿閰嶇疆
+// @Description 绯荤粺鏃堕棿閰嶇疆淇℃伅
+// @Accept json
+// @Produce json
+// @Tags sysset
+// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Router /data/api-v/sysset/clockInfo [GET]
+func (sset SysSetController) GetClockinfo(c *gin.Context) {
+ resData := make(map[string]interface{}, 0)
+ resData["time_zone"], resData["local_time"] = sys.TimeZone()
+ resData["ntp"], resData["ntp_server"], resData["interval"] = sys.NTPConfig()
+
+ util.ResponseFormat(c, code.Success, resData)
+}
+
+// @Summary 娴嬭瘯鍚屾鏃堕棿
+// @Description 娴嬭瘯鍚屾鏃堕棿鏈嶅姟鍣ㄦ槸鍚﹀彲鐢�
+// @Accept json
+// @Produce json
+// @Tags sysset
+// @Param server query string true "鏃堕棿鏈嶅姟鍣╥p"
+// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Router /data/api-v/sysset/ntpTest [GET]
+func (sset SysSetController) TestNTPServer(c *gin.Context) {
+ ntpServer := c.Query("server")
+
+ if root := sys.CheckRootPermissions(); !root {
+ util.ResponseFormat(c, code.ServiceInsideError, "鏈嶅姟鍣ㄦ病鏈変慨鏀规椂闂寸殑鏉冮檺")
+ return
+ }
+
+ isIP, err := sys.RunNTPDate(ntpServer)
+ if !isIP {
+ util.ResponseFormat(c, code.RequestParamError, "鎸囧畾鐨勬湇鍔″櫒鍦板潃閿欒")
+ return
+ }
+
+ if err == nil {
+ util.ResponseFormat(c, code.Success, "")
+ } else {
+ util.ResponseFormat(c, code.TaskStoped, "")
+ }
+}
+
+// @Summary 璁剧疆绯荤粺鏃堕棿
+// @Description 鏍℃绯荤粺鏃堕棿
+// @Accept json
+// @Produce json
+// @Tags sysset
+// @Param config body controllers.SysClockConfigVo true "鏍℃椂淇℃伅"
+// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Router /data/api-v/sysset/updateClock [POST]
+func (sset SysSetController) SetSysClock(c *gin.Context) {
+ var args SysClockConfigVo
+ err := c.BindJSON(&args)
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+ return
+ }
+
+ if root := sys.CheckRootPermissions(); !root {
+ util.ResponseFormat(c, code.ServiceInsideError, "鏈嶅姟鍣ㄦ病鏈変慨鏀规椂闂寸殑鏉冮檺")
+ return
+ }
+
+ if args.TimeZone != "CST" && args.TimeZone != "UTC" {
+ if r := sys.SetTimeZone(args.TimeZone); !r {
+ util.ResponseFormat(c, code.RequestParamError, "鏃跺尯鍙傛暟閿欒")
+ return
+ }
+ }
+
+ if !args.NTP {
+ if r := sys.SetLocalTime(args.NewTime); !r {
+ util.ResponseFormat(c, code.RequestParamError, "鎸囧畾鐨勬椂闂村弬鏁伴敊璇�")
+ return
+ }
+ } else {
+ if r := sys.EnableNTPCron(args.NTPServer, args.Interval); !r {
+ util.ResponseFormat(c, code.RequestParamError, "鎸囧畾鐨勬湇鍔″櫒鍦板潃閿欒")
+ return
+ }
+ }
+
+ util.ResponseFormat(c, code.UpdateSuccess, "閰嶇疆鎴愬姛")
+}
diff --git a/extend/sys/system.go b/extend/sys/system.go
new file mode 100644
index 0000000..563d85b
--- /dev/null
+++ b/extend/sys/system.go
@@ -0,0 +1,113 @@
+package sys
+
+import (
+ "errors"
+ "os/exec"
+
+ "fmt"
+ "net"
+ "strings"
+ "time"
+)
+
+// 妫�鏌� root鏉冮檺
+func CheckRootPermissions() bool {
+ showRootCMD := exec.Command("/bin/sh", "-c", "ls /root/")
+ if _, err := showRootCMD.Output(); err != nil {
+ return false
+ }
+
+ return true
+}
+
+// 閰嶇疆鏃跺尯
+func TimeZone() (string, int64) {
+ cmd := exec.Command("/bin/sh", "-c", "echo -n $TZ")
+ tz, _ := cmd.Output()
+ if tzstr := string(tz); tzstr != "" {
+ return tzstr, time.Now().Unix()
+ }
+
+ zone, _ := time.Now().Zone()
+ return zone, time.Now().Unix()
+}
+
+func NTPConfig() (bool, string, string) {
+ status, server, interval := false, "", ""
+
+ cmd := exec.Command("/bin/sh", "-c", "crontab -l | grep ntpdate | tr -d '\n'")
+ cron, _ := cmd.Output()
+ if task := string(cron); task != "" {
+ status = true
+ slice := strings.Split(task, " ")
+ interval, server = slice[0][2:], slice[len(slice)-1]
+ }
+
+ return status, server, interval
+}
+
+// 璁剧疆鏃跺尯
+func SetTimeZone(tz string) bool {
+ if _, err := time.LoadLocation(tz); err != nil {
+ return false
+ }
+
+ // set env
+ envCMD := exec.Command("/bin/sh", "-c", "TZ=%s", tz)
+ envCMD.Run()
+ // change permanent to the file '.profile'
+
+ cleanTZ := exec.Command("/bin/sh", "-c", "sed -i '/^TZ=.*$/d' ~/.profile")
+ cleanTZ.Run()
+
+ TZ := "TZ='" + tz + "'; export TZ"
+ appendTZCMD := fmt.Sprintf("echo \"%s\" >> ~/.profile;", TZ)
+ appendTZ := exec.Command("/bin/sh", "-c", appendTZCMD)
+ appendTZ.Run()
+
+ return true
+}
+
+// 閰嶇疆绯荤粺鏃堕棿
+func SetLocalTime(newTime string) bool {
+ const TimeLayout = "2006-01-02 15:04:05"
+ _, err := time.Parse(TimeLayout, newTime)
+ if err != nil {
+ return false
+ }
+
+ args := []string{"-s", newTime}
+ exec.Command("date", args...).Run()
+ stopNTPCron()
+
+ return true
+}
+
+const NTPCRONTABFILE = "~/.webServer.crontab"
+
+func EnableNTPCron(server string, interval int) bool {
+ stopNTPCron()
+
+ if ip := net.ParseIP(server); ip == nil {
+ return false
+ }
+
+ addTask := fmt.Sprintf("echo \"*/%d * * * * /usr/sbin/ntpdate %s\" >> %s; crontab %s", interval, server, NTPCRONTABFILE, NTPCRONTABFILE)
+ exec.Command("/bin/sh", "-c", addTask).Run()
+
+ return true
+}
+
+func stopNTPCron() {
+ cleanTask := fmt.Sprintf("crontab -l | grep -v /usr/sbin/ntpdate > %s; crontab %s", NTPCRONTABFILE, NTPCRONTABFILE)
+ exec.Command("/bin/sh", "-c", cleanTask).Run()
+}
+
+func RunNTPDate(server string) (bool, error) {
+ if ip := net.ParseIP(server); ip == nil {
+ return false, errors.New("鍙傛暟閿欒")
+ }
+
+ ntpdate := fmt.Sprintf("/usr/sbin/ntpdate %s", server)
+ return true, exec.Command("/bin/sh", "-c", ntpdate).Run()
+}
diff --git a/extend/util/util.go b/extend/util/util.go
index 16aecd5..e680ee6 100644
--- a/extend/util/util.go
+++ b/extend/util/util.go
@@ -1,14 +1,9 @@
package util
import (
- "basic.com/pubsub/protomsg.git"
"bytes"
"encoding/json"
"errors"
- "github.com/gin-gonic/gin"
- "github.com/golang/glog"
- "github.com/pierrec/lz4"
- "gocv.io/x/gocv"
"image"
"io/ioutil"
"net"
@@ -16,6 +11,12 @@
"os/exec"
"strconv"
"webserver/extend/code"
+
+ "basic.com/pubsub/protomsg.git"
+ "github.com/gin-gonic/gin"
+ "github.com/golang/glog"
+ "github.com/pierrec/lz4"
+ "gocv.io/x/gocv"
"crypto/rand"
"fmt"
@@ -60,14 +61,14 @@
//struct杞琺ap
func Struct2Map(obj interface{}) map[string]interface{} {
- resultMap :=make(map[string]interface{},0)
+ resultMap := make(map[string]interface{}, 0)
bytesData, err := json.Marshal(obj)
- if err !=nil {
+ if err != nil {
return resultMap
}
json.Unmarshal(bytesData, &resultMap)
return resultMap
-
+
//
//t := reflect.TypeOf(obj)
//v := reflect.ValueOf(obj)
@@ -79,21 +80,21 @@
//return data
}
-func ReadImgData(url string) ([]byte,error) {
- resp,err := http.Get(url)
- if err !=nil {
- return nil,err
+func ReadImgData(url string) ([]byte, error) {
+ resp, err := http.Get(url)
+ if err != nil {
+ return nil, err
}
defer resp.Body.Close()
- pix,err := ioutil.ReadAll(resp.Body)
- if err !=nil {
- return nil,err
+ pix, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return nil, err
}
- return pix,nil
+ return pix, nil
}
// 鎸夊昂瀵稿幓鍒囧浘
-func SubImg(i protomsg.Image, x0, y0, x1, y1 int, ) []byte {
+func SubImg(i protomsg.Image, x0, y0, x1, y1 int) []byte {
img, _ := gocv.NewMatFromBytes(int(i.Height), int(i.Width), gocv.MatTypeCV8UC3, i.Data)
rect := image.Rect(EnlargeSize(x0, y0, x1, y1, i))
region := img.Region(rect)
@@ -135,44 +136,43 @@
return
}
-
// 鑾峰彇鏈満缃戝崱IP
-func GetLocalIP(networkName string) (ipv4 string,mask string, err error) {
+func GetLocalIP(networkName string) (ipv4 string, mask string, err error) {
interfaces, err := net.Interfaces()
if err != nil {
- return "","", err
+ return "", "", err
}
for _, i := range interfaces {
byName, err := net.InterfaceByName(i.Name)
if err != nil {
- return "","", err
+ return "", "", err
}
addresses, err := byName.Addrs()
for _, v := range addresses {
- if ipnet, ok:=v.(*net.IPNet);ok && !ipnet.IP.IsLoopback(){
- if ipnet.IP.To4() !=nil{
- if byName.Name == networkName{
+ if ipnet, ok := v.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
+ if ipnet.IP.To4() != nil {
+ if byName.Name == networkName {
maskStr := ipnet.Mask.String()
mask64, _ := strconv.ParseUint(maskStr, 16, 32)
- return ipnet.IP.String(),IpIntToString(int(mask64)),nil
+ return ipnet.IP.String(), IpIntToString(int(mask64)), nil
}
}
}
}
}
- return "","", errors.New("ipv4 not found")
+ return "", "", errors.New("ipv4 not found")
}
-func GetDefaultRoute(networkName string)(route string,err error){
- cmdStr := fmt.Sprintf("route | grep -P \"^default.*%s$\" | awk '{print $2}'",networkName)
- cmd := exec.Command("/bin/sh","-c",cmdStr)
+func GetDefaultRoute(networkName string) (route string, err error) {
+ cmdStr := fmt.Sprintf("ip route show | grep -P \"^default.*%s\" | awk '{print $3}'", networkName)
+ cmd := exec.Command("/bin/sh", "-c", cmdStr)
b, err := cmd.Output()
- if err!=nil{
- return "",err
+ if err != nil {
+ return "", err
}
- return string(b),nil
+ return string(b), nil
}
func StringIpToInt(ipstring string) int {
@@ -188,7 +188,7 @@
return ipInt
}
-func IpIntToString(ipInt int) string{
+func IpIntToString(ipInt int) string {
ipSegs := make([]string, 4)
var len int = len(ipSegs)
buffer := bytes.NewBufferString("")
diff --git a/router/router.go b/router/router.go
index e548e2b..76c7ec2 100644
--- a/router/router.go
+++ b/router/router.go
@@ -1,13 +1,14 @@
package router
import (
- "github.com/gin-gonic/gin"
- "github.com/swaggo/gin-swagger"
- "github.com/swaggo/gin-swagger/swaggerFiles"
- "github.com/szuecs/gin-glog"
"time"
"webserver/controllers"
"webserver/middlewares/auth"
+
+ "github.com/gin-gonic/gin"
+ ginSwagger "github.com/swaggo/gin-swagger"
+ "github.com/swaggo/gin-swagger/swaggerFiles"
+ ginglog "github.com/szuecs/gin-glog"
_ "webserver/docs"
)
@@ -16,7 +17,7 @@
r := gin.Default()
r.Use(ginglog.Logger(3 * time.Second))
- r.Use(auth.AuthHandler())//auth杩囨护鍣�
+ r.Use(auth.AuthHandler()) //auth杩囨护鍣�
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
@@ -38,31 +39,30 @@
eventPushController := new(controllers.EventPushController)
pollConfigController := new(controllers.PollConfigController)
fileController := new(controllers.FileController)
- sysMenuController :=new(controllers.SysMenuController)
- clusterController :=new(controllers.ClusterController)
- sysRoleController :=new(controllers.RoleController)
+ sysMenuController := new(controllers.SysMenuController)
+ clusterController := new(controllers.ClusterController)
+ sysRoleController := new(controllers.RoleController)
-
- sysApi := r.Group( "/data/api-u/sys")
+ sysApi := r.Group("/data/api-u/sys")
{
- sysApi.POST("/login",userController.Login)
- sysApi.GET("/logout",userController.Logout)
- sysApi.POST("refresh_token",userController.RefreshToken)
+ sysApi.POST("/login", userController.Login)
+ sysApi.GET("/logout", userController.Logout)
+ sysApi.POST("refresh_token", userController.RefreshToken)
}
sysMenuApi := r.Group("/data/api-u/sysmenus")
{
- sysMenuApi.GET("/me",sysMenuController.Me)
- sysMenuApi.GET("/tree",sysMenuController.MenuTree)
+ sysMenuApi.GET("/me", sysMenuController.Me)
+ sysMenuApi.GET("/tree", sysMenuController.MenuTree)
}
- roleApi :=r.Group("/data/api-v/role")
+ roleApi := r.Group("/data/api-v/role")
{
- roleApi.GET("/findAll",sysRoleController.FindAll)
+ roleApi.GET("/findAll", sysRoleController.FindAll)
}
userApi := r.Group("/data/api-u/users")
{
- userApi.GET("/current",userController.Current)
+ userApi.GET("/current", userController.Current)
userApi.GET("/findAllUser", userController.FindAllUser)
- userApi.POST("/edit",userController.Edit)
+ userApi.POST("/edit", userController.Edit)
}
urlPrefix := "/data/api-v" // wp 娣诲姞 璺緞 鍓嶇紑
@@ -71,7 +71,7 @@
area := r.Group(urlPrefix + "/area")
{
area.GET("/localmenu", areaController.CameraTree)
- area.GET("/gb28181Tree",areaController.CameraGb28181Tree)
+ area.GET("/gb28181Tree", areaController.CameraGb28181Tree)
area.POST("/add", areaController.AreaAdd)
area.POST("/del", areaController.AreaDelete)
area.POST("/update", areaController.AreaUpdate)
@@ -86,7 +86,7 @@
camera.PUT("/update", cameraController.CameraUpdate)
camera.DELETE("/del/:cid", cameraController.CameraDel)
camera.GET("/show/:cid", cameraController.CameraSel)
- camera.GET("/updateSnapshotUrl/:cid",cameraController.UpdateSnapshotUrl)
+ camera.GET("/updateSnapshotUrl/:cid", cameraController.UpdateSnapshotUrl)
camera.POST("/alltask", cameraTaskController.FindTasksByCameraIds)
camera.GET("/task/:cameraId", cameraTaskController.CameraTaskAll)
@@ -105,7 +105,7 @@
cameraTaskArgsApi.GET("/deleteByGroup", cameraTaskArgsController.DeleteByGroup)
cameraTaskArgsApi.POST("/getLinkRulesByCameraIds", cameraTaskArgsController.GetLinkRulesByCameraIds)
cameraTaskArgsApi.POST("/saveLinkRulesByGroup", cameraTaskArgsController.SaveLinkRulesByGroup)
- cameraTaskArgsApi.POST("/updateDefenceStateByGroup",cameraTaskArgsController.UpdateDefenceStateByGroup)
+ cameraTaskArgsApi.POST("/updateDefenceStateByGroup", cameraTaskArgsController.UpdateDefenceStateByGroup)
}
cameraTaskApi := r.Group(urlPrefix + "/cameraTask")
@@ -179,8 +179,8 @@
vdbperson.PUT("/addDbPerson", dbPersonCont.AddDbPerson)
vdbperson.POST("/fileUploadTest", fileController.UploadPersonTest)
- vdbperson.POST("/faceExtract",fileController.FaceExtract)
- vdbperson.POST("/searchByPhoto",fileController.SearchByPhoto)
+ vdbperson.POST("/faceExtract", fileController.FaceExtract)
+ vdbperson.POST("/searchByPhoto", fileController.SearchByPhoto)
vdbperson.POST("/updateFace", dbPersonCont.UpdateFace)
}
@@ -195,6 +195,9 @@
vsset.POST("/saveDevInfo", ssController.SaveDevInfo)
vsset.GET("/gb28181ConfigShow", ssController.Gb28181ConfigShow)
vsset.POST("/gb28181ConfigEdit", ssController.Gb28181ConfigEdit)
+ vsset.GET("/clockInfo", ssController.GetClockinfo)
+ vsset.POST("/updateClock", ssController.SetSysClock)
+ vsset.GET("/ntpTest", ssController.TestNTPServer)
}
//绠楁硶搴撴搷浣�
@@ -204,11 +207,11 @@
sdkApi.GET("/findAllSdk", sdkController.FindAllSdk)
sdkApi.GET("/findByTaskId", sdkController.FindByTaskId)
sdkApi.GET("/getById", sdkController.GetById)
- sdkApi.GET("/sdkDownload",sdkController.SdkDownLoad)
+ sdkApi.GET("/sdkDownload", sdkController.SdkDownLoad)
}
//绠楁硶鍙傛暟
- sdkArgApi :=r.Group(urlPrefix + "/sdkArg")
+ sdkArgApi := r.Group(urlPrefix + "/sdkArg")
{
sdkArgApi.GET("/getSdkArgs", sdkController.GetSdkArgs)
}
@@ -240,7 +243,7 @@
pollCApi.GET("/getPollConfig", pollConfigController.GetPollConfig)
pollCApi.POST("/updateEnable", pollConfigController.UpdateEnable)
}
- clusterApi := r.Group(urlPrefix+"/cluster")
+ clusterApi := r.Group(urlPrefix + "/cluster")
{
clusterApi.GET("/findCluster", clusterController.FindCluster)
clusterApi.GET("/randomPwd", clusterController.RandomPwd)
--
Gitblit v1.8.0