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() + } } }