-
Notifications
You must be signed in to change notification settings - Fork 64
Open
Labels
Description
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?