Skip to content

Commit 626473c

Browse files
author
Matt Crane
committed
Comments and variable names
1 parent 7b20a86 commit 626473c

File tree

1 file changed

+42
-26
lines changed

1 file changed

+42
-26
lines changed

main.go

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package main
22

33
import (
44
"flag"
5-
"strings"
65
"fmt"
76
"net/http"
7+
"os"
88
"strconv"
9+
"strings"
910
"sync"
10-
"os"
1111

1212
"github.com/Snapbug/gomemcache/memcache"
1313
"github.com/golang/glog"
@@ -18,6 +18,16 @@ const (
1818
namespace = "memcache"
1919
)
2020

21+
var (
22+
cacheOperations = []string{"get", "delete", "incr", "decr", "cas", "touch"}
23+
cacheStatuses = []string{"hits", "misses"}
24+
usageTimes = []string{"current", "total"}
25+
usageResources = []string{"items", "connections"}
26+
bytesDirections = []string{"read", "written"}
27+
removalsStatuses = []string{"expired", "evicted"}
28+
)
29+
30+
// Exporter collects metrics from a set of memcache servers.
2131
type Exporter struct {
2232
mutex sync.RWMutex
2333
mc *memcache.Client
@@ -29,38 +39,39 @@ type Exporter struct {
2939
removals *prometheus.CounterVec
3040
}
3141

42+
// NewExporter returns an initialized exporter
3243
func NewExporter(mc *memcache.Client) *Exporter {
3344
return &Exporter{
3445
mc: mc,
3546
up: prometheus.NewGaugeVec(
3647
prometheus.GaugeOpts{
3748
Name: "up",
3849
Namespace: namespace,
39-
Help: "If the servers were up.",
50+
Help: "Are the servers up.",
4051
},
4152
[]string{"server"},
4253
),
4354
uptime: prometheus.NewCounterVec(
4455
prometheus.CounterOpts{
4556
Name: "uptime",
4657
Namespace: namespace,
47-
Help: "The time the server has been up.",
58+
Help: "The uptime of the server.",
4859
},
4960
[]string{"server"},
5061
),
5162
cache: prometheus.NewCounterVec(
5263
prometheus.CounterOpts{
5364
Name: "cache",
5465
Namespace: namespace,
55-
Help: "The cache operations broken down by command and result (hit or miss).",
66+
Help: "The cache hits/misses broken down by command (get, set, etc.).",
5667
},
5768
[]string{"server", "command", "status"},
5869
),
5970
usage: prometheus.NewGaugeVec(
6071
prometheus.GaugeOpts{
6172
Name: "usage",
6273
Namespace: namespace,
63-
Help: "Details the usage of the server, by time (current/total) and resource (items/connections).",
74+
Help: "Details the resource usage (items/connections) of the server, by time (current/total).",
6475
},
6576
[]string{"server", "time", "resource"},
6677
),
@@ -76,13 +87,15 @@ func NewExporter(mc *memcache.Client) *Exporter {
7687
prometheus.CounterOpts{
7788
Name: "removal",
7889
Namespace: namespace,
79-
Help: "Removal statuses from the cache either expired/evicted and if they were touched.",
90+
Help: "Number of items that have been evicted/expired (status), and if the were fetched ever or not.",
8091
},
8192
[]string{"server", "status", "fetched"},
8293
),
8394
}
8495
}
8596

97+
// Describe describes all the metrics exported by the memcache exporter. It
98+
// implements prometheus.Collector.
8699
func (e *Exporter) Describe(ch chan<- *prometheus.Desc) {
87100
e.up.Describe(ch)
88101
e.cache.Describe(ch)
@@ -91,7 +104,10 @@ func (e *Exporter) Describe(ch chan<- *prometheus.Desc) {
91104
e.removals.Describe(ch)
92105
}
93106

107+
// Collect fetches the statistics from the configured memcache servers, and
108+
// delivers them as prometheus metrics. It implements prometheus.Collector.
94109
func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
110+
// prevent concurrent metric collections
95111
e.mutex.Lock()
96112
defer e.mutex.Unlock()
97113

@@ -105,7 +121,7 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
105121
stats, err := e.mc.Stats()
106122

107123
if err != nil {
108-
glog.Fatalf("Failed to collect stats from memcache: %s", err)
124+
glog.Infof("Failed to collect stats from memcache: %s", err)
109125
return
110126
}
111127

@@ -119,43 +135,43 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
119135
e.removals.WithLabelValues(server.String()).Set(float64(m))
120136
}
121137

122-
for _, c := range []string{"get", "delete", "incr", "decr", "cas", "touch"} {
123-
for _, s := range []string{"hits", "misses"} {
124-
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("%s_%s", c, s)], 10, 64)
138+
for _, op := range cacheOperations {
139+
for _, st := range cacheStatuses {
140+
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("%s_%s", op, st)], 10, 64)
125141
if err != nil {
126-
e.cache.WithLabelValues(server.String(), c, s).Set(0)
142+
e.cache.WithLabelValues(server.String(), op, st).Set(0)
127143
} else {
128-
e.cache.WithLabelValues(server.String(), c, s).Set(float64(m))
144+
e.cache.WithLabelValues(server.String(), op, st).Set(float64(m))
129145
}
130146
}
131147
}
132148

133-
for _, c := range []string{"current", "total"} {
134-
for _, s := range []string{"items", "connections"} {
135-
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("%s_%s", c, s)], 10, 64)
149+
for _, t := range usageTimes {
150+
for _, r := range usageResources {
151+
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("%s_%s", t, r)], 10, 64)
136152
if err != nil {
137-
e.usage.WithLabelValues(server.String(), c, s).Set(0)
153+
e.usage.WithLabelValues(server.String(), t, r).Set(0)
138154
} else {
139-
e.usage.WithLabelValues(server.String(), c, s).Set(float64(m))
155+
e.usage.WithLabelValues(server.String(), t, r).Set(float64(m))
140156
}
141157
}
142158
}
143159

144-
for _, c := range []string{"read", "written"} {
145-
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("bytes_%s", c)], 10, 64)
160+
for _, dir := range bytesDirections {
161+
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("bytes_%s", dir)], 10, 64)
146162
if err != nil {
147-
e.bytes.WithLabelValues(server.String(), c).Set(0)
163+
e.bytes.WithLabelValues(server.String(), dir).Set(0)
148164
} else {
149-
e.bytes.WithLabelValues(server.String(), c).Set(float64(m))
165+
e.bytes.WithLabelValues(server.String(), dir).Set(float64(m))
150166
}
151167
}
152168

153-
for _, c := range []string{"expired", "evicted"} {
154-
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("%s_unfetched", c)], 10, 64)
169+
for _, st := range removalsStatuses {
170+
m, err := strconv.ParseUint(stats[server][fmt.Sprintf("%s_unfetched", st)], 10, 64)
155171
if err != nil {
156-
e.removals.WithLabelValues(server.String(), c, "unfetched").Set(0)
172+
e.removals.WithLabelValues(server.String(), st, "unfetched").Set(0)
157173
} else {
158-
e.removals.WithLabelValues(server.String(), c, "unfetched").Set(float64(m))
174+
e.removals.WithLabelValues(server.String(), st, "unfetched").Set(float64(m))
159175
}
160176
}
161177
m, err = strconv.ParseUint(stats[server]["evictions"], 10, 64)

0 commit comments

Comments
 (0)