Merge pull request #51 from IceWhaleTech/dev

update app.go
This commit is contained in:
link 2021-12-10 17:14:46 +08:00 committed by GitHub
commit f292edd2ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -5,7 +5,6 @@ import (
"encoding/json" "encoding/json"
"io" "io"
"io/ioutil" "io/ioutil"
"reflect"
"runtime" "runtime"
"strings" "strings"
"sync" "sync"
@ -241,7 +240,7 @@ func (a *appStruct) RemoveContainerById(id string) {
a.db.Table(model2.CONTAINERTABLENAME).Where("custom_id = ?", id).Delete(&model2.AppListDBModel{}) a.db.Table(model2.CONTAINERTABLENAME).Where("custom_id = ?", id).Delete(&model2.AppListDBModel{})
} }
var dataStr map[string]model.DockerStatsModel var dataStats sync.Map
var isFinish bool = false var isFinish bool = false
@ -273,21 +272,16 @@ func (a *appStruct) GetHardwareUsage() []model.DockerStatsModel {
runtime.Gosched() runtime.Gosched()
} }
list := []model.DockerStatsModel{} list := []model.DockerStatsModel{}
for _, v := range dataStr {
list = append(list, v)
}
dataStats.Range(func(key, value interface{}) bool {
list = append(list, value.(model.DockerStatsModel))
return true
})
return list return list
} }
func (a *appStruct) GetHardwareUsageSteam() { func (a *appStruct) GetHardwareUsageSteam() {
var lock = &sync.Mutex{}
if len(dataStr) == 0 {
lock.Lock()
dataStr = make(map[string]model.DockerStatsModel)
lock.Unlock()
}
cli, err := client2.NewClientWithOpts(client2.FromEnv) cli, err := client2.NewClientWithOpts(client2.FromEnv)
if err != nil { if err != nil {
@ -305,20 +299,19 @@ func (a *appStruct) GetHardwareUsageSteam() {
lm = []model2.AppListDBModel{} lm = []model2.AppListDBModel{}
config.CasaOSGlobalVariables.AppChange = false config.CasaOSGlobalVariables.AppChange = false
a.db.Table(model2.CONTAINERTABLENAME).Select("label,title,icon,container_id").Where("origin != ?", "system").Find(&lm) a.db.Table(model2.CONTAINERTABLENAME).Select("label,title,icon,container_id").Where("origin != ?", "system").Find(&lm)
dataApps := dataStr dataApps := dataStats
lock.Lock()
dataStr = make(map[string]model.DockerStatsModel)
for _, v := range lm { for _, v := range lm {
if !reflect.DeepEqual(dataApps[v.ContainerId], model.DockerStatsModel{}) { dataStats.Delete(v.ContainerId)
dataStr[v.ContainerId] = dataApps[v.ContainerId] m, _ := dataApps.Load(v.ContainerId)
if m != nil {
dataStats.Store(v.ContainerId, m)
} }
} }
lock.Unlock()
} }
var wg sync.WaitGroup var wg sync.WaitGroup
for _, v := range lm { for _, v := range lm {
wg.Add(1) wg.Add(1)
go func(v model2.AppListDBModel, lock *sync.Mutex, i int) { go func(v model2.AppListDBModel, i int) {
defer wg.Done() defer wg.Done()
stats, err := cli.ContainerStats(ctx, v.ContainerId, true) stats, err := cli.ContainerStats(ctx, v.ContainerId, true)
if err != nil { if err != nil {
@ -329,9 +322,11 @@ func (a *appStruct) GetHardwareUsageSteam() {
if err := decode.Decode(&data); err == io.EOF { if err := decode.Decode(&data); err == io.EOF {
return return
} }
lock.Lock() m, _ := dataStats.Load(v.ContainerId)
dockerStats := model.DockerStatsModel{} dockerStats := model.DockerStatsModel{}
dockerStats.Pre = dataStr[v.ContainerId].Data if m != nil {
dockerStats.Pre = m.(model.DockerStatsModel).Data
}
dockerStats.Data = data dockerStats.Data = data
dockerStats.Icon = v.Icon dockerStats.Icon = v.Icon
if len(v.Label) > 0 { if len(v.Label) > 0 {
@ -339,12 +334,11 @@ func (a *appStruct) GetHardwareUsageSteam() {
} else { } else {
dockerStats.Title = v.Title dockerStats.Title = v.Title
} }
dataStr[v.ContainerId] = dockerStats dataStats.Store(v.ContainerId, dockerStats)
lock.Unlock()
if i == 99 { if i == 99 {
stats.Body.Close() stats.Body.Close()
} }
}(v, lock, i) }(v, i)
} }
wg.Wait() wg.Wait()
isFinish = true isFinish = true