-
Notifications
You must be signed in to change notification settings - Fork 0
/
routeMapper.go
78 lines (66 loc) · 1.81 KB
/
routeMapper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package mapper
import (
"errors"
"fmt"
"log"
"runtime/debug"
xdsUtil "Envoy-Pilot/cmd/server/util"
"github.com/envoyproxy/go-control-plane/envoy/api/v2"
"github.com/envoyproxy/go-control-plane/pkg/cache"
"github.com/gogo/protobuf/proto"
"github.com/gogo/protobuf/types"
)
type RouteMapper struct{}
func (r *RouteMapper) GetRoute(rawObj interface{}) (retRoutes *v2.RouteConfiguration, retErr error) {
if rawObj == nil {
return &v2.RouteConfiguration{}, nil
}
connManager := BuildRouteConfig(rawObj)
return connManager.RouteConfig, nil
}
func (r *RouteMapper) GetRoutes(routesJson string) (retRoutes []*v2.RouteConfiguration, retErr error) {
defer func() {
if r := recover(); r != nil {
log.Println("*********************************")
log.Printf("Recovered %s from %s: %s\n", "GetRoutes", r, debug.Stack())
log.Println("*********************************")
retErr = errors.New(fmt.Sprintf("%s", r))
}
}()
var rawArr []interface{}
// err := json.Unmarshal([]byte(routesJson), &rawArr)
// if err != nil {
// panic(err)
// }
rawArr = xdsUtil.ImportJsonOrYaml(routesJson)
var routes = make([]*v2.RouteConfiguration, len(rawArr))
for i, rawRoute := range rawArr {
val, err := r.GetRoute(rawRoute)
if err != nil {
panic(err)
}
routes[i] = val
}
return routes, nil
}
func (r *RouteMapper) GetResources(configJson string) ([]types.Any, error) {
typeUrl := cache.RouteType
routes, err := r.GetRoutes(configJson)
if err != nil {
log.Printf("Error parsing route config")
return nil, err
}
resources := make([]types.Any, len(routes))
for i, route := range routes {
data, err := proto.Marshal(route)
if err != nil {
log.Printf("Error marshalling route config")
log.Panic(err)
}
resources[i] = types.Any{
Value: data,
TypeUrl: typeUrl,
}
}
return resources, nil
}