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);