Skip to content

Commit

Permalink
Added payload size to http server integration (census-instrumentation…
Browse files Browse the repository at this point in the history
…#1129)

* Added payload size to http server integration, logged in the LogExporter, and modified example to use LogExporter

* Fixed format problems

* Corrected comment
  • Loading branch information
alexamies authored and rghetia committed Apr 25, 2019
1 parent 6161d2e commit d00fa0c
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 4 deletions.
25 changes: 25 additions & 0 deletions examples/exporter/logexporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,14 @@ func (e *LogExporter) ExportSpan(sd *trace.SpanData) {
e.tLogger.Printf("Status: %v [%v]\n", sd.Status.Message, sd.Status.Code)
e.tLogger.Printf("Elapsed: %v\n", sd.EndTime.Sub(sd.StartTime).Round(time.Millisecond))

spanKinds := map[int]string{
1: "Server",
2: "Client",
}
if spanKind, ok := spanKinds[sd.SpanKind]; ok {
e.tLogger.Printf("SpanKind: %s\n", spanKind)
}

if len(sd.Annotations) > 0 {
e.tLogger.Println()
e.tLogger.Println("Annotations:")
Expand All @@ -196,4 +204,21 @@ func (e *LogExporter) ExportSpan(sd *trace.SpanData) {
e.tLogger.Printf("%v- %v=%v\n", indent, k, v)
}
}

if len(sd.MessageEvents) > 0 {
eventTypes := map[trace.MessageEventType]string{
trace.MessageEventTypeSent: "Sent",
trace.MessageEventTypeRecv: "Received",
}
e.tLogger.Println()
e.tLogger.Println("MessageEvents:")
for _, item := range sd.MessageEvents {
if eventType, ok := eventTypes[item.EventType]; ok {
e.tLogger.Print(eventType)
}
e.tLogger.Printf("UncompressedByteSize: %v", item.UncompressedByteSize)
e.tLogger.Printf("CompressedByteSize: %v", item.CompressedByteSize)
e.tLogger.Println()
}
}
}
21 changes: 17 additions & 4 deletions examples/http/helloworld_server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ import (
"go.opencensus.io/trace"
)

const (
metricsLogFile = "/tmp/metrics.log"
tracesLogFile = "/tmp/trace.log"
)

func main() {
// Start z-Pages server.
go func() {
Expand All @@ -36,10 +41,18 @@ func main() {
log.Fatal(http.ListenAndServe("127.0.0.1:8081", mux))
}()

// Register stats and trace exporters to export the collected data.
exporter := &exporter.PrintExporter{}
view.RegisterExporter(exporter)
trace.RegisterExporter(exporter)
// Using log exporter to export metrics but you can choose any supported exporter.
exporter, err := exporter.NewLogExporter(exporter.Options{
ReportingInterval: time.Duration(10 * time.Second),
MetricsLogFile: metricsLogFile,
TracesLogFile: tracesLogFile,
})
if err != nil {
log.Fatalf("Error creating log exporter: %v", err)
}
exporter.Start()
defer exporter.Stop()
defer exporter.Close()

// Always trace for this demo. In a production application, you should
// configure this to a trace.ProbabilitySampler set at the desired
Expand Down
9 changes: 9 additions & 0 deletions plugin/ochttp/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ func (h *Handler) startTrace(w http.ResponseWriter, r *http.Request) (*http.Requ
}
}
span.AddAttributes(requestAttrs(r)...)
if r.Body == nil {
// TODO: Handle cases where ContentLength is not set.
} else if r.ContentLength > 0 {
span.AddMessageReceiveEvent(0, /* TODO: messageID */
int64(r.ContentLength), -1)
}
return r.WithContext(ctx), span.End
}

Expand Down Expand Up @@ -201,6 +207,9 @@ func (t *trackingResponseWriter) Header() http.Header {
func (t *trackingResponseWriter) Write(data []byte) (int, error) {
n, err := t.writer.Write(data)
t.respSize += int64(n)
// Add message event for request bytes sent.
span := trace.FromContext(t.ctx)
span.AddMessageSendEvent(0 /* TODO: messageID */, int64(n), -1)
return n, err
}

Expand Down

0 comments on commit d00fa0c

Please sign in to comment.