func GetServiceDetail()

in server/service/govern/view.go [251:317]


func GetServiceDetail(ctx context.Context, in *pb.GetServiceRequest) (*pb.ServiceDetail, error) {
	ctx = util.WithCacheOnly(ctx)

	serviceID := in.ServiceId
	if len(serviceID) == 0 {
		return nil, pb.NewError(pb.ErrInvalidParams, "Invalid request for getting service detail.")
	}

	service, err := discosvc.GetService(ctx, in)
	if err != nil {
		log.Error(fmt.Sprintf("get service[%s] failed", serviceID), err)
		return nil, err
	}

	serviceInfo := new(pb.ServiceDetail)
	serviceInfo.MicroService = service

	key := &pb.MicroServiceKey{
		Environment: service.Environment,
		AppId:       service.AppId,
		ServiceName: service.ServiceName,
	}
	versions, err := getServiceAllVersions(ctx, key)
	if err != nil {
		log.Error(fmt.Sprintf("get service[%s/%s/%s] all versions failed",
			service.Environment, service.AppId, service.ServiceName), err)
		return nil, pb.NewError(pb.ErrInternal, err.Error())
	}
	serviceInfo.MicroServiceVersions = versions

	tagsResp, err := discosvc.ListTag(ctx, &pb.GetServiceTagsRequest{ServiceId: serviceID})
	if err != nil {
		log.Error(fmt.Sprintf("get service[%s] tags failed", serviceID), err)
		return nil, err
	}
	serviceInfo.Tags = tagsResp.Tags

	schemas, err := discosvc.ListSchema(ctx, &pb.GetAllSchemaRequest{ServiceId: serviceID, WithSchema: true})
	if err != nil {
		log.Error(fmt.Sprintf("get service[%s] schemas failed", serviceID), err)
		return nil, err
	}
	serviceInfo.SchemaInfos = schemas

	providerResp, err := discosvc.ListProviders(ctx, &pb.GetDependenciesRequest{ServiceId: serviceID})
	if err != nil {
		log.Error(fmt.Sprintf("get service[%s] providers failed", serviceID), err)
		return nil, err
	}
	serviceInfo.Providers = providerResp.Providers

	consumerResp, err := discosvc.ListConsumers(ctx, &pb.GetDependenciesRequest{ServiceId: serviceID})
	if err != nil {
		log.Error(fmt.Sprintf("get service[%s] consumers failed", serviceID), err)
		return nil, err
	}
	serviceInfo.Consumers = consumerResp.Consumers

	instResp, err := discosvc.ListInstance(ctx, &pb.GetInstancesRequest{ProviderServiceId: serviceID})
	if err != nil {
		log.Error(fmt.Sprintf("get service[%s] instances failed", serviceID), err)
		return nil, err
	}
	serviceInfo.Instances = instResp.Instances

	return serviceInfo, nil
}