2024-11-09 13:09:46 +08:00
|
|
|
package dashboard
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
|
|
|
|
|
|
commonV0 "github.com/grafana/grafana/pkg/apimachinery/apis/common/v0alpha1"
|
2024-11-16 04:49:45 +08:00
|
|
|
dashboard "github.com/grafana/grafana/pkg/apis/dashboard"
|
2024-11-09 13:09:46 +08:00
|
|
|
"github.com/grafana/grafana/pkg/storage/unified/apistore"
|
|
|
|
)
|
|
|
|
|
2024-11-16 04:49:45 +08:00
|
|
|
func NewDashboardLargeObjectSupport(scheme *runtime.Scheme) *apistore.BasicLargeObjectSupport {
|
2024-11-09 13:09:46 +08:00
|
|
|
return &apistore.BasicLargeObjectSupport{
|
|
|
|
TheGroupResource: dashboard.DashboardResourceInfo.GroupResource(),
|
|
|
|
|
|
|
|
// byte size, while testing lets do almost everything (10bytes)
|
|
|
|
ThresholdSize: 10,
|
|
|
|
|
|
|
|
// 10mb -- we should check what the largest ones are... might be bigger
|
|
|
|
MaxByteSize: 10 * 1024 * 1024,
|
|
|
|
|
|
|
|
ReduceSpec: func(obj runtime.Object) error {
|
2024-11-16 04:49:45 +08:00
|
|
|
dash, err := ToInternalDashboard(scheme, obj)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
2024-11-09 13:09:46 +08:00
|
|
|
}
|
|
|
|
old := dash.Spec.Object
|
|
|
|
spec := commonV0.Unstructured{Object: make(map[string]any)}
|
|
|
|
dash.Spec = spec
|
|
|
|
dash.SetManagedFields(nil) // this could be bigger than the object!
|
|
|
|
|
2025-02-07 05:23:00 +08:00
|
|
|
keep := []string{"title", "description", "tags", "schemaVersion"}
|
2024-11-09 13:09:46 +08:00
|
|
|
for _, k := range keep {
|
|
|
|
v, ok := old[k]
|
|
|
|
if ok {
|
|
|
|
spec.Object[k] = v
|
|
|
|
}
|
|
|
|
}
|
2024-11-16 04:49:45 +08:00
|
|
|
|
|
|
|
if err := scheme.Convert(dash, obj, nil); err != nil {
|
|
|
|
return fmt.Errorf("failed to update original object: %w", err)
|
|
|
|
}
|
|
|
|
|
2024-11-09 13:09:46 +08:00
|
|
|
return nil
|
|
|
|
},
|
|
|
|
|
|
|
|
RebuildSpec: func(obj runtime.Object, blob []byte) error {
|
2024-11-16 04:49:45 +08:00
|
|
|
dash, err := ToInternalDashboard(scheme, obj)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
2024-11-09 13:09:46 +08:00
|
|
|
}
|
|
|
|
return json.Unmarshal(blob, &dash.Spec)
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|