in pkg/admin/handler/overview.go [130:215]
func calServiceInfo(res *model.OverviewResp, list *mesh.DataplaneResourceList, rt core_runtime.Runtime, manager core_manager.ResourceManager) error {
revisions := make(map[string]*mesh.MetaDataResource, 0)
protocols := make(map[string]*gxset.HashSet)
releases := make(map[string]string)
services := make(map[string]string)
discoveries := make(map[string]*gxset.HashSet)
for _, ins := range list.Items {
app := ins.Spec.GetExtensions()[v1alpha1.Application]
t := ins.Spec.GetExtensions()["registry-type"]
if t == "" {
t = "instance"
}
if set, ok := discoveries[t]; ok {
set.Add(app)
} else {
newSet := gxset.NewSet()
newSet.Add(app)
discoveries[t] = newSet
}
rev, exists := ins.Spec.GetExtensions()[v1alpha1.Revision]
if exists {
metadata, cached := revisions[rev]
if !cached {
metadata = &mesh.MetaDataResource{
Spec: &v1alpha1.MetaData{},
}
if err := manager.Get(rt.AppContext(), metadata, store.GetByRevision(rev), store.GetByType(ins.Spec.GetExtensions()["registry-type"])); err != nil {
return err
}
revisions[rev] = metadata
for _, serviceInfo := range metadata.Spec.Services {
// proKey := serviceInfo.Protocol + strconv.Itoa(int(serviceInfo.Port))
proKey := serviceInfo.Protocol
if extProtocols, ok := serviceInfo.GetParams()["ext.protocol"]; ok {
proKey = proKey + extProtocols
}
if set, ok := protocols[proKey]; ok {
set.Add(serviceInfo.Name)
} else {
newSet := gxset.NewSet()
protocols[proKey] = newSet
newSet.Add(serviceInfo.Name)
}
if _, ok := releases[app]; !ok {
releases[app] = serviceInfo.Params["release"]
}
if _, ok := services[serviceInfo.Name]; !ok {
services[serviceInfo.Name] = serviceInfo.Name
}
}
}
}
}
releaseCount := make(map[string]int)
for _, ver := range releases {
if n, ok := releaseCount[ver]; ok {
releaseCount[ver] = n + 1
} else {
releaseCount[ver] = 1
}
}
protocolCount := make(map[string]int)
for p, set := range protocols {
protocolCount[p] = set.Size()
}
discoveryCount := make(map[string]int)
for d, set := range discoveries {
discoveryCount[d] = set.Size()
}
res.ServiceCount = len(services)
res.Releases = releaseCount
res.Protocols = protocolCount
res.Discoveries = discoveryCount
return nil
}