mirror of
https://github.com/hamster1963/HomeDash-Backend.git
synced 2025-06-16 12:11:22 +08:00
fix: 修复潜在的内存泄露问题
This commit is contained in:
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user