in server/service/govern/view.go [43:112]
func ListServiceDetail(ctx context.Context, in *pb.GetServicesInfoRequest) (*pb.GetServicesInfoResponse, error) {
ctx = util.WithCacheOnly(ctx)
optionMap := make(map[string]struct{}, len(in.Options))
for _, opt := range in.Options {
optionMap[opt] = struct{}{}
}
options := make([]string, 0, len(optionMap))
if _, ok := optionMap["all"]; ok {
optionMap["statistics"] = struct{}{}
options = defaultOptions
} else {
for opt := range optionMap {
options = append(options, opt)
}
}
var st *pb.Statistics
if _, ok := optionMap["statistics"]; ok {
var err error
st, err = datasource.GetMetadataManager().Statistics(ctx, in.WithShared)
if err != nil {
return nil, pb.NewError(pb.ErrInternal, err.Error())
}
if len(optionMap) == 1 {
return &pb.GetServicesInfoResponse{
Statistics: st,
}, nil
}
}
//获取所有服务
resp, err := discosvc.ListService(ctx, &pb.GetServicesRequest{WithShared: in.WithShared})
if err != nil {
log.Error("get all services by domain failed", err)
return nil, pb.NewError(pb.ErrInternal, err.Error())
}
services := resp.Services
allServiceDetails := make([]*pb.ServiceDetail, 0, len(services))
domainProject := util.ParseDomainProject(ctx)
instanceProperties := config.GetStringMap("registry.instance.properties")
for _, service := range services {
if !filterServices(domainProject, in, service) {
continue
}
serviceDetail, err := getServiceDetailUtil(ctx, ServiceDetailOpt{
domainProject: domainProject,
service: service,
countOnly: in.CountOnly,
options: options,
})
if err != nil {
return nil, pb.NewError(pb.ErrInternal, err.Error())
}
serviceDetail.MicroService = service
tmpServiceDetail, err := NewServiceOverview(serviceDetail, instanceProperties)
if err != nil {
return nil, err
}
allServiceDetails = append(allServiceDetails, tmpServiceDetail)
}
return &pb.GetServicesInfoResponse{
AllServicesDetail: allServiceDetails,
Statistics: st,
}, nil
}