-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
116 lines (89 loc) · 2.02 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package main
import (
"fmt"
"os"
"strconv"
"time"
log "github.com/sirupsen/logrus"
"github.com/alexcesaro/statsd"
"github.com/HammerMeetNail/dock-dock-go/pkg/clients"
"github.com/HammerMeetNail/dock-dock-go/pkg/stats"
)
type data struct {
dest string
url string
name string
size int64
statsdClient statsd.Client
}
func output(data data) {
switch data.dest {
case "statsd":
fmt.Println("Sending to statsd!!!!")
default:
fmt.Println(data.name, data.size)
}
}
func main() {
// Docker
maxDockerVersion := "1.39"
cli := clients.Cli(maxDockerVersion)
dockerVersion, ok := os.LookupEnv("DOCKER_VERSION")
if ok {
cli = clients.Cli(dockerVersion)
}
// Logging
logLevel, ok := os.LookupEnv("LOG_LEVEL")
switch logLevel {
case "debug":
log.SetLevel(log.DebugLevel)
fmt.Println("Logging set to Debug")
default:
log.SetLevel(log.WarnLevel)
fmt.Println("Logging set to Warn")
}
// Output Format
outputType, ok := os.LookupEnv("OUTPUT_TYPE")
data := data{dest: outputType}
switch outputType {
case "statsd":
statsDServerURI, ok := os.LookupEnv("STATSD_SERVER_URI")
if !ok {
statsDServerURI = "http://localhost"
}
statsDServerPort, ok := os.LookupEnv("STATSD_SERVER_PORT")
if !ok {
statsDServerPort = "8125"
}
statsDServerURL := fmt.Sprintf("%s:%s", statsDServerURI, statsDServerPort)
// ToDo add StatsD support
fmt.Printf("Stats will output to StatsD Server at %s\n", statsDServerURL)
default:
fmt.Println("Stats will output to STDOUT")
}
// Output Interval
outputInterval, ok := os.LookupEnv("OUTPUT_INTERVAL")
var interval int
if ok {
var err error
interval, err = strconv.Atoi(outputInterval)
if err != nil {
panic(err)
}
} else {
interval = 2000
}
// Output
for {
log.Info("Sending stats")
volumes := stats.GetVolumeSize(cli)
if len(volumes) > 0 {
for name, size := range volumes {
data.name = name
data.size = size
output(data)
}
}
time.Sleep(time.Duration(interval) * time.Millisecond)
}
}