|
|
@@ -2,13 +2,11 @@ package main
|
|
|
|
|
|
import (
|
|
|
"context"
|
|
|
- "encoding/json"
|
|
|
"errors"
|
|
|
"flag"
|
|
|
"fmt"
|
|
|
"net/http"
|
|
|
"os"
|
|
|
- "strconv"
|
|
|
"time"
|
|
|
|
|
|
"rtu_linux_services/servicelib"
|
|
|
@@ -34,7 +32,6 @@ type program struct {
|
|
|
name string
|
|
|
core_server *jsonrpc2.RPCServer
|
|
|
http_server *http.Server
|
|
|
- done chan struct{}
|
|
|
}
|
|
|
|
|
|
// Start should not block. Do the actual work async.
|
|
|
@@ -52,7 +49,7 @@ func (p *program) Start(s service.Service) error {
|
|
|
return errors.New("modem init failed")
|
|
|
}
|
|
|
|
|
|
- netmgrd.SetTimeSyncEnabled(false) // 关闭时间同步, 由"timesyncd.service"完成
|
|
|
+ netmgrd.SetTimeSyncEnabled(false) // -> "timesyncd.service"
|
|
|
netmgrd.ModuleInit()
|
|
|
|
|
|
p.core_server, err = jsonrpc2.NewRPCServer(p.name, baseapp.Logger)
|
|
|
@@ -62,15 +59,20 @@ func (p *program) Start(s service.Service) error {
|
|
|
|
|
|
methods := make(jsonrpc2.MethodMap)
|
|
|
|
|
|
- ////////////////////////////////////////////////////////////
|
|
|
- methods["basic.getBuildVer"] = p.getBuildVer /// 获取软件版本
|
|
|
- methods["basic.getLogLevel"] = p.getLogLevel /// 获取日志级别
|
|
|
- methods["basic.setLogLevel"] = p.setLogLevel /// 设置日志级别
|
|
|
- methods["basic.saveLogConf"] = p.saveLogConf /// 保存日志设置
|
|
|
- ////////////////////////////////////////////////////////////
|
|
|
- methods["core.getModemInfo"] = p.getModemInfo // IMEI、ICCID
|
|
|
- methods["core.getNetStatus"] = p.getNetStatus // 联网状态信息
|
|
|
- ////////////////////////////////////////////////////////////
|
|
|
+ //////////////////////////////////////////////////////////
|
|
|
+ _getBuildVer := servicelib.MakeGetBuildVer(
|
|
|
+ Version, BuildTime)
|
|
|
+ methods["basic.getBuildVer"] = _getBuildVer // 获取软件版本
|
|
|
+ _getLogLevel := servicelib.GetLogLevel
|
|
|
+ methods["basic.getLogLevel"] = _getLogLevel // 获取日志级别
|
|
|
+ _setLogLevel := servicelib.SetLogLevel
|
|
|
+ methods["basic.setLogLevel"] = _setLogLevel // 设置日志级别
|
|
|
+ _saveLogConf := servicelib.SaveLogConf
|
|
|
+ methods["basic.saveLogConf"] = _saveLogConf // 保存日志设置
|
|
|
+ //////////////////////////////////////////////////////////
|
|
|
+ methods["core.getModemInfo"] = getModemInfo // IMEI、ICCID
|
|
|
+ methods["core.getNetStatus"] = getNetStatus // 联网状态信息
|
|
|
+ //////////////////////////////////////////////////////////
|
|
|
|
|
|
err = p.core_server.RegisterMethods(methods)
|
|
|
if err != nil {
|
|
|
@@ -85,8 +87,6 @@ func (p *program) Start(s service.Service) error {
|
|
|
Handler: mux,
|
|
|
}
|
|
|
|
|
|
- p.done = make(chan struct{})
|
|
|
-
|
|
|
go p.run()
|
|
|
|
|
|
return nil
|
|
|
@@ -94,10 +94,8 @@ func (p *program) Start(s service.Service) error {
|
|
|
|
|
|
// Do work here
|
|
|
func (p *program) run() {
|
|
|
- defer close(p.done)
|
|
|
-
|
|
|
baseapp.Logger.Infof(
|
|
|
- "[%s] http server starting on %s...",
|
|
|
+ "[%s] Http server starting on %s...",
|
|
|
p.name,
|
|
|
p.http_server.Addr,
|
|
|
)
|
|
|
@@ -105,7 +103,7 @@ func (p *program) run() {
|
|
|
err := p.http_server.ListenAndServe() // 同步阻塞
|
|
|
|
|
|
if err != nil && !errors.Is(err, http.ErrServerClosed) {
|
|
|
- baseapp.Logger.Errorf("[%s] start http server error: %v", p.name, err)
|
|
|
+ baseapp.Logger.Errorf("[%s] Start http server error: %v!!", p.name, err)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
@@ -123,76 +121,11 @@ func (p *program) Stop(s service.Service) error {
|
|
|
_ = p.http_server.Shutdown(ctx)
|
|
|
}
|
|
|
|
|
|
- if p.done != nil {
|
|
|
- <-p.done
|
|
|
- }
|
|
|
-
|
|
|
netmgrd.ModemExit()
|
|
|
baseapp.ExitLogger()
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func (p *program) getBuildVer(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
- result := map[string]string{
|
|
|
- "version": Version,
|
|
|
- "build_time": BuildTime,
|
|
|
- }
|
|
|
- return jsonrpc2.BuildResponse(req, result, nil)
|
|
|
-}
|
|
|
-
|
|
|
-func (p *program) getLogLevel(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
- level, _ := baseapp.GetLogLevel()
|
|
|
- result := map[string]string{
|
|
|
- "log_level": level,
|
|
|
- }
|
|
|
- return jsonrpc2.BuildResponse(req, result, nil)
|
|
|
-}
|
|
|
-
|
|
|
-func (p *program) setLogLevel(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
- var params map[string]string
|
|
|
- if err := json.Unmarshal(req.Params, ¶ms); err != nil {
|
|
|
- return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, err.Error())
|
|
|
- }
|
|
|
-
|
|
|
- level, ok := params["log_level"]
|
|
|
- if !ok || level == "" {
|
|
|
- return jsonrpc2.BuildError(req, jsonrpc2.ErrInvalidParams, "missing or empty 'log_level' parameter")
|
|
|
- }
|
|
|
-
|
|
|
- err := baseapp.UpdateLogLevel(level)
|
|
|
- if err != nil {
|
|
|
- return jsonrpc2.BuildError(req, jsonrpc2.ErrInternal, err.Error())
|
|
|
- }
|
|
|
-
|
|
|
- return jsonrpc2.BuildResponse(req, "success", nil)
|
|
|
-}
|
|
|
-
|
|
|
-func (p *program) saveLogConf(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
- err := baseapp.SaveLogConfig()
|
|
|
- if err != nil {
|
|
|
- return jsonrpc2.BuildError(req, jsonrpc2.ErrInternal, err.Error())
|
|
|
- }
|
|
|
-
|
|
|
- return jsonrpc2.BuildResponse(req, "success", nil)
|
|
|
-}
|
|
|
-
|
|
|
-func (p *program) getModemInfo(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
- result := map[string]string{
|
|
|
- "imei": netmgrd.GetIMEI(),
|
|
|
- "iccid": netmgrd.GetSimICCID(),
|
|
|
- "rssi": netmgrd.GetRSSI(),
|
|
|
- }
|
|
|
- return jsonrpc2.BuildResponse(req, result, nil)
|
|
|
-}
|
|
|
-
|
|
|
-func (p *program) getNetStatus(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
|
|
|
- result := map[string]string{
|
|
|
- "net_available": strconv.FormatBool(netmgrd.IsInetAvailable()),
|
|
|
- "net_type": netmgrd.GetCurrentNetType().String(),
|
|
|
- }
|
|
|
- return jsonrpc2.BuildResponse(req, result, nil)
|
|
|
-}
|
|
|
-
|
|
|
func main() {
|
|
|
svcFlag := flag.String("service", "", "Control the system service.")
|
|
|
flag.Parse()
|