55 "context"
66 "encoding/json"
77 "example/api"
8+ "fmt"
9+ "go.opentelemetry.io/otel"
10+ "go.opentelemetry.io/otel/trace"
811 "net/http"
912 "regexp"
1013)
@@ -15,10 +18,24 @@ type APIRouter struct {
1518 Authorizer api.Authorizer
1619}
1720
21+ var tracer = otel .Tracer ("scd.api" )
22+
1823// *scd.APIRouter (type defined above) implements the api.PartialRouter interface
1924func (s * APIRouter ) Handle (w http.ResponseWriter , r * http.Request ) bool {
2025 for _ , route := range s .Routes {
2126 if route .Method == r .Method && route .Pattern .MatchString (r .URL .Path ) {
27+
28+ span := trace .SpanFromContext (r .Context ())
29+
30+ if span .IsRecording () {
31+ // Current span is the one from the otelhttp handler
32+ span .SetName (fmt .Sprintf ("%s %s" , r .Method , route .Path ))
33+ }
34+
35+ ctx , span := tracer .Start (r .Context (), route .Name )
36+ defer span .End ()
37+ r = r .WithContext (ctx )
38+
2239 route .Handler (route .Pattern , w , r )
2340 return true
2441 }
@@ -953,58 +970,58 @@ func MakeAPIRouter(impl Implementation, auth api.Authorizer) APIRouter {
953970 router := APIRouter {Implementation : impl , Authorizer : auth , Routes : make ([]* api.Route , 18 )}
954971
955972 pattern := regexp .MustCompile ("^/scd/dss/v1/operational_intent_references/query$" )
956- router .Routes [0 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .QueryOperationalIntentReferences }
973+ router .Routes [0 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .QueryOperationalIntentReferences , Name : "scd.QueryOperationalIntentReferences" , Path : "/scd/dss/v1/operational_intent_references/query" }
957974
958975 pattern = regexp .MustCompile ("^/scd/dss/v1/operational_intent_references/(?P<entityid>[^/]*)$" )
959- router .Routes [1 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetOperationalIntentReference }
976+ router .Routes [1 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetOperationalIntentReference , Name : "scd.GetOperationalIntentReference" , Path : "/scd/dss/v1/operational_intent_references/{entityid}" }
960977
961978 pattern = regexp .MustCompile ("^/scd/dss/v1/operational_intent_references/(?P<entityid>[^/]*)$" )
962- router .Routes [2 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .CreateOperationalIntentReference }
979+ router .Routes [2 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .CreateOperationalIntentReference , Name : "scd.CreateOperationalIntentReference" , Path : "/scd/dss/v1/operational_intent_references/{entityid}" }
963980
964981 pattern = regexp .MustCompile ("^/scd/dss/v1/operational_intent_references/(?P<entityid>[^/]*)/(?P<ovn>[^/]*)$" )
965- router .Routes [3 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .UpdateOperationalIntentReference }
982+ router .Routes [3 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .UpdateOperationalIntentReference , Name : "scd.UpdateOperationalIntentReference" , Path : "/scd/dss/v1/operational_intent_references/{entityid}/{ovn}" }
966983
967984 pattern = regexp .MustCompile ("^/scd/dss/v1/operational_intent_references/(?P<entityid>[^/]*)/(?P<ovn>[^/]*)$" )
968- router .Routes [4 ] = & api.Route {Method : http .MethodDelete , Pattern : pattern , Handler : router .DeleteOperationalIntentReference }
985+ router .Routes [4 ] = & api.Route {Method : http .MethodDelete , Pattern : pattern , Handler : router .DeleteOperationalIntentReference , Name : "scd.DeleteOperationalIntentReference" , Path : "/scd/dss/v1/operational_intent_references/{entityid}/{ovn}" }
969986
970987 pattern = regexp .MustCompile ("^/scd/dss/v1/constraint_references/query$" )
971- router .Routes [5 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .QueryConstraintReferences }
988+ router .Routes [5 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .QueryConstraintReferences , Name : "scd.QueryConstraintReferences" , Path : "/scd/dss/v1/constraint_references/query" }
972989
973990 pattern = regexp .MustCompile ("^/scd/dss/v1/constraint_references/(?P<entityid>[^/]*)$" )
974- router .Routes [6 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetConstraintReference }
991+ router .Routes [6 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetConstraintReference , Name : "scd.GetConstraintReference" , Path : "/scd/dss/v1/constraint_references/{entityid}" }
975992
976993 pattern = regexp .MustCompile ("^/scd/dss/v1/constraint_references/(?P<entityid>[^/]*)$" )
977- router .Routes [7 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .CreateConstraintReference }
994+ router .Routes [7 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .CreateConstraintReference , Name : "scd.CreateConstraintReference" , Path : "/scd/dss/v1/constraint_references/{entityid}" }
978995
979996 pattern = regexp .MustCompile ("^/scd/dss/v1/constraint_references/(?P<entityid>[^/]*)/(?P<ovn>[^/]*)$" )
980- router .Routes [8 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .UpdateConstraintReference }
997+ router .Routes [8 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .UpdateConstraintReference , Name : "scd.UpdateConstraintReference" , Path : "/scd/dss/v1/constraint_references/{entityid}/{ovn}" }
981998
982999 pattern = regexp .MustCompile ("^/scd/dss/v1/constraint_references/(?P<entityid>[^/]*)/(?P<ovn>[^/]*)$" )
983- router .Routes [9 ] = & api.Route {Method : http .MethodDelete , Pattern : pattern , Handler : router .DeleteConstraintReference }
1000+ router .Routes [9 ] = & api.Route {Method : http .MethodDelete , Pattern : pattern , Handler : router .DeleteConstraintReference , Name : "scd.DeleteConstraintReference" , Path : "/scd/dss/v1/constraint_references/{entityid}/{ovn}" }
9841001
9851002 pattern = regexp .MustCompile ("^/scd/dss/v1/subscriptions/query$" )
986- router .Routes [10 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .QuerySubscriptions }
1003+ router .Routes [10 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .QuerySubscriptions , Name : "scd.QuerySubscriptions" , Path : "/scd/dss/v1/subscriptions/query" }
9871004
9881005 pattern = regexp .MustCompile ("^/scd/dss/v1/subscriptions/(?P<subscriptionid>[^/]*)$" )
989- router .Routes [11 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetSubscription }
1006+ router .Routes [11 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetSubscription , Name : "scd.GetSubscription" , Path : "/scd/dss/v1/subscriptions/{subscriptionid}" }
9901007
9911008 pattern = regexp .MustCompile ("^/scd/dss/v1/subscriptions/(?P<subscriptionid>[^/]*)$" )
992- router .Routes [12 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .CreateSubscription }
1009+ router .Routes [12 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .CreateSubscription , Name : "scd.CreateSubscription" , Path : "/scd/dss/v1/subscriptions/{subscriptionid}" }
9931010
9941011 pattern = regexp .MustCompile ("^/scd/dss/v1/subscriptions/(?P<subscriptionid>[^/]*)/(?P<version>[^/]*)$" )
995- router .Routes [13 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .UpdateSubscription }
1012+ router .Routes [13 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .UpdateSubscription , Name : "scd.UpdateSubscription" , Path : "/scd/dss/v1/subscriptions/{subscriptionid}/{version}" }
9961013
9971014 pattern = regexp .MustCompile ("^/scd/dss/v1/subscriptions/(?P<subscriptionid>[^/]*)/(?P<version>[^/]*)$" )
998- router .Routes [14 ] = & api.Route {Method : http .MethodDelete , Pattern : pattern , Handler : router .DeleteSubscription }
1015+ router .Routes [14 ] = & api.Route {Method : http .MethodDelete , Pattern : pattern , Handler : router .DeleteSubscription , Name : "scd.DeleteSubscription" , Path : "/scd/dss/v1/subscriptions/{subscriptionid}/{version}" }
9991016
10001017 pattern = regexp .MustCompile ("^/scd/dss/v1/reports$" )
1001- router .Routes [15 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .MakeDssReport }
1018+ router .Routes [15 ] = & api.Route {Method : http .MethodPost , Pattern : pattern , Handler : router .MakeDssReport , Name : "scd.MakeDssReport" , Path : "/scd/dss/v1/reports" }
10021019
10031020 pattern = regexp .MustCompile ("^/scd/dss/v1/uss_availability/(?P<uss_id>[^/]*)$" )
1004- router .Routes [16 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetUssAvailability }
1021+ router .Routes [16 ] = & api.Route {Method : http .MethodGet , Pattern : pattern , Handler : router .GetUssAvailability , Name : "scd.GetUssAvailability" , Path : "/scd/dss/v1/uss_availability/{uss_id}" }
10051022
10061023 pattern = regexp .MustCompile ("^/scd/dss/v1/uss_availability/(?P<uss_id>[^/]*)$" )
1007- router .Routes [17 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .SetUssAvailability }
1024+ router .Routes [17 ] = & api.Route {Method : http .MethodPut , Pattern : pattern , Handler : router .SetUssAvailability , Name : "scd.SetUssAvailability" , Path : "/scd/dss/v1/uss_availability/{uss_id}" }
10081025
10091026 return router
10101027}
0 commit comments