152 lines
3.8 KiB
Go
152 lines
3.8 KiB
Go
package correlations
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/utils/ptr"
|
|
|
|
authlib "github.com/grafana/authlib/types"
|
|
correlationsV0 "github.com/grafana/grafana/apps/correlations/pkg/apis/correlation/v0alpha1"
|
|
"github.com/grafana/grafana/pkg/apimachinery/utils"
|
|
)
|
|
|
|
func ToResource(orig Correlation, namespacer authlib.NamespaceFormatter) (*correlationsV0.Correlation, error) {
|
|
cfg, err := ToSpecConfig(orig.Config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
obj := &correlationsV0.Correlation{
|
|
ObjectMeta: v1.ObjectMeta{
|
|
Name: orig.UID,
|
|
Namespace: namespacer(orig.OrgID),
|
|
},
|
|
Spec: correlationsV0.CorrelationSpec{
|
|
Label: orig.Label,
|
|
Type: correlationsV0.CorrelationCorrelationType(orig.Type),
|
|
Source: correlationsV0.CorrelationDataSourceRef{
|
|
Group: ptr.Deref(orig.SourceType, ""),
|
|
Name: orig.SourceUID,
|
|
},
|
|
Config: *cfg,
|
|
},
|
|
}
|
|
if orig.TargetUID != nil {
|
|
obj.Spec.Target = &correlationsV0.CorrelationDataSourceRef{
|
|
Group: ptr.Deref(orig.TargetType, ""),
|
|
Name: *orig.TargetUID,
|
|
}
|
|
}
|
|
if orig.Description != "" {
|
|
obj.Spec.Description = &orig.Description
|
|
}
|
|
if orig.Provisioned {
|
|
tmp, _ := utils.MetaAccessor(obj)
|
|
tmp.SetManagerProperties(utils.ManagerProperties{
|
|
Kind: utils.ManagerKindClassicFP, // nolint:staticcheck
|
|
})
|
|
}
|
|
return obj, nil
|
|
}
|
|
|
|
func ToCorrelation(obj *correlationsV0.Correlation) (*Correlation, error) {
|
|
ns, err := authlib.ParseNamespace(obj.Namespace)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
cfg, err := ToConfig(obj.Spec.Config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result := &Correlation{
|
|
UID: obj.Name,
|
|
OrgID: ns.OrgID,
|
|
Label: obj.Spec.Label,
|
|
Description: ptr.Deref(obj.Spec.Description, ""),
|
|
SourceUID: obj.Spec.Source.Name,
|
|
SourceType: ptr.To(obj.Spec.Source.Group),
|
|
Type: CorrelationType(obj.Spec.Type),
|
|
Config: *cfg,
|
|
}
|
|
if obj.Annotations[utils.AnnoKeyManagerKind] != "" {
|
|
result.Provisioned = true
|
|
}
|
|
if obj.Spec.Target != nil {
|
|
result.TargetUID = &obj.Spec.Target.Name
|
|
result.TargetType = ptr.To(obj.Spec.Target.Group)
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func ToSpecConfig(orig CorrelationConfig) (*correlationsV0.CorrelationConfigSpec, error) {
|
|
out := &correlationsV0.CorrelationConfigSpec{}
|
|
raw, err := json.Marshal(orig)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
err = json.Unmarshal(raw, out)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(out.Target) == 0 {
|
|
out.Target = nil
|
|
}
|
|
return out, err
|
|
}
|
|
|
|
func ToConfig(orig correlationsV0.CorrelationConfigSpec) (*CorrelationConfig, error) {
|
|
out := &CorrelationConfig{}
|
|
raw, err := json.Marshal(orig)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
err = json.Unmarshal(raw, out)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(out.Target) == 0 {
|
|
out.Target = nil
|
|
}
|
|
return out, err
|
|
}
|
|
|
|
func ToUpdateCorrelationCommand(obj *correlationsV0.Correlation) (*UpdateCorrelationCommand, error) {
|
|
tmp, err := ToCorrelation(obj)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if tmp.Config.Target == nil {
|
|
tmp.Config.Target = map[string]any{} // replace it
|
|
}
|
|
return &UpdateCorrelationCommand{
|
|
UID: tmp.UID,
|
|
OrgId: tmp.OrgID,
|
|
SourceUID: tmp.SourceUID,
|
|
Label: &tmp.Label,
|
|
Description: &tmp.Description,
|
|
Type: &tmp.Type,
|
|
Config: &CorrelationConfigUpdateDTO{
|
|
Field: &tmp.Config.Field,
|
|
Target: &tmp.Config.Target,
|
|
Transformations: tmp.Config.Transformations,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func ToCreateCorrelationCommand(obj *correlationsV0.Correlation) (*CreateCorrelationCommand, error) {
|
|
tmp, err := ToCorrelation(obj)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &CreateCorrelationCommand{
|
|
OrgId: tmp.OrgID,
|
|
SourceUID: tmp.SourceUID,
|
|
TargetUID: tmp.TargetUID,
|
|
Label: tmp.Label,
|
|
Description: tmp.Description,
|
|
Config: tmp.Config,
|
|
Type: tmp.Type,
|
|
Provisioned: tmp.Provisioned,
|
|
}, nil
|
|
}
|