Skip to content

Commit

Permalink
make disabling service name a soft launch
Browse files Browse the repository at this point in the history
setting service name can be disabled by setting generate_service_name=false in
the config file. in a later release service name generation will be disabled by
default.
  • Loading branch information
pmcollins committed Dec 22, 2022
1 parent e30038f commit e77a776
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 43 deletions.
4 changes: 2 additions & 2 deletions instrumentation/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ The full path to the auto instrumentation JAR (provided by the installer).

#### `generate_service_name` (optional)

Whether to disable service name generation by the .so. If set to "true", the .so will attempt to generate a service name
from the Java command arguments. If set to "false" (the default), it will not set the service name, leaving it to be
Whether to disable service name generation by the .so. If set to "true" (the default), the .so will attempt to generate
a service name from the Java command arguments. If set to "false", it will not set the service name, leaving it to be
generated by the Java auto-instrumentation library.

#### `service_name` (optional)
Expand Down
7 changes: 7 additions & 0 deletions instrumentation/src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ bool str_eq_true(char *v) {
return v != NULL && !streq("false", v) && !streq("FALSE", v) && !streq("0", v);
}

bool str_eq_false(char *v) {
return v != NULL && (streq("false", v) || streq("FALSE", v) || streq("0", v));
}

void free_config(struct config *cfg) {
if (cfg->java_agent_jar != NULL) {
free(cfg->java_agent_jar);
Expand All @@ -94,4 +98,7 @@ void free_config(struct config *cfg) {
if (cfg->disable_telemetry != NULL) {
free(cfg->disable_telemetry);
}
if (cfg->generate_service_name != NULL) {
free(cfg->generate_service_name);
}
}
2 changes: 2 additions & 0 deletions instrumentation/src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ void load_config(logger log, struct config *cfg, char *file_name);

bool str_eq_true(char *v);

bool str_eq_false(char *v);

void free_config(struct config *cfg);

#endif //INSTRUMENTATION_CONFIG_H
6 changes: 3 additions & 3 deletions instrumentation/src/splunk.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,15 @@ void auto_instrument(
}

char service_name[MAX_CMDLINE_LEN] = "";
if (str_eq_true(cfg.generate_service_name)) {
if (str_eq_false(cfg.generate_service_name)) {
log_debug(log, "service name generation disabled");
} else {
get_service_name(log, cr, &cfg, service_name);
if (strlen(service_name) == 0) {
log_info(log, "service name empty, quitting");
return;
}
set_env_var(log, otel_service_name_var, service_name);
} else {
log_debug(log, "service name generation disabled");
}

set_java_tool_options(log, &cfg);
Expand Down
95 changes: 64 additions & 31 deletions instrumentation/src/test_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ int main(void) {

void run_tests() {
test_func_t *tests[] = {
test_auto_instrument_svc_name_in_config,
test_auto_instrument_svc_name_explicitly_enabled,
test_auto_instrument_svc_name_specified,
test_auto_instrument_gen_svc_name_explicitly_enabled,
test_auto_instrument_gen_svc_name_explicitly_disabled,
test_auto_instrument_no_svc_name_in_config,
test_auto_instrument_not_java,
test_auto_instrument_no_access,
Expand Down Expand Up @@ -55,6 +56,7 @@ void run_tests() {
test_is_legal_java_module_main_class,
test_is_legal_module,
test_eq_true,
test_eq_false,
test_disable_telemetry,
test_enable_telemetry
};
Expand All @@ -73,54 +75,70 @@ void run_test(test_func_t run_test) {
free_logger(l);
}

void test_auto_instrument_svc_name_in_config(logger l) {
void test_auto_instrument_svc_name_specified(logger l) {
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
char *logs[256];
int n = get_logs(l, logs);
char *funcname = "test_auto_instrument_svc_name_in_config";

char *funcname = "test_auto_instrument_svc_name_specified";
require_equal_ints(funcname, 4, n);
require_equal_strings(funcname, "service name generation disabled", logs[0]);
require_equal_strings(funcname, "setting OTEL_SERVICE_NAME='my.override'", logs[0]);
require_equal_strings(funcname, "setting JAVA_TOOL_OPTIONS='-javaagent:/foo/asdf.jar'", logs[1]);
require_equal_strings(funcname, "setting OTEL_RESOURCE_ATTRIBUTES='myattr=myval'", logs[2]);
require_equal_strings(funcname, "sending metric", logs[3]);
require_env(funcname, "-javaagent:/foo/asdf.jar", java_tool_options_var);
require_unset_env(funcname, otel_service_name_var);
require_env(funcname, "my.override", otel_service_name_var);
cmdline_reader_close(cr);
}

void test_auto_instrument_svc_name_explicitly_enabled(logger l) {
char *funcname = "test_auto_instrument_svc_name_explicitly_enabled";
void test_auto_instrument_gen_svc_name_explicitly_enabled(logger l) {
char *funcname = "test_auto_instrument_gen_svc_name_explicitly_enabled";
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_generate_svcname_enabled, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_generate_svcname_enabled, cr, fake_send_otlp_metric);
char *logs[256];
int n = get_logs(l, logs);
require_equal_strings(funcname, "setting OTEL_SERVICE_NAME='my.service'", logs[0]);
require_equal_strings(funcname, "setting OTEL_SERVICE_NAME='foo'", logs[0]);
require_equal_strings(funcname, "setting JAVA_TOOL_OPTIONS='-javaagent:/foo/asdf.jar'", logs[1]);
require_equal_strings(funcname, "setting OTEL_RESOURCE_ATTRIBUTES='myattr=myval'", logs[2]);
require_equal_strings(funcname, "sending metric", logs[3]);
require_equal_ints(funcname, 4, n);
require_env(funcname, "my.service", otel_service_name_var);
require_env(funcname, "foo", otel_service_name_var);
}

void test_auto_instrument_gen_svc_name_explicitly_disabled(logger l) {
char *funcname = "test_auto_instrument_gen_svc_name_explicitly_disabled";
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_config_generate_svcname_disabled, cr, fake_send_otlp_metric);
char *logs[256];
int n = get_logs(l, logs);
require_equal_strings(funcname, "service name generation disabled", logs[0]);
require_equal_strings(funcname, "setting JAVA_TOOL_OPTIONS='-javaagent:/foo/asdf.jar'", logs[1]);
require_equal_strings(funcname, "sending metric", logs[2]);
require_equal_ints(funcname, 3, n);
require_unset_env(funcname, otel_service_name_var);
}

void test_auto_instrument_no_svc_name_in_config(logger l) {
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_no_svcname, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_no_svcname, cr, fake_send_otlp_metric);
char *logs[256];
int n = get_logs(l, logs);
char *funcname = "test_auto_instrument_no_svc_name_in_config";
require_equal_ints(funcname, 3, n);
require_equal_strings(funcname, "service name generation disabled", logs[0]);
require_equal_strings(funcname, "setting OTEL_SERVICE_NAME='foo'", logs[0]);
require_equal_strings(funcname, "setting JAVA_TOOL_OPTIONS='-javaagent:/foo/asdf.jar'", logs[1]);
require_equal_strings(funcname, "sending metric", logs[2]);
require_env(funcname, "-javaagent:/foo/asdf.jar", java_tool_options_var);
require_unset_env(funcname, otel_service_name_var);
require_env(funcname, "foo", otel_service_name_var);
cmdline_reader_close(cr);
}

void test_auto_instrument_not_java(logger l) {
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "foo", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "foo", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
char *funcname = "test_auto_instrument_not_java";
require_unset_env(funcname, java_tool_options_var);
char *logs[256];
Expand All @@ -131,7 +149,8 @@ void test_auto_instrument_not_java(logger l) {

void test_auto_instrument_no_access(logger l) {
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_false, "java", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_false, "java", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
require_unset_env("test_auto_instrument_no_access", java_tool_options_var);
char *logs[256];
char *funcname = "test_auto_instrument_no_access";
Expand All @@ -143,31 +162,35 @@ void test_auto_instrument_no_access(logger l) {
void test_auto_instrument_splunk_env_var_true(logger l) {
setenv(disable_env_var, "true", 0);
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
require_unset_env("test_auto_instrument_splunk_env_var_true", "JAVA_TOOL_OPTIONS");
cmdline_reader_close(cr);
}

void test_auto_instrument_splunk_env_var_false(logger l) {
setenv(disable_env_var, "false", 0);
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
require_env("test_auto_instrument_splunk_env_var_false", "-javaagent:/foo/asdf.jar", "JAVA_TOOL_OPTIONS");
cmdline_reader_close(cr);
}

void test_auto_instrument_splunk_env_var_false_caps(logger l) {
setenv(disable_env_var, "FALSE", 0);
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
require_env("test_auto_instrument_splunk_env_var_false_caps", "-javaagent:/foo/asdf.jar", "JAVA_TOOL_OPTIONS");
cmdline_reader_close(cr);
}

void test_auto_instrument_splunk_env_var_zero(logger l) {
setenv(disable_env_var, "0", 0);
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
require_env("test_auto_instrument_splunk_env_var_zero", "-javaagent:/foo/asdf.jar", "JAVA_TOOL_OPTIONS");
cmdline_reader_close(cr);
}
Expand Down Expand Up @@ -435,7 +458,8 @@ void test_dots_to_dashes(logger l) {
void test_env_var_already_set(logger l) {
setenv("JAVA_TOOL_OPTIONS", "hello", 0);
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_svcname_unspecified, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_svcname_explicitly_specified, cr,
fake_send_otlp_metric);
char *funcname = "test_env_var_already_set";
require_env(funcname, "hello", java_tool_options_var);
cmdline_reader_close(cr);
Expand Down Expand Up @@ -484,9 +508,13 @@ void test_eq_true(logger l) {
require_false("test_eq_true", str_eq_true(NULL));
}

void test_eq_false(logger l) {
require_true("test_eq_false", str_eq_false("false"));
}

void test_enable_telemetry(logger l) {
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_disable_telemetry_not_specified, cr,
auto_instrument(l, access_check_true, "java", fake_config_disable_telemetry_not_specified, cr,
fake_send_otlp_metric);
char *logs[256];
get_logs(l, logs);
Expand All @@ -495,7 +523,7 @@ void test_enable_telemetry(logger l) {

void test_disable_telemetry(logger l) {
cmdline_reader cr = new_default_test_cmdline_reader();
auto_instrument(l, access_check_true, "java", fake_load_config_disable_telemetry_true, cr, fake_send_otlp_metric);
auto_instrument(l, access_check_true, "java", fake_config_disable_telemetry_true, cr, fake_send_otlp_metric);
char *logs[256];
get_logs(l, logs);
require_equal_strings("test_disable_telemetry", "disabling telemetry as per config", logs[2]);
Expand All @@ -507,31 +535,36 @@ void fake_send_otlp_metric(logger log, char *service_name) {
log_debug(log, "sending metric");
}

void fake_load_config_svcname_unspecified(logger log, struct config *cfg, char *path) {
void fake_config_svcname_explicitly_specified(logger log, struct config *cfg, char *path) {
cfg->java_agent_jar = strdup("/foo/asdf.jar");
cfg->service_name = strdup("my.service");
cfg->service_name = strdup("my.override");
cfg->resource_attributes = strdup("myattr=myval");
cfg->disable_telemetry = strdup("false");
}

void fake_load_config_generate_svcname_enabled(logger log, struct config *cfg, char *path) {
void fake_config_generate_svcname_enabled(logger log, struct config *cfg, char *path) {
cfg->java_agent_jar = strdup("/foo/asdf.jar");
cfg->service_name = strdup("my.service");
cfg->resource_attributes = strdup("myattr=myval");
cfg->disable_telemetry = strdup("false");
cfg->generate_service_name = strdup("true");
}

void fake_load_config_no_svcname(logger log, struct config *cfg, char *path) {
void fake_config_generate_svcname_disabled(logger log, struct config *cfg, char *path) {
cfg->java_agent_jar = strdup("/foo/asdf.jar");
cfg->generate_service_name = strdup("false");
cfg->disable_telemetry = NULL;
}

void fake_config_no_svcname(logger log, struct config *cfg, char *path) {
cfg->java_agent_jar = strdup("/foo/asdf.jar");
}

void fake_load_config_disable_telemetry_not_specified(logger log, struct config *cfg, char *path) {
void fake_config_disable_telemetry_not_specified(logger log, struct config *cfg, char *path) {
cfg->java_agent_jar = strdup("/foo/asdf.jar");
cfg->disable_telemetry = NULL;
}

void fake_load_config_disable_telemetry_true(logger log, struct config *cfg, char *path) {
void fake_config_disable_telemetry_true(logger log, struct config *cfg, char *path) {
cfg->java_agent_jar = strdup("/foo/asdf.jar");
cfg->disable_telemetry = strdup("true");
}
Expand Down
20 changes: 13 additions & 7 deletions instrumentation/src/test_main.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ void run_test(test_func_t run_test);

void test_auto_instrument_not_java(logger l);

void test_auto_instrument_svc_name_in_config(logger l);
void test_auto_instrument_svc_name_specified(logger l);

void test_auto_instrument_svc_name_explicitly_enabled(logger l);
void test_auto_instrument_gen_svc_name_explicitly_enabled(logger l);

void test_auto_instrument_gen_svc_name_explicitly_disabled(logger l);

void test_auto_instrument_no_svc_name_in_config(logger l);

Expand Down Expand Up @@ -86,6 +88,8 @@ void test_is_legal_module(logger l);

void test_eq_true(logger l);

void test_eq_false(logger l);

void test_enable_telemetry(logger l);

void test_disable_telemetry(logger l);
Expand All @@ -94,15 +98,17 @@ void test_disable_telemetry(logger l);

void fake_send_otlp_metric(logger log, char *service_name);

void fake_load_config_svcname_unspecified(logger log, struct config *cfg, char *path);
void fake_config_svcname_explicitly_specified(logger log, struct config *cfg, char *path);

void fake_config_generate_svcname_enabled(logger log, struct config *cfg, char *path);

void fake_load_config_generate_svcname_enabled(logger log, struct config *cfg, char *path);
void fake_config_generate_svcname_disabled(logger log, struct config *cfg, char *path);

void fake_load_config_no_svcname(logger log, struct config *cfg, char *path);
void fake_config_no_svcname(logger log, struct config *cfg, char *path);

void fake_load_config_disable_telemetry_not_specified(logger log, struct config *cfg, char *path);
void fake_config_disable_telemetry_not_specified(logger log, struct config *cfg, char *path);

void fake_load_config_disable_telemetry_true(logger log, struct config *cfg, char *path);
void fake_config_disable_telemetry_true(logger log, struct config *cfg, char *path);

cmdline_reader new_default_test_cmdline_reader();

Expand Down

0 comments on commit e77a776

Please sign in to comment.