Skip to content

Commit 5bba8ab

Browse files
author
Ryan Dimsey
committed
Applied fix specified in digitalocean#63
1 parent 249d054 commit 5bba8ab

File tree

7 files changed

+46
-3
lines changed

7 files changed

+46
-3
lines changed

example/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
main: main.c
2-
clang main.c -lprom -lpromhttp -lmicrohttpd -Wl,-rpath=/usr/lib -o main
2+
clang main.c -lprom -lpromhttp -o main
33

44
clean:
55
rm main

prom/include/prom_collector.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,14 @@ int prom_collector_destroy_generic(void *gen);
8787
*/
8888
int prom_collector_add_metric(prom_collector_t *self, prom_metric_t *metric);
8989

90+
/**
91+
* @brief Remove a metric from a collector
92+
* @param self The target prom_collector_t*
93+
* @param metric the prom_metric_t* to remove from the prom_collector_t* passed as self.
94+
* @return A non-zero integer value upon failure.
95+
*/
96+
int prom_collector_remove_metric(prom_collector_t *self, prom_metric_t *metric);
97+
9098
/**
9199
* @brief The collect function is responsible for doing any work involving a set of metrics and then returning them
92100
* for metric exposition.

prom/include/prom_collector_registry.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ prom_metric_t *prom_collector_registry_must_register_metric(prom_metric_t *metri
8787
*/
8888
int prom_collector_registry_register_metric(prom_metric_t *metric);
8989

90+
/**
91+
* @brief Unregisters a metric with the default collector on PROM_DEFAULT_COLLECTOR_REGISTRY. Returns an non-zero integer
92+
* value on failure.
93+
*
94+
* @param metric The metric to unregister on PROM_DEFAULT_COLLECTOR_REGISTRY*
95+
* @return A non-zero integer value upon failure
96+
*/
97+
int prom_collector_registry_unregister_metric(prom_metric_t *metric);
98+
9099
/**
91100
* @brief Register a collector with the given registry. Returns a non-zero integer value on failure.
92101
* @param self The target prom_collector_registry_t*

prom/src/prom_collector.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,16 @@ int prom_collector_add_metric(prom_collector_t *self, prom_metric_t *metric) {
116116
return prom_map_set(self->metrics, metric->name, metric);
117117
}
118118

119+
int prom_collector_remove_metric(prom_collector_t *self, prom_metric_t *metric) {
120+
PROM_ASSERT(self != NULL);
121+
if (self == NULL) return 1;
122+
if (prom_map_get(self->metrics, metric->name) == NULL) {
123+
PROM_LOG("metric not found in collector");
124+
return 1;
125+
}
126+
return prom_map_delete(self->metrics, metric->name);
127+
}
128+
119129
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
120130
// Process Collector
121131

prom/src/prom_collector_registry.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,19 @@ int prom_collector_registry_register_metric(prom_metric_t *metric) {
143143
return prom_collector_add_metric(default_collector, metric);
144144
}
145145

146+
int prom_collector_registry_unregister_metric(prom_metric_t *metric) {
147+
PROM_ASSERT(metric != NULL);
148+
149+
prom_collector_t *default_collector =
150+
(prom_collector_t *)prom_map_get(PROM_COLLECTOR_REGISTRY_DEFAULT->collectors, "default");
151+
152+
if (default_collector == NULL) {
153+
return 1;
154+
}
155+
156+
return prom_collector_remove_metric(default_collector, metric);
157+
}
158+
146159
prom_metric_t *prom_collector_registry_must_register_metric(prom_metric_t *metric) {
147160
int err = prom_collector_registry_register_metric(metric);
148161
if (err != 0) {

prom/src/prom_map.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,10 @@ static int prom_map_delete_internal(const char *key, size_t *size, size_t *max_s
369369
prom_map_node_t *current_map_node = (prom_map_node_t *)current_node->item;
370370
prom_linked_list_compare_t result = prom_linked_list_compare(list, current_map_node, temp_map_node);
371371
if (result == PROM_EQUAL) {
372-
r = prom_linked_list_remove(list, current_node);
372+
r = prom_linked_list_remove(keys, (char *)current_map_node->key);
373373
if (r) return r;
374374

375-
r = prom_linked_list_remove(keys, (char *)current_map_node->key);
375+
r = prom_linked_list_remove(list, current_node->item);
376376
if (r) return r;
377377

378378
(*size)--;

prom/test/prom_collector_test.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ void test_prom_collector(void) {
2222
prom_collector_add_metric(collector, counter);
2323
prom_map_t *m = collector->collect_fn(collector);
2424
TEST_ASSERT_EQUAL_INT(1, prom_map_size(m));
25+
prom_counter_inc(counter, NULL);
26+
prom_collector_remove_metric(collector, counter);
27+
TEST_ASSERT_EQUAL_INT(0, prom_map_size(m));
2528
prom_collector_destroy(collector);
2629
collector = NULL;
2730
}

0 commit comments

Comments
 (0)