Skip to content

Commit bdb5d07

Browse files
committed
add cbstats all to cbmonitor
Change-Id: I13c3fc25a61a8db82a2c13a743a25b2565e3ab07 Reviewed-on: https://review.couchbase.org/c/perfrunner/+/169533 Tested-by: Build Bot <[email protected]> Reviewed-by: Korrigan Clark <[email protected]>
1 parent 12ef580 commit bdb5d07

File tree

5 files changed

+84
-7
lines changed

5 files changed

+84
-7
lines changed

cbagent/collectors/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from cbagent.collectors.active_tasks import ActiveTasks
22
from cbagent.collectors.analytics import AnalyticsStats
3-
from cbagent.collectors.cbstats import CBStatsMemory
3+
from cbagent.collectors.cbstats import CBStatsAll, CBStatsMemory
44
from cbagent.collectors.collector import Collector
55
from cbagent.collectors.eventing_stats import (
66
EventingConsumerStats,

cbagent/collectors/cbstats.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,78 @@ def update_metadata(self):
7070
self.mc.add_bucket(bucket)
7171
for node in self.nodes:
7272
self.mc.add_server(node)
73+
74+
75+
class CBStatsAll(Collector):
76+
COLLECTOR = "cbstats_all"
77+
CB_STATS_PORT = 11209
78+
METRICS = (
79+
"mem_used_secondary",
80+
"ep_magma_total_mem_used",
81+
"ep_magma_mem_used_diff"
82+
)
83+
84+
def __init__(self, settings, test):
85+
super().__init__(settings)
86+
extract_cb_any(filename='couchbase')
87+
self.cluster_spec = test.cluster_spec
88+
89+
def _get_stats_from_server(self, bucket: str, server: str):
90+
stats = {}
91+
try:
92+
result = get_cbstats(server, self.CB_STATS_PORT, "all", self.cluster_spec)
93+
buckets_data = list(filter(lambda a: a != "", result.split("*")))
94+
for data in buckets_data:
95+
data = data.strip()
96+
if data.startswith(bucket):
97+
data = data.split("\n", 1)[1]
98+
data = data.replace("\"{", "{")
99+
data = data.replace("}\"", "}")
100+
data = data.replace("\\", "")
101+
data = json.loads(data)
102+
for (metric, number) in data.items():
103+
if metric in self.METRICS:
104+
if metric in stats:
105+
stats[metric] += number
106+
else:
107+
stats[metric] = number
108+
ep_magma_mem_used_diff = stats['mem_used_secondary'] -\
109+
stats['ep_magma_total_mem_used']
110+
if 'ep_magma_mem_used_diff' in stats:
111+
stats['ep_magma_mem_used_diff'] += ep_magma_mem_used_diff
112+
else:
113+
stats['ep_magma_mem_used_diff'] = ep_magma_mem_used_diff
114+
break
115+
except Exception:
116+
pass
117+
118+
return stats
119+
120+
def _get_cbstats_all_stats(self, bucket: str, server: str):
121+
node_stats = self._get_stats_from_server(bucket, server=server)
122+
return node_stats
123+
124+
def sample(self):
125+
for bucket in self.get_buckets():
126+
stats = {}
127+
for node in self.nodes:
128+
temp_stats = self._get_cbstats_all_stats(bucket, node)
129+
for st in temp_stats:
130+
if st in stats:
131+
stats[st] += temp_stats[st]
132+
else:
133+
stats[st] = temp_stats[st]
134+
135+
if stats:
136+
self.update_metric_metadata(stats.keys(), bucket=bucket)
137+
self.store.append(stats, cluster=self.cluster,
138+
bucket=bucket,
139+
collector=self.COLLECTOR)
140+
141+
def update_metadata(self):
142+
self.mc.add_cluster()
143+
144+
for bucket in self.get_buckets():
145+
self.mc.add_bucket(bucket)
146+
for node in self.nodes:
147+
self.mc.add_server(node)

cbagent/collectors/kvstore_stats.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,8 @@ class KVStoreStats(Collector):
8383
"NumNormalFlushes",
8484
"NumPersistentFlushes",
8585
"NumSyncFlushes",
86-
"HistogramMemUsed",
8786
"WALBufferMemUsed",
8887
"TreeSnapshotMemoryUsed",
89-
"LSMTreeObjectMemUsed",
9088
"ReadAheadBufferMemUsed",
9189
"TableObjectMemUsed",
9290
"BlockCacheHitsPerSec",

perfrunner/helpers/cbmonitor.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
VMSTAT,
1414
ActiveTasks,
1515
AnalyticsStats,
16+
CBStatsAll,
1617
CBStatsMemory,
1718
Disk,
1819
DurabilityLatency,
@@ -157,6 +158,7 @@ def init_clusters(self, phase: str):
157158

158159
def add_collectors(self,
159160
analytics=False,
161+
cbstats_all=False,
160162
cbstats_memory=False,
161163
disk=False,
162164
durability=False,
@@ -217,6 +219,8 @@ def add_collectors(self,
217219
self.add_collector(KVStoreStats, self.test)
218220
if cbstats_memory:
219221
self.add_collector(CBStatsMemory, self.test)
222+
if cbstats_all:
223+
self.add_collector(CBStatsAll, self.test)
220224

221225
if not self.test.dynamic_infra:
222226
if self.test.remote.os != 'Cygwin':

perfrunner/tests/magma.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ def run(self):
327327

328328
class KVTest(PerfTest):
329329
COLLECTORS = {'disk': True, 'latency': True, 'net': False, 'kvstore': True,
330-
'vmstat': True, 'cbstats_memory': True}
330+
'vmstat': True, 'cbstats_memory': True, 'cbstats_all': True}
331331
CB_STATS_PORT = 11209
332332

333333
def __init__(self, *args):
@@ -861,8 +861,8 @@ def run(self):
861861

862862
class YCSBThroughputHIDDTest(YCSBThroughputTest, KVTest):
863863

864-
COLLECTORS = {'disk': True, 'net': True, 'kvstore': True,
865-
'vmstat': True, 'cbstats_memory': True}
864+
COLLECTORS = {'disk': True, 'net': True, 'kvstore': True, 'vmstat': True,
865+
'cbstats_memory': True, 'cbstats_all': True}
866866

867867
def __init__(self, *args):
868868
KVTest.__init__(self, *args)
@@ -1138,7 +1138,7 @@ def run(self):
11381138
class RebalanceKVDGMTest(RebalanceKVTest, StabilityBootstrap):
11391139

11401140
COLLECTORS = {'disk': True, 'latency': True, 'net': False, 'kvstore': True,
1141-
'vmstat': True, 'cbstats_memory': True}
1141+
'vmstat': True, 'cbstats_memory': True, 'cbstats_all': True}
11421142

11431143
def __init__(self, *args):
11441144
RebalanceKVTest.__init__(self, *args)

0 commit comments

Comments
 (0)