diff --git a/src/config.c b/src/config.c index 0883e35..98bbad0 100644 --- a/src/config.c +++ b/src/config.c @@ -53,6 +53,7 @@ config_create() config->sensor.frequency = 1000; config->sensor.cgroup_basepath = "/sys/fs/cgroup/perf_event"; config->sensor.name = NULL; + config->sensor.resolve_names = true; /* storage default config */ config->storage.type = STORAGE_CSV; @@ -121,8 +122,11 @@ config_setup_from_cli(int argc, char **argv, struct config *config) zhashx_set_duplicator(config->events.containers, (zhashx_duplicator_fn *) events_group_dup); zhashx_set_destructor(config->events.containers, (zhashx_destructor_fn *) events_group_destroy); - while ((c = getopt(argc, argv, "vf:p:n:s:c:e:or:U:D:C:")) != -1) { + while ((c = getopt(argc, argv, "ivf:p:n:s:c:e:or:U:D:C:")) != -1) { switch (c) { + case 'i': + config->sensor.resolve_names = false; + break; case 'v': config->sensor.frequency++; break; diff --git a/src/config.h b/src/config.h index 478737f..434d114 100644 --- a/src/config.h +++ b/src/config.h @@ -45,6 +45,7 @@ struct config_sensor unsigned int verbose; unsigned int frequency; const char *cgroup_basepath; + bool resolve_names; const char *name; }; diff --git a/src/sensor.c b/src/sensor.c index 26a8c5d..13ec6db 100644 --- a/src/sensor.c +++ b/src/sensor.c @@ -78,7 +78,7 @@ setup_storage_module(struct config *config) } static void -sync_cgroups_running_monitored(struct hwinfo *hwinfo, zhashx_t *container_events_groups, const char *cgroup_basepath, zhashx_t *container_monitoring_actors) +sync_cgroups_running_monitored(struct hwinfo *hwinfo, zhashx_t *container_events_groups, const char *cgroup_basepath, bool resolve_name, zhashx_t *container_monitoring_actors) { zhashx_t *running_targets = NULL; /* char *cgroup_path -> struct target *target */ zactor_t *perf_monitor = NULL; @@ -90,7 +90,7 @@ sync_cgroups_running_monitored(struct hwinfo *hwinfo, zhashx_t *container_events running_targets = zhashx_new(); /* get running (and identifiable) container(s) */ - if (target_discover_running(cgroup_basepath, TARGET_TYPE_EVERYTHING ^ TARGET_TYPE_UNKNOWN, running_targets)) { + if (target_discover_running(cgroup_basepath, TARGET_TYPE_EVERYTHING ^ TARGET_TYPE_UNKNOWN, resolve_name, running_targets)) { zsys_error("sensor: error when retrieving the running targets."); goto out; } @@ -245,7 +245,7 @@ main(int argc, char **argv) /* start system monitoring actor only when needed */ if (zhashx_size(config->events.system)) { - system_target = target_create(TARGET_TYPE_ALL, NULL); + system_target = target_create(TARGET_TYPE_ALL, NULL, config->sensor.resolve_names); system_monitor_config = perf_config_create(hwinfo, config->events.system, system_target); system_perf_monitor = zactor_new(perf_monitoring_actor, system_monitor_config); } @@ -256,7 +256,7 @@ main(int argc, char **argv) while (!zsys_interrupted) { /* monitor containers only when needed */ if (zhashx_size(config->events.containers)) { - sync_cgroups_running_monitored(hwinfo, config->events.containers, config->sensor.cgroup_basepath, container_monitoring_actors); + sync_cgroups_running_monitored(hwinfo, config->events.containers, config->sensor.cgroup_basepath, config->sensor.resolve_names , container_monitoring_actors); } /* send clock tick to monitoring actors */ diff --git a/src/target.c b/src/target.c index 0756e7d..d18c288 100644 --- a/src/target.c +++ b/src/target.c @@ -105,7 +105,7 @@ target_validate_type(enum target_type type, const char *cgroup_path) } struct target * -target_create(enum target_type type, const char *cgroup_path) +target_create(enum target_type type, const char *cgroup_path, bool resolve_name) { struct target *target = malloc(sizeof(struct target)); @@ -114,6 +114,7 @@ target_create(enum target_type type, const char *cgroup_path) target->cgroup_path = (cgroup_path) ? strdup(cgroup_path) : NULL; target->type = type; + target->resolve_name = resolve_name; return target; } @@ -123,11 +124,19 @@ target_resolve_real_name(struct target *target) { switch (target->type) { case TARGET_TYPE_DOCKER: - return target_docker_resolve_name(target); + if (target->resolve_name ) { + return target_docker_resolve_name(target); + } else { + return strdup(strrchr(target->cgroup_path, '/') + 1); + } break; case TARGET_TYPE_KUBERNETES: - return target_kubernetes_resolve_name(target); + if (target->resolve_name ) { + return target_kubernetes_resolve_name(target); + } else { + return strdup(strrchr(target->cgroup_path, '/') + 1); + } break; case TARGET_TYPE_ALL: @@ -154,7 +163,7 @@ target_destroy(struct target *target) } int -target_discover_running(const char *base_path, enum target_type type_mask, zhashx_t *targets) +target_discover_running(const char *base_path, enum target_type type_mask, bool resolve_name, zhashx_t *targets) { const char *path[] = { base_path, NULL }; FTS *file_system = NULL; @@ -174,7 +183,7 @@ target_discover_running(const char *base_path, enum target_type type_mask, zhash if (node->fts_info == FTS_D && node->fts_statp->st_nlink == 2) { type = target_detect_type(node->fts_path); if ((type & type_mask) && target_validate_type(type, node->fts_path)) { - target = target_create(type, node->fts_path); + target = target_create(type, node->fts_path, resolve_name); if (target) zhashx_insert(targets, node->fts_path, target); } diff --git a/src/target.h b/src/target.h index fd90321..1da13fb 100644 --- a/src/target.h +++ b/src/target.h @@ -62,6 +62,7 @@ struct target { enum target_type type; char *cgroup_path; + bool resolve_name; }; /* @@ -77,7 +78,7 @@ int target_validate_type(enum target_type type, const char *cgroup_path); /* * target_create allocate the resources and configure the target. */ -struct target *target_create(enum target_type type, const char *cgroup_path); +struct target *target_create(enum target_type type, const char *cgroup_path, bool resolve_name); /* * target_resolve_real_name resolve and return the real name of the given target. @@ -92,7 +93,7 @@ void target_destroy(struct target *target); /* * target_discover_running returns a list of running targets. */ -int target_discover_running(const char *base_path, enum target_type type_mask, zhashx_t *targets); +int target_discover_running(const char *base_path, enum target_type type_mask, bool resolve_name, zhashx_t *targets); #endif /* TARGET_H */