Implemented the HOST command in metadata log replay (#9489)
This commit is contained in:
parent
36f0ad220e
commit
5871b37cf6
|
@ -627,6 +627,33 @@ PARSER_RC pluginsd_tombstone(char **words, void *user, PLUGINSD_ACTION *plugins_
|
||||||
return PARSER_RC_OK;
|
return PARSER_RC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PARSER_RC metalog_pluginsd_host(char **words, void *user, PLUGINSD_ACTION *plugins_action)
|
||||||
|
{
|
||||||
|
char *machine_guid = words[1];
|
||||||
|
char *hostname = words[2];
|
||||||
|
char *registry_hostname = words[3];
|
||||||
|
char *update_every_s = words[4];
|
||||||
|
char *os = words[5];
|
||||||
|
char *timezone = words[6];
|
||||||
|
char *tags = words[7];
|
||||||
|
|
||||||
|
int update_every = 1;
|
||||||
|
if (likely(update_every_s && *update_every_s))
|
||||||
|
update_every = str2i(update_every_s);
|
||||||
|
if (unlikely(!update_every))
|
||||||
|
update_every = 1;
|
||||||
|
|
||||||
|
debug(D_PLUGINSD, "HOST PARSED: guid=%s, hostname=%s, reg_host=%s, update=%d, os=%s, timezone=%s, tags=%s",
|
||||||
|
machine_guid, hostname, registry_hostname, update_every, os, timezone, tags);
|
||||||
|
|
||||||
|
if (plugins_action->host_action) {
|
||||||
|
return plugins_action->host_action(
|
||||||
|
user, machine_guid, hostname, registry_hostname, update_every, os, timezone, tags);
|
||||||
|
}
|
||||||
|
|
||||||
|
return PARSER_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// New plugins.d parser
|
// New plugins.d parser
|
||||||
|
|
||||||
inline size_t pluginsd_process(RRDHOST *host, struct plugind *cd, FILE *fp, int trust_durations)
|
inline size_t pluginsd_process(RRDHOST *host, struct plugind *cd, FILE *fp, int trust_durations)
|
||||||
|
|
|
@ -155,6 +155,7 @@ GUID_TYPE find_object_by_guid(uuid_t *uuid, char *object, size_t max_bytes)
|
||||||
return GUID_TYPE_NOSPACE;
|
return GUID_TYPE_NOSPACE;
|
||||||
strncpyz(object, (char *) *PValue+1, max_bytes - 1);
|
strncpyz(object, (char *) *PValue+1, max_bytes - 1);
|
||||||
break;
|
break;
|
||||||
|
case GUID_TYPE_HOST:
|
||||||
case GUID_TYPE_CHART:
|
case GUID_TYPE_CHART:
|
||||||
case GUID_TYPE_DIMENSION:
|
case GUID_TYPE_DIMENSION:
|
||||||
if (unlikely(max_bytes < (size_t) value_type * 16))
|
if (unlikely(max_bytes < (size_t) value_type * 16))
|
||||||
|
@ -221,6 +222,11 @@ int find_or_generate_guid(void *object, uuid_t *uuid, GUID_TYPE object_type, int
|
||||||
memcpy(target_object + 1, (((RRDSET *)object))->rrdhost->host_uuid, 16);
|
memcpy(target_object + 1, (((RRDSET *)object))->rrdhost->host_uuid, 16);
|
||||||
memcpy(target_object + 17, temp_uuid, 16);
|
memcpy(target_object + 17, temp_uuid, 16);
|
||||||
break;
|
break;
|
||||||
|
case GUID_TYPE_HOST:
|
||||||
|
target_object = mallocz(17);
|
||||||
|
target_object[0] = object_type;
|
||||||
|
memcpy(target_object + 1, (((RRDHOST *)object))->host_uuid, 16);
|
||||||
|
break;
|
||||||
case GUID_TYPE_CHAR:
|
case GUID_TYPE_CHAR:
|
||||||
target_object = mallocz(strlen((char *) object)+2);
|
target_object = mallocz(strlen((char *) object)+2);
|
||||||
target_object[0] = object_type;
|
target_object[0] = object_type;
|
||||||
|
|
|
@ -79,10 +79,10 @@ static void compaction_test_quota(struct metalog_worker_config *wc)
|
||||||
static void compact_record_by_uuid(struct metalog_instance *ctx, uuid_t *uuid)
|
static void compact_record_by_uuid(struct metalog_instance *ctx, uuid_t *uuid)
|
||||||
{
|
{
|
||||||
GUID_TYPE ret;
|
GUID_TYPE ret;
|
||||||
RRDHOST *host = ctx->rrdeng_ctx->host;
|
|
||||||
RRDSET *st;
|
RRDSET *st;
|
||||||
RRDDIM *rd;
|
RRDDIM *rd;
|
||||||
BUFFER *buffer;
|
BUFFER *buffer;
|
||||||
|
RRDHOST *host = ctx->rrdeng_ctx->host;
|
||||||
|
|
||||||
ret = find_object_by_guid(uuid, NULL, 0);
|
ret = find_object_by_guid(uuid, NULL, 0);
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
|
@ -92,6 +92,11 @@ static void compact_record_by_uuid(struct metalog_instance *ctx, uuid_t *uuid)
|
||||||
case GUID_TYPE_CHART:
|
case GUID_TYPE_CHART:
|
||||||
st = metalog_get_chart_from_uuid(ctx, uuid);
|
st = metalog_get_chart_from_uuid(ctx, uuid);
|
||||||
if (st) {
|
if (st) {
|
||||||
|
if (ctx->current_compaction_id > st->rrdhost->compaction_id) {
|
||||||
|
error("Forcing compaction of HOST %s from CHART %s", st->rrdhost->hostname, st->id);
|
||||||
|
compact_record_by_uuid(ctx, &st->rrdhost->host_uuid);
|
||||||
|
}
|
||||||
|
|
||||||
if (ctx->current_compaction_id > st->compaction_id) {
|
if (ctx->current_compaction_id > st->compaction_id) {
|
||||||
st->compaction_id = ctx->current_compaction_id;
|
st->compaction_id = ctx->current_compaction_id;
|
||||||
buffer = metalog_update_chart_buffer(st, ctx->current_compaction_id);
|
buffer = metalog_update_chart_buffer(st, ctx->current_compaction_id);
|
||||||
|
@ -106,11 +111,13 @@ static void compact_record_by_uuid(struct metalog_instance *ctx, uuid_t *uuid)
|
||||||
case GUID_TYPE_DIMENSION:
|
case GUID_TYPE_DIMENSION:
|
||||||
rd = metalog_get_dimension_from_uuid(ctx, uuid);
|
rd = metalog_get_dimension_from_uuid(ctx, uuid);
|
||||||
if (rd) {
|
if (rd) {
|
||||||
|
if (ctx->current_compaction_id > rd->rrdset->rrdhost->compaction_id) {
|
||||||
|
error("Forcing compaction of HOST %s", rd->rrdset->rrdhost->hostname);
|
||||||
|
compact_record_by_uuid(ctx, &rd->rrdset->rrdhost->host_uuid);
|
||||||
|
}
|
||||||
if (ctx->current_compaction_id > rd->rrdset->compaction_id) {
|
if (ctx->current_compaction_id > rd->rrdset->compaction_id) {
|
||||||
error("Forcing compaction of chart %s", rd->rrdset->id);
|
error("Forcing compaction of CHART %s", rd->rrdset->id);
|
||||||
rd->rrdset->compaction_id = ctx->current_compaction_id;
|
compact_record_by_uuid(ctx, rd->rrdset->chart_uuid);
|
||||||
buffer = metalog_update_chart_buffer(rd->rrdset, ctx->current_compaction_id);
|
|
||||||
metalog_commit_record(ctx, buffer, METALOG_COMMIT_CREATION_RECORD, rd->rrdset->chart_uuid, 1);
|
|
||||||
} else if (ctx->current_compaction_id > rd->state->compaction_id) {
|
} else if (ctx->current_compaction_id > rd->state->compaction_id) {
|
||||||
rd->state->compaction_id = ctx->current_compaction_id;
|
rd->state->compaction_id = ctx->current_compaction_id;
|
||||||
buffer = metalog_update_dimension_buffer(rd);
|
buffer = metalog_update_dimension_buffer(rd);
|
||||||
|
@ -123,6 +130,8 @@ static void compact_record_by_uuid(struct metalog_instance *ctx, uuid_t *uuid)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GUID_TYPE_HOST:
|
case GUID_TYPE_HOST:
|
||||||
|
//TODO: will be enabled when multidb is activated
|
||||||
|
//RRDHOST *host = metalog_get_host_from_uuid(ctx, uuid);
|
||||||
if (ctx->current_compaction_id > host->compaction_id) {
|
if (ctx->current_compaction_id > host->compaction_id) {
|
||||||
host->compaction_id = ctx->current_compaction_id;
|
host->compaction_id = ctx->current_compaction_id;
|
||||||
buffer = metalog_update_host_buffer(host);
|
buffer = metalog_update_host_buffer(host);
|
||||||
|
|
|
@ -675,6 +675,7 @@ static int scan_metalog_files(struct metalog_instance *ctx)
|
||||||
failed_to_load = matched_files;
|
failed_to_load = matched_files;
|
||||||
goto after_failed_to_parse;
|
goto after_failed_to_parse;
|
||||||
}
|
}
|
||||||
|
parser_add_keyword(parser, PLUGINSD_KEYWORD_HOST, metalog_pluginsd_host);
|
||||||
parser_add_keyword(parser, PLUGINSD_KEYWORD_GUID, pluginsd_guid);
|
parser_add_keyword(parser, PLUGINSD_KEYWORD_GUID, pluginsd_guid);
|
||||||
parser_add_keyword(parser, PLUGINSD_KEYWORD_CONTEXT, pluginsd_context);
|
parser_add_keyword(parser, PLUGINSD_KEYWORD_CONTEXT, pluginsd_context);
|
||||||
parser_add_keyword(parser, PLUGINSD_KEYWORD_TOMBSTONE, pluginsd_tombstone);
|
parser_add_keyword(parser, PLUGINSD_KEYWORD_TOMBSTONE, pluginsd_tombstone);
|
||||||
|
@ -683,6 +684,8 @@ static int scan_metalog_files(struct metalog_instance *ctx)
|
||||||
parser->plugins_action->guid_action = &metalog_pluginsd_guid_action;
|
parser->plugins_action->guid_action = &metalog_pluginsd_guid_action;
|
||||||
parser->plugins_action->context_action = &metalog_pluginsd_context_action;
|
parser->plugins_action->context_action = &metalog_pluginsd_context_action;
|
||||||
parser->plugins_action->tombstone_action = &metalog_pluginsd_tombstone_action;
|
parser->plugins_action->tombstone_action = &metalog_pluginsd_tombstone_action;
|
||||||
|
parser->plugins_action->host_action = &metalog_pluginsd_host_action;
|
||||||
|
|
||||||
|
|
||||||
metalog_parser_object.parser = parser;
|
metalog_parser_object.parser = parser;
|
||||||
ctx->metalog_parser_object = &metalog_parser_object;
|
ctx->metalog_parser_object = &metalog_parser_object;
|
||||||
|
|
|
@ -266,6 +266,22 @@ void metalog_commit_delete_dimension(RRDDIM *rd)
|
||||||
metalog_commit_deletion_record(ctx, buffer);
|
metalog_commit_deletion_record(ctx, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RRDHOST *metalog_get_host_from_uuid(struct metalog_instance *ctx, uuid_t *host_guid)
|
||||||
|
{
|
||||||
|
UNUSED(ctx);
|
||||||
|
GUID_TYPE ret;
|
||||||
|
char machine_guid[37];
|
||||||
|
|
||||||
|
uuid_unparse_lower(*host_guid, machine_guid);
|
||||||
|
ret = find_object_by_guid(host_guid, NULL, 0);
|
||||||
|
if (unlikely(GUID_TYPE_HOST != ret)) {
|
||||||
|
error("Host with GUID %s not found in the global map", machine_guid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
RRDHOST *host = rrdhost_find_by_guid(machine_guid, 0);
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
RRDSET *metalog_get_chart_from_uuid(struct metalog_instance *ctx, uuid_t *chart_uuid)
|
RRDSET *metalog_get_chart_from_uuid(struct metalog_instance *ctx, uuid_t *chart_uuid)
|
||||||
{
|
{
|
||||||
GUID_TYPE ret;
|
GUID_TYPE ret;
|
||||||
|
|
|
@ -16,6 +16,7 @@ extern void metalog_commit_delete_dimension(RRDDIM *rd);
|
||||||
|
|
||||||
extern RRDSET *metalog_get_chart_from_uuid(struct metalog_instance *ctx, uuid_t *chart_uuid);
|
extern RRDSET *metalog_get_chart_from_uuid(struct metalog_instance *ctx, uuid_t *chart_uuid);
|
||||||
extern RRDDIM *metalog_get_dimension_from_uuid(struct metalog_instance *ctx, uuid_t *metric_uuid);
|
extern RRDDIM *metalog_get_dimension_from_uuid(struct metalog_instance *ctx, uuid_t *metric_uuid);
|
||||||
|
extern RRDHOST *metalog_get_host_from_uuid(struct metalog_instance *ctx, uuid_t *uuid);
|
||||||
extern void metalog_delete_dimension_by_uuid(struct metalog_instance *ctx, uuid_t *metric_uuid);
|
extern void metalog_delete_dimension_by_uuid(struct metalog_instance *ctx, uuid_t *metric_uuid);
|
||||||
|
|
||||||
/* must call once before using anything */
|
/* must call once before using anything */
|
||||||
|
|
|
@ -4,6 +4,63 @@
|
||||||
#include "metadatalog.h"
|
#include "metadatalog.h"
|
||||||
#include "metalogpluginsd.h"
|
#include "metalogpluginsd.h"
|
||||||
|
|
||||||
|
PARSER_RC metalog_pluginsd_host_action(
|
||||||
|
void *user, char *machine_guid, char *hostname, char *registry_hostname, int update_every, char *os, char *timezone,
|
||||||
|
char *tags)
|
||||||
|
{
|
||||||
|
struct metalog_pluginsd_state *state = ((PARSER_USER_OBJECT *)user)->private;
|
||||||
|
|
||||||
|
RRDHOST *host = rrdhost_find_by_guid(machine_guid, 0);
|
||||||
|
if (host)
|
||||||
|
goto write_replay;
|
||||||
|
|
||||||
|
if (strcmp(machine_guid, registry_get_this_machine_guid()) == 0) {
|
||||||
|
struct metalog_record record;
|
||||||
|
struct metadata_logfile *metalogfile = state->metalogfile;
|
||||||
|
|
||||||
|
uuid_parse(machine_guid, record.uuid);
|
||||||
|
mlf_record_insert(metalogfile, &record);
|
||||||
|
return PARSER_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore HOST command for now
|
||||||
|
// TODO: Remove when the next task is completed ie. accept new children in the lcoalhost / multidb
|
||||||
|
return PARSER_RC_OK;
|
||||||
|
|
||||||
|
host = rrdhost_create(
|
||||||
|
hostname
|
||||||
|
, registry_hostname
|
||||||
|
, machine_guid
|
||||||
|
, os
|
||||||
|
, timezone
|
||||||
|
, tags
|
||||||
|
, NULL
|
||||||
|
, NULL
|
||||||
|
, update_every
|
||||||
|
, 3600
|
||||||
|
, RRD_MEMORY_MODE_DBENGINE
|
||||||
|
, 0 // health enabled
|
||||||
|
, 0 // Push enabled
|
||||||
|
, NULL
|
||||||
|
, NULL
|
||||||
|
, NULL
|
||||||
|
, callocz(1, sizeof(struct rrdhost_system_info))
|
||||||
|
, 0 // localhost
|
||||||
|
, 1 // archived
|
||||||
|
);
|
||||||
|
|
||||||
|
write_replay:
|
||||||
|
if (host) { /* It's a valid object */
|
||||||
|
struct metalog_record record;
|
||||||
|
struct metadata_logfile *metalogfile = state->metalogfile;
|
||||||
|
|
||||||
|
uuid_copy(record.uuid, host->host_uuid);
|
||||||
|
mlf_record_insert(metalogfile, &record);
|
||||||
|
}
|
||||||
|
|
||||||
|
return PARSER_RC_OK;
|
||||||
|
}
|
||||||
|
|
||||||
PARSER_RC metalog_pluginsd_chart_action(void *user, char *type, char *id, char *name, char *family, char *context,
|
PARSER_RC metalog_pluginsd_chart_action(void *user, char *type, char *id, char *name, char *family, char *context,
|
||||||
char *title, char *units, char *plugin, char *module, int priority,
|
char *title, char *units, char *plugin, char *module, int priority,
|
||||||
int update_every, RRDSET_TYPE chart_type, char *options)
|
int update_every, RRDSET_TYPE chart_type, char *options)
|
||||||
|
|
|
@ -25,5 +25,7 @@ extern PARSER_RC metalog_pluginsd_dimension_action(void *user, RRDSET *st, char
|
||||||
extern PARSER_RC metalog_pluginsd_guid_action(void *user, uuid_t *uuid);
|
extern PARSER_RC metalog_pluginsd_guid_action(void *user, uuid_t *uuid);
|
||||||
extern PARSER_RC metalog_pluginsd_context_action(void *user, uuid_t *uuid);
|
extern PARSER_RC metalog_pluginsd_context_action(void *user, uuid_t *uuid);
|
||||||
extern PARSER_RC metalog_pluginsd_tombstone_action(void *user, uuid_t *uuid);
|
extern PARSER_RC metalog_pluginsd_tombstone_action(void *user, uuid_t *uuid);
|
||||||
|
extern PARSER_RC metalog_pluginsd_host(char **words, void *user, PLUGINSD_ACTION *plugins_action);
|
||||||
|
extern PARSER_RC metalog_pluginsd_host_action(void *user, char *machine_guid, char *hostname, char *registry_hostname, int update_every, char *os, char *timezone, char *tags);
|
||||||
|
|
||||||
#endif /* NETDATA_METALOGPLUGINSD_H */
|
#endif /* NETDATA_METALOGPLUGINSD_H */
|
||||||
|
|
|
@ -916,11 +916,16 @@ int rrdeng_init(RRDHOST *host, struct rrdengine_instance **ctxp, char *dbfiles_p
|
||||||
if (ctx->worker_config.error) {
|
if (ctx->worker_config.error) {
|
||||||
goto error_after_rrdeng_worker;
|
goto error_after_rrdeng_worker;
|
||||||
}
|
}
|
||||||
error = metalog_init(ctx);
|
if ((strcmp(host->machine_guid, registry_get_this_machine_guid()) == 0) || (!rrdhost_flag_check(host, RRDHOST_FLAG_MULTIHOST))) {
|
||||||
if(error) {
|
info("Metadatalog init for host %s starting...", host->hostname);
|
||||||
error("Failed to initialize metadata log file event loop.");
|
error = metalog_init(ctx);
|
||||||
goto error_after_rrdeng_worker;
|
if (error) {
|
||||||
|
error("Failed to initialize metadata log file event loop.");
|
||||||
|
goto error_after_rrdeng_worker;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
info("No metadatalog init for host %s", host->hostname);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_after_rrdeng_worker:
|
error_after_rrdeng_worker:
|
||||||
|
|
|
@ -560,6 +560,8 @@ typedef enum rrdhost_flags {
|
||||||
RRDHOST_FLAG_DELETE_ORPHAN_HOST = 1 << 2, // delete the entire host when orphan
|
RRDHOST_FLAG_DELETE_ORPHAN_HOST = 1 << 2, // delete the entire host when orphan
|
||||||
RRDHOST_FLAG_BACKEND_SEND = 1 << 3, // send it to backends
|
RRDHOST_FLAG_BACKEND_SEND = 1 << 3, // send it to backends
|
||||||
RRDHOST_FLAG_BACKEND_DONT_SEND = 1 << 4, // don't send it to backends
|
RRDHOST_FLAG_BACKEND_DONT_SEND = 1 << 4, // don't send it to backends
|
||||||
|
RRDHOST_FLAG_ARCHIVED = 1 << 5, // The host is archived, no collected charts yet
|
||||||
|
RRDHOST_FLAG_MULTIHOST = 1 << 6, // Host belongs to localhost/megadb
|
||||||
} RRDHOST_FLAGS;
|
} RRDHOST_FLAGS;
|
||||||
|
|
||||||
#ifdef HAVE_C___ATOMIC
|
#ifdef HAVE_C___ATOMIC
|
||||||
|
@ -1195,6 +1197,12 @@ extern void rrdset_delete_custom(RRDSET *st, int db_rotated);
|
||||||
extern void rrdset_delete_obsolete_dimensions(RRDSET *st);
|
extern void rrdset_delete_obsolete_dimensions(RRDSET *st);
|
||||||
|
|
||||||
extern void rrdhost_cleanup_obsolete_charts(RRDHOST *host);
|
extern void rrdhost_cleanup_obsolete_charts(RRDHOST *host);
|
||||||
|
extern RRDHOST *rrdhost_create(
|
||||||
|
const char *hostname, const char *registry_hostname, const char *guid, const char *os, const char *timezone,
|
||||||
|
const char *tags, const char *program_name, const char *program_version, int update_every, long entries,
|
||||||
|
RRD_MEMORY_MODE memory_mode, unsigned int health_enabled, unsigned int rrdpush_enabled, char *rrdpush_destination,
|
||||||
|
char *rrdpush_api_key, char *rrdpush_send_charts_matching, struct rrdhost_system_info *system_info,
|
||||||
|
int is_localhost, int is_archived);
|
||||||
|
|
||||||
#endif /* NETDATA_RRD_INTERNALS */
|
#endif /* NETDATA_RRD_INTERNALS */
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,8 @@ RRDHOST *rrdhost_create(const char *hostname,
|
||||||
char *rrdpush_api_key,
|
char *rrdpush_api_key,
|
||||||
char *rrdpush_send_charts_matching,
|
char *rrdpush_send_charts_matching,
|
||||||
struct rrdhost_system_info *system_info,
|
struct rrdhost_system_info *system_info,
|
||||||
int is_localhost
|
int is_localhost,
|
||||||
|
int is_archived
|
||||||
) {
|
) {
|
||||||
debug(D_RRDHOST, "Host '%s': adding with guid '%s'", hostname, guid);
|
debug(D_RRDHOST, "Host '%s': adding with guid '%s'", hostname, guid);
|
||||||
|
|
||||||
|
@ -182,6 +183,10 @@ RRDHOST *rrdhost_create(const char *hostname,
|
||||||
avl_init_lock(&(host->rrdfamily_root_index), rrdfamily_compare);
|
avl_init_lock(&(host->rrdfamily_root_index), rrdfamily_compare);
|
||||||
avl_init_lock(&(host->rrdvar_root_index), rrdvar_compare);
|
avl_init_lock(&(host->rrdvar_root_index), rrdvar_compare);
|
||||||
|
|
||||||
|
if (is_archived) {
|
||||||
|
rrdhost_flag_set(host, RRDHOST_FLAG_ARCHIVED);
|
||||||
|
info("Host %s is created in archived mode", hostname);
|
||||||
|
}
|
||||||
if(config_get_boolean(CONFIG_SECTION_GLOBAL, "delete obsolete charts files", 1))
|
if(config_get_boolean(CONFIG_SECTION_GLOBAL, "delete obsolete charts files", 1))
|
||||||
rrdhost_flag_set(host, RRDHOST_FLAG_DELETE_OBSOLETE_CHARTS);
|
rrdhost_flag_set(host, RRDHOST_FLAG_DELETE_OBSOLETE_CHARTS);
|
||||||
|
|
||||||
|
@ -276,6 +281,10 @@ RRDHOST *rrdhost_create(const char *hostname,
|
||||||
if (unlikely(-1 == uuid_parse(host->machine_guid, host->host_uuid))) {
|
if (unlikely(-1 == uuid_parse(host->machine_guid, host->host_uuid))) {
|
||||||
error("Host machine GUID is not valid.");
|
error("Host machine GUID is not valid.");
|
||||||
}
|
}
|
||||||
|
if (unlikely(find_or_generate_guid((void *) host, &host->host_uuid, GUID_TYPE_HOST, 1)))
|
||||||
|
error("Failed to store machine GUID to global map");
|
||||||
|
else
|
||||||
|
info("Added %s to global map for host %s", host->machine_guid, host->hostname);
|
||||||
host->objects_nr = 1;
|
host->objects_nr = 1;
|
||||||
host->compaction_id = 0;
|
host->compaction_id = 0;
|
||||||
char dbenginepath[FILENAME_MAX + 1];
|
char dbenginepath[FILENAME_MAX + 1];
|
||||||
|
@ -367,7 +376,7 @@ RRDHOST *rrdhost_create(const char *hostname,
|
||||||
rrd_hosts_available++;
|
rrd_hosts_available++;
|
||||||
|
|
||||||
#ifdef ENABLE_DBENGINE
|
#ifdef ENABLE_DBENGINE
|
||||||
if (likely(!is_localhost && host && host->rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE))
|
if (likely(!is_localhost && !is_archived && host && host->rrd_memory_mode == RRD_MEMORY_MODE_DBENGINE))
|
||||||
metalog_commit_update_host(host);
|
metalog_commit_update_host(host);
|
||||||
#endif
|
#endif
|
||||||
return host;
|
return host;
|
||||||
|
@ -494,6 +503,7 @@ RRDHOST *rrdhost_find_or_create(
|
||||||
, rrdpush_send_charts_matching
|
, rrdpush_send_charts_matching
|
||||||
, system_info
|
, system_info
|
||||||
, 0
|
, 0
|
||||||
|
, 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -590,6 +600,7 @@ int rrd_init(char *hostname, struct rrdhost_system_info *system_info) {
|
||||||
, default_rrdpush_send_charts_matching
|
, default_rrdpush_send_charts_matching
|
||||||
, system_info
|
, system_info
|
||||||
, 1
|
, 1
|
||||||
|
, 0
|
||||||
);
|
);
|
||||||
rrd_unlock();
|
rrd_unlock();
|
||||||
web_client_api_v1_management_init();
|
web_client_api_v1_management_init();
|
||||||
|
|
|
@ -543,6 +543,10 @@ RRDSET *rrdset_create_custom(
|
||||||
if (!is_archived && rrdset_flag_check(st, RRDSET_FLAG_ARCHIVED)) {
|
if (!is_archived && rrdset_flag_check(st, RRDSET_FLAG_ARCHIVED)) {
|
||||||
rrdset_flag_clear(st, RRDSET_FLAG_ARCHIVED);
|
rrdset_flag_clear(st, RRDSET_FLAG_ARCHIVED);
|
||||||
changed_from_archived_to_active = 1;
|
changed_from_archived_to_active = 1;
|
||||||
|
if (rrdhost_flag_check(st->rrdhost, RRDHOST_FLAG_ARCHIVED)) {
|
||||||
|
rrdhost_flag_clear(st->rrdhost, RRDHOST_FLAG_ARCHIVED);
|
||||||
|
info("Host %s is not in archived mode anymore", st->rrdhost->hostname);
|
||||||
|
}
|
||||||
mark_rebuild |= META_CHART_ACTIVATED;
|
mark_rebuild |= META_CHART_ACTIVATED;
|
||||||
}
|
}
|
||||||
char *old_plugin = NULL, *old_module = NULL, *old_title = NULL, *old_family = NULL, *old_context = NULL,
|
char *old_plugin = NULL, *old_module = NULL, *old_title = NULL, *old_family = NULL, *old_context = NULL,
|
||||||
|
@ -683,6 +687,10 @@ RRDSET *rrdset_create_custom(
|
||||||
rrdhost_unlock(host);
|
rrdhost_unlock(host);
|
||||||
rrdset_flag_set(st, RRDSET_FLAG_SYNC_CLOCK);
|
rrdset_flag_set(st, RRDSET_FLAG_SYNC_CLOCK);
|
||||||
rrdset_flag_clear(st, RRDSET_FLAG_UPSTREAM_EXPOSED);
|
rrdset_flag_clear(st, RRDSET_FLAG_UPSTREAM_EXPOSED);
|
||||||
|
if (!is_archived && rrdset_flag_check(st, RRDSET_FLAG_ARCHIVED)) {
|
||||||
|
rrdset_flag_clear(st, RRDSET_FLAG_ARCHIVED);
|
||||||
|
rrdhost_flag_clear(st->rrdhost, RRDHOST_FLAG_ARCHIVED);
|
||||||
|
}
|
||||||
return st;
|
return st;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,8 @@ typedef struct pluginsd_action {
|
||||||
PARSER_RC (*guid_action)(void *user, uuid_t *uuid);
|
PARSER_RC (*guid_action)(void *user, uuid_t *uuid);
|
||||||
PARSER_RC (*context_action)(void *user, uuid_t *uuid);
|
PARSER_RC (*context_action)(void *user, uuid_t *uuid);
|
||||||
PARSER_RC (*tombstone_action)(void *user, uuid_t *uuid);
|
PARSER_RC (*tombstone_action)(void *user, uuid_t *uuid);
|
||||||
|
PARSER_RC (*host_action)(void *user, char *machine_guid, char *hostname, char *registry_hostname, int update_every, char *os,
|
||||||
|
char *timezone, char *tags);
|
||||||
} PLUGINSD_ACTION;
|
} PLUGINSD_ACTION;
|
||||||
|
|
||||||
typedef enum parser_input_type {
|
typedef enum parser_input_type {
|
||||||
|
|
Loading…
Reference in New Issue