rsstats 0.0.1
Redis Enterprise Statistic collector
rptcluster.c
Go to the documentation of this file.
1
21#ifdef HAVE_CONFIG_H
22#include "config.h"
23#endif
24
25#include "rptcluster.h"
26#include "clustercon.h"
27#include "json.h"
28#include "csv.h"
29#include <string.h>
30
31/* To refactor in a report common file */
32static void csv_addjsonfield(FILE* reportfile, const cJSON* json, char* fieldname) {
33 char* text = json2text(cJSON_GetObjectItemCaseSensitive(json, fieldname));
34 csv_addfield(reportfile,text);
35 free(text);
36}
37
38void report_cluster_header(FILE* reportfile) {
39 fprintf(reportfile,
40 "cluster_host,name,rack_aware,created_time,free_memory,"
41 "available_memory,available_memory_no_overbooking,available_flash,"
42 "available_flash_no_overbooking,ephemeral_storage_avail,"
43 "ephemeral_storage_free,persistent_storage_avail,"
44 "persistent_storage_free,provisional_flash,"
45 "provisional_flash_no_overbooking,provisional_memory,"
46 "provisional_memory_no_overbooking,activation_date,expiration_date,"
47 "cluster_name,owner,features,shards_limit,ram_shards_in_use,"
48 "ram_shards_limit,flash_shards_in_use,flash_shards_limit,expired\r\n"
49 );
50}
51
52static cJSON* report_querygetjson(const cluster_t* cluster, const char* endpoint) {
53 rsclustercon_t* rsclustercon;
54
55 if (NULL==(rsclustercon = cluster_new(cluster))) {
56 fprintf(stderr,"report_querygetjson cluster_new failed\n");
57 return NULL;
58 }
59 if (0!=cluster_open(rsclustercon)) {
60 fprintf(stderr,"report_querygetjson cluster_open failed\n");
61 cluster_del(rsclustercon);
62 return NULL;
63 }
64
65 cJSON* retval;
66 if (NULL==(retval = cluster_queryget(rsclustercon, endpoint))) {
67 const char *error_ptr = cJSON_GetErrorPtr();
68 if (error_ptr != NULL)
69 fprintf(stderr, "Error before: %s\n", error_ptr);
70 retval = cJSON_CreateObject();
71 }
72
73 cluster_close(rsclustercon);
74 cluster_del(rsclustercon);
75
76 return retval;
77}
78
79void report_cluster(FILE* reportfile, const cluster_t* cluster) {
80 cJSON* cluster_json;
81 cJSON* clusterstats_json;
82 cJSON* license_json;
83
84 cluster_json = report_querygetjson(cluster, "/v1/cluster");
85 clusterstats_json = report_querygetjson(cluster, "/v1/cluster/stats/last");
86 license_json = report_querygetjson(cluster, "/v1/license");
87
88 csv_addfield(reportfile,cluster->host);
89 csv_addjsonfield(reportfile, cluster_json, "name");
90 csv_addjsonfield(reportfile, cluster_json, "rack_aware");
91 csv_addjsonfield(reportfile, cluster_json, "created_time");
92 csv_addjsonfield(reportfile, clusterstats_json, "free_memory");
93 csv_addjsonfield(reportfile, clusterstats_json, "available_memory");
94 csv_addjsonfield(reportfile, clusterstats_json, "available_memory_no_overbooking");
95 csv_addjsonfield(reportfile, clusterstats_json, "available_flash");
96 csv_addjsonfield(reportfile, clusterstats_json, "available_flash_no_overbooking");
97 csv_addjsonfield(reportfile, clusterstats_json, "ephemeral_storage_avail");
98 csv_addjsonfield(reportfile, clusterstats_json, "ephemeral_storage_free");
99 csv_addjsonfield(reportfile, clusterstats_json, "persistent_storage_avail");
100 csv_addjsonfield(reportfile, clusterstats_json, "persistent_storage_free");
101 csv_addjsonfield(reportfile, clusterstats_json, "provisional_flash");
102 csv_addjsonfield(reportfile, clusterstats_json, "provisional_flash_no_overbooking");
103 csv_addjsonfield(reportfile, clusterstats_json, "provisional_memory");
104 csv_addjsonfield(reportfile, clusterstats_json, "provisional_memory_no_overbooking");
105 csv_addjsonfield(reportfile, license_json, "activation_date");
106 csv_addjsonfield(reportfile, license_json, "expiration_date");
107 csv_addjsonfield(reportfile, license_json, "cluster_name");
108 csv_addjsonfield(reportfile, license_json, "owner");
109 csv_addjsonfield(reportfile, license_json, "features");
110 csv_addjsonfield(reportfile, license_json, "shards_limit");
111 csv_addjsonfield(reportfile, license_json, "ram_shards_in_use");
112 csv_addjsonfield(reportfile, license_json, "ram_shards_limit");
113 csv_addjsonfield(reportfile, license_json, "flash_shards_in_use");
114 csv_addjsonfield(reportfile, license_json, "flash_shards_limit");
115 csv_addjsonfield(reportfile, license_json, "expired");
116 csv_addline(reportfile);
117
118 cJSON_Delete(cluster_json);
119 cJSON_Delete(clusterstats_json);
120 cJSON_Delete(license_json);
121}
122
123
124/*
125
126
127
128clusterdef.host
129nodes.uid
130nodes.addr
131nodes.external_addr
132nodes.cores
133nodes.total_memory
134nodes.ephemeral_storage_size
135nodes.persistent_storage_size
136nodes.os_version
137nodes.rack_id
138nodes.max_listeners
139nodes.max_redis_servers
140nodes.ram_shard_count
141nodes.flash_shard_count
142nodes.shard_count
143nodes.software_version
144nodes.uptime
145nodes.accept_servers
146nodes.status
147nodesstatus.cores
148nodesstatus.free_provisional_ram
149nodesstatus.free_ram
150nodesstatus.hostname
151nodesstatus.node_overbooking_depth
152nodesstatus.node_status
153nodesstatus.role
154nodesstatus.software_version
155nodesstatus.total_memory
156nodesstatus.total_provisional_ram
157nodesstatslast.available_memory
158nodesstatslast.available_memory_no_overbooking
159nodesstatslast.ephemeral_storage_avail
160nodesstatslast.ephemeral_storage_free
161nodesstatslast.free_memory
162nodesstatslast.persistent_storage_avail
163nodesstatslast.persistent_storage_free
164nodesstatslast.provisional_memory
165nodesstatslast.provisional_memory_no_overbooking
166*/
167/* vim: set tw=80: */
void cluster_close(rsclustercon_t *rsclustercon)
Definition: clustercon.c:217
void cluster_del(rsclustercon_t *rsclustercon)
Definition: clustercon.c:225
rsclustercon_t * cluster_new(const cluster_t *cluster)
Definition: clustercon.c:49
int cluster_open(rsclustercon_t *rsclustercon)
Definition: clustercon.c:86
cJSON * cluster_queryget(const rsclustercon_t *rsclustercon, const char *endpoint)
Definition: clustercon.c:150
<+DETAILED+>
void csv_addfield(FILE *reportfile, const char *value)
Definition: csv.c:37
void csv_addline(FILE *reportfile)
Definition: csv.c:32
<+DETAILED+>
char * json2text(cJSON *value_json)
Convert a cJSON object in a C String.
Definition: json.c:31
Wrapper around cJSON library with helpers.
void report_cluster(FILE *reportfile, const cluster_t *cluster)
Definition: rptcluster.c:79
void report_cluster_header(FILE *reportfile)
Definition: rptcluster.c:38
<+DETAILED+>
#define NULL
Definition: rsstats-opts.c:64
Definition: cJSON.h:103
char * host
Definition: cluster.h:26