@cryptotaxi247 / netdata-1 / commits / 99e33cc6d

remove references to localhost from registry - now the host is dynamic at the registry API calls

Costa Tsaousis (ktsaou) committed Feb 18, 2017 at 20:42 UTC 99e33cc6d52402d77c2be0409386461281e86be0
7 files changed +54 -52
src/registry.c
+26 -26
@@ -41,19 +41,19 @@ static inline void registry_set_person_cookie(struct web_client *w, REGISTRY_PER
41 // ----------------------------------------------------------------------------
42 // JSON GENERATION
43
44 -static inline void registry_json_header(struct web_client *w, const char *action, const char *status) {
44 +static inline void registry_json_header(RRDHOST *host, struct web_client *w, const char *action, const char *status) {
45 buffer_flush(w->response.data);
46 w->response.data->contenttype = CT_APPLICATION_JSON;
47 buffer_sprintf(w->response.data, "{\n\t\"action\": \"%s\",\n\t\"status\": \"%s\",\n\t\"hostname\": \"%s\",\n\t\"machine_guid\": \"%s\"",
48 - action, status, registry.hostname, localhost->machine_guid);
48 + action, status, (host == localhost)?registry.hostname:host->hostname, host->machine_guid);
49 }
50
51 static inline void registry_json_footer(struct web_client *w) {
52 buffer_strcat(w->response.data, "\n}\n");
53 }
54
55 -static inline int registry_json_disabled(struct web_client *w, const char *action) {
56 - registry_json_header(w, action, REGISTRY_STATUS_DISABLED);
55 +static inline int registry_json_disabled(RRDHOST *host, struct web_client *w, const char *action) {
56 + registry_json_header(host, w, action, REGISTRY_STATUS_DISABLED);
57
58 buffer_sprintf(w->response.data, ",\n\t\"registry\": \"%s\"",
59 registry.registry_to_announce);
@@ -127,8 +127,8 @@ static inline int registry_person_url_callback_verify_machine_exists(void *entry
127 // ----------------------------------------------------------------------------
128 // public HELLO request
129
130 -int registry_request_hello_json(struct web_client *w) {
131 - registry_json_header(w, "hello", REGISTRY_STATUS_OK);
130 +int registry_request_hello_json(RRDHOST *host, struct web_client *w) {
131 + registry_json_header(host, w, "hello", REGISTRY_STATUS_OK);
132
133 buffer_sprintf(w->response.data, ",\n\t\"registry\": \"%s\"",
134 registry.registry_to_announce);
@@ -143,9 +143,9 @@ int registry_request_hello_json(struct web_client *w) {
143 #define REGISTRY_VERIFY_COOKIES_GUID "give-me-back-this-cookie-now--please"
144
145 // the main method for registering an access
146 -int registry_request_access_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *name, time_t when) {
146 +int registry_request_access_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *name, time_t when) {
147 if(unlikely(!registry.enabled))
148 - return registry_json_disabled(w, "access");
148 + return registry_json_disabled(host, w, "access");
149
150 // ------------------------------------------------------------------------
151 // verify the browser supports cookies
@@ -167,7 +167,7 @@ int registry_request_access_json(struct web_client *w, char *person_guid, char *
167
168 REGISTRY_PERSON *p = registry_request_access(person_guid, machine_guid, url, name, when);
169 if(!p) {
170 - registry_json_header(w, "access", REGISTRY_STATUS_FAILED);
170 + registry_json_header(host, w, "access", REGISTRY_STATUS_FAILED);
171 registry_json_footer(w);
172 registry_unlock();
173 return 412;
@@ -177,7 +177,7 @@ int registry_request_access_json(struct web_client *w, char *person_guid, char *
177 registry_set_person_cookie(w, p);
178
179 // generate the response
180 - registry_json_header(w, "access", REGISTRY_STATUS_OK);
180 + registry_json_header(host, w, "access", REGISTRY_STATUS_OK);
181
182 buffer_sprintf(w->response.data, ",\n\t\"person_guid\": \"%s\",\n\t\"urls\": [", p->guid);
183 struct registry_json_walk_person_urls_callback c = { p, NULL, w, 0 };
@@ -193,22 +193,22 @@ int registry_request_access_json(struct web_client *w, char *person_guid, char *
193 // public DELETE request
194
195 // the main method for deleting a URL from a person
196 -int registry_request_delete_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *delete_url, time_t when) {
196 +int registry_request_delete_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *delete_url, time_t when) {
197 if(!registry.enabled)
198 - return registry_json_disabled(w, "delete");
198 + return registry_json_disabled(host, w, "delete");
199
200 registry_lock();
201
202 REGISTRY_PERSON *p = registry_request_delete(person_guid, machine_guid, url, delete_url, when);
203 if(!p) {
204 - registry_json_header(w, "delete", REGISTRY_STATUS_FAILED);
204 + registry_json_header(host, w, "delete", REGISTRY_STATUS_FAILED);
205 registry_json_footer(w);
206 registry_unlock();
207 return 412;
208 }
209
210 // generate the response
211 - registry_json_header(w, "delete", REGISTRY_STATUS_OK);
211 + registry_json_header(host, w, "delete", REGISTRY_STATUS_OK);
212 registry_json_footer(w);
213 registry_unlock();
214 return 200;
@@ -218,21 +218,21 @@ int registry_request_delete_json(struct web_client *w, char *person_guid, char *
218 // public SEARCH request
219
220 // the main method for searching the URLs of a netdata
221 -int registry_request_search_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *request_machine, time_t when) {
221 +int registry_request_search_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *request_machine, time_t when) {
222 if(!registry.enabled)
223 - return registry_json_disabled(w, "search");
223 + return registry_json_disabled(host, w, "search");
224
225 registry_lock();
226
227 REGISTRY_MACHINE *m = registry_request_machine(person_guid, machine_guid, url, request_machine, when);
228 if(!m) {
229 - registry_json_header(w, "search", REGISTRY_STATUS_FAILED);
229 + registry_json_header(host, w, "search", REGISTRY_STATUS_FAILED);
230 registry_json_footer(w);
231 registry_unlock();
232 return 404;
233 }
234
235 - registry_json_header(w, "search", REGISTRY_STATUS_OK);
235 + registry_json_header(host, w, "search", REGISTRY_STATUS_OK);
236
237 buffer_strcat(w->response.data, ",\n\t\"urls\": [");
238 struct registry_json_walk_person_urls_callback c = { NULL, m, w, 0 };
@@ -248,9 +248,9 @@ int registry_request_search_json(struct web_client *w, char *person_guid, char *
248 // SWITCH REQUEST
249
250 // the main method for switching user identity
251 -int registry_request_switch_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *new_person_guid, time_t when) {
251 +int registry_request_switch_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *new_person_guid, time_t when) {
252 if(!registry.enabled)
253 - return registry_json_disabled(w, "switch");
253 + return registry_json_disabled(host, w, "switch");
254
255 (void)url;
256 (void)when;
@@ -259,7 +259,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
259
260 REGISTRY_PERSON *op = registry_person_find(person_guid);
261 if(!op) {
262 - registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
262 + registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
263 registry_json_footer(w);
264 registry_unlock();
265 return 430;
@@ -267,7 +267,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
267
268 REGISTRY_PERSON *np = registry_person_find(new_person_guid);
269 if(!np) {
270 - registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
270 + registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
271 registry_json_footer(w);
272 registry_unlock();
273 return 431;
@@ -275,7 +275,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
275
276 REGISTRY_MACHINE *m = registry_machine_find(machine_guid);
277 if(!m) {
278 - registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
278 + registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
279 registry_json_footer(w);
280 registry_unlock();
281 return 432;
@@ -286,7 +286,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
286 // verify the old person has access to this machine
287 avl_traverse(&op->person_urls, registry_person_url_callback_verify_machine_exists, &data);
288 if(!data.count) {
289 - registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
289 + registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
290 registry_json_footer(w);
291 registry_unlock();
292 return 433;
@@ -296,7 +296,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
296 data.count = 0;
297 avl_traverse(&np->person_urls, registry_person_url_callback_verify_machine_exists, &data);
298 if(!data.count) {
299 - registry_json_header(w, "switch", REGISTRY_STATUS_FAILED);
299 + registry_json_header(host, w, "switch", REGISTRY_STATUS_FAILED);
300 registry_json_footer(w);
301 registry_unlock();
302 return 434;
@@ -307,7 +307,7 @@ int registry_request_switch_json(struct web_client *w, char *person_guid, char *
307 registry_set_person_cookie(w, np);
308
309 // generate the response
310 - registry_json_header(w, "switch", REGISTRY_STATUS_OK);
310 + registry_json_header(host, w, "switch", REGISTRY_STATUS_OK);
311 buffer_sprintf(w->response.data, ",\n\t\"person_guid\": \"%s\"", np->guid);
312 registry_json_footer(w);
313
src/registry.h
+5 -5
@@ -60,11 +60,11 @@ extern int registry_init(void);
60 extern void registry_free(void);
61
62 // HTTP requests handled by the registry
63 -extern int registry_request_access_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *name, time_t when);
64 -extern int registry_request_delete_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *delete_url, time_t when);
65 -extern int registry_request_search_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *request_machine, time_t when);
66 -extern int registry_request_switch_json(struct web_client *w, char *person_guid, char *machine_guid, char *url, char *new_person_guid, time_t when);
67 -extern int registry_request_hello_json(struct web_client *w);
63 +extern int registry_request_access_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *name, time_t when);
64 +extern int registry_request_delete_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *delete_url, time_t when);
65 +extern int registry_request_search_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *request_machine, time_t when);
66 +extern int registry_request_switch_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *new_person_guid, time_t when);
67 +extern int registry_request_hello_json(RRDHOST *host, struct web_client *w);
68
69 // update the registry monitoring charts
70 extern void registry_statistics(void);
src/rrd.h
+2 -2
@@ -122,7 +122,7 @@ struct rrddim {
122 // DO NOT FREE THIS - IT IS ALLOCATED IN CONFIG
123
124 RRD_ALGORITHM algorithm; // the algorithm that is applied to add new collected values
125 - RRD_MEMORY_MODE memory_mode; // the memory mode for this dimension
125 + RRD_MEMORY_MODE rrd_memory_mode; // the memory mode for this dimension
126
127 collected_number multiplier; // the multiplier of the collected values
128 collected_number divisor; // the divider of the collected values
@@ -235,7 +235,7 @@ struct rrdset {
235 // ------------------------------------------------------------------------
236 // members for temporary data we need for calculations
237
238 - int mapped; // if set to 1, this is memory mapped
238 + RRD_MEMORY_MODE rrd_memory_mode; // if set to 1, this is memory mapped
239
240 int debug;
241
src/rrddim.c
+7 -7
@@ -55,7 +55,7 @@ inline void rrddim_set_name(RRDSET *st, RRDDIM *rd, const char *name) {
55
56 RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_number multiplier, collected_number divisor, RRD_ALGORITHM algorithm) {
57 RRDDIM *rd = rrddim_find(st, id);
58 - if(rd) {
58 + if(unlikely(rd)) {
59 debug(D_RRD_CALLS, "Cannot create rrd dimension '%s/%s', it already exists.", st->id, name?name:"<NONAME>");
60 return rd;
61 }
@@ -71,20 +71,20 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
71 rrdset_strncpyz_name(filename, id, FILENAME_MAX);
72 snprintfz(fullfilename, FILENAME_MAX, "%s/%s.db", st->cache_dir, filename);
73
74 - if(st->rrdhost->rrd_memory_mode != RRD_MEMORY_MODE_RAM) {
75 - rd = (RRDDIM *)mymmap(fullfilename, size, ((st->rrdhost->rrd_memory_mode == RRD_MEMORY_MODE_MAP) ? MAP_SHARED : MAP_PRIVATE), 1);
74 + if(st->rrd_memory_mode != RRD_MEMORY_MODE_RAM) {
75 + rd = (RRDDIM *)mymmap(fullfilename, size, ((st->rrd_memory_mode == RRD_MEMORY_MODE_MAP) ? MAP_SHARED : MAP_PRIVATE), 1);
76 if(likely(rd)) {
77 // we have a file mapped for rd
78
79 + memset(&rd->avl, 0, sizeof(avl));
80 rd->id = NULL;
81 rd->name = NULL;
82 rd->cache_filename = NULL;
82 - rd->memory_mode = st->rrdhost->rrd_memory_mode;
83 rd->flags = 0x00000000;
84 rd->variables = NULL;
85 rd->next = NULL;
86 rd->rrdset = NULL;
87 - memset(&rd->avl, 0, sizeof(avl));
87 + rd->rrd_memory_mode = st->rrd_memory_mode;
88
89 struct timeval now;
90 now_realtime_timeval(&now);
@@ -130,7 +130,7 @@ RRDDIM *rrddim_add(RRDSET *st, const char *id, const char *name, collected_numbe
130 if(unlikely(!rd)) {
131 // if we didn't manage to get a mmap'd dimension, just create one
132 rd = callocz(1, size);
133 - rd->memory_mode = RRD_MEMORY_MODE_RAM;
133 + rd->rrd_memory_mode = RRD_MEMORY_MODE_RAM;
134 }
135
136 rd->memsize = size;
@@ -227,7 +227,7 @@ void rrddim_free(RRDSET *st, RRDDIM *rd)
227
228 // free(rd->annotations);
229
230 - switch(rd->memory_mode) {
230 + switch(rd->rrd_memory_mode) {
231 case RRD_MEMORY_MODE_SAVE:
232 debug(D_RRD_CALLS, "Saving dimension '%s' to '%s'.", rd->name, rd->cache_filename);
233 savememory(rd->cache_filename, rd, rd->memsize);
src/rrdhost.c
+7 -5
@@ -208,7 +208,7 @@ void rrdhost_free(RRDHOST *host) {
208
209 pthread_rwlock_unlock(&st->rwlock);
210
211 - if(st->mapped == RRD_MEMORY_MODE_SAVE || st->mapped == RRD_MEMORY_MODE_MAP) {
211 + if(st->rrd_memory_mode == RRD_MEMORY_MODE_SAVE || st->rrd_memory_mode == RRD_MEMORY_MODE_MAP) {
212 debug(D_RRD_CALLS, "Unmapping stats '%s'.", st->name);
213 munmap(st, st->memsize);
214 }
@@ -244,14 +244,14 @@ void rrdhost_save(RRDHOST *host) {
244 for(st = host->rrdset_root; st ; st = st->next) {
245 pthread_rwlock_rdlock(&st->rwlock);
246
247 - if(st->mapped == RRD_MEMORY_MODE_SAVE) {
248 - debug(D_RRD_CALLS, "Saving stats '%s' to '%s'.", st->name, st->cache_filename);
247 + if(st->rrd_memory_mode == RRD_MEMORY_MODE_SAVE) {
248 + debug(D_RRD_STATS, "Saving stats '%s' to '%s'.", st->name, st->cache_filename);
249 savememory(st->cache_filename, st, st->memsize);
250 }
251
252 for(rd = st->dimensions; rd ; rd = rd->next) {
253 - if(likely(rd->memory_mode == RRD_MEMORY_MODE_SAVE)) {
254 - debug(D_RRD_CALLS, "Saving dimension '%s' to '%s'.", rd->name, rd->cache_filename);
253 + if(likely(rd->rrd_memory_mode == RRD_MEMORY_MODE_SAVE)) {
254 + debug(D_RRD_STATS, "Saving dimension '%s' to '%s'.", rd->name, rd->cache_filename);
255 savememory(rd->cache_filename, rd, rd->memsize);
256 }
257 }
@@ -279,6 +279,8 @@ void rrdhost_free_all(void) {
279 }
280
281 void rrdhost_save_all(void) {
282 + info("Saving database...");
283 +
284 RRDHOST *host;
285 for(host = localhost; host ; host = host->next)
286 rrdhost_save(host);
src/rrdset.c
+2 -2
@@ -291,7 +291,7 @@ RRDSET *rrdset_create(RRDHOST *host, const char *type, const char *id, const cha
291 st->units = NULL;
292 st->dimensions = NULL;
293 st->next = NULL;
294 - st->mapped = host->rrd_memory_mode;
294 + st->rrd_memory_mode = host->rrd_memory_mode;
295 st->variables = NULL;
296 st->alarms = NULL;
297 memset(&st->rwlock, 0, sizeof(pthread_rwlock_t));
@@ -302,7 +302,7 @@ RRDSET *rrdset_create(RRDHOST *host, const char *type, const char *id, const cha
302 }
303 else {
304 st = callocz(1, size);
305 - st->mapped = RRD_MEMORY_MODE_RAM;
305 + st->rrd_memory_mode = RRD_MEMORY_MODE_RAM;
306 }
307
308 st->rrdhost = host;
src/web_client.c
+5 -5
@@ -1386,22 +1386,22 @@ int web_client_api_request_v1_registry(struct web_client *w, char *url)
1386 switch(action) {
1387 case 'A':
1388 w->tracking_required = 1;
1389 - return registry_request_access_json(w, person_guid, machine_guid, machine_url, url_name, now_realtime_sec());
1389 + return registry_request_access_json(localhost, w, person_guid, machine_guid, machine_url, url_name, now_realtime_sec());
1390
1391 case 'D':
1392 w->tracking_required = 1;
1393 - return registry_request_delete_json(w, person_guid, machine_guid, machine_url, delete_url, now_realtime_sec());
1393 + return registry_request_delete_json(localhost, w, person_guid, machine_guid, machine_url, delete_url, now_realtime_sec());
1394
1395 case 'S':
1396 w->tracking_required = 1;
1397 - return registry_request_search_json(w, person_guid, machine_guid, machine_url, search_machine_guid, now_realtime_sec());
1397 + return registry_request_search_json(localhost, w, person_guid, machine_guid, machine_url, search_machine_guid, now_realtime_sec());
1398
1399 case 'W':
1400 w->tracking_required = 1;
1401 - return registry_request_switch_json(w, person_guid, machine_guid, machine_url, to_person_guid, now_realtime_sec());
1401 + return registry_request_switch_json(localhost, w, person_guid, machine_guid, machine_url, to_person_guid, now_realtime_sec());
1402
1403 case 'H':
1404 - return registry_request_hello_json(w);
1404 + return registry_request_hello_json(localhost, w);
1405
1406 default:
1407 buffer_flush(w->response.data);