mirror of
https://github.com/hamster1963/HomeDash-Backend.git
synced 2025-06-16 20:21:23 +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/encoding/gjson"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/os/gcache"
|
"github.com/gogf/gf/v2/os/gcache"
|
||||||
|
"github.com/gogf/gf/v2/os/glog"
|
||||||
"home-network-watcher/manifest"
|
"home-network-watcher/manifest"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"home-network-watcher/api/data_core/v1"
|
"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 := g.RequestFromCtx(ctx)
|
||||||
request.Response.Header().Set("Content-Type", "text/event-stream")
|
request.Response.Header().Set("Content-Type", "text/event-stream")
|
||||||
request.Response.Header().Set("Cache-Control", "no-cache")
|
request.Response.Header().Set("Cache-Control", "no-cache")
|
||||||
@ -21,19 +22,19 @@ func (c *ControllerV1) GetDockerMonitorSSE(ctx context.Context, _ *v1.GetDockerM
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
// 从缓存中获取数据
|
// 从缓存中获取数据
|
||||||
dockerData, err := gcache.Get(ctx, manifest.DockerMonitorCacheKey)
|
dockerData := gcache.MustGet(ctx, manifest.DockerMonitorCacheKey)
|
||||||
if err != nil {
|
resJson := gjson.New(&v1.GetDockerMonitorSSERes{DockerData: dockerData}).MustToJsonString()
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
res = &v1.GetDockerMonitorSSERes{DockerData: dockerData}
|
|
||||||
// 发送数据
|
// 发送数据
|
||||||
request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n")
|
request.Response.Writefln("data: " + resJson + "\n")
|
||||||
request.Response.Flush()
|
request.Response.Flush()
|
||||||
|
|
||||||
// 等待10秒或者上下文取消
|
// 等待10秒或者上下文取消
|
||||||
select {
|
select {
|
||||||
case <-time.After(10 * time.Second):
|
case <-time.After(10 * time.Second):
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
glog.Info(ctx, "GetDockerMonitorSSE: ctx.Done()")
|
||||||
|
request.ExitAll()
|
||||||
return nil, ctx.Err()
|
return nil, ctx.Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,13 @@ import (
|
|||||||
"github.com/gogf/gf/v2/encoding/gjson"
|
"github.com/gogf/gf/v2/encoding/gjson"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/os/gcache"
|
"github.com/gogf/gf/v2/os/gcache"
|
||||||
|
"github.com/gogf/gf/v2/os/glog"
|
||||||
"home-network-watcher/api/data_core/v1"
|
"home-network-watcher/api/data_core/v1"
|
||||||
"home-network-watcher/manifest"
|
"home-network-watcher/manifest"
|
||||||
"time"
|
"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 := g.RequestFromCtx(ctx)
|
||||||
request.Response.Header().Set("Content-Type", "text/event-stream")
|
request.Response.Header().Set("Content-Type", "text/event-stream")
|
||||||
request.Response.Header().Set("Cache-Control", "no-cache")
|
request.Response.Header().Set("Cache-Control", "no-cache")
|
||||||
@ -20,19 +21,19 @@ func (c *ControllerV1) GetHomeDataSSE(ctx context.Context, _ *v1.GetHomeDataSSER
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
// 从缓存中获取数据
|
// 从缓存中获取数据
|
||||||
homeData, err := gcache.Get(ctx, manifest.HaEntitiesCacheKey)
|
homeData := gcache.MustGet(ctx, manifest.HaEntitiesCacheKey)
|
||||||
if err != nil {
|
resJson := gjson.New(&v1.GetHomeDataSSERes{HomeData: homeData}).MustToJsonString()
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
res = &v1.GetHomeDataSSERes{HomeData: homeData}
|
|
||||||
// 发送数据
|
// 发送数据
|
||||||
request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n")
|
request.Response.Writefln("data: " + resJson + "\n")
|
||||||
request.Response.Flush()
|
request.Response.Flush()
|
||||||
|
|
||||||
// 等待1秒或者上下文取消
|
// 等待1秒或者上下文取消
|
||||||
select {
|
select {
|
||||||
case <-time.After(1 * time.Second):
|
case <-time.After(1 * time.Second):
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
glog.Info(ctx, "GetHomeDataSSE: ctx.Done()")
|
||||||
|
request.ExitAll()
|
||||||
return nil, ctx.Err()
|
return nil, ctx.Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,14 @@ import (
|
|||||||
"github.com/gogf/gf/v2/encoding/gjson"
|
"github.com/gogf/gf/v2/encoding/gjson"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/os/gcache"
|
"github.com/gogf/gf/v2/os/gcache"
|
||||||
|
"github.com/gogf/gf/v2/os/glog"
|
||||||
"home-network-watcher/manifest"
|
"home-network-watcher/manifest"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"home-network-watcher/api/data_core/v1"
|
"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 := g.RequestFromCtx(ctx)
|
||||||
request.Response.Header().Set("Content-Type", "text/event-stream")
|
request.Response.Header().Set("Content-Type", "text/event-stream")
|
||||||
request.Response.Header().Set("Cache-Control", "no-cache")
|
request.Response.Header().Set("Cache-Control", "no-cache")
|
||||||
@ -21,41 +22,30 @@ func (c *ControllerV1) GetNetworkDataSSE(ctx context.Context, _ *v1.GetNetworkDa
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
// 从缓存中获取数据
|
// 从缓存中获取数据
|
||||||
nodeInfo, err := gcache.Get(ctx, manifest.ProxyNodeCacheKey)
|
nodeInfo := gcache.MustGet(ctx, manifest.ProxyNodeCacheKey)
|
||||||
if err != nil {
|
homeNetwork := gcache.MustGet(ctx, manifest.HomeNetworkCacheKey)
|
||||||
return nil, err
|
proxyNetwork := gcache.MustGet(ctx, manifest.ProxyNetworkCacheKey)
|
||||||
}
|
coffeeInfo := gcache.MustGet(ctx, manifest.ProxySubscribeCacheKey)
|
||||||
homeNetwork, err := gcache.Get(ctx, manifest.HomeNetworkCacheKey)
|
serverInfo := gcache.MustGet(ctx, manifest.ServerDataCacheKey)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
resJson := gjson.New(&v1.GetNetworkDataSSERes{
|
||||||
}
|
|
||||||
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: nodeInfo,
|
NodeInfo: nodeInfo,
|
||||||
HomeNetwork: homeNetwork,
|
HomeNetwork: homeNetwork,
|
||||||
ProxyNetwork: proxyNetwork,
|
ProxyNetwork: proxyNetwork,
|
||||||
CoffeeInfo: coffeeInfo,
|
CoffeeInfo: coffeeInfo,
|
||||||
ServerInfo: serverInfo,
|
ServerInfo: serverInfo,
|
||||||
}
|
}).MustToJsonString()
|
||||||
|
|
||||||
// 发送数据
|
// 发送数据
|
||||||
request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n")
|
request.Response.Writefln("data: " + resJson + "\n")
|
||||||
request.Response.Flush()
|
request.Response.Flush()
|
||||||
|
|
||||||
// 等待1秒或者上下文取消
|
// 等待1秒或者上下文取消
|
||||||
select {
|
select {
|
||||||
case <-time.After(1 * time.Second):
|
case <-time.After(1 * time.Second):
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
glog.Info(ctx, "GetNetworkDataSSE: ctx.Done()")
|
||||||
|
request.ExitAll()
|
||||||
return nil, ctx.Err()
|
return nil, ctx.Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,13 @@ import (
|
|||||||
"github.com/gogf/gf/v2/encoding/gjson"
|
"github.com/gogf/gf/v2/encoding/gjson"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/os/gcache"
|
"github.com/gogf/gf/v2/os/gcache"
|
||||||
|
"github.com/gogf/gf/v2/os/glog"
|
||||||
"home-network-watcher/api/data_core/v1"
|
"home-network-watcher/api/data_core/v1"
|
||||||
"home-network-watcher/manifest"
|
"home-network-watcher/manifest"
|
||||||
"time"
|
"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 := g.RequestFromCtx(ctx)
|
||||||
request.Response.Header().Set("Content-Type", "text/event-stream")
|
request.Response.Header().Set("Content-Type", "text/event-stream")
|
||||||
request.Response.Header().Set("Cache-Control", "no-cache")
|
request.Response.Header().Set("Cache-Control", "no-cache")
|
||||||
@ -20,19 +21,18 @@ func (c *ControllerV1) GetUptimeDataSSE(ctx context.Context, _ *v1.GetUptimeData
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
// 从缓存中获取数据
|
// 从缓存中获取数据
|
||||||
uptimeData, err := gcache.Get(ctx, manifest.UptimeCacheKey)
|
uptimeData := gcache.MustGet(ctx, manifest.UptimeCacheKey)
|
||||||
if err != nil {
|
resJson := gjson.New(&v1.GetUptimeDataSSERes{UptimeData: uptimeData}).MustToJsonString()
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
res = &v1.GetUptimeDataSSERes{UptimeData: uptimeData}
|
|
||||||
// 发送数据
|
// 发送数据
|
||||||
request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n")
|
request.Response.Writefln("data: " + resJson + "\n")
|
||||||
request.Response.Flush()
|
request.Response.Flush()
|
||||||
|
|
||||||
// 等待10秒或者上下文取消
|
// 等待10秒或者上下文取消
|
||||||
select {
|
select {
|
||||||
case <-time.After(10 * time.Second):
|
case <-time.After(10 * time.Second):
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
glog.Info(ctx, "GetUptimeDataSSE: ctx.Done()")
|
||||||
|
request.ExitAll()
|
||||||
return nil, ctx.Err()
|
return nil, ctx.Err()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,13 @@ import (
|
|||||||
"github.com/gogf/gf/v2/encoding/gjson"
|
"github.com/gogf/gf/v2/encoding/gjson"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/os/gcache"
|
"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"
|
"home-network-watcher/manifest"
|
||||||
"time"
|
"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 := g.RequestFromCtx(ctx)
|
||||||
request.Response.Header().Set("Content-Type", "text/event-stream")
|
request.Response.Header().Set("Content-Type", "text/event-stream")
|
||||||
request.Response.Header().Set("Cache-Control", "no-cache")
|
request.Response.Header().Set("Cache-Control", "no-cache")
|
||||||
@ -21,15 +21,20 @@ func (c *ControllerV1) GetXuiDataSSE(ctx context.Context, _ *v1.GetXuiDataSSEReq
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
// 从缓存中获取数据
|
// 从缓存中获取数据
|
||||||
xuiData, err := gcache.Get(context.Background(), manifest.XUIUserListCacheKey)
|
xuiData := gcache.MustGet(context.Background(), manifest.XUIUserListCacheKey)
|
||||||
if err != nil {
|
resJson := gjson.New(&v1.GetXuiDataSSERes{XuiData: xuiData}).MustToJsonString()
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
res = &v1.GetXuiDataSSERes{XuiData: xuiData}
|
|
||||||
// 发送数据
|
// 发送数据
|
||||||
request.Response.Writefln("data: " + gjson.New(res).MustToJsonString() + "\n")
|
request.Response.Writefln("data: " + resJson + "\n")
|
||||||
request.Response.Flush()
|
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