From 745cea96172740c7c39ac33916df0158fb0bd5bd Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:22:32 +0800 Subject: [PATCH 01/17] fix --- .../internal/logic/datatransferlogic.go | 4 ++- .../internal/logic/ws_render_image.go | 27 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 37e15346..0466ce64 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -192,7 +192,9 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use userId: userInfo.UserId, guestId: userInfo.GuestId, extendRenderProperty: extendRenderProperty{ - renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), + renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), + colorSelectedIndex: 0, + templateTag: "", }, } //保存连接 diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index a900c8b3..37154e96 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -22,6 +22,8 @@ import ( var ( //每个websocket渲染任务缓冲队列长度默认值 renderChanLen = 500 + //每个websocket渲染并发数 + renderChanConcurrency = 10 ) // 渲染处理器 @@ -58,9 +60,12 @@ func (r *renderProcessor) allocationMessage(w *wsConnectItem, data []byte) { func (w *wsConnectItem) consumeRenderImageData() { defer func() { if err := recover(); err != nil { - logx.Error("func renderImage err:", err) + logx.Error("func consumeRenderImageData err:", err) } }() + //限制并发 + limitChan := make(chan struct{}, renderChanConcurrency) + defer close(limitChan) for { select { case <-w.closeChan: //已关闭 @@ -74,20 +79,24 @@ func (w *wsConnectItem) consumeRenderImageData() { if data.RenderData.TemplateTagColor.SelectedColorIndex != w.extendRenderProperty.colorSelectedIndex { continue } - w.renderImage(data) + limitChan <- struct{}{} + go func(d websocket_data.RenderImageReqMsg) { + defer func() { + if err := recover(); err != nil { + logx.Error("func renderImage err:", err) + } + }() + defer func() { + <-limitChan + }() + w.renderImage(d) + }(data) } } } // 执行渲染任务 func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageReqMsg) { - //logx.Info("消费渲染数据:", string(data)) - /*var renderImageData websocket_data.RenderImageReqMsg - if err := json.Unmarshal(data, &renderImageData); err != nil { - w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "数据格式错误", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) - logx.Error("invalid format of websocket render image message", err) - return - }*/ if renderImageData.RenderData.Logo == "" { w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "请传入logo", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) return From 6985b76e4935047d1b255e23cc6d07ddd7517286 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:25:51 +0800 Subject: [PATCH 02/17] fix --- server/websocket/internal/logic/ws_render_image.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index 37154e96..b69bc61e 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -23,7 +23,7 @@ var ( //每个websocket渲染任务缓冲队列长度默认值 renderChanLen = 500 //每个websocket渲染并发数 - renderChanConcurrency = 10 + renderChanConcurrency = 25 ) // 渲染处理器 From db7d53532a406bf5cd475a2536f714dd7b03aa14 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:27:19 +0800 Subject: [PATCH 03/17] nacos config --- run_all_server.sh | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/run_all_server.sh b/run_all_server.sh index 43723946..4d1b1580 100755 --- a/run_all_server.sh +++ b/run_all_server.sh @@ -8,22 +8,30 @@ go mod vendor # 定义一个函数来在每个服务器目录下运行 go run .go run_server() { server_name=$1 - echo "Running $server_name" - - + + # 导航到相应的目录 + cd server/$server_name + go build + echo "build $server_name" # 如果之前存在相同名字的 screen 会话,先将其终止 + # 首先尝试关闭已存在的screen会话 existing_session=$(screen -ls | grep -w "$server_name") if [ -n "$existing_session" ]; then echo "Terminating existing screen session for $server_name" screen -S "$server_name" -X quit + while [[ $(screen -ls | grep "\.$server_name\s") ]]; do + sleep 0.1s # 等待0.1秒后再次检查 + echo "wait for $server_name" + done fi - # 导航到相应的目录 - cd server/$server_name - go build + + # 循环检查screen进程是否存在 [ -f .gitignore ] || echo $server_name > .gitignore # 使用 screen 运行 go run .go + + echo "Running $server_name" screen -dmS $server_name -L ./$server_name # 返回到上一级目录 From a6a40a2ad5ccd0448d47690acfc035e41fad0e35 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:31:39 +0800 Subject: [PATCH 04/17] nacos config --- proxyserver/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/proxyserver/main.go b/proxyserver/main.go index a6e25325..e271f6c9 100644 --- a/proxyserver/main.go +++ b/proxyserver/main.go @@ -109,6 +109,7 @@ func main() { if err != nil { // 在发生错误时进行处理 + log.Println(res.Header()) logx.Error(err) logx.Error(res.Header()) res.WriteHeader(http.StatusNotFound) // 返回404状态码 From e925d8c6841d81582ef59400d40a189fb1d21f23 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:32:16 +0800 Subject: [PATCH 05/17] nacos config --- proxyserver/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/proxyserver/main.go b/proxyserver/main.go index e271f6c9..a4a2da96 100644 --- a/proxyserver/main.go +++ b/proxyserver/main.go @@ -110,8 +110,8 @@ func main() { // 在发生错误时进行处理 log.Println(res.Header()) - logx.Error(err) - logx.Error(res.Header()) + logx.Info(err) + logx.Info(res.Header()) res.WriteHeader(http.StatusNotFound) // 返回404状态码 } } From 2d224c0d67f4e2b8430c92d79a08c24495a2241f Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:35:40 +0800 Subject: [PATCH 06/17] nacos config --- proxyserver/main.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/proxyserver/main.go b/proxyserver/main.go index a4a2da96..745eb268 100644 --- a/proxyserver/main.go +++ b/proxyserver/main.go @@ -18,7 +18,6 @@ import ( "time" "github.com/gorilla/websocket" - "github.com/zeromicro/go-zero/core/logx" "gopkg.in/yaml.v2" _ "fusenapi/utils/auth" @@ -105,16 +104,16 @@ func main() { // 对/api开头的请求进行反向代理 proxy := httputil.NewSingleHostReverseProxy(apiURL) - proxy.ErrorHandler = func(res http.ResponseWriter, req *http.Request, err error) { - if err != nil { + // proxy.ErrorHandler = func(res http.ResponseWriter, req *http.Request, err error) { + // if err != nil { - // 在发生错误时进行处理 - log.Println(res.Header()) - logx.Info(err) - logx.Info(res.Header()) - res.WriteHeader(http.StatusNotFound) // 返回404状态码 - } - } + // // 在发生错误时进行处理 + // log.Println(res.Header()) + // logx.Info(err) + // logx.Info(res.Header()) + // res.WriteHeader(http.StatusNotFound) // 返回404状态码 + // } + // } proxy.ServeHTTP(w, r) return From caf2f753a5b3d1455925d38c118a12b4133485bb Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:36:10 +0800 Subject: [PATCH 07/17] fix --- .../internal/logic/addtocartlogic.go | 27 +++++++++++++++++++ .../internal/svc/servicecontext.go | 10 ++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/server/shopping-cart/internal/logic/addtocartlogic.go b/server/shopping-cart/internal/logic/addtocartlogic.go index 1d6ef135..b6f4e21c 100644 --- a/server/shopping-cart/internal/logic/addtocartlogic.go +++ b/server/shopping-cart/internal/logic/addtocartlogic.go @@ -10,6 +10,8 @@ import ( "fusenapi/server/shopping-cart/internal/types" "fusenapi/utils/auth" "fusenapi/utils/basic" + "fusenapi/utils/file" + "fusenapi/utils/hash" "gorm.io/gorm" "time" @@ -51,6 +53,31 @@ func (l *AddToCartLogic) AddToCart(req *types.AddToCartReq, userinfo *auth.UserI if cartCount >= 100 { return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "sorry,the count of your carts can`t greater than 100") } + if req.RenderImage != "" { + //上传base64文件 + // 上传文件 + var upload = file.Upload{ + Ctx: l.ctx, + MysqlConn: l.svcCtx.MysqlConn, + AwsSession: l.svcCtx.AwsSession, + } + uploadRes, err := upload.UploadFileByBase64(&file.UploadBaseReq{ + Source: "webGl render image", + FileHash: hash.JsonHashKey(req.RenderImage), + FileData: req.RenderImage, + Metadata: "", + UploadBucket: 1, + ApiType: 2, + UserId: userinfo.UserId, + GuestId: userinfo.GuestId, + FileByte: nil, + }) + if err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeFileUploadErr, "failed to upload webGl render image") + } + req.RenderImage = uploadRes.ResourceUrl + } //获取产品是否存在 productInfo, err := l.svcCtx.AllModels.FsProduct.FindOne(l.ctx, req.ProductId) if err != nil { diff --git a/server/shopping-cart/internal/svc/servicecontext.go b/server/shopping-cart/internal/svc/servicecontext.go index f2b1f557..835b70da 100644 --- a/server/shopping-cart/internal/svc/servicecontext.go +++ b/server/shopping-cart/internal/svc/servicecontext.go @@ -16,6 +16,7 @@ type ServiceContext struct { AllModels *gmodel.AllModelsGen RabbitMq *initalize.RabbitMqHandle Repositories *initalize.Repositories + AwsSession *session.Session } func NewServiceContext(c config.Config) *ServiceContext { @@ -24,10 +25,11 @@ func NewServiceContext(c config.Config) *ServiceContext { Credentials: credentials.NewStaticCredentials(c.AWS.S3.Credentials.AccessKeyID, c.AWS.S3.Credentials.Secret, c.AWS.S3.Credentials.Token), } return &ServiceContext{ - Config: c, - MysqlConn: conn, - AllModels: gmodel.NewAllModels(initalize.InitMysql(c.SourceMysql)), - RabbitMq: initalize.InitRabbitMq(c.SourceRabbitMq, nil), + Config: c, + MysqlConn: conn, + AllModels: gmodel.NewAllModels(initalize.InitMysql(c.SourceMysql)), + RabbitMq: initalize.InitRabbitMq(c.SourceRabbitMq, nil), + AwsSession: session.Must(session.NewSession(&config)), Repositories: initalize.NewAllRepositories(&initalize.NewAllRepositorieData{ GormDB: conn, BLMServiceUrl: &c.BLMService.Url, From 951635e7f876075fd9ccf2e091d4de82dcf70004 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:36:38 +0800 Subject: [PATCH 08/17] fix --- server/websocket/internal/logic/ws_render_image.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index b69bc61e..fc5e2bdd 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -23,7 +23,7 @@ var ( //每个websocket渲染任务缓冲队列长度默认值 renderChanLen = 500 //每个websocket渲染并发数 - renderChanConcurrency = 25 + renderChanConcurrency = 100 ) // 渲染处理器 From 21c4907e44db81fe51e89faa34dd7fb773014044 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:37:44 +0800 Subject: [PATCH 09/17] fix --- server/websocket/internal/logic/ws_render_image.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index fc5e2bdd..6f6f53dc 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -73,10 +73,12 @@ func (w *wsConnectItem) consumeRenderImageData() { case data := <-w.extendRenderProperty.renderChan: //消费数据 //属性不同则不发送渲染 if data.RenderData.TemplateTag != w.extendRenderProperty.templateTag { + logx.Info("丢弃切换了标签之前的渲染") continue } //属性不同则不发送渲染 if data.RenderData.TemplateTagColor.SelectedColorIndex != w.extendRenderProperty.colorSelectedIndex { + logx.Info("丢弃切换了颜色之前的渲染") continue } limitChan <- struct{}{} From 11cee190b0dc808d932051cc4c6c539153d20df9 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:45:56 +0800 Subject: [PATCH 10/17] nacos config --- proxyserver/main.go | 1 + run_all_server.sh | 81 +++++++++++++++++++++++++++------------------ 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/proxyserver/main.go b/proxyserver/main.go index 745eb268..c98a5d15 100644 --- a/proxyserver/main.go +++ b/proxyserver/main.go @@ -115,6 +115,7 @@ func main() { // } // } proxy.ServeHTTP(w, r) + log.Println(w.Header()) return } else { diff --git a/run_all_server.sh b/run_all_server.sh index 4d1b1580..6ee27efe 100755 --- a/run_all_server.sh +++ b/run_all_server.sh @@ -4,6 +4,26 @@ single_server_name=$1 go mod tidy go mod vendor +find /tmp/go-build* -mmin +5 -exec rm -rf {} + +find /tmp/go-link* -mmin +5 -exec rm -rf {} + + +run_proxyserver() { + # 定义目录和screen名称 + dir_path="./proxyserver" + screen_name="proxyserver" + + # 进入目录 + cd $dir_path + # 检查是否存在screen session + if screen -list | grep -q "$screen_name"; then + # 结束存在的screen session + screen -S $screen_name -X quit + fi + go build + # 启动新的screen session并运行go程序 + echo "run $screen_name" + screen -dmS $screen_name -L ./$screen_name +} # 定义一个函数来在每个服务器目录下运行 go run .go run_server() { @@ -38,43 +58,40 @@ run_server() { cd - > /dev/null } -find /tmp/go-build* -mmin +5 -exec rm -rf {} + -find /tmp/go-link* -mmin +5 -exec rm -rf {} + +if [ "$single_server_name" = "proxyserver" ]; then + # 重启proxyserver的逻辑 + run_proxyserver +else -server_dirs=() # 初始化一个空数组 + server_dirs=() # 初始化一个空数组 -if [ -n "$single_server_name" ]; then - server_dirs=("$single_server_name") -else - for dir in server/*/ ; do # 遍历 "server/" 下的所有子目录 - dir=${dir%*/} # 删除末尾的 "/" - dir=${dir##*/} # 删除开头的 "server/" - server_dirs+=("$dir") # 添加到数组 - done + if [ -n "$single_server_name" ]; then + server_dirs=("$single_server_name") + else + for dir in server/*/ ; do # 遍历 "server/" 下的所有子目录 + dir=${dir%*/} # 删除末尾的 "/" + dir=${dir##*/} # 删除开头的 "server/" + server_dirs+=("$dir") # 添加到数组 + done + fi + + # 在每个服务器目录下运行相应的 go 程序 + for server_dir in "${server_dirs[@]}"; do + run_server $server_dir + done + + if [ -n "$single_server_name" ]; then + echo "no proxyserver restart" + else + run_proxyserver + fi fi -# 在每个服务器目录下运行相应的 go 程序 -for server_dir in "${server_dirs[@]}"; do - run_server $server_dir -done -if [ -n "$single_server_name" ]; then - echo "no proxyserver restart" -else - # 定义目录和screen名称 - dir_path="./proxyserver" - screen_name="proxyserver" - # 进入目录 - cd $dir_path - # 检查是否存在screen session - if screen -list | grep -q "$screen_name"; then - # 结束存在的screen session - screen -S $screen_name -X quit - fi - go build - # 启动新的screen session并运行go程序 - screen -dmS $screen_name -L ./$screen_name -fi + + + + From e1094b9be601fbfa45d1321f4f5fe9b3f73798bc Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:47:32 +0800 Subject: [PATCH 11/17] fix --- .../internal/logic/datatransferlogic.go | 8 +++----- .../websocket/internal/logic/ws_render_image.go | 16 +--------------- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 0466ce64..7f434499 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -67,9 +67,9 @@ var ( //websocket连接存储 mapConnPool = sync.Map{} //每个websocket连接入口缓冲队列长度默认值 - websocketInChanLen = 500 + websocketInChanLen = 1000 //每个websocket连接出口缓冲队列长度默认值 - websocketOutChanLen = 500 + websocketOutChanLen = 1000 //是否开启debug openDebug = true //允许跨域的origin @@ -192,9 +192,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use userId: userInfo.UserId, guestId: userInfo.GuestId, extendRenderProperty: extendRenderProperty{ - renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), - colorSelectedIndex: 0, - templateTag: "", + renderChan: make(chan websocket_data.RenderImageReqMsg, renderChanLen), }, } //保存连接 diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index 6f6f53dc..53420a69 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -32,9 +32,7 @@ type renderProcessor struct { // 云渲染属性 type extendRenderProperty struct { - renderChan chan websocket_data.RenderImageReqMsg //渲染消息入口的缓冲队列 - colorSelectedIndex int //选择颜色索引 - templateTag string //模板标签 + renderChan chan websocket_data.RenderImageReqMsg //渲染消息入口的缓冲队列 } // 处理分发到这里的数据 @@ -50,8 +48,6 @@ func (r *renderProcessor) allocationMessage(w *wsConnectItem, data []byte) { case <-w.closeChan: //已经关闭 return case w.extendRenderProperty.renderChan <- renderImageData: //发入到缓冲队列 - w.extendRenderProperty.colorSelectedIndex = renderImageData.RenderData.TemplateTagColor.SelectedColorIndex - w.extendRenderProperty.templateTag = renderImageData.RenderData.TemplateTag return } } @@ -71,16 +67,6 @@ func (w *wsConnectItem) consumeRenderImageData() { case <-w.closeChan: //已关闭 return case data := <-w.extendRenderProperty.renderChan: //消费数据 - //属性不同则不发送渲染 - if data.RenderData.TemplateTag != w.extendRenderProperty.templateTag { - logx.Info("丢弃切换了标签之前的渲染") - continue - } - //属性不同则不发送渲染 - if data.RenderData.TemplateTagColor.SelectedColorIndex != w.extendRenderProperty.colorSelectedIndex { - logx.Info("丢弃切换了颜色之前的渲染") - continue - } limitChan <- struct{}{} go func(d websocket_data.RenderImageReqMsg) { defer func() { From e29e8d8049b450125289dac7a378512b47cb77f0 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:55:39 +0800 Subject: [PATCH 12/17] proxyserver --- proxyserver/main.go | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/proxyserver/main.go b/proxyserver/main.go index c98a5d15..91ffa076 100644 --- a/proxyserver/main.go +++ b/proxyserver/main.go @@ -104,18 +104,8 @@ func main() { // 对/api开头的请求进行反向代理 proxy := httputil.NewSingleHostReverseProxy(apiURL) - // proxy.ErrorHandler = func(res http.ResponseWriter, req *http.Request, err error) { - // if err != nil { - - // // 在发生错误时进行处理 - // log.Println(res.Header()) - // logx.Info(err) - // logx.Info(res.Header()) - // res.WriteHeader(http.StatusNotFound) // 返回404状态码 - // } - // } proxy.ServeHTTP(w, r) - log.Println(w.Header()) + return } else { @@ -258,6 +248,7 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac } conn, err := upgrader.Upgrade(w, r, nil) if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) return } // defer conn.Close() @@ -270,14 +261,14 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac // 解析目标URL,包含了查询参数 targetURL, err := url.Parse(httpAddress + r.URL.String()) if err != nil { - http.Error(w, "Error parsing target URL", http.StatusInternalServerError) + http.Error(w, err.Error(), http.StatusInternalServerError) return } // 创建新的请求 proxyReq, err := http.NewRequest(r.Method, targetURL.String(), r.Body) if err != nil { - http.Error(w, "Error creating proxy request", http.StatusInternalServerError) + http.Error(w, err.Error(), http.StatusInternalServerError) return } @@ -295,7 +286,7 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac // 发送请求 resp, err := backend.Client.Do(proxyReq) if err != nil { - http.Error(w, "Error sending proxy request", http.StatusInternalServerError) + http.Error(w, err.Error(), http.StatusInternalServerError) return } defer resp.Body.Close() @@ -311,7 +302,7 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac w.WriteHeader(resp.StatusCode) _, err = io.Copy(w, resp.Body) if err != nil { - http.Error(w, "Error copying proxy response", http.StatusInternalServerError) + http.Error(w, err.Error(), http.StatusInternalServerError) return } } From dd6b80ee713039f0aee6c17c77062c9a85e8f7f8 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 11:59:37 +0800 Subject: [PATCH 13/17] fix --- utils/curl/client_resty.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/curl/client_resty.go b/utils/curl/client_resty.go index 022892b1..3221f4ec 100644 --- a/utils/curl/client_resty.go +++ b/utils/curl/client_resty.go @@ -19,8 +19,8 @@ func NewClient(ctx context.Context, c *Config) Client { // 创建一个restry客户端 client := resty.New().SetBaseURL(c.BaseUrl) - // 设置超时时间为 5 分钟 - client.SetTimeout(5 * time.Minute) + // 设置超时时间为 1 分钟 + client.SetTimeout(1 * time.Minute) /* 传输链路 */ tracer := otel.GetTracerProvider().Tracer(trace.TraceName) From 7866a5a369d9bf7953efb1f6f538c8ca1149db18 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 12:03:04 +0800 Subject: [PATCH 14/17] proxyserver --- proxyserver/main.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/proxyserver/main.go b/proxyserver/main.go index 91ffa076..1b0b9f9c 100644 --- a/proxyserver/main.go +++ b/proxyserver/main.go @@ -209,22 +209,22 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac target := url.URL{Scheme: "ws", Host: strings.Split(backend.HttpAddress, "//")[1], Path: r.URL.Path} var transfer = func(src, dest *websocket.Conn) { + defer src.Close() + defer dest.Close() + // TODO: 可以做错误处理 for { mType, msg, err := src.ReadMessage() if err != nil { log.Println(err) - break + return } err = dest.WriteMessage(mType, msg) if err != nil { log.Println(err) - break + return } } - - src.Close() - dest.Close() } header := r.Header.Clone() From 27ae48991c184949fed50e27e24db9c7ecc8cac2 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 12:05:05 +0800 Subject: [PATCH 15/17] fix --- service/repositories/image_handle.go | 5 +++-- utils/curl/client_resty.go | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/service/repositories/image_handle.go b/service/repositories/image_handle.go index acf1f0c2..7fbe4806 100644 --- a/service/repositories/image_handle.go +++ b/service/repositories/image_handle.go @@ -316,8 +316,9 @@ func (l *defaultImageHandle) LogoCombine(ctx context.Context, in *LogoCombineReq var resultBLM constants.BLMServiceUrlResult err = curl.NewClient(ctx, &curl.Config{ - BaseUrl: *l.BLMServiceUrl, - Url: constants.BLMServiceUrlLogoCombine, + BaseUrl: *l.BLMServiceUrl, + Url: constants.BLMServiceUrlLogoCombine, + RequireTimeout: time.Second * 15, }).PostJson(postMap, &resultBLM) logc.Infof(ctx, "合图--算法请求--合图--结束时间:%v", time.Now().UTC()) diff --git a/utils/curl/client_resty.go b/utils/curl/client_resty.go index 3221f4ec..abbfd46f 100644 --- a/utils/curl/client_resty.go +++ b/utils/curl/client_resty.go @@ -19,9 +19,10 @@ func NewClient(ctx context.Context, c *Config) Client { // 创建一个restry客户端 client := resty.New().SetBaseURL(c.BaseUrl) - // 设置超时时间为 1 分钟 - client.SetTimeout(1 * time.Minute) - + // 设置超时时间为 5 分钟 + if c.RequireTimeout == 0 { + client.SetTimeout(5 * time.Minute) + } /* 传输链路 */ tracer := otel.GetTracerProvider().Tracer(trace.TraceName) spanCtx, span := tracer.Start( @@ -60,11 +61,12 @@ func NewClient(ctx context.Context, c *Config) Client { type ( Config struct { - BaseUrl string `json:"base_url"` - Url string `json:"url"` - HeaderData map[string]string `json:"header_data"` - RetryCount int64 `json:"retry_count"` - RetryWaitTime int64 `json:"retry_wait_time"` + BaseUrl string `json:"base_url"` + Url string `json:"url"` + HeaderData map[string]string `json:"header_data"` + RetryCount int64 `json:"retry_count"` + RetryWaitTime int64 `json:"retry_wait_time"` + RequireTimeout time.Duration `json:"require_timeout"` } defaultClient struct { c *Config From 72e75e78585d7f70b680cb6fc66f41f9e738f62e Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 12:05:20 +0800 Subject: [PATCH 16/17] fix --- service/repositories/image_handle.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/repositories/image_handle.go b/service/repositories/image_handle.go index 7fbe4806..3c4f565a 100644 --- a/service/repositories/image_handle.go +++ b/service/repositories/image_handle.go @@ -318,7 +318,7 @@ func (l *defaultImageHandle) LogoCombine(ctx context.Context, in *LogoCombineReq err = curl.NewClient(ctx, &curl.Config{ BaseUrl: *l.BLMServiceUrl, Url: constants.BLMServiceUrlLogoCombine, - RequireTimeout: time.Second * 15, + RequireTimeout: time.Second * 30, }).PostJson(postMap, &resultBLM) logc.Infof(ctx, "合图--算法请求--合图--结束时间:%v", time.Now().UTC()) From c163cfe234d49322a7a1deaa3d8fd17c568af98e Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Fri, 22 Sep 2023 12:09:41 +0800 Subject: [PATCH 17/17] info --- server/info/internal/logic/infologic.go | 44 ++++++++++++++++++++ server/info/internal/logic/infologic_test.go | 10 +---- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/server/info/internal/logic/infologic.go b/server/info/internal/logic/infologic.go index 41bc7a91..b77e0bed 100644 --- a/server/info/internal/logic/infologic.go +++ b/server/info/internal/logic/infologic.go @@ -6,6 +6,7 @@ import ( "fusenapi/utils/auth" "fusenapi/utils/basic" "fusenapi/utils/check" + "log" "strings" "context" @@ -82,6 +83,26 @@ func (mquery *ModuleQuery) EncodeEmpty() map[string]any { return qstr } +func QueryDefault(conn *gorm.DB, module string, moduleQuery string, tname string) map[string]any { + + qname := strings.Split(moduleQuery, ".") + queryAsName := qname[len(qname)-1] + sqlstr := fmt.Sprintf( + "select JSON_EXTRACT(metadata,'$.%s') as %s from %s where module = '%s' and user_id = 0 and guest_id = 0 order by ctime DESC limit 1", + moduleQuery, // logo_selected + queryAsName, // logo_selected + tname, // fs_user_info + module, // profile + ) + raw := conn.Raw(sqlstr) + var info map[string]any + err := raw.Scan(&info).Error + if err == gorm.ErrRecordNotFound { + logx.Error(err) + } + return info +} + func (l *InfoLogic) Info(req *types.UserInfoRequest, userinfo *auth.UserInfo) (resp *basic.Response) { // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) // userinfo 传入值时, 一定不为null @@ -178,6 +199,29 @@ func (l *InfoLogic) Info(req *types.UserInfoRequest, userinfo *auth.UserInfo) (r } } + // 隐含白板用户逻辑 + if v, ok := metadict["userinfo.profile"]; ok { + + if v == nil { + info := QueryDefault(l.svcCtx.MysqlConn, "profile", "logo_selected", "fs_user_info") + log.Println(info) + metadict["userinfo.profile"] = info + // log.Println(metadict) + } else { + profileDict := v.(map[string]any) + if _, ok := profileDict["logo_selected"]; !ok { + info := QueryDefault(l.svcCtx.MysqlConn, "profile", "logo_selected", "fs_user_info") + profileDict["logo_selected"] = info["logo_selected"] + } + } + + } else if v, ok := metadict["userinfo.profile.logo_selected"]; ok { + if v == nil { + info := QueryDefault(l.svcCtx.MysqlConn, "profile", "logo_selected", "fs_user_info") + metadict["userinfo.profile.logo_selected"] = info + } + } + return resp.SetStatus(basic.CodeOK, metadict) } diff --git a/server/info/internal/logic/infologic_test.go b/server/info/internal/logic/infologic_test.go index c6b32168..ec0e1d05 100644 --- a/server/info/internal/logic/infologic_test.go +++ b/server/info/internal/logic/infologic_test.go @@ -115,9 +115,7 @@ func TestMain(t *testing.T) { if v, ok := metadict["userinfo.profile"]; ok { if v == nil { - info := QueryDefault(conn, "profile", "logo_selected", "fs_user_info") - log.Println(info) metadict["userinfo.profile"] = info // log.Println(metadict) } else { @@ -126,19 +124,15 @@ func TestMain(t *testing.T) { info := QueryDefault(conn, "profile", "logo_selected", "fs_user_info") profileDict["logo_selected"] = info["logo_selected"] } - } } else if v, ok := metadict["userinfo.profile.logo_selected"]; ok { if v == nil { - + info := QueryDefault(conn, "profile", "logo_selected", "fs_user_info") + metadict["userinfo.profile.logo_selected"] = info } } - log.Println(metadict) - - return - } func QueryDefault(conn *gorm.DB, module string, moduleQuery string, tname string) map[string]any {