소스 검색

编辑优化修改代码

niujiuru 3 주 전
부모
커밋
c44e9a631d
5개의 변경된 파일181개의 추가작업 그리고 4개의 파일을 삭제
  1. 176 0
      camera-capture.service/main.go
  2. 1 1
      gnss.service/main.go
  3. 1 1
      networkd.service/main.go
  4. 1 1
      timesyncd.service/main.go
  5. 2 1
      web-ui.service/web/static/js/page8.js

+ 176 - 0
camera-capture.service/main.go

@@ -1 +1,177 @@
 package main
+
+import (
+	"context"
+	"errors"
+	"flag"
+	"fmt"
+	"net/http"
+	"os"
+	"rtu_linux_services/servicelib"
+	"time"
+
+	"github.com/kardianos/service"
+	"hnyfkj.com.cn/rtu/linux/baseapp"
+	"hnyfkj.com.cn/rtu/linux/camera"
+	"hnyfkj.com.cn/rtu/linux/dh_takephoto"
+	"hnyfkj.com.cn/rtu/linux/hk_takephoto"
+	"hnyfkj.com.cn/rtu/linux/utils/jsonrpc2"
+)
+
+var (
+	Version   = "0.0.0.1"
+	BuildTime = ""
+)
+
+const (
+	network    = "tcp" // http -> tcp
+	listenAddr = "127.0.0.1:7003"
+)
+
+type program struct {
+	name        string
+	core_server *jsonrpc2.RPCServer
+	http_server *http.Server
+}
+
+// Start should not block. Do the actual work async.
+func (p *program) Start(s service.Service) error {
+	logCfgFile, err := servicelib.EnsureDefaultLogConfig()
+	if err != nil {
+		return err
+	}
+
+	baseapp.InitLogger(logCfgFile)
+	baseapp.Logger.Infof("App Version: %s, Build Time: %s", Version, BuildTime)
+
+	if !hk_takephoto.ModuleInit() || !dh_takephoto.ModuleInit() {
+		return errors.New("photo module init failed")
+	}
+
+	camera.SetWaitAEDoneForTakePhoto(0)
+
+	if err := camera.SetupEth1ForGigeCamera("192.168.100.1/24"); err != nil {
+		return errors.New("failed to setup eth1 address")
+	}
+
+	p.core_server, err = jsonrpc2.NewRPCServer(p.name, baseapp.Logger)
+	if err != nil {
+		return err
+	}
+
+	methods := make(jsonrpc2.MethodMap)
+
+	//////////////////////////////////////////////////////////
+	_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 // 保存日志设置
+	//////////////////////////////////////////////////////////
+
+	err = p.core_server.RegisterMethods(methods)
+	if err != nil {
+		return err
+	}
+
+	mux := http.NewServeMux()
+	mux.Handle("/rpc", p.core_server)
+
+	p.http_server = &http.Server{
+		Addr:    listenAddr,
+		Handler: mux,
+	}
+
+	go p.run()
+
+	return nil
+}
+
+// Do work here
+func (p *program) run() {
+	baseapp.Logger.Infof(
+		"[%s] Http server starting on %s...",
+		p.name,
+		p.http_server.Addr,
+	)
+
+	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)
+		return
+	}
+}
+
+// Stop should not block. Return with a few seconds.
+func (p *program) Stop(s service.Service) error {
+	if p.core_server != nil {
+		p.core_server.Stop()
+	}
+
+	if p.http_server != nil {
+		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+		defer cancel()
+
+		_ = p.http_server.Shutdown(ctx)
+	}
+
+	baseapp.ExitLogger()
+	return nil
+}
+
+func main() {
+	baseapp.SetOptDirs(true, true, false, true)
+	baseapp.InitPath()
+
+	svcFlag := flag.String("service", "", "Control the yfkj-camera-capture service.")
+	flag.Parse()
+
+	svcConfig := &service.Config{
+		Name:        "yfkj-camera-capture",
+		DisplayName: "yfkj-camera-capture",
+		Description: "Yunfei Camera Capture Service",
+		Option: map[string]any{
+			"Restart": "always", // 无条件重启
+		},
+	}
+
+	servicelib.WriteVersionFile(baseapp.EXEC_DIR, Version) //-> for 升级
+
+	prg := &program{
+		name: "CameraCapture",
+	}
+
+	svc, err := service.New(prg, svcConfig)
+	if err != nil {
+		fmt.Printf("%s.service creation failed: %v\n",
+			svcConfig.Name, err)
+		os.Exit(1)
+	}
+
+	if len(*svcFlag) != 0 {
+		err := service.Control(svc, *svcFlag)
+		if err != nil {
+			fmt.Printf("%v\n Valid actions: %q\n", err, service.ControlAction)
+		}
+		os.Exit(0)
+	}
+
+	if servicelib.IsAddrInUse(network, listenAddr) { // 查询端口占用,避免运行多份实例
+		fmt.Printf(
+			"%s.service start failed: listen addr %s already in use\n",
+			svcConfig.Name, listenAddr,
+		)
+		os.Exit(1)
+	}
+
+	if err := svc.Run(); err != nil {
+		fmt.Printf("%s.service run failed: %v\n",
+			svcConfig.Name, err)
+		os.Exit(1)
+	}
+}

+ 1 - 1
gnss.service/main.go

@@ -129,7 +129,7 @@ func main() {
 	svcConfig := &service.Config{
 		Name:        "yfkj-gnss",
 		DisplayName: "yfkj-gnss",
-		Description: "Location acquisition",
+		Description: "Yunfei GNSS Location Acquisition",
 		Option: map[string]any{
 			"Restart": "always", // 无条件重启
 		},

+ 1 - 1
networkd.service/main.go

@@ -138,7 +138,7 @@ func main() {
 	svcConfig := &service.Config{
 		Name:        "yfkj-networkd",
 		DisplayName: "yfkj-networkd",
-		Description: "Network connectivity management",
+		Description: "Yunfei Network Connectivity Management",
 		Option: map[string]any{
 			"Restart": "always", // 无条件重启
 		},

+ 1 - 1
timesyncd.service/main.go

@@ -179,7 +179,7 @@ func main() {
 	svcConfig := &service.Config{
 		Name:        "yfkj-timesyncd",
 		DisplayName: "yfkj-timesyncd",
-		Description: "System time synchronization",
+		Description: "Yunfei System Time Synchronization",
 		Option: map[string]any{
 			"Restart": "always", // 无条件重启
 		},

+ 2 - 1
web-ui.service/web/static/js/page8.js

@@ -12,7 +12,7 @@ function initPage8() {
 
   sshTerm = new Terminal({
     cursorBlink: true,
-    scrollback: 5000,
+    scrollback: 2000,
     fontSize: 14,
     convertEol: true,
     theme: {
@@ -23,6 +23,7 @@ function initPage8() {
   sshFit = new FitAddon.FitAddon();
   sshTerm.loadAddon(sshFit);
   sshTerm.open(el);
+  sshTerm.focus();
 
   connectSSH();