@@ -1011,16 +1011,6 @@ const jaegerTmpl = `{
1011
1011
}
1012
1012
}`
1013
1013
1014
- const datadogTmpl = `{
1015
- "service": "{{ .DatadogServiceName }}",
1016
- "agent_host": "{{ .DatadogCollectorHost }}",
1017
- "agent_port": {{ .DatadogCollectorPort }},
1018
- "environment": "{{ .DatadogEnvironment }}",
1019
- "operation_name_override": "{{ .DatadogOperationNameOverride }}",
1020
- "sample_rate": {{ .DatadogSampleRate }},
1021
- "dd.priority.sampling": {{ .DatadogPrioritySampling }}
1022
- }`
1023
-
1024
1014
const otelTmpl = `
1025
1015
exporter = "otlp"
1026
1016
processor = "batch"
@@ -1044,37 +1034,65 @@ ratio = {{ .OtelSamplerRatio }}
1044
1034
parent_based = {{ .OtelSamplerParentBased }}
1045
1035
`
1046
1036
1037
+ func datadogOpentracingCfg (cfg ngx_config.Configuration ) (string , error ) {
1038
+ m := map [string ]interface {}{
1039
+ "service" : cfg .DatadogServiceName ,
1040
+ "agent_host" : cfg .DatadogCollectorHost ,
1041
+ "agent_port" : cfg .DatadogCollectorPort ,
1042
+ "environment" : cfg .DatadogEnvironment ,
1043
+ "operation_name_override" : cfg .DatadogOperationNameOverride ,
1044
+ }
1045
+
1046
+ // Omit "sample_rate" if the configuration's sample rate is unset (nil).
1047
+ // Omitting "sample_rate" from the plugin JSON indicates to the tracer that
1048
+ // it should use dynamic rates instead of a configured rate.
1049
+ if cfg .DatadogSampleRate != nil {
1050
+ m ["sample_rate" ] = * cfg .DatadogSampleRate
1051
+ }
1052
+
1053
+ buf , err := json .Marshal (m )
1054
+ if err != nil {
1055
+ return "" , err
1056
+ }
1057
+
1058
+ return string (buf ), nil
1059
+ }
1060
+
1061
+ func opentracingCfgFromTemplate (cfg ngx_config.Configuration , tmplName string , tmplText string ) (string , error ) {
1062
+ tmpl , err := template .New (tmplName ).Parse (tmplText )
1063
+ if err != nil {
1064
+ return "" , err
1065
+ }
1066
+
1067
+ tmplBuf := bytes .NewBuffer (make ([]byte , 0 ))
1068
+ err = tmpl .Execute (tmplBuf , cfg )
1069
+ if err != nil {
1070
+ return "" , err
1071
+ }
1072
+
1073
+ return tmplBuf .String (), nil
1074
+ }
1075
+
1047
1076
func createOpentracingCfg (cfg ngx_config.Configuration ) error {
1048
- var tmpl * template. Template
1077
+ var configData string
1049
1078
var err error
1050
1079
1051
1080
if cfg .ZipkinCollectorHost != "" {
1052
- tmpl , err = template .New ("zipkin" ).Parse (zipkinTmpl )
1053
- if err != nil {
1054
- return err
1055
- }
1081
+ configData , err = opentracingCfgFromTemplate (cfg , "zipkin" , zipkinTmpl )
1056
1082
} else if cfg .JaegerCollectorHost != "" || cfg .JaegerEndpoint != "" {
1057
- tmpl , err = template .New ("jaeger" ).Parse (jaegerTmpl )
1058
- if err != nil {
1059
- return err
1060
- }
1083
+ configData , err = opentracingCfgFromTemplate (cfg , "jaeger" , jaegerTmpl )
1061
1084
} else if cfg .DatadogCollectorHost != "" {
1062
- tmpl , err = template .New ("datadog" ).Parse (datadogTmpl )
1063
- if err != nil {
1064
- return err
1065
- }
1085
+ configData , err = datadogOpentracingCfg (cfg )
1066
1086
} else {
1067
- tmpl , _ = template . New ( "empty" ). Parse ( " {}")
1087
+ configData = " {}"
1068
1088
}
1069
1089
1070
- tmplBuf := bytes .NewBuffer (make ([]byte , 0 ))
1071
- err = tmpl .Execute (tmplBuf , cfg )
1072
1090
if err != nil {
1073
1091
return err
1074
1092
}
1075
1093
1076
1094
// Expand possible environment variables before writing the configuration to file.
1077
- expanded := os .ExpandEnv (tmplBuf . String () )
1095
+ expanded := os .ExpandEnv (configData )
1078
1096
1079
1097
return os .WriteFile ("/etc/nginx/opentracing.json" , []byte (expanded ), file .ReadWriteByUser )
1080
1098
}
0 commit comments