From 69ed492679ba75d493ed13a5bd174d0d1ee6f5a1 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 24 Oct 2022 22:07:44 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20=E6=A1=8C=E9=9D=A2=E7=AB=AF?= =?UTF-8?q?=E5=86=85=E6=A0=B8=E8=BF=9B=E7=A8=8B=E7=AB=AF=E5=8F=A3=E5=8F=B7?= =?UTF-8?q?=E5=86=99=E5=85=A5=E6=96=87=E4=BB=B6=20`port.json`=20https://gi?= =?UTF-8?q?thub.com/siyuan-note/siyuan/issues/6337?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/server/serve.go | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/kernel/server/serve.go b/kernel/server/serve.go index 346a839e2..cee2aee03 100644 --- a/kernel/server/serve.go +++ b/kernel/server/serve.go @@ -17,6 +17,7 @@ package server import ( + "fmt" "net" "net/http" "net/http/pprof" @@ -94,7 +95,12 @@ func Serve(fastMode bool) { } } - logging.LogInfof("kernel is booting [%s]", "http://"+host+":"+port) + pid := fmt.Sprintf("%d", os.Getpid()) + if !fastMode { + rewritePortJSON(pid, port) + } + + logging.LogInfof("kernel [pid=%s] is booting [%s]", pid, "http://"+host+":"+port) util.HttpServing = true if err = http.Serve(ln, ginServer); nil != err { @@ -105,6 +111,33 @@ func Serve(fastMode bool) { } } +func rewritePortJSON(pid, port string) { + portJSON := filepath.Join(util.HomeDir, ".config", "siyuan", "port.json") + pidPorts := map[string]string{} + var data []byte + var err error + + if gulu.File.IsExist(portJSON) { + data, err = os.ReadFile(portJSON) + if nil != err { + logging.LogWarnf("read port.json failed: %s", err) + } else { + if err = gulu.JSON.UnmarshalJSON(data, &pidPorts); nil != err { + logging.LogWarnf("unmarshal port.json failed: %s", err) + } + } + } + + pidPorts[pid] = port + if data, err = gulu.JSON.MarshalIndentJSON(pidPorts, "", " "); nil != err { + logging.LogWarnf("marshal port.json failed: %s", err) + } else { + if err = os.WriteFile(portJSON, data, 0644); nil != err { + logging.LogWarnf("write port.json failed: %s", err) + } + } +} + func serveExport(ginServer *gin.Engine) { ginServer.Static("/export/", filepath.Join(util.TempDir, "export")) }