Skip to content

datadogV2.EntityV3Service not available from datadogV2.ServiceDefinitionData #3145

@dudo

Description

@dudo
func GetServiceDefinitions(ctx context.Context) ([]*..., error) {
	servicesAPI := datadogV2.NewServiceDefinitionApi(...)
	var rawServices []datadogV2.ServiceDefinitionData = []datadogV2.ServiceDefinitionData{}
	var pageNum int64 = 0
	for {
		resp, _, err := servicesAPI.ListServiceDefinitions(
			ctx,
			*datadogV2.NewListServiceDefinitionsOptionalParameters().WithPageSize(100).WithPageNumber(pageNum))
		if err != nil {
			return nil, err
		}
		if len(resp.Data) == 0 {
			break
		} else {
			rawServices = append(rawServices, resp.Data...)
			pageNum += 1
		}
	}
	response := []*ServiceDefinition{}
	for _, definition := range rawServices {
		if d := parseServiceDefinition(definition); d != nil {
			response = append(response, d)
		}

	}
	return response, nil
}

func parseServiceDefinition(data datadogV2.ServiceDefinitionData) *ServiceDefinition {
	var name string
	var team *string
	var tier *string

	instance := data.Attributes.Schema.GetActualInstance()

	if svc, ok := instance.(*datadogV2.ServiceDefinitionV2); ok {
		// V3 currently matches this, which is odd, but that's what the API returns.
		name = svc.DdService
		team = svc.Team
	} else if svc, ok := instance.(*datadogV2.ServiceDefinitionV2Dot1); ok {
		name = svc.DdService
		team = svc.Team
		tier = svc.Tier
	} else if svc, ok := instance.(*datadogV2.ServiceDefinitionV2Dot2); ok {
		name = svc.DdService
		team = svc.Team
		tier = svc.Tier
	} else if svc, ok := instance.(*datadogV2.EntityV3Service); ok {
		// This doesn't match anything in the latest version of the SDK
		name = svc.Metadata.Name
		team = svc.Metadata.Owner
		tier = svc.Spec.Tier
	} else {
		return nil
	}

	teamString := "unknown"
	if team != nil {
		teamString = *team
	}

	tierInt := 3
	if tier != nil {
		tierInt, _ = strconv.Atoi(*tier)
	}

	svc := &ServiceDefinition{
		Id:   *data.Id,
		Name: name,
		Team: teamString,
		ServiceTier: tierInt,
	}

	return svc
}

Hopefully that shows the problem I'm seeing. I was also getting the object directly from the schema, e.g. data.Attributes.Schema.ServiceDefinitionV2Dot2.DdService, but type assertion feels less error prone. Regardless, datadogV2.EntityV3Service isn't available as a schema.

Should I be looking up services another way, or is this just a bug?

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugBug related issuestaleStale - Bot reminder

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions