pkg/webservice/routes.go (260 lines of code) (raw):
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package webservice
import (
"net/http"
"net/http/pprof"
)
type route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
type routes []route
var webRoutes = routes{
// endpoints to retrieve general cluster info
route{
"Cluster",
"GET",
"/ws/v1/clusters",
getClusterInfo,
},
route{
"Cluster",
"GET",
"/ws/v1/metrics",
getMetrics,
},
route{
"Cluster",
"GET",
"/ws/v1/config",
getClusterConfig,
},
route{
"Cluster",
"POST",
"/ws/v1/validate-conf",
validateConf,
},
// endpoints to retrieve general scheduler info
route{
"Scheduler",
"GET",
"/ws/v1/history/apps",
getApplicationHistory,
},
route{
"Scheduler",
"GET",
"/ws/v1/history/containers",
getContainerHistory,
},
route{
"Scheduler",
"GET",
"/ws/v1/partitions",
getPartitions,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/placementrules",
getPartitionRules,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/queues",
getPartitionQueues,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/queue/:queue",
getPartitionQueue,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/nodes",
getPartitionNodes,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/node/:node",
getPartitionNode,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/queue/:queue/applications",
getQueueApplications,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/queue/:queue/application/:application",
getApplication,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/application/:application",
getApplication,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/applications/:state",
getPartitionApplicationsByState,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/queue/:queue/applications/:state",
getQueueApplicationsByState,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/usage/users",
getUsersResourceUsage,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/usage/user/:user",
getUserResourceUsage,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/usage/groups",
getGroupsResourceUsage,
},
route{
"Scheduler",
"GET",
"/ws/v1/partition/:partition/usage/group/:group",
getGroupResourceUsage,
},
route{
"Scheduler",
"GET",
"/ws/v1/events/batch",
getEvents,
},
route{
"Scheduler",
"GET",
"/ws/v1/events/stream",
getStream,
},
route{
"Scheduler",
"GET",
"/ws/v1/scheduler/healthcheck",
checkHealthStatus,
},
route{
"Scheduler",
"GET",
"/ws/v1/scheduler/node-utilizations",
getNodeUtilisations,
},
// endpoints to retrieve debug info
//
// These endpoints are not to be proxied by the web server. The content is not for general consumption.
// The content is not considered stable and can change from release to release.
// All pprof endpoints provide profiling data in the format expected by the pprof visualization tool.
// We need to explicitly register all handlers as we do not use the DefaultServeMux
route{
Name: "System",
Method: "GET",
Pattern: "/debug/stack",
HandlerFunc: getStackInfo,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/fullstatedump",
HandlerFunc: getFullStateDump,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/",
HandlerFunc: pprof.Index,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/heap",
HandlerFunc: pprof.Index,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/threadcreate",
HandlerFunc: pprof.Index,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/goroutine",
HandlerFunc: pprof.Index,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/allocs",
HandlerFunc: pprof.Index,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/block",
HandlerFunc: pprof.Index,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/mutex",
HandlerFunc: pprof.Index,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/cmdline",
HandlerFunc: pprof.Cmdline,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/profile",
HandlerFunc: pprof.Profile,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/symbol",
HandlerFunc: pprof.Symbol,
},
route{
Name: "System",
Method: "GET",
Pattern: "/debug/pprof/trace",
HandlerFunc: pprof.Trace,
},
// Deprecated REST calls
//
// Replaced with /ws/v1/scheduler/node-utilizations as part of YuniKorn 1.5
// Remove as part of YuniKorn 1.8
route{
Name: "Scheduler",
Method: "GET",
Pattern: "/ws/v1/scheduler/node-utilization",
HandlerFunc: getNodeUtilisation,
},
// Permanently moved to the debug endpoint as part of YuniKorn 1.7
// Remove redirect in YuniKorn 1.10
route{
Name: "Scheduler",
Method: "GET",
Pattern: "/ws/v1/stack",
HandlerFunc: redirectDebug,
},
// Permanently moved to the debug endpoint as part of YuniKorn 1.7
// Remove redirect in YuniKorn 1.10
route{
Name: "Scheduler",
Method: "GET",
Pattern: "/ws/v1/fullstatedump",
HandlerFunc: redirectDebug,
},
}