Skip to content

Commit

Permalink
Finished OTEL
Browse files Browse the repository at this point in the history
  • Loading branch information
Renan Santos authored and Renan Santos committed Feb 23, 2024
1 parent 847b2e0 commit f4e0522
Show file tree
Hide file tree
Showing 10 changed files with 59 additions and 22 deletions.
12 changes: 7 additions & 5 deletions gateway/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package main

import (
"context"
"fmt"
"time"

"github.com/renanmsantos/go-gateway/infra/configs"
"github.com/renanmsantos/go-gateway/infra/webserver"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
Expand All @@ -24,7 +26,7 @@ func initProvider(collectorURL string) (func(context.Context) error, error) {
semconv.ServiceNameKey.String("gateway"),
))
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create resource: %w", err)
}

ctx, cancel := context.WithTimeout(ctx, time.Second)
Expand All @@ -35,12 +37,12 @@ func initProvider(collectorURL string) (func(context.Context) error, error) {
grpc.WithBlock(),
)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create gRPC connection to collector: %w", err)
}

traceExplorer, err := otlptracegrpc.New(ctx, otlptracegrpc.WithGRPCConn(conn))
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create the collector exporter: %w", err)
}

bsp := sdktrace.NewBatchSpanProcessor(traceExplorer)
Expand All @@ -60,6 +62,6 @@ func main() {
if err != nil {
panic(err)
}
tracer := otel.Tracer("microservice-tracer")
webserver.StartWebserver(tracer)
configs.NewTracer(otel.Tracer("tracer"))
webserver.StartWebserver()
}
13 changes: 13 additions & 0 deletions gateway/infra/configs/trace.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package configs

import "go.opentelemetry.io/otel/trace"

var Tracer trace.Tracer

func NewTracer(tracer trace.Tracer) {
Tracer = tracer
}

func GetTracer() trace.Tracer {
return Tracer
}
6 changes: 3 additions & 3 deletions gateway/infra/webserver/validation-handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@ import (
"encoding/json"
"net/http"

"github.com/renanmsantos/go-gateway/infra/configs"
"github.com/renanmsantos/go-gateway/internal/usecases"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
)

func ValidationHandler(tracer trace.Tracer) func(w http.ResponseWriter, r *http.Request) {
func ValidationHandler() func(w http.ResponseWriter, r *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
carrier := propagation.HeaderCarrier(r.Header)
ctx := r.Context()
ctx = otel.GetTextMapPropagator().Extract(ctx, carrier)

ctx, span := tracer.Start(ctx, "START go-gateway")
ctx, span := configs.GetTracer().Start(ctx, "START go-gateway")
defer span.End()

w.Header().Set("Content-Type", "application/json")
Expand Down
5 changes: 2 additions & 3 deletions gateway/infra/webserver/webserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ import (
"net/http"

"github.com/prometheus/client_golang/prometheus/promhttp"
"go.opentelemetry.io/otel/trace"
)

func StartWebserver(tracer trace.Tracer) {
func StartWebserver() {
http.Handle("/metrics", promhttp.Handler())
http.HandleFunc("/", ValidationHandler(tracer))
http.HandleFunc("/", ValidationHandler())

fmt.Printf("Starting GO-GATEWAY at port 8080\n")
if err := http.ListenAndServe(":8080", nil); err != nil {
Expand Down
12 changes: 7 additions & 5 deletions weather/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package main

import (
"context"
"fmt"
"time"

"github.com/renanmoreirasan/go-weather/infra/configs"
"github.com/renanmoreirasan/go-weather/infra/webserver"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
Expand All @@ -24,7 +26,7 @@ func initProvider(collectorURL string) (func(context.Context) error, error) {
semconv.ServiceNameKey.String("weather"),
))
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create resource: %w", err)
}

ctx, cancel := context.WithTimeout(ctx, time.Second)
Expand All @@ -35,12 +37,12 @@ func initProvider(collectorURL string) (func(context.Context) error, error) {
grpc.WithBlock(),
)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create gRPC connection to collector: %w", err)
}

traceExplorer, err := otlptracegrpc.New(ctx, otlptracegrpc.WithGRPCConn(conn))
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to create the collector exporter: %w", err)
}

bsp := sdktrace.NewBatchSpanProcessor(traceExplorer)
Expand All @@ -60,6 +62,6 @@ func main() {
if err != nil {
panic(err)
}
tracer := otel.Tracer("microservice-tracer")
webserver.StartWebserver(tracer)
configs.NewTracer(otel.Tracer("tracer"))
webserver.StartWebserver()
}
13 changes: 13 additions & 0 deletions weather/infra/configs/trace.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package configs

import "go.opentelemetry.io/otel/trace"

var Tracer trace.Tracer

func NewTracer(tracer trace.Tracer) {
Tracer = tracer
}

func GetTracer() trace.Tracer {
return Tracer
}
6 changes: 3 additions & 3 deletions weather/infra/webserver/temperature-handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@ import (
"encoding/json"
"net/http"

"github.com/renanmoreirasan/go-weather/infra/configs"
"github.com/renanmoreirasan/go-weather/internal/usecases"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
)

func GetTemperature(tracer trace.Tracer) func(w http.ResponseWriter, r *http.Request) {
func TemperatureHandler() func(w http.ResponseWriter, r *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
carrier := propagation.HeaderCarrier(r.Header)
ctx := r.Context()
ctx = otel.GetTextMapPropagator().Extract(ctx, carrier)

ctx, span := tracer.Start(ctx, "START go-weather")
ctx, span := configs.GetTracer().Start(ctx, "START call to go-weather")
defer span.End()

w.Header().Set("Content-Type", "application/json")
Expand Down
5 changes: 2 additions & 3 deletions weather/infra/webserver/webserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ import (
"net/http"

"github.com/prometheus/client_golang/prometheus/promhttp"
"go.opentelemetry.io/otel/trace"
)

func StartWebserver(tracer trace.Tracer) {
func StartWebserver() {
http.Handle("/metrics", promhttp.Handler())
http.HandleFunc("/", GetTemperature(tracer))
http.HandleFunc("/", TemperatureHandler())

fmt.Printf("Starting GO-WEATHER at port 8081\n")
if err := http.ListenAndServe(":8081", nil); err != nil {
Expand Down
4 changes: 4 additions & 0 deletions weather/internal/gateways/cep-gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"io"
"net/http"

"github.com/renanmoreirasan/go-weather/infra/configs"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/propagation"
)
Expand All @@ -22,6 +23,9 @@ func GetLocation(ctx context.Context, cep string) (Location, error) {

http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true}

ctx, span := configs.GetTracer().Start(ctx, "START call to CEP API")
defer span.End()

req, err := http.NewRequestWithContext(ctx, "GET", "http://cep.awesomeapi.com.br/json/"+cep, nil)
if err != nil {
return Location{}, err
Expand Down
5 changes: 5 additions & 0 deletions weather/internal/gateways/weather-gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"net/http"
"strconv"

"github.com/renanmoreirasan/go-weather/infra/configs"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/propagation"
)
Expand All @@ -32,6 +33,10 @@ func GetLocationTemperature(ctx context.Context, location Location) (Temperature
if err != nil {
return Temperatures{}, err
}

ctx, span := configs.GetTracer().Start(ctx, "START call to WEATHER API")
defer span.End()

url := fmt.Sprintf("http://api.weatherapi.com/v1/current.json?key=%s&q=%v,%v", apiKey, latitude, longitude)
req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
Expand Down

0 comments on commit f4e0522

Please sign in to comment.