summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/dockerhub/collect.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 12:08:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 12:08:18 +0000
commit5da14042f70711ea5cf66e034699730335462f66 (patch)
tree0f6354ccac934ed87a2d555f45be4c831cf92f4a /src/go/collectors/go.d.plugin/modules/dockerhub/collect.go
parentReleasing debian version 1.44.3-2. (diff)
downloadnetdata-5da14042f70711ea5cf66e034699730335462f66.tar.xz
netdata-5da14042f70711ea5cf66e034699730335462f66.zip
Merging upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/dockerhub/collect.go65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/dockerhub/collect.go b/src/go/collectors/go.d.plugin/modules/dockerhub/collect.go
new file mode 100644
index 000000000..211c1ea7c
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/dockerhub/collect.go
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package dockerhub
+
+import (
+ "fmt"
+ "time"
+)
+
+func (dh *DockerHub) collect() (map[string]int64, error) {
+ var (
+ reposNum = len(dh.Repositories)
+ ch = make(chan *repository, reposNum)
+ mx = make(map[string]int64)
+ )
+
+ for _, name := range dh.Repositories {
+ go dh.collectRepo(name, ch)
+ }
+
+ var (
+ parsed int
+ pullSum int
+ )
+
+ for i := 0; i < reposNum; i++ {
+ repo := <-ch
+ if repo == nil {
+ continue
+ }
+ if err := parseRepoTo(repo, mx); err != nil {
+ dh.Errorf("error on parsing %s/%s : %v", repo.User, repo.Name, err)
+ continue
+ }
+ pullSum += repo.PullCount
+ parsed++
+ }
+ close(ch)
+
+ if parsed == reposNum {
+ mx["pull_sum"] = int64(pullSum)
+ }
+
+ return mx, nil
+}
+
+func (dh *DockerHub) collectRepo(repoName string, ch chan *repository) {
+ repo, err := dh.client.getRepository(repoName)
+ if err != nil {
+ dh.Error(err)
+ }
+ ch <- repo
+}
+
+func parseRepoTo(repo *repository, mx map[string]int64) error {
+ t, err := time.Parse(time.RFC3339Nano, repo.LastUpdated)
+ if err != nil {
+ return err
+ }
+ mx[fmt.Sprintf("last_updated_%s/%s", repo.User, repo.Name)] = int64(time.Since(t).Seconds())
+ mx[fmt.Sprintf("star_count_%s/%s", repo.User, repo.Name)] = int64(repo.StarCount)
+ mx[fmt.Sprintf("pull_count_%s/%s", repo.User, repo.Name)] = int64(repo.PullCount)
+ mx[fmt.Sprintf("status_%s/%s", repo.User, repo.Name)] = int64(repo.Status)
+ return nil
+}