Skip to content

Commit

Permalink
profiler: record Orchestrion, activation information
Browse files Browse the repository at this point in the history
TODO - description
  • Loading branch information
nsrip-dd committed Aug 8, 2024
1 parent 0462924 commit 97e641d
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
28 changes: 28 additions & 0 deletions profiler/profiler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"gopkg.in/DataDog/dd-trace-go.v1/internal/globalconfig"
"gopkg.in/DataDog/dd-trace-go.v1/internal/httpmem"
"gopkg.in/DataDog/dd-trace-go.v1/internal/log"
"gopkg.in/DataDog/dd-trace-go.v1/internal/orchestrion"
"gopkg.in/DataDog/dd-trace-go.v1/internal/traceprof"
"gopkg.in/DataDog/dd-trace-go.v1/internal/version"

Expand Down Expand Up @@ -748,3 +749,30 @@ func TestUDSDefault(t *testing.T) {

<-profiles
}

func TestOrchestrionProfileInfo(t *testing.T) {
testCases := []struct {
env string
want string
}{
{want: "manual"},
{env: "1", want: "manual"},
{env: "true", want: "manual"},
{env: "auto", want: "auto"},
}
for _, tc := range testCases {
t.Run(fmt.Sprintf("env=\"%s\"", tc.env), func(t *testing.T) {
t.Setenv("DD_PROFILING_ENABLED", tc.env)
p := doOneShortProfileUpload(t)
info := p.event.Info.Profiler
t.Logf("%+v", info)
if got := info.Activation; got != tc.want {
t.Errorf("wanted profiler activation \"%s\", got %s", tc.want, got)
}
want := orchestrion.Enabled()
if got := info.Injected; got != want {
t.Errorf("wanted profiler injected = %v, got %v", want, got)
}
})
}
}
27 changes: 27 additions & 0 deletions profiler/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ import (
"mime/multipart"
"net/http"
"net/textproto"
"os"
"strings"
"time"

"gopkg.in/DataDog/dd-trace-go.v1/internal/log"
"gopkg.in/DataDog/dd-trace-go.v1/internal/orchestrion"
)

// maxRetries specifies the maximum number of retries to have when an error occurs.
Expand Down Expand Up @@ -144,6 +146,21 @@ type uploadEvent struct {
Version string `json:"version"`
EndpointCounts map[string]uint64 `json:"endpoint_counts,omitempty"`
CustomAttributes []string `json:"custom_attributes,omitempty"`
Info profilerInfo `json:"info"`
}

// profilerInfo holds profiler-specific information which should be attached to
// the event for backend consumption
type profilerInfo struct {
Profiler struct {
// Injected should be true if profiling was added using
// Orchestrion. The term "injection" comes from other
// languages/runtimes where profiling can be injected into the
// process at run time.
Injected bool `json:"library_injected"`
// Activation ... (TODO: explain)
Activation string `json:"activation"`
} `json:"profiler"`
}

// encode encodes the profile as a multipart mime request.
Expand All @@ -167,6 +184,16 @@ func encode(bat batch, tags []string) (contentType string, body io.Reader, err e
CustomAttributes: bat.customAttributes,
}

if orchestrion.Enabled() {
event.Info.Profiler.Injected = orchestrion.Enabled()
}
// TODO: comment
if os.Getenv("DD_PROFILING_ENABLED") == "auto" {
event.Info.Profiler.Activation = "auto"
} else {
event.Info.Profiler.Activation = "manual"
}

for _, p := range bat.profiles {
event.Attachments = append(event.Attachments, p.name)
f, err := mw.CreateFormFile(p.name, p.name)
Expand Down

0 comments on commit 97e641d

Please sign in to comment.