/
utility.go
85 lines (71 loc) · 2.65 KB
/
utility.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
79
80
81
82
83
84
85
/*
* 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 router
import (
"regexp"
"github.com/alipay/sofa-mosn/pkg/api/v2"
"github.com/alipay/sofa-mosn/pkg/log"
"github.com/alipay/sofa-mosn/pkg/types"
)
// getClusterMosnLBMetaDataMap from v2.Metadata
// e.g. metadata = { "filter_metadata": {"mosn.lb": { "label": "gray" } } }
// 4-tier map
func getClusterMosnLBMetaDataMap(metadata v2.Metadata) types.RouteMetaData {
metadataMap := make(map[string]types.HashedValue)
for key, value := range metadata {
metadataMap[key] = types.GenerateHashedValue(value)
}
return metadataMap
}
// Note
// "runtimeKey" and "loader" are not used currently
func getWeightedClusterEntry(weightedClusters []v2.WeightedCluster) (map[string]weightedClusterEntry, uint32) {
var weightedClusterEntries = make(map[string]weightedClusterEntry)
var totalWeight uint32
for _, weightedCluster := range weightedClusters {
subsetLBMetaData := weightedCluster.Cluster.MetadataMatch
totalWeight = totalWeight + weightedCluster.Cluster.Weight
weightedClusterEntries[weightedCluster.Cluster.Name] = weightedClusterEntry{
clusterName: weightedCluster.Cluster.Name,
clusterWeight: weightedCluster.Cluster.Weight,
clusterMetadataMatchCriteria: NewMetadataMatchCriteriaImpl(subsetLBMetaData),
}
}
return weightedClusterEntries, totalWeight
}
func getRouterHeaders(heades []v2.HeaderMatcher) []*types.HeaderData {
var headerDatas []*types.HeaderData
for _, header := range heades {
headerData := &types.HeaderData{
Name: &lowerCaseString{
header.Name,
},
Value: header.Value,
IsRegex: header.Regex,
}
if header.Regex {
if pattern, err := regexp.Compile(header.Name); err != nil {
headerData.RegexPattern = pattern
} else {
log.DefaultLogger.Errorf("getRouterHeaders compile error")
continue
}
}
headerDatas = append(headerDatas, headerData)
}
return headerDatas
}