From d9d27f934f097945f256067d0688dac3f3e04c83 Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Wed, 4 Oct 2023 10:06:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=BD=9C=E5=9C=A8?= =?UTF-8?q?=E7=9A=84=E5=86=85=E5=AD=98=E6=B3=84=E9=9C=B2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data_core_v1_get_docker_monitor_sse.go | 15 ++++---- .../data_core_v1_get_home_data_sse.go | 15 ++++---- .../data_core_v1_get_network_data_sse.go | 38 +++++++------------ .../data_core_v1_get_uptime_data_sse.go | 14 +++---- .../data_core_v1_get_xui_data_sse.go | 25 +++++++----- 5 files changed, 52 insertions(+), 55 deletions(-) diff --git a/internal/controller/data_core/data_core_v1_get_docker_monitor_sse.go b/internal/controller/data_core/data_core_v1_get_docker_monitor_sse.go index 0b3d346..f8c2b3a 100644 --- a/internal/controller/data_core/data_core_v1_get_docker_monitor_sse.go +++ b/internal/controller/data_core/data_core_v1_get_docker_monitor_sse.go @@ -5,13 +5,14 @@ import ( "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcache" + "github.com/gogf/gf/v2/os/glog" "home-network-watcher/manifest" "time" "home-network-watcher/api/data_core/v1" ) -func (c *ControllerV1) GetDockerMonitorSSE(ctx context.Context, _ *v1.GetDockerMonitorSSEReq) (res *v1.GetDockerMonitorSSERes, err error) { +func (c *ControllerV1) GetDockerMonitorSSE(ctx context.Context, _ *v1.GetDockerMonitorSSEReq) (_ *v1.GetDockerMonitorSSERes, err error) { request := g.RequestFromCtx(ctx) request.Response.Header().Set("Content-Type", "text/event-stream") request.Response.Header().Set("Cache-Control", "no-cache") @@ -21,19 +22,19 @@ func (c *ControllerV1) GetDockerMonitorSSE(ctx context.Context, _ *v1.GetDockerM for { // 从缓存中获取数据 - dockerData, err := gcache.Get(ctx, manifest.DockerMonitorCacheKey) - if err != nil { - return nil, err - } - res = &v1.GetDockerMonitorSSERes{DockerData: dockerData} + dockerData := gcache.MustGet(ctx, manifest.DockerMonitorCacheKey) + resJson := gjson.New(&v1.GetDockerMonitorSSERes{DockerData: dockerData}).MustToJsonString() + // 发送数据 - request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n") + request.Response.Writefln("data: " + resJson + "\n") request.Response.Flush() // 等待10秒或者上下文取消 select { case <-time.After(10 * time.Second): case <-ctx.Done(): + glog.Info(ctx, "GetDockerMonitorSSE: ctx.Done()") + request.ExitAll() return nil, ctx.Err() } } diff --git a/internal/controller/data_core/data_core_v1_get_home_data_sse.go b/internal/controller/data_core/data_core_v1_get_home_data_sse.go index 0457954..b19b8e6 100644 --- a/internal/controller/data_core/data_core_v1_get_home_data_sse.go +++ b/internal/controller/data_core/data_core_v1_get_home_data_sse.go @@ -5,12 +5,13 @@ import ( "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcache" + "github.com/gogf/gf/v2/os/glog" "home-network-watcher/api/data_core/v1" "home-network-watcher/manifest" "time" ) -func (c *ControllerV1) GetHomeDataSSE(ctx context.Context, _ *v1.GetHomeDataSSEReq) (res *v1.GetHomeDataSSERes, err error) { +func (c *ControllerV1) GetHomeDataSSE(ctx context.Context, _ *v1.GetHomeDataSSEReq) (_ *v1.GetHomeDataSSERes, err error) { request := g.RequestFromCtx(ctx) request.Response.Header().Set("Content-Type", "text/event-stream") request.Response.Header().Set("Cache-Control", "no-cache") @@ -20,19 +21,19 @@ func (c *ControllerV1) GetHomeDataSSE(ctx context.Context, _ *v1.GetHomeDataSSER for { // 从缓存中获取数据 - homeData, err := gcache.Get(ctx, manifest.HaEntitiesCacheKey) - if err != nil { - return nil, err - } - res = &v1.GetHomeDataSSERes{HomeData: homeData} + homeData := gcache.MustGet(ctx, manifest.HaEntitiesCacheKey) + resJson := gjson.New(&v1.GetHomeDataSSERes{HomeData: homeData}).MustToJsonString() + // 发送数据 - request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n") + request.Response.Writefln("data: " + resJson + "\n") request.Response.Flush() // 等待1秒或者上下文取消 select { case <-time.After(1 * time.Second): case <-ctx.Done(): + glog.Info(ctx, "GetHomeDataSSE: ctx.Done()") + request.ExitAll() return nil, ctx.Err() } } diff --git a/internal/controller/data_core/data_core_v1_get_network_data_sse.go b/internal/controller/data_core/data_core_v1_get_network_data_sse.go index 6c8f5ef..0dc8ce0 100644 --- a/internal/controller/data_core/data_core_v1_get_network_data_sse.go +++ b/internal/controller/data_core/data_core_v1_get_network_data_sse.go @@ -5,13 +5,14 @@ import ( "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcache" + "github.com/gogf/gf/v2/os/glog" "home-network-watcher/manifest" "time" "home-network-watcher/api/data_core/v1" ) -func (c *ControllerV1) GetNetworkDataSSE(ctx context.Context, _ *v1.GetNetworkDataSSEReq) (res *v1.GetNetworkDataSSERes, err error) { +func (c *ControllerV1) GetNetworkDataSSE(ctx context.Context, _ *v1.GetNetworkDataSSEReq) (_ *v1.GetNetworkDataSSERes, err error) { request := g.RequestFromCtx(ctx) request.Response.Header().Set("Content-Type", "text/event-stream") request.Response.Header().Set("Cache-Control", "no-cache") @@ -21,41 +22,30 @@ func (c *ControllerV1) GetNetworkDataSSE(ctx context.Context, _ *v1.GetNetworkDa for { // 从缓存中获取数据 - nodeInfo, err := gcache.Get(ctx, manifest.ProxyNodeCacheKey) - if err != nil { - return nil, err - } - homeNetwork, err := gcache.Get(ctx, manifest.HomeNetworkCacheKey) - if err != nil { - return nil, err - } - proxyNetwork, err := gcache.Get(ctx, manifest.ProxyNetworkCacheKey) - if err != nil { - return nil, err - } - coffeeInfo, err := gcache.Get(ctx, manifest.ProxySubscribeCacheKey) - if err != nil { - return nil, err - } - serverInfo, err := gcache.Get(ctx, manifest.ServerDataCacheKey) - if err != nil { - return nil, err - } - res = &v1.GetNetworkDataSSERes{ + nodeInfo := gcache.MustGet(ctx, manifest.ProxyNodeCacheKey) + homeNetwork := gcache.MustGet(ctx, manifest.HomeNetworkCacheKey) + proxyNetwork := gcache.MustGet(ctx, manifest.ProxyNetworkCacheKey) + coffeeInfo := gcache.MustGet(ctx, manifest.ProxySubscribeCacheKey) + serverInfo := gcache.MustGet(ctx, manifest.ServerDataCacheKey) + + resJson := gjson.New(&v1.GetNetworkDataSSERes{ NodeInfo: nodeInfo, HomeNetwork: homeNetwork, ProxyNetwork: proxyNetwork, CoffeeInfo: coffeeInfo, ServerInfo: serverInfo, - } + }).MustToJsonString() + // 发送数据 - request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n") + request.Response.Writefln("data: " + resJson + "\n") request.Response.Flush() // 等待1秒或者上下文取消 select { case <-time.After(1 * time.Second): case <-ctx.Done(): + glog.Info(ctx, "GetNetworkDataSSE: ctx.Done()") + request.ExitAll() return nil, ctx.Err() } } diff --git a/internal/controller/data_core/data_core_v1_get_uptime_data_sse.go b/internal/controller/data_core/data_core_v1_get_uptime_data_sse.go index 3a7d838..a6b0023 100644 --- a/internal/controller/data_core/data_core_v1_get_uptime_data_sse.go +++ b/internal/controller/data_core/data_core_v1_get_uptime_data_sse.go @@ -5,12 +5,13 @@ import ( "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcache" + "github.com/gogf/gf/v2/os/glog" "home-network-watcher/api/data_core/v1" "home-network-watcher/manifest" "time" ) -func (c *ControllerV1) GetUptimeDataSSE(ctx context.Context, _ *v1.GetUptimeDataSSEReq) (res *v1.GetUptimeDataSSERes, err error) { +func (c *ControllerV1) GetUptimeDataSSE(ctx context.Context, _ *v1.GetUptimeDataSSEReq) (_ *v1.GetUptimeDataSSERes, err error) { request := g.RequestFromCtx(ctx) request.Response.Header().Set("Content-Type", "text/event-stream") request.Response.Header().Set("Cache-Control", "no-cache") @@ -20,19 +21,18 @@ func (c *ControllerV1) GetUptimeDataSSE(ctx context.Context, _ *v1.GetUptimeData for { // 从缓存中获取数据 - uptimeData, err := gcache.Get(ctx, manifest.UptimeCacheKey) - if err != nil { - return nil, err - } - res = &v1.GetUptimeDataSSERes{UptimeData: uptimeData} + uptimeData := gcache.MustGet(ctx, manifest.UptimeCacheKey) + resJson := gjson.New(&v1.GetUptimeDataSSERes{UptimeData: uptimeData}).MustToJsonString() // 发送数据 - request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n") + request.Response.Writefln("data: " + resJson + "\n") request.Response.Flush() // 等待10秒或者上下文取消 select { case <-time.After(10 * time.Second): case <-ctx.Done(): + glog.Info(ctx, "GetUptimeDataSSE: ctx.Done()") + request.ExitAll() return nil, ctx.Err() } } diff --git a/internal/controller/data_core/data_core_v1_get_xui_data_sse.go b/internal/controller/data_core/data_core_v1_get_xui_data_sse.go index e956011..2111b34 100644 --- a/internal/controller/data_core/data_core_v1_get_xui_data_sse.go +++ b/internal/controller/data_core/data_core_v1_get_xui_data_sse.go @@ -5,13 +5,13 @@ import ( "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcache" + "github.com/gogf/gf/v2/os/glog" + "home-network-watcher/api/data_core/v1" "home-network-watcher/manifest" "time" - - "home-network-watcher/api/data_core/v1" ) -func (c *ControllerV1) GetXuiDataSSE(ctx context.Context, _ *v1.GetXuiDataSSEReq) (res *v1.GetXuiDataSSERes, err error) { +func (c *ControllerV1) GetXuiDataSSE(ctx context.Context, _ *v1.GetXuiDataSSEReq) (_ *v1.GetXuiDataSSERes, err error) { request := g.RequestFromCtx(ctx) request.Response.Header().Set("Content-Type", "text/event-stream") request.Response.Header().Set("Cache-Control", "no-cache") @@ -21,15 +21,20 @@ func (c *ControllerV1) GetXuiDataSSE(ctx context.Context, _ *v1.GetXuiDataSSEReq for { // 从缓存中获取数据 - xuiData, err := gcache.Get(context.Background(), manifest.XUIUserListCacheKey) - if err != nil { - return nil, err - } - res = &v1.GetXuiDataSSERes{XuiData: xuiData} + xuiData := gcache.MustGet(context.Background(), manifest.XUIUserListCacheKey) + resJson := gjson.New(&v1.GetXuiDataSSERes{XuiData: xuiData}).MustToJsonString() // 发送数据 - request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n") + request.Response.Writefln("data: " + resJson + "\n") request.Response.Flush() - time.Sleep(5 * time.Second) + + // 等待1秒或者上下文取消 + select { + case <-time.After(1 * time.Second): + case <-ctx.Done(): + glog.Info(ctx, "GetXuiDataSSE: ctx.Done()") + request.ExitAll() + return nil, ctx.Err() + } } }