summaryrefslogtreecommitdiffstats
path: root/tests/stats/fake_stats.c
blob: ab30207a2b81c8768a3e7e27f143eba5da436a31 (plain)
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
#include <talloc.h>
#include <osmocom/core/application.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/utils.h>
#include <osmocom/core/stats.h>
#include <osmocom/vty/vty.h>
#include <osmocom/vty/misc.h>
#include <osmocom/vty/logging.h>
#include <osmocom/vty/telnet_interface.h>
#include <osmocom/vty/stats.h>
#include <osmocom/vty/prometheus.h>

static struct vty_app_info vty_info = {
	.name		= "fake_stats",
	.version	= "1",
};

static const struct log_info_cat categories[] = {
};

const struct log_info log_info = {
	.cat = categories,
	.num_cat = ARRAY_SIZE(categories),
};

int main(int argc, char **argv)
{
	int rc;
	void *ctx = talloc_named_const(NULL, 1, "fake_stats");
	vty_info.tall_ctx = ctx;

	osmo_init_logging2(ctx, &log_info);

	osmo_stats_init(ctx);
	// osmo_prom_init(ctx, 12346);

//int osmo_stat_item_init(void *tall_ctx);

	vty_init(&vty_info);
	osmo_stats_vty_add_cmds();

	logging_vty_add_cmds();
	osmo_talloc_vty_add_cmds();

	enum test_ctr {
		TEST_A_CTR,
		TEST_B_CTR,
	};
	static const struct rate_ctr_desc ctr_description[] = {
		[TEST_A_CTR] = { "ctr:a", "The A counter value"},
		[TEST_B_CTR] = { "ctr:b", "The B counter value"},
	};
	static const struct rate_ctr_group_desc ctrg_desc = {
		.group_name_prefix = "ctr-test:one",
		.group_description = "Counter test number 1",
		.num_ctr = ARRAY_SIZE(ctr_description),
		.ctr_desc = ctr_description,
		.class_id = OSMO_STATS_CLASS_SUBSCRIBER,
	};
	struct rate_ctr_group *ctrg1 = rate_ctr_group_alloc(ctx, &ctrg_desc, 1);


enum test_items {
	TEST_A_ITEM,
	TEST_B_ITEM,
};
static const struct osmo_stat_item_desc item_description[] = {
	[TEST_A_ITEM] = { "item.a", "The A value", "ma", 4, -1 },
	[TEST_B_ITEM] = { "item.b", "The B value", "kb", 7, -1 },
};
static const struct osmo_stat_item_group_desc statg_desc = {
	.group_name_prefix = "test.one",
	.group_description = "Test number 1",
	.num_items = ARRAY_SIZE(item_description),
	.item_desc = item_description,
	.class_id = OSMO_STATS_CLASS_PEER,
};

	struct osmo_stat_item_group *statg =
		osmo_stat_item_group_alloc(NULL, &statg_desc, 0);

	osmo_stat_item_set(statg->items[TEST_A_ITEM], 23);
	osmo_stat_item_set(statg->items[TEST_B_ITEM], 42);

//void rate_ctr_add(struct rate_ctr *ctr, int inc);
// osmo_stat_item

	/* start telnet after reading config for vty_get_bind_addr() */
	rc = telnet_init_dynif(ctx, NULL,
			       vty_get_bind_addr(), 12345);
	if (rc < 0)
		return 2;

	// TODO replace vty_get_bind_addr?
	rc = osmo_prom_init_dynif(ctx, vty_get_bind_addr(), 12346);
	if (rc < 0)
		return 2;

	int a = 0;
	int b = 0;

	while (1) {
		log_reset_context();
		osmo_select_main_ctx(0);
		rate_ctr_add(&ctrg1->ctr[TEST_A_CTR], 1);

		osmo_stat_item_set(statg->items[TEST_A_ITEM], a);
		osmo_stat_item_set(statg->items[TEST_B_ITEM], b);

		a = (a + 1) % 23;
		b = (b + 1) % 42;
	}
	return 0;
}

// telnet localhost 12345