diff --git a/golang/main.go b/golang/main.go new file mode 100644 index 0000000..79925f0 --- /dev/null +++ b/golang/main.go @@ -0,0 +1,44 @@ +package main + +import ( + "bytes" + "encoding/json" + "io/ioutil" + "log" + "net/http" + + "go.opencensus.io/plugin/ochttp" + "go.opencensus.io/plugin/ochttp/propagation/tracecontext" + "go.opencensus.io/trace" +) + +func main() { + trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) + + client := &http.Client{Transport: &ochttp.Transport{Propagation: &tracecontext.HTTPFormat{}}} + + http.HandleFunc("/", func(writer http.ResponseWriter, incomingRequest *http.Request) { + span := trace.FromContext(incomingRequest.Context()) + defer span.End() + + body, err := ioutil.ReadAll(incomingRequest.Body) + if err != nil { + panic(err) + } + + var data []map[string]interface{} + if err := json.Unmarshal(body, &data); err != nil { + panic(err) + } + for _, item := range data { + url, _ := item["url"].(string) + data, _ := json.Marshal(item["arguments"]) + outgoingRequest, _ := http.NewRequest("POST", url, bytes.NewBuffer(data)) + resp, err := client.Do(outgoingRequest.WithContext(incomingRequest.Context())) + if err == nil { + resp.Body.Close() + } + } + }) + log.Fatal(http.ListenAndServe("127.0.0.1:5000", &ochttp.Handler{Propagation: &tracecontext.HTTPFormat{}})) +}