@cryptotaxi247 / netdata-1 / commits / 6ef9b5ea5

Change query to store host system info values (#15300)

* change query to store host info * change define name * change rc check

Emmanuel Vasilakis committed Jul 4, 2023 at 15:40 UTC 6ef9b5ea5e375f5253981003294e26e3e3f5218e
1 file changed +85 -65
database/sqlite/sqlite_metadata.c
+85 -65
@@ -37,8 +37,8 @@
37
38 #define SELECT_DIMENSION_LIST "SELECT dim_id, rowid FROM dimension WHERE rowid > @row_id"
39
40 -#define STORE_HOST_INFO "INSERT OR REPLACE INTO host_info (host_id, system_key, system_value, date_created) VALUES "
41 -#define STORE_HOST_INFO_VALUES "(u2h('%s'), '%s','%s', unixepoch())"
40 +#define SQL_STORE_HOST_SYSTEM_INFO_VALUES "INSERT OR REPLACE INTO host_info (host_id, system_key, system_value, date_created) VALUES " \
41 + "(@uuid, @name, @value, unixepoch())"
42
43 #define MIGRATE_LOCALHOST_TO_NEW_MACHINE_GUID \
44 "UPDATE chart SET host_id = @host_id WHERE host_id in (SELECT host_id FROM host where host_id <> @host_id and hops = 0);"
@@ -378,59 +378,90 @@ bind_fail:
378 return 1;
379 }
380
381 -static void add_host_sysinfo_key_value(const char *name, const char *value, void *data)
381 +static int add_host_sysinfo_key_value(const char *name, const char *value, uuid_t *uuid)
382 {
383 - struct query_build *lb = data;
383 + static __thread sqlite3_stmt *res = NULL;
384 + int rc, param = 0;
385
385 - if (unlikely(!value))
386 - return;
386 + if (unlikely(!db_meta)) {
387 + if (default_rrd_memory_mode != RRD_MEMORY_MODE_DBENGINE)
388 + return 0;
389 + error_report("Database has not been initialized");
390 + return 0;
391 + }
392
388 - if (unlikely(!lb->count))
389 - buffer_sprintf(
390 - lb->sql, STORE_HOST_INFO);
391 - else
392 - buffer_strcat(lb->sql, ", ");
393 - buffer_sprintf(lb->sql, STORE_HOST_INFO_VALUES, lb->uuid_str, name, value);
394 - lb->count++;
393 + if (unlikely((!res))) {
394 + rc = prepare_statement(db_meta, SQL_STORE_HOST_SYSTEM_INFO_VALUES, &res);
395 + if (unlikely(rc != SQLITE_OK)) {
396 + error_report("Failed to prepare statement to store host info values, rc = %d", rc);
397 + return 0;
398 + }
399 + }
400 +
401 + rc = sqlite3_bind_blob(res, ++param, uuid, sizeof(*uuid), SQLITE_STATIC);
402 + if (unlikely(rc != SQLITE_OK))
403 + goto bind_fail;
404 +
405 + rc = bind_text_null(res, ++param, name, 0);
406 + if (unlikely(rc != SQLITE_OK))
407 + goto bind_fail;
408 +
409 + rc = bind_text_null(res, ++param, value, 1);
410 + if (unlikely(rc != SQLITE_OK))
411 + goto bind_fail;
412 +
413 + int store_rc = sqlite3_step_monitored(res);
414 + if (unlikely(store_rc != SQLITE_DONE))
415 + error_report("Failed to store host info value %s, rc = %d", name, rc);
416 +
417 + rc = sqlite3_reset(res);
418 + if (unlikely(rc != SQLITE_OK))
419 + error_report("Failed to reset statement to store host info value %s, rc = %d", name, rc);
420 +
421 + return store_rc == SQLITE_DONE;
422 +bind_fail:
423 + error_report("Failed to bind %d parameter to store host info values %s, rc = %d", param, name, rc);
424 + rc = sqlite3_reset(res);
425 + if (unlikely(rc != SQLITE_OK))
426 + error_report("Failed to reset statement to store host info values %s, rc = %d", name, rc);
427 + return 0;
428 }
429
397 -static bool build_host_system_info_statements(RRDHOST *host, BUFFER *work_buffer)
430 +static bool store_host_systeminfo(RRDHOST *host)
431 {
432 struct rrdhost_system_info *system_info = host->system_info;
433
434 if (unlikely(!system_info))
435 return false;
436
404 - buffer_flush(work_buffer);
405 - struct query_build key_data = {.sql = work_buffer, .count = 0};
406 - uuid_unparse_lower(host->host_uuid, key_data.uuid_str);
407 -
408 - add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_NAME", system_info->container_os_name, &key_data);
409 - add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_ID", system_info->container_os_id, &key_data);
410 - add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_ID_LIKE", system_info->container_os_id_like, &key_data);
411 - add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_VERSION", system_info->container_os_version, &key_data);
412 - add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_VERSION_ID", system_info->container_os_version_id, &key_data);
413 - add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_DETECTION", system_info->host_os_detection, &key_data);
414 - add_host_sysinfo_key_value("NETDATA_HOST_OS_NAME", system_info->host_os_name, &key_data);
415 - add_host_sysinfo_key_value("NETDATA_HOST_OS_ID", system_info->host_os_id, &key_data);
416 - add_host_sysinfo_key_value("NETDATA_HOST_OS_ID_LIKE", system_info->host_os_id_like, &key_data);
417 - add_host_sysinfo_key_value("NETDATA_HOST_OS_VERSION", system_info->host_os_version, &key_data);
418 - add_host_sysinfo_key_value("NETDATA_HOST_OS_VERSION_ID", system_info->host_os_version_id, &key_data);
419 - add_host_sysinfo_key_value("NETDATA_HOST_OS_DETECTION", system_info->host_os_detection, &key_data);
420 - add_host_sysinfo_key_value("NETDATA_SYSTEM_KERNEL_NAME", system_info->kernel_name, &key_data);
421 - add_host_sysinfo_key_value("NETDATA_SYSTEM_CPU_LOGICAL_CPU_COUNT", system_info->host_cores, &key_data);
422 - add_host_sysinfo_key_value("NETDATA_SYSTEM_CPU_FREQ", system_info->host_cpu_freq, &key_data);
423 - add_host_sysinfo_key_value("NETDATA_SYSTEM_TOTAL_RAM", system_info->host_ram_total, &key_data);
424 - add_host_sysinfo_key_value("NETDATA_SYSTEM_TOTAL_DISK_SIZE", system_info->host_disk_space, &key_data);
425 - add_host_sysinfo_key_value("NETDATA_SYSTEM_KERNEL_VERSION", system_info->kernel_version, &key_data);
426 - add_host_sysinfo_key_value("NETDATA_SYSTEM_ARCHITECTURE", system_info->architecture, &key_data);
427 - add_host_sysinfo_key_value("NETDATA_SYSTEM_VIRTUALIZATION", system_info->virtualization, &key_data);
428 - add_host_sysinfo_key_value("NETDATA_SYSTEM_VIRT_DETECTION", system_info->virt_detection, &key_data);
429 - add_host_sysinfo_key_value("NETDATA_SYSTEM_CONTAINER", system_info->container, &key_data);
430 - add_host_sysinfo_key_value("NETDATA_SYSTEM_CONTAINER_DETECTION", system_info->container_detection, &key_data);
431 - add_host_sysinfo_key_value("NETDATA_HOST_IS_K8S_NODE", system_info->is_k8s_node, &key_data);
432 -
433 - return true;
437 + int ret = 0;
438 +
439 + ret += add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_NAME", system_info->container_os_name, &host->host_uuid);
440 + ret += add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_ID", system_info->container_os_id, &host->host_uuid);
441 + ret += add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_ID_LIKE", system_info->container_os_id_like, &host->host_uuid);
442 + ret += add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_VERSION", system_info->container_os_version, &host->host_uuid);
443 + ret += add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_VERSION_ID", system_info->container_os_version_id, &host->host_uuid);
444 + ret += add_host_sysinfo_key_value("NETDATA_CONTAINER_OS_DETECTION", system_info->host_os_detection, &host->host_uuid);
445 + ret += add_host_sysinfo_key_value("NETDATA_HOST_OS_NAME", system_info->host_os_name, &host->host_uuid);
446 + ret += add_host_sysinfo_key_value("NETDATA_HOST_OS_ID", system_info->host_os_id, &host->host_uuid);
447 + ret += add_host_sysinfo_key_value("NETDATA_HOST_OS_ID_LIKE", system_info->host_os_id_like, &host->host_uuid);
448 + ret += add_host_sysinfo_key_value("NETDATA_HOST_OS_VERSION", system_info->host_os_version, &host->host_uuid);
449 + ret += add_host_sysinfo_key_value("NETDATA_HOST_OS_VERSION_ID", system_info->host_os_version_id, &host->host_uuid);
450 + ret += add_host_sysinfo_key_value("NETDATA_HOST_OS_DETECTION", system_info->host_os_detection, &host->host_uuid);
451 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_KERNEL_NAME", system_info->kernel_name, &host->host_uuid);
452 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_CPU_LOGICAL_CPU_COUNT", system_info->host_cores, &host->host_uuid);
453 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_CPU_FREQ", system_info->host_cpu_freq, &host->host_uuid);
454 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_TOTAL_RAM", system_info->host_ram_total, &host->host_uuid);
455 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_TOTAL_DISK_SIZE", system_info->host_disk_space, &host->host_uuid);
456 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_KERNEL_VERSION", system_info->kernel_version, &host->host_uuid);
457 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_ARCHITECTURE", system_info->architecture, &host->host_uuid);
458 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_VIRTUALIZATION", system_info->virtualization, &host->host_uuid);
459 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_VIRT_DETECTION", system_info->virt_detection, &host->host_uuid);
460 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_CONTAINER", system_info->container, &host->host_uuid);
461 + ret += add_host_sysinfo_key_value("NETDATA_SYSTEM_CONTAINER_DETECTION", system_info->container_detection, &host->host_uuid);
462 + ret += add_host_sysinfo_key_value("NETDATA_HOST_IS_K8S_NODE", system_info->is_k8s_node, &host->host_uuid);
463 +
464 + return !(24 == ret);
465 }
466
467
@@ -1067,23 +1098,15 @@ static bool metadata_scan_host(RRDHOST *host, uint32_t max_count, bool use_trans
1098 return more_to_do;
1099 }
1100
1070 -static void store_host_and_system_info(RRDHOST *host, BUFFER *work_buffer, size_t *query_counter)
1101 +static void store_host_and_system_info(RRDHOST *host, size_t *query_counter)
1102 {
1072 - bool free_work_buffer = (NULL == work_buffer);
1073 -
1074 - if (unlikely(free_work_buffer))
1075 - work_buffer = buffer_create(1024, &netdata_buffers_statistics.buffers_sqlite);
1076 -
1077 - if (build_host_system_info_statements(host, work_buffer)) {
1078 - int rc = db_execute(db_meta, buffer_tostring(work_buffer));
1079 - if (unlikely(rc)) {
1080 - error_report("METADATA: 'host:%s': Failed to store host updated information in the database", rrdhost_hostname(host));
1081 - rrdhost_flag_set(host, RRDHOST_FLAG_METADATA_INFO | RRDHOST_FLAG_METADATA_UPDATE);
1082 - }
1083 - else {
1084 - if (likely(query_counter))
1085 - (*query_counter)++;
1086 - }
1103 + if (unlikely(store_host_systeminfo(host))) {
1104 + error_report("METADATA: 'host:%s': Failed to store host updated system information in the database", rrdhost_hostname(host));
1105 + rrdhost_flag_set(host, RRDHOST_FLAG_METADATA_INFO | RRDHOST_FLAG_METADATA_UPDATE);
1106 + }
1107 + else {
1108 + if (likely(query_counter))
1109 + (*query_counter)++;
1110 }
1111
1112 if (unlikely(store_host_metadata(host))) {
@@ -1094,9 +1117,6 @@ static void store_host_and_system_info(RRDHOST *host, BUFFER *work_buffer, size_
1117 if (likely(query_counter))
1118 (*query_counter)++;
1119 }
1097 -
1098 - if (unlikely(free_work_buffer))
1099 - buffer_free(work_buffer);
1120 }
1121
1122 // Worker thread to scan hosts for pending metadata to store
@@ -1170,7 +1190,7 @@ static void start_metadata_hosts(uv_work_t *req __maybe_unused)
1190 }
1191 if (unlikely(rrdhost_flag_check(host, RRDHOST_FLAG_METADATA_INFO))) {
1192 rrdhost_flag_clear(host, RRDHOST_FLAG_METADATA_INFO);
1173 - store_host_and_system_info(host, work_buffer, &query_counter);
1193 + store_host_and_system_info(host, &query_counter);
1194 }
1195
1196 // For clarity
@@ -1309,7 +1329,7 @@ static void metadata_event_loop(void *arg)
1329 break;
1330 case METADATA_ADD_HOST_INFO:
1331 host = (RRDHOST *) cmd.param[0];
1312 - store_host_and_system_info(host, NULL, NULL);
1332 + store_host_and_system_info(host, NULL);
1333 break;
1334 case METADATA_SCAN_HOSTS:
1335 if (unlikely(metadata_flag_check(wc, METADATA_FLAG_SCANNING_HOSTS)))