@@ -11,6 +11,7 @@ import (
1111 "strings"
1212
1313 dash0api "github.com/dash0hq/dash0-api-client-go"
14+ dash0yaml "github.com/dash0hq/dash0-api-client-go/yaml"
1415 "github.com/dash0hq/dash0-cli/internal"
1516 "github.com/dash0hq/dash0-cli/internal/asset"
1617 "github.com/dash0hq/dash0-cli/internal/client"
@@ -285,59 +286,66 @@ func formatNameAndId(name, id string) string {
285286// Extract* functions in internal/asset/ so that apply and the per-asset
286287// CRUD commands use the same extraction logic.
287288func parseDocumentHeader (data []byte ) (kind , name , id string , err error ) {
288- kind = asset .DetectKind (data )
289+ kind , err = dash0yaml .DetectKind (data )
290+ if err != nil {
291+ return "" , "" , "" , err
292+ }
289293
290294 switch normalizeKind (kind ) {
291295 case "dashboard" :
292296 var dashboard dash0api.DashboardDefinition
293297 if err := sigsyaml .Unmarshal (data , & dashboard ); err != nil {
294298 return "" , "" , "" , fmt .Errorf ("failed to decode document: %w" , err )
295299 }
296- name = asset . ExtractDashboardDisplayName (& dashboard )
300+ name = dash0api . GetDashboardName (& dashboard )
297301 if name == "" {
298302 name = dashboard .Metadata .Name
299303 }
300- id = asset . ExtractDashboardID (& dashboard )
304+ id = dash0api . GetDashboardID (& dashboard )
301305
302306 case "checkrule" :
303307 var rule dash0api.PrometheusAlertRule
304308 if err := sigsyaml .Unmarshal (data , & rule ); err != nil {
305309 return "" , "" , "" , fmt .Errorf ("failed to decode document: %w" , err )
306310 }
307- name = asset . ExtractCheckRuleName (& rule )
308- id = asset . ExtractCheckRuleID (& rule )
311+ name = dash0api . GetCheckRuleName (& rule )
312+ id = dash0api . GetCheckRuleID (& rule )
309313
310314 case "view" :
311315 var view dash0api.ViewDefinition
312316 if err := sigsyaml .Unmarshal (data , & view ); err != nil {
313317 return "" , "" , "" , fmt .Errorf ("failed to decode document: %w" , err )
314318 }
315- name = asset . ExtractViewName (& view )
316- id = asset . ExtractViewID (& view )
319+ name = dash0api . GetViewName (& view )
320+ id = dash0api . GetViewID (& view )
317321
318322 case "syntheticcheck" :
319323 var check dash0api.SyntheticCheckDefinition
320324 if err := sigsyaml .Unmarshal (data , & check ); err != nil {
321325 return "" , "" , "" , fmt .Errorf ("failed to decode document: %w" , err )
322326 }
323- name = asset . ExtractSyntheticCheckName (& check )
324- id = asset . ExtractSyntheticCheckID (& check )
327+ name = dash0api . GetSyntheticCheckName (& check )
328+ id = dash0api . GetSyntheticCheckID (& check )
325329
326330 case "prometheusrule" :
327- var promRule asset.PrometheusRule
328- if err := sigsyaml .Unmarshal (data , & promRule ); err != nil {
331+ // We only need metadata (name + ID) here; the Metadata struct has no
332+ // time.Duration fields, so a partial unmarshal via sigsyaml is safe.
333+ var partial struct {
334+ Metadata dash0api.PrometheusRulesMetadata `json:"metadata"`
335+ }
336+ if err := sigsyaml .Unmarshal (data , & partial ); err != nil {
329337 return "" , "" , "" , fmt .Errorf ("failed to decode document: %w" , err )
330338 }
331- name = asset . ExtractPrometheusRuleName ( & promRule )
332- id = asset . ExtractPrometheusRuleID ( & promRule )
339+ name = partial . Metadata . Name
340+ id = partial . Metadata . Labels [ dash0api . LabelID ]
333341
334342 case "persesdashboard" :
335- var perses asset .PersesDashboard
343+ var perses dash0api .PersesDashboard
336344 if err := sigsyaml .Unmarshal (data , & perses ); err != nil {
337345 return "" , "" , "" , fmt .Errorf ("failed to decode document: %w" , err )
338346 }
339- name = asset . ExtractPersesDashboardName (& perses )
340- id = asset . ExtractPersesDashboardID (& perses )
347+ name = dash0api . GetPersesDashboardName (& perses )
348+ id = dash0api . GetPersesDashboardID (& perses )
341349
342350 default :
343351 var raw map [string ]any
@@ -546,21 +554,21 @@ func normalizeKind(kind string) string {
546554func applyDocument (ctx context.Context , apiClient dash0api.Client , doc assetDocument , dataset * string ) ([]applyResult , error ) {
547555 switch normalizeKind (doc .kind ) {
548556 case "dashboard" , "persesdashboard" :
549- dashboard , err := asset . ParseDashboardInput (doc .raw )
557+ dashboard , err := dash0yaml . ParseAsDashboard (doc .raw )
550558 if err != nil {
551559 return nil , err
552560 }
553561 result , err := asset .ImportDashboard (ctx , apiClient , dashboard , dataset )
554562 if err != nil {
555563 return nil , client .HandleAPIError (err , client.ErrorContext {
556564 AssetType : "dashboard" ,
557- AssetName : asset . ExtractDashboardDisplayName (dashboard ),
565+ AssetName : dash0api . GetDashboardName (dashboard ),
558566 })
559567 }
560568 return []applyResult {{kind : "Dashboard" , name : result .Name , id : result .ID , action : applyAction (result .Action ), before : result .Before , after : result .After }}, nil
561569
562570 case "checkrule" , "prometheusrule" :
563- rules , err := asset . ParseCheckRuleInputs (doc .raw )
571+ rules , err := dash0yaml . ParseAsPrometheusAlertRules (doc .raw )
564572 if err != nil {
565573 return nil , err
566574 }
0 commit comments