func getServiceDetailUtil()

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
}