in server/service/govern/view.go [114:193]
func getServiceDetailUtil(ctx context.Context, opts ServiceDetailOpt) (*pb.ServiceDetail, error) {
service := opts.service
serviceID := service.ServiceId
serviceLogName := fmt.Sprintf("%s][%s/%s/%s/%s", service.ServiceId, service.Environment, service.AppId, service.ServiceName, service.Version)
options := opts.options
serviceDetail := new(pb.ServiceDetail)
if opts.countOnly {
serviceDetail.Statics = new(pb.Statistics)
}
for _, opt := range options {
expr := opt
switch expr {
case "tags":
resp, err := discosvc.ListTag(ctx, &pb.GetServiceTagsRequest{
ServiceId: serviceID,
})
if err != nil {
log.Error(fmt.Sprintf("get service[%s]'s all tags failed", serviceLogName), err)
return nil, err
}
serviceDetail.Tags = resp.Tags
case "instances":
resp, err := discosvc.ListInstance(ctx, &pb.GetInstancesRequest{
ProviderServiceId: serviceID,
})
if err != nil {
log.Error(fmt.Sprintf("get service[%s]'s all instances failed", serviceLogName), err)
return nil, err
}
if opts.countOnly {
if err != nil {
log.Error(fmt.Sprintf("get number of service[%s]'s instances failed", serviceLogName), err)
return nil, err
}
serviceDetail.Statics.Instances = &pb.StInstance{
Count: int64(len(resp.Instances)),
}
continue
}
serviceDetail.Instances = resp.Instances
case "schemas":
schemas, err := discosvc.ListSchema(ctx, &pb.GetAllSchemaRequest{
ServiceId: serviceID,
WithSchema: true,
})
if err != nil {
log.Error(fmt.Sprintf("get service[%s]'s all schemas failed", serviceLogName), err)
return nil, err
}
serviceDetail.SchemaInfos = schemas
case "dependencies":
consumerResp, err := discosvc.ListConsumers(ctx, &pb.GetDependenciesRequest{
ServiceId: serviceID,
NoSelf: true,
SameDomain: true,
})
if err != nil {
log.Error(fmt.Sprintf("get service[%s]'s all consumers failed", serviceLogName), err)
return nil, err
}
providerResp, err := discosvc.ListProviders(ctx, &pb.GetDependenciesRequest{
ServiceId: serviceID,
NoSelf: true,
SameDomain: true,
})
if err != nil {
log.Error(fmt.Sprintf("get service[%s]'s all providers failed", serviceLogName), err)
return nil, err
}
serviceDetail.Consumers = consumerResp.Consumers
serviceDetail.Providers = providerResp.Providers
case "":
continue
default:
log.Error(fmt.Sprintf("request option[%s] is invalid", opt), nil)
}
}
return serviceDetail, nil
}