mosn
1package main
2
3import (
4"context"
5
6"mosn.io/api"
7"mosn.io/mosn/pkg/router"
8"mosn.io/mosn/pkg/types"
9)
10
11type extendHandler struct {
12headers api.HeaderMap
13routers types.Routers
14route api.Route
15}
16
17func (h *extendHandler) IsAvailable(ctx context.Context, manager types.ClusterManager) (types.ClusterSnapshot, types.HandlerStatus) {
18rs := h.routers.MatchAllRoutes(ctx, h.headers)
19for _, r := range rs {
20name := r.RouteRule().ClusterName(ctx)
21snap := manager.GetClusterSnapshot(ctx, name)
22// Verify is cluster config exists hosts
23if snap.IsExistsHosts(nil) {
24h.route = r
25return snap, types.HandlerAvailable
26}
27}
28return nil, types.HandlerNotAvailable
29}
30
31func (h *extendHandler) Route() api.Route {
32return h.route
33}
34
35func MakeExtendHandler(ctx context.Context, headers api.HeaderMap, routers types.Routers) types.RouteHandler {
36return &extendHandler{
37headers: headers,
38routers: routers,
39}
40}
41
42func init() {
43router.RegisterMakeHandler("check-handler", MakeExtendHandler, false)
44}
45