@@ -41,6 +41,29 @@ func ListResourceWithOptions(r cm_rest.ListerWithOptions, scope handlers.Request
41
41
// For performance tracking purposes.
42
42
trace := utiltrace .New ("List " + req .URL .Path )
43
43
44
+ requestInfo , ok := request .RequestInfoFrom (req .Context ())
45
+ if ! ok {
46
+ err := errors .NewBadRequest ("missing requestInfo" )
47
+ writeError (& scope , err , w , req )
48
+ return
49
+ }
50
+
51
+ // handle metrics describing namespaces
52
+ if requestInfo .Namespace != "" && requestInfo .Resource == "metrics" {
53
+ requestInfo .Subresource = requestInfo .Name
54
+ requestInfo .Name = requestInfo .Namespace
55
+ requestInfo .Resource = "namespaces"
56
+ requestInfo .Namespace = ""
57
+ requestInfo .Parts = append ([]string {"namespaces" , requestInfo .Name }, requestInfo .Parts [1 :]... )
58
+ }
59
+
60
+ // handle invalid requests, e.g. /namespaces/name/foo
61
+ if len (requestInfo .Parts ) < 3 {
62
+ err := errors .NewBadRequest ("invalid request path" )
63
+ writeError (& scope , err , w , req )
64
+ return
65
+ }
66
+
44
67
namespace , err := scope .Namer .Namespace (req )
45
68
if err != nil {
46
69
writeError (& scope , err , w , req )
0 commit comments