Skip to content

Commit cbb8eea

Browse files
felribbedward
andauthored
Feat: Parallelism for process (#20)
* cpu: avoid hitting gpu hwmom sensors in polling refactor: workers for data collection refactor: improve CPU info retrieval and testing for core usage * refactor: update CPU polling interval to improve accuracy in usage metrics * refactor: enhance CPU temperature retrieval logic to improve accuracy and avoid GPU sensor interference * fix: lint * refactor: improve concurrency handling * fix: lint --------- Co-authored-by: bbedward <bbedward@gmail.com>
1 parent 0afebac commit cbb8eea

7 files changed

Lines changed: 239 additions & 137 deletions

File tree

api/gops/meta.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (self *HandlerGroup) Meta(ctx context.Context, input *MetaInput) (*MetaResp
5757
DiskRateCursor: input.DiskRateCursor,
5858
}
5959

60-
metaInfo, err := self.srv.Gops.GetMeta(modules, params)
60+
metaInfo, err := self.srv.Gops.GetMeta(ctx, modules, params)
6161
if err != nil {
6262
log.Error("Error getting meta info")
6363
return nil, huma.Error400BadRequest(err.Error())

cmd/cli/commands.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"context"
45
"fmt"
56
"strconv"
67
"strings"
@@ -279,7 +280,7 @@ func runMetaCommand(gopsUtil *gops.GopsUtil) error {
279280
DiskRateCursor: diskRateCursor,
280281
}
281282

282-
metaInfo, err := gopsUtil.GetMeta(metaModules, params)
283+
metaInfo, err := gopsUtil.GetMeta(context.Background(), metaModules, params)
283284
if err != nil {
284285
return fmt.Errorf("failed to get meta info: %w", err)
285286
}

cmd/cli/tui/data.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package tui
22

33
import (
4+
"context"
5+
46
"github.com/AvengeMedia/dgop/gops"
57
"github.com/AvengeMedia/dgop/models"
68
tea "github.com/charmbracelet/bubbletea"
@@ -45,7 +47,7 @@ func (m *ResponsiveTUIModel) fetchData() tea.Cmd {
4547
}
4648

4749
modules := []string{"cpu", "memory", "system", "processes"}
48-
metrics, err := m.gops.GetMeta(modules, params)
50+
metrics, err := m.gops.GetMeta(context.Background(), modules, params)
4951

5052
if err != nil {
5153
return fetchDataMsg{err: err, generation: generation}

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ require (
2020
github.com/spf13/cobra v1.10.2
2121
github.com/stretchr/testify v1.11.1
2222
golang.org/x/net v0.48.0
23+
golang.org/x/sync v0.19.0
2324
)
2425

2526
require (

go.sum

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,20 @@ github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u
88
github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg=
99
github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw=
1010
github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4=
11-
github.com/charmbracelet/colorprofile v0.3.3 h1:DjJzJtLP6/NZ8p7Cgjno0CKGr7wwRJGxWUwh2IyhfAI=
12-
github.com/charmbracelet/colorprofile v0.3.3/go.mod h1:nB1FugsAbzq284eJcjfah2nhdSLppN2NqvfotkfRYP4=
1311
github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco3ej+ngLk1kk=
1412
github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk=
1513
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
1614
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
1715
github.com/charmbracelet/log v0.4.2 h1:hYt8Qj6a8yLnvR+h7MwsJv/XvmBJXiueUcI3cIxsyig=
1816
github.com/charmbracelet/log v0.4.2/go.mod h1:qifHGX/tc7eluv2R6pWIpyHDDrrb/AG71Pf2ysQu5nw=
19-
github.com/charmbracelet/x/ansi v0.10.3 h1:3WoV9XN8uMEnFRZZ+vBPRy59TaIWa+gJodS4Vg5Fut0=
20-
github.com/charmbracelet/x/ansi v0.10.3/go.mod h1:uQt8bOrq/xgXjlGcFMc8U2WYbnxyjrKhnvTQluvfCaE=
2117
github.com/charmbracelet/x/ansi v0.11.3 h1:6DcVaqWI82BBVM/atTyq6yBoRLZFBsnoDoX9GCu2YOI=
2218
github.com/charmbracelet/x/ansi v0.11.3/go.mod h1:yI7Zslym9tCJcedxz5+WBq+eUGMJT0bM06Fqy1/Y4dI=
23-
github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
24-
github.com/charmbracelet/x/cellbuf v0.0.13/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
2519
github.com/charmbracelet/x/cellbuf v0.0.14 h1:iUEMryGyFTelKW3THW4+FfPgi4fkmKnnaLOXuc+/Kj4=
2620
github.com/charmbracelet/x/cellbuf v0.0.14/go.mod h1:P447lJl49ywBbil/KjCk2HexGh4tEY9LH0/1QrZZ9rA=
2721
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ=
2822
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
2923
github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
3024
github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
31-
github.com/clipperhouse/displaywidth v0.4.1 h1:uVw9V8UDfnggg3K2U84VWY1YLQ/x2aKSCtkRyYozfoU=
32-
github.com/clipperhouse/displaywidth v0.4.1/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o=
33-
github.com/clipperhouse/displaywidth v0.6.2 h1:ZDpTkFfpHOKte4RG5O/BOyf3ysnvFswpyYrV7z2uAKo=
34-
github.com/clipperhouse/displaywidth v0.6.2/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o=
3525
github.com/clipperhouse/displaywidth v0.7.0 h1:QNv1GYsnLX9QBrcWUtMlogpTXuM5FVnBwKWp1O5NwmE=
3626
github.com/clipperhouse/displaywidth v0.7.0/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o=
3727
github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs=
@@ -94,63 +84,39 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc
9484
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
9585
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
9686
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
97-
github.com/shirou/gopsutil/v4 v4.25.10 h1:at8lk/5T1OgtuCp+AwrDofFRjnvosn0nkN2OLQ6g8tA=
98-
github.com/shirou/gopsutil/v4 v4.25.10/go.mod h1:+kSwyC8DRUD9XXEHCAFjK+0nuArFJM0lva+StQAcskM=
99-
github.com/shirou/gopsutil/v4 v4.25.11 h1:X53gB7muL9Gnwwo2evPSE+SfOrltMoR6V3xJAXZILTY=
100-
github.com/shirou/gopsutil/v4 v4.25.11/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
10187
github.com/shirou/gopsutil/v4 v4.25.12 h1:e7PvW/0RmJ8p8vPGJH4jvNkOyLmbkXgXW4m6ZPic6CY=
10288
github.com/shirou/gopsutil/v4 v4.25.12/go.mod h1:EivAfP5x2EhLp2ovdpKSozecVXn1TmuG7SMzs/Wh4PU=
103-
github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
104-
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
10589
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
10690
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
10791
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
10892
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
10993
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
110-
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
111-
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
11294
github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
11395
github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
11496
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
11597
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
116-
github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4=
117-
github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4=
11898
github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA=
11999
github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI=
120-
github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso=
121-
github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ=
122100
github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw=
123101
github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ=
124102
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
125103
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
126104
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
127105
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
128106
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
129-
golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY=
130-
golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
131-
golang.org/x/exp v0.0.0-20251209150349-8475f28825e9 h1:MDfG8Cvcqlt9XXrmEiD4epKn7VJHZO84hejP9Jmp0MM=
132-
golang.org/x/exp v0.0.0-20251209150349-8475f28825e9/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
133107
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0=
134108
golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
135-
golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
136-
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
137109
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
138110
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
111+
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
112+
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
139113
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
140114
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
141115
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
142116
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
143117
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
144-
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
145-
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
146-
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
147-
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
148118
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
149119
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
150-
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
151-
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
152-
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
153-
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
154120
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
155121
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
156122
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

gops/meta.go

Lines changed: 123 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package gops
22

33
import (
4+
"context"
45
"fmt"
56
"strings"
7+
"sync"
68

79
"github.com/AvengeMedia/dgop/models"
10+
"golang.org/x/sync/errgroup"
811
)
912

1013
var availableModules = []string{
@@ -39,14 +42,14 @@ type MetaParams struct {
3942
DiskRateCursor string
4043
}
4144

42-
func (self *GopsUtil) GetMeta(modules []string, params MetaParams) (*models.MetaInfo, error) {
45+
func (self *GopsUtil) GetMeta(ctx context.Context, modules []string, params MetaParams) (*models.MetaInfo, error) {
4346
meta := &models.MetaInfo{}
4447

4548
for _, module := range modules {
4649
switch strings.ToLower(module) {
4750
case "all":
4851
// Load all modules
49-
return self.loadAllModules(params)
52+
return self.loadAllModules(ctx, params)
5053
case "cpu":
5154
if cpu, err := self.GetCPUInfoWithCursor(params.CPUCursor); err == nil {
5255
meta.CPU = cpu
@@ -106,52 +109,136 @@ func (self *GopsUtil) GetMeta(modules []string, params MetaParams) (*models.Meta
106109
return meta, nil
107110
}
108111

109-
func (self *GopsUtil) loadAllModules(params MetaParams) (*models.MetaInfo, error) {
112+
func (self *GopsUtil) loadAllModules(ctx context.Context, params MetaParams) (*models.MetaInfo, error) {
110113
meta := &models.MetaInfo{}
114+
var mu sync.Mutex
111115

112-
if cpu, err := self.GetCPUInfoWithCursor(params.CPUCursor); err == nil {
113-
meta.CPU = cpu
114-
}
116+
g, _ := errgroup.WithContext(ctx)
115117

116-
if mem, err := self.GetMemoryInfo(); err == nil {
118+
g.Go(func() error {
119+
cpu, err := self.GetCPUInfoWithCursor(params.CPUCursor)
120+
if err != nil {
121+
return nil
122+
}
123+
mu.Lock()
124+
meta.CPU = cpu
125+
mu.Unlock()
126+
return nil
127+
})
128+
129+
g.Go(func() error {
130+
mem, err := self.GetMemoryInfo()
131+
if err != nil {
132+
return nil
133+
}
134+
mu.Lock()
117135
meta.Memory = mem
118-
}
119-
120-
if net, err := self.GetNetworkInfo(); err == nil {
136+
mu.Unlock()
137+
return nil
138+
})
139+
140+
g.Go(func() error {
141+
net, err := self.GetNetworkInfo()
142+
if err != nil {
143+
return nil
144+
}
145+
mu.Lock()
121146
meta.Network = net
122-
}
123-
124-
if netRate, err := self.GetNetworkRates(params.NetRateCursor); err == nil {
147+
mu.Unlock()
148+
return nil
149+
})
150+
151+
g.Go(func() error {
152+
netRate, err := self.GetNetworkRates(params.NetRateCursor)
153+
if err != nil {
154+
return nil
155+
}
156+
mu.Lock()
125157
meta.NetRate = netRate
126-
}
127-
128-
if disk, err := self.GetDiskInfo(); err == nil {
158+
mu.Unlock()
159+
return nil
160+
})
161+
162+
g.Go(func() error {
163+
disk, err := self.GetDiskInfo()
164+
if err != nil {
165+
return nil
166+
}
167+
mu.Lock()
129168
meta.Disk = disk
130-
}
131-
132-
if diskRate, err := self.GetDiskRates(params.DiskRateCursor); err == nil {
169+
mu.Unlock()
170+
return nil
171+
})
172+
173+
g.Go(func() error {
174+
diskRate, err := self.GetDiskRates(params.DiskRateCursor)
175+
if err != nil {
176+
return nil
177+
}
178+
mu.Lock()
133179
meta.DiskRate = diskRate
134-
}
135-
136-
if mounts, err := self.GetDiskMounts(); err == nil {
180+
mu.Unlock()
181+
return nil
182+
})
183+
184+
g.Go(func() error {
185+
mounts, err := self.GetDiskMounts()
186+
if err != nil {
187+
return nil
188+
}
189+
mu.Lock()
137190
meta.DiskMounts = mounts
138-
}
139-
140-
if result, err := self.GetProcessesWithCursor(params.SortBy, params.ProcLimit, params.EnableCPU, params.ProcCursor); err == nil {
141-
meta.Processes = result.Processes
142-
meta.Cursor = result.Cursor
143-
}
144-
145-
if sys, err := self.GetSystemInfo(); err == nil {
191+
mu.Unlock()
192+
return nil
193+
})
194+
195+
g.Go(func() error {
196+
procs, err := self.GetProcessesWithCursor(params.SortBy, params.ProcLimit, params.EnableCPU, params.ProcCursor)
197+
if err != nil {
198+
return nil
199+
}
200+
mu.Lock()
201+
meta.Processes = procs.Processes
202+
meta.Cursor = procs.Cursor
203+
mu.Unlock()
204+
return nil
205+
})
206+
207+
g.Go(func() error {
208+
sys, err := self.GetSystemInfo()
209+
if err != nil {
210+
return nil
211+
}
212+
mu.Lock()
146213
meta.System = sys
147-
}
148-
149-
if hw, err := self.GetSystemHardware(); err == nil {
214+
mu.Unlock()
215+
return nil
216+
})
217+
218+
g.Go(func() error {
219+
hw, err := self.GetSystemHardware()
220+
if err != nil {
221+
return nil
222+
}
223+
mu.Lock()
150224
meta.Hardware = hw
151-
}
152-
153-
if gpu, err := self.GetGPUInfoWithTemp(params.GPUPciIds); err == nil {
225+
mu.Unlock()
226+
return nil
227+
})
228+
229+
g.Go(func() error {
230+
gpu, err := self.GetGPUInfoWithTemp(params.GPUPciIds)
231+
if err != nil {
232+
return nil
233+
}
234+
mu.Lock()
154235
meta.GPU = gpu
236+
mu.Unlock()
237+
return nil
238+
})
239+
240+
if err := g.Wait(); err != nil {
241+
return nil, err
155242
}
156243

157244
return meta, nil

0 commit comments

Comments
 (0)