@cryptotaxi247 / netdata-1 / commits / 3d7f07fb3

Log ACLK cloud commands to access.log (#10697)

Stelios Fragkakis committed Mar 4, 2021 at 23:28 UTC 3d7f07fb3f1f99aded340e9b7acc90e6d49c3ec2
3 files changed +52 -4
aclk/legacy/aclk_query.c
+50 -3
@@ -22,6 +22,7 @@ static netdata_mutex_t queue_mutex = NETDATA_MUTEX_INITIALIZER;
22
23 struct aclk_query {
24 usec_t created;
25 + struct timeval tv_in;
26 usec_t created_boot_time;
27 time_t run_after; // Delay run until after this time
28 ACLK_CMD cmd; // What command is this
@@ -30,6 +31,7 @@ struct aclk_query {
31 char *msg_id; // msg_id generated by the cloud (NULL if internal)
32 char *query; // The actual query
33 u_char deleted; // Mark deleted for garbage collect
34 + int idx; // index of query thread
35 struct aclk_query *next;
36 };
37
@@ -237,7 +239,8 @@ int aclk_queue_query(char *topic, void *data, char *msg_id, char *query, int run
239
240 new_query->data = data;
241 new_query->next = NULL;
240 - new_query->created = now_realtime_usec();
242 + now_realtime_timeval(&new_query->tv_in);
243 + new_query->created = (new_query->tv_in.tv_sec * USEC_PER_SEC) + new_query->tv_in.tv_usec;
244 new_query->created_boot_time = now_boottime_usec();
245 new_query->run_after = run_after;
246
@@ -325,6 +328,7 @@ static char *aclk_encode_response(char *src, size_t content_size, int keep_newli
328 #pragma region ACLK_QUERY
329 #endif
330
331 +
332 static usec_t aclk_web_api_request_v1(RRDHOST *host, struct web_client *w, char *url, usec_t q_created)
333 {
334 usec_t t = now_boottime_usec();
@@ -360,8 +364,11 @@ static int aclk_execute_query(struct aclk_query *this_query)
364 mysep = strrchr(this_query->query, '/');
365
366 // TODO: handle bad response perhaps in a different way. For now it does to the payload
363 - aclk_web_api_request_v1(localhost, w, mysep ? mysep + 1 : "noop", this_query->created_boot_time);
367 + w->tv_in = this_query->tv_in;
368 now_realtime_timeval(&w->tv_ready);
369 + aclk_web_api_request_v1(localhost, w, mysep ? mysep + 1 : "noop", this_query->created_boot_time);
370 + size_t size = w->response.data->len;
371 + size_t sent = size;
372 w->response.data->date = w->tv_ready.tv_sec;
373 web_client_build_http_header(w); // TODO: this function should offset from date, not tv_ready
374 BUFFER *local_buffer = buffer_create(NETDATA_WEB_RESPONSE_INITIAL_SIZE);
@@ -383,6 +390,24 @@ static int aclk_execute_query(struct aclk_query *this_query)
390
391 aclk_send_message(this_query->topic, local_buffer->buffer, this_query->msg_id);
392
393 + struct timeval tv;
394 + now_realtime_timeval(&tv);
395 +
396 + log_access("%llu: %d '[ACLK]:%d' '%s' (sent/all = %zu/%zu bytes %0.0f%%, prep/sent/total = %0.2f/%0.2f/%0.2f ms) %d '%s'",
397 + w->id
398 + , gettid()
399 + , this_query->idx
400 + , "DATA"
401 + , sent
402 + , size
403 + , size > sent ? -((size > 0) ? (((size - sent) / (double) size) * 100.0) : 0.0) : ((size > 0) ? (((sent - size ) / (double) size) * 100.0) : 0.0)
404 + , dt_usec(&w->tv_ready, &w->tv_in) / 1000.0
405 + , dt_usec(&tv, &w->tv_ready) / 1000.0
406 + , dt_usec(&tv, &w->tv_in) / 1000.0
407 + , w->response.code
408 + , strip_control_characters(this_query->query)
409 + );
410 +
411 buffer_free(w->response.data);
412 buffer_free(w->response.header);
413 buffer_free(w->response.header_output);
@@ -427,7 +452,11 @@ static int aclk_execute_query_v2(struct aclk_query *this_query)
452 mysep = strrchr(this_query->query, '/');
453
454 // execute the query
455 + w->tv_in = this_query->tv_in;
456 + now_realtime_timeval(&w->tv_ready);
457 t = aclk_web_api_request_v1(cloud_req->host, w, mysep ? mysep + 1 : "noop", this_query->created_boot_time);
458 + size_t size = (w->mode == WEB_CLIENT_MODE_FILECOPY)?w->response.rlen:w->response.data->len;
459 + size_t sent = size;
460
461 #ifdef NETDATA_WITH_ZLIB
462 // check if gzip encoding can and should be used
@@ -476,7 +505,6 @@ static int aclk_execute_query_v2(struct aclk_query *this_query)
505 }
506 #endif
507
479 - now_realtime_timeval(&w->tv_ready);
508 w->response.data->date = w->tv_ready.tv_sec;
509 web_client_build_http_header(w);
510 local_buffer = buffer_create(NETDATA_WEB_RESPONSE_INITIAL_SIZE);
@@ -493,6 +521,7 @@ static int aclk_execute_query_v2(struct aclk_query *this_query)
521 buffer_need_bytes(local_buffer, w->response.data->len);
522 memcpy(&local_buffer->buffer[local_buffer->len], w->response.data->buffer, w->response.data->len);
523 local_buffer->len += w->response.data->len;
524 + sent = sent - size + w->response.data->len;
525 } else {
526 #endif
527 buffer_strcat(local_buffer, w->response.data->buffer);
@@ -503,6 +532,23 @@ static int aclk_execute_query_v2(struct aclk_query *this_query)
532
533 aclk_send_message_bin(this_query->topic, local_buffer->buffer, local_buffer->len, this_query->msg_id);
534
535 + struct timeval tv;
536 + now_realtime_timeval(&tv);
537 +
538 + log_access("%llu: %d '[ACLK]:%d' '%s' (sent/all = %zu/%zu bytes %0.0f%%, prep/sent/total = %0.2f/%0.2f/%0.2f ms) %d '%s'",
539 + w->id
540 + , gettid()
541 + , this_query->idx
542 + , "DATA"
543 + , sent
544 + , size
545 + , size > sent ? -((size > 0) ? (((size - sent) / (double) size) * 100.0) : 0.0) : ((size > 0) ? (((sent - size ) / (double) size) * 100.0) : 0.0)
546 + , dt_usec(&w->tv_ready, &w->tv_in) / 1000.0
547 + , dt_usec(&tv, &w->tv_ready) / 1000.0
548 + , dt_usec(&tv, &w->tv_in) / 1000.0
549 + , w->response.code
550 + , strip_control_characters(this_query->query)
551 + );
552 cleanup:
553 #ifdef NETDATA_WITH_ZLIB
554 if(w->response.zinitialized)
@@ -551,6 +597,7 @@ static int aclk_process_query(struct aclk_query_thread *t_info)
597 query_count++;
598
599 host = (RRDHOST*)this_query->data;
600 + this_query->idx = t_info->idx;
601
602 debug(
603 D_ACLK, "Query #%ld (%s) size=%zu in queue %llu ms", query_count, this_query->topic,
web/server/web_client.c
+1 -1
@@ -55,7 +55,7 @@ static inline int web_client_uncrock_socket(struct web_client *w) {
55 return 0;
56 }
57
58 -static inline char *strip_control_characters(char *url) {
58 +char *strip_control_characters(char *url) {
59 char *s = url;
60 if(!s) return "";
61
web/server/web_client.h
+1
@@ -211,6 +211,7 @@ extern void buffer_data_options2string(BUFFER *wb, uint32_t options);
211 extern int mysendfile(struct web_client *w, char *filename);
212
213 extern void web_client_build_http_header(struct web_client *w);
214 +extern char *strip_control_characters(char *url);
215
216 #include "daemon/common.h"
217