1 /*
2 * This file and its contents are licensed under the Timescale License.
3 * Please see the included NOTICE for copyright information and
4 * LICENSE-TIMESCALE for a copy of the license.
5 */
6 #include <postgres.h>
7 #include "telemetry.h"
8 #include <utils/builtins.h>
9 #include <jsonb_utils.h>
10 #include "hypertable.h"
11 #include "telemetry/telemetry.h"
12 #include "dist_util.h"
13 #include "data_node.h"
14
15 #define DISTRIBUTED_DB_KEY "distributed_db"
16 #define DISTRIBUTED_MEMBER_KEY "distributed_member"
17 #define NUM_DISTRIBUTED_HYPERTABLES_KEY "num_distributed_hypertables"
18 #define NUM_DISTRIBUTED_HYPERTABLES_MEMBERS_KEY "num_distributed_hypertables_members"
19 #define NUM_REPLICATED_DISTRIBUTED_HYPERTABLES_KEY "num_replicated_distributed_hypertables"
20 #define NUM_DATA_NODES_KEY "num_data_nodes"
21
22 static void
tsl_telemetry_add_distributed_database_info(JsonbParseState * parse_state)23 tsl_telemetry_add_distributed_database_info(JsonbParseState *parse_state)
24 {
25 DistUtilMembershipStatus status = dist_util_membership();
26 HypertablesStat stat;
27
28 ts_jsonb_add_str(parse_state, DISTRIBUTED_MEMBER_KEY, dist_util_membership_str(status));
29
30 if (status == DIST_MEMBER_NONE)
31 return;
32
33 memset(&stat, 0, sizeof(stat));
34 ts_number_of_hypertables(&stat);
35
36 ts_jsonb_add_str(parse_state,
37 NUM_DATA_NODES_KEY,
38 psprintf("%d", list_length(data_node_get_node_name_list())));
39
40 ts_jsonb_add_str(parse_state,
41 NUM_DISTRIBUTED_HYPERTABLES_KEY,
42 psprintf("%d", stat.num_hypertables_distributed));
43
44 ts_jsonb_add_str(parse_state,
45 NUM_REPLICATED_DISTRIBUTED_HYPERTABLES_KEY,
46 psprintf("%d", stat.num_hypertables_distributed_and_replicated));
47
48 ts_jsonb_add_str(parse_state,
49 NUM_DISTRIBUTED_HYPERTABLES_MEMBERS_KEY,
50 psprintf("%d", stat.num_hypertables_distributed_members));
51 }
52
53 void
tsl_telemetry_add_info(JsonbParseState ** parse_state)54 tsl_telemetry_add_info(JsonbParseState **parse_state)
55 {
56 JsonbValue distributed_db_key;
57
58 /* distributed_db */
59 distributed_db_key.type = jbvString;
60 distributed_db_key.val.string.val = DISTRIBUTED_DB_KEY;
61 distributed_db_key.val.string.len = strlen(DISTRIBUTED_DB_KEY);
62 pushJsonbValue(parse_state, WJB_KEY, &distributed_db_key);
63 pushJsonbValue(parse_state, WJB_BEGIN_OBJECT, NULL);
64 tsl_telemetry_add_distributed_database_info(*parse_state);
65 pushJsonbValue(parse_state, WJB_END_OBJECT, NULL);
66 }
67