Skip to content

Commit 96264e8

Browse files
author
Stefano Torresi
authored
Merge pull request #194 from stefanotorresi/fix-cloned-resources-collection-once-and-for-all
fix cloned resource collection once and for all
2 parents cf586eb + ee78ffa commit 96264e8

File tree

4 files changed

+38
-32
lines changed

4 files changed

+38
-32
lines changed

Makefile

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,7 @@ REPOSITORY ?= clusterlabs/ha_cluster_exporter
1717
# the Go archs we crosscompile to
1818
ARCHS ?= amd64 arm64 ppc64le s390x
1919

20-
default: clean download mod-tidy generate fmt vet-check test build
21-
22-
download:
23-
go mod download
24-
go mod verify
20+
default: clean mod-tidy generate fmt vet-check test build
2521

2622
build: amd64
2723

@@ -36,7 +32,7 @@ install:
3632

3733
static-checks: vet-check fmt-check
3834

39-
vet-check: download
35+
vet-check:
4036
go vet ./...
4137

4238
fmt:
@@ -51,7 +47,7 @@ fmt-check:
5147
generate:
5248
go generate ./...
5349

54-
test: download
50+
test:
5551
go test -v ./...
5652

5753
checks: static-checks test

collector/pacemaker/pacemaker.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,16 @@ func (c *pacemakerCollector) recordResources(crmMon crmmon.Root, ch chan<- prome
124124
c.recordResource(resource, "", "", ch)
125125
}
126126
for _, clone := range crmMon.Clones {
127+
recorded := make(map[crmmon.Resource]bool) // we need to track cloned resources to avoid duplicates
127128
for _, resource := range clone.Resources {
129+
// Avoid recording stopped cloned resources multiple times
130+
if recorded[resource] == true {
131+
continue
132+
}
133+
128134
c.recordResource(resource, "", clone.Id, ch)
135+
136+
recorded[resource] = true
129137
}
130138
}
131139
for _, group := range crmMon.Groups {
@@ -146,9 +154,9 @@ func (c *pacemakerCollector) recordResource(resource crmmon.Resource, group stri
146154
"failure_ignored": resource.FailureIgnored,
147155
}
148156

149-
// Don't create metric for OCFS nodes that aren't running since those would generate duplicate entries
150-
if resource.Agent == "ocf::heartbeat:Filesystem" && resource.NodesRunningOn == 0 {
151-
return
157+
var nodeName string
158+
if resource.Node != nil {
159+
nodeName = resource.Node.Name
152160
}
153161

154162
// since we have a combined cardinality of resource * status, we cycle through all the possible statuses
@@ -158,21 +166,19 @@ func (c *pacemakerCollector) recordResource(resource crmmon.Resource, group stri
158166
if flag {
159167
statusValue = 1
160168
}
161-
var nodeName string
162-
if resource.Node != nil {
163-
nodeName = resource.Node.Name
164-
}
165-
ch <- c.MakeGaugeMetric(
166-
"resources",
167-
statusValue,
169+
170+
labels := []string{
168171
nodeName,
169172
resource.Id,
170173
strings.ToLower(resource.Role),
171174
strconv.FormatBool(resource.Managed),
172175
resourceStatus,
173176
resource.Agent,
174177
group,
175-
clone)
178+
clone,
179+
}
180+
181+
ch <- c.MakeGaugeMetric("resources", statusValue, labels...)
176182
}
177183
}
178184

test/mock_collector/instrumented_collector.go

Lines changed: 13 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/pacemaker.metrics

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-cluste
103103
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="node02",resource="clusterfs",role="started",status="failed"} 0
104104
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="node02",resource="clusterfs",role="started",status="failure_ignored"} 0
105105
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="node02",resource="clusterfs",role="started",status="orphaned"} 0
106+
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="",resource="clusterfs",role="stopped",status="active"} 0
107+
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="",resource="clusterfs",role="stopped",status="blocked"} 0
108+
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="",resource="clusterfs",role="stopped",status="failed"} 0
109+
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="",resource="clusterfs",role="stopped",status="failure_ignored"} 0
110+
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:Filesystem",clone="c-clusterfs",group="",managed="true",node="",resource="clusterfs",role="stopped",status="orphaned"} 0
106111
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:IPaddr2",clone="",group="",managed="true",node="node01",resource="rsc_ip_PRD_HDB00",role="started",status="active"} 1
107112
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:IPaddr2",clone="",group="",managed="true",node="node01",resource="rsc_ip_PRD_HDB00",role="started",status="blocked"} 0
108113
ha_cluster_pacemaker_resources{agent="ocf::heartbeat:IPaddr2",clone="",group="",managed="true",node="node01",resource="rsc_ip_PRD_HDB00",role="started",status="failed"} 0

0 commit comments

Comments
 (0)