diff --git a/pkg/apis/dashboard/v0alpha1/register.go b/pkg/apis/dashboard/v0alpha1/register.go index 1bb1bf22351..2b8a97f1eb5 100644 --- a/pkg/apis/dashboard/v0alpha1/register.go +++ b/pkg/apis/dashboard/v0alpha1/register.go @@ -19,12 +19,6 @@ var DashboardResourceInfo = common.NewResourceInfo(GROUP, VERSION, func() runtime.Object { return &DashboardList{} }, ) -var DashboardSummaryResourceInfo = common.NewResourceInfo(GROUP, VERSION, - "summary", "summary", "DashboardSummary", - func() runtime.Object { return &DashboardSummary{} }, - func() runtime.Object { return &DashboardSummaryList{} }, -) - var ( // SchemeGroupVersion is group version used to register these objects SchemeGroupVersion = schema.GroupVersion{Group: GROUP, Version: VERSION} diff --git a/pkg/apis/dashboard/v0alpha1/types.go b/pkg/apis/dashboard/v0alpha1/types.go index 3b531127031..b2fd3897317 100644 --- a/pkg/apis/dashboard/v0alpha1/types.go +++ b/pkg/apis/dashboard/v0alpha1/types.go @@ -27,29 +27,6 @@ type DashboardList struct { Items []Dashboard `json:"items,omitempty"` } -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type DashboardSummary struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - // The dashboard body - Spec DashboardSummarySpec `json:"spec,omitempty"` -} - -type DashboardSummarySpec struct { - Title string `json:"title"` - Tags []string `json:"tags,omitempty"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type DashboardSummaryList struct { - metav1.TypeMeta `json:",inline"` - // +optional - metav1.ListMeta `json:"metadata,omitempty"` - - Items []DashboardSummary `json:"items,omitempty"` -} - // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object type DashboardVersionList struct { metav1.TypeMeta `json:",inline"` diff --git a/pkg/apis/dashboard/v0alpha1/zz_generated.deepcopy.go b/pkg/apis/dashboard/v0alpha1/zz_generated.deepcopy.go index acac319e53d..46e4700ab07 100644 --- a/pkg/apis/dashboard/v0alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/dashboard/v0alpha1/zz_generated.deepcopy.go @@ -126,87 +126,6 @@ func (in *DashboardList) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DashboardSummary) DeepCopyInto(out *DashboardSummary) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardSummary. -func (in *DashboardSummary) DeepCopy() *DashboardSummary { - if in == nil { - return nil - } - out := new(DashboardSummary) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DashboardSummary) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DashboardSummaryList) DeepCopyInto(out *DashboardSummaryList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]DashboardSummary, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardSummaryList. -func (in *DashboardSummaryList) DeepCopy() *DashboardSummaryList { - if in == nil { - return nil - } - out := new(DashboardSummaryList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DashboardSummaryList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DashboardSummarySpec) DeepCopyInto(out *DashboardSummarySpec) { - *out = *in - if in.Tags != nil { - in, out := &in.Tags, &out.Tags - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DashboardSummarySpec. -func (in *DashboardSummarySpec) DeepCopy() *DashboardSummarySpec { - if in == nil { - return nil - } - out := new(DashboardSummarySpec) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DashboardVersionInfo) DeepCopyInto(out *DashboardVersionInfo) { *out = *in diff --git a/pkg/registry/apis/dashboard/access/sql_dashboards.go b/pkg/registry/apis/dashboard/access/sql_dashboards.go index f043e84b9fb..86bbbfe1239 100644 --- a/pkg/registry/apis/dashboard/access/sql_dashboards.go +++ b/pkg/registry/apis/dashboard/access/sql_dashboards.go @@ -189,58 +189,6 @@ func (a *dashboardSqlAccess) GetDashboard(ctx context.Context, orgId int64, uid return nil, fmt.Errorf("not found") } -// GetDashboards implements DashboardAccess. -func (a *dashboardSqlAccess) GetDashboardSummaries(ctx context.Context, query *DashboardQuery) (*dashboardsV0.DashboardSummaryList, error) { - rows, limit, err := a.getRows(ctx, query, true) - if err != nil { - return nil, err - } - defer func() { _ = rows.Close() }() - - totalSize := 0 - list := &dashboardsV0.DashboardSummaryList{} - for { - row, err := rows.Next() - if err != nil || row == nil { - return list, err - } - - totalSize += row.Bytes - if len(list.Items) > 0 && (totalSize > query.MaxBytes || len(list.Items) >= limit) { - if query.Requirements.Folder != nil { - row.token.folder = *query.Requirements.Folder - } - list.Continue = row.token.String() // will skip this one but start here next time - return list, err - } - list.Items = append(list.Items, toSummary(row)) - } -} - -func (a *dashboardSqlAccess) GetDashboardSummary(ctx context.Context, orgId int64, uid string) (*dashboardsV0.DashboardSummary, error) { - r, err := a.GetDashboardSummaries(ctx, &DashboardQuery{ - OrgID: orgId, - UID: uid, - }) - if err != nil { - return nil, err - } - if len(r.Items) > 0 { - return &r.Items[0], nil - } - return nil, fmt.Errorf("not found") -} - -func toSummary(row *dashboardRow) dashboardsV0.DashboardSummary { - return dashboardsV0.DashboardSummary{ - ObjectMeta: row.Dash.ObjectMeta, - Spec: dashboardsV0.DashboardSummarySpec{ - Title: row.Title, - Tags: row.Tags, - }, - } -} - func (a *dashboardSqlAccess) doQuery(ctx context.Context, query string, args ...any) (*rowsWrapper, error) { user, err := appcontext.User(ctx) if err != nil { diff --git a/pkg/registry/apis/dashboard/access/types.go b/pkg/registry/apis/dashboard/access/types.go index cf5df48e19f..50065c8f2a2 100644 --- a/pkg/registry/apis/dashboard/access/types.go +++ b/pkg/registry/apis/dashboard/access/types.go @@ -30,9 +30,6 @@ type DashboardAccess interface { GetDashboard(ctx context.Context, orgId int64, uid string) (*dashboardsV0.Dashboard, error) GetDashboards(ctx context.Context, query *DashboardQuery) (*dashboardsV0.DashboardList, error) - GetDashboardSummary(ctx context.Context, orgId int64, uid string) (*dashboardsV0.DashboardSummary, error) - GetDashboardSummaries(ctx context.Context, query *DashboardQuery) (*dashboardsV0.DashboardSummaryList, error) - SaveDashboard(ctx context.Context, orgId int64, dash *dashboardsV0.Dashboard) (*dashboardsV0.Dashboard, bool, error) DeleteDashboard(ctx context.Context, orgId int64, uid string) (*dashboardsV0.Dashboard, bool, error) } diff --git a/pkg/registry/apis/dashboard/register.go b/pkg/registry/apis/dashboard/register.go index 0fbf7dcc5c5..3aba4a4bfce 100644 --- a/pkg/registry/apis/dashboard/register.go +++ b/pkg/registry/apis/dashboard/register.go @@ -87,8 +87,6 @@ func addKnownTypes(scheme *runtime.Scheme, gv schema.GroupVersion) { &v0alpha1.DashboardList{}, &v0alpha1.DashboardWithAccessInfo{}, &v0alpha1.DashboardVersionList{}, - &v0alpha1.DashboardSummary{}, - &v0alpha1.DashboardSummaryList{}, &v0alpha1.VersionsQueryOptions{}, ) } @@ -152,14 +150,6 @@ func (b *DashboardsAPIBuilder) GetAPIGroupInfo( storage[resourceInfo.StoragePath()] = grafanarest.NewDualWriter(grafanarest.Mode1, legacyStore, store, reg) } - // Summary - resourceInfo2 := v0alpha1.DashboardSummaryResourceInfo - storage[resourceInfo2.StoragePath()] = &summaryStorage{ - resource: resourceInfo2, - access: b.access, - tableConverter: store.TableConvertor, - } - apiGroupInfo.VersionedResourcesStorageMap[v0alpha1.VERSION] = storage return &apiGroupInfo, nil } @@ -178,7 +168,6 @@ func (b *DashboardsAPIBuilder) PostProcessOpenAPI(oas *spec3.OpenAPI) (*spec3.Op // Hide the ability to list or watch across all tenants delete(oas.Paths.Paths, root+v0alpha1.DashboardResourceInfo.GroupResource().Resource) delete(oas.Paths.Paths, root+"watch/"+v0alpha1.DashboardResourceInfo.GroupResource().Resource) - delete(oas.Paths.Paths, root+v0alpha1.DashboardSummaryResourceInfo.GroupResource().Resource) // The root API discovery list sub := oas.Paths.Paths[root] diff --git a/pkg/registry/apis/dashboard/storage.go b/pkg/registry/apis/dashboard/storage.go index 064ed31aea1..ace79bc02e3 100644 --- a/pkg/registry/apis/dashboard/storage.go +++ b/pkg/registry/apis/dashboard/storage.go @@ -54,14 +54,6 @@ func newStorage(scheme *runtime.Scheme) (*storage, error) { }, nil } } - summary, ok := obj.(*v0alpha1.DashboardSummary) - if ok { - return []interface{}{ - dash.Name, - summary.Spec.Title, - dash.CreationTimestamp.UTC().Format(time.RFC3339), - }, nil - } return nil, fmt.Errorf("expected dashboard or summary") }) return &storage{Store: store}, nil diff --git a/pkg/registry/apis/dashboard/summary_storage.go b/pkg/registry/apis/dashboard/summary_storage.go deleted file mode 100644 index 85fe3bff0ff..00000000000 --- a/pkg/registry/apis/dashboard/summary_storage.go +++ /dev/null @@ -1,83 +0,0 @@ -package dashboard - -import ( - "context" - - "k8s.io/apimachinery/pkg/apis/meta/internalversion" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apiserver/pkg/registry/rest" - - common "github.com/grafana/grafana/pkg/apimachinery/apis/common/v0alpha1" - "github.com/grafana/grafana/pkg/registry/apis/dashboard/access" - "github.com/grafana/grafana/pkg/services/apiserver/endpoints/request" - "github.com/grafana/grafana/pkg/services/apiserver/storage/entity" -) - -var ( - _ rest.Storage = (*summaryStorage)(nil) - _ rest.Scoper = (*summaryStorage)(nil) - _ rest.SingularNameProvider = (*summaryStorage)(nil) - _ rest.Getter = (*summaryStorage)(nil) - _ rest.Lister = (*summaryStorage)(nil) -) - -type summaryStorage struct { - resource common.ResourceInfo - access access.DashboardAccess - tableConverter rest.TableConvertor -} - -func (s *summaryStorage) New() runtime.Object { - return s.resource.NewFunc() -} - -func (s *summaryStorage) Destroy() {} - -func (s *summaryStorage) NamespaceScoped() bool { - return true -} - -func (s *summaryStorage) GetSingularName() string { - return s.resource.GetSingularName() -} - -func (s *summaryStorage) NewList() runtime.Object { - return s.resource.NewListFunc() -} - -func (s *summaryStorage) ConvertToTable(ctx context.Context, object runtime.Object, tableOptions runtime.Object) (*metav1.Table, error) { - return s.tableConverter.ConvertToTable(ctx, object, tableOptions) -} - -func (s *summaryStorage) List(ctx context.Context, options *internalversion.ListOptions) (runtime.Object, error) { - orgId, err := request.OrgIDForList(ctx) - if err != nil { - return nil, err - } - - // translate grafana.app/* label selectors into field requirements - requirements, newSelector, err := entity.ReadLabelSelectors(options.LabelSelector) - if err != nil { - return nil, err - } - - query := &access.DashboardQuery{ - OrgID: orgId, - Limit: int(options.Limit), - MaxBytes: 2 * 1024 * 1024, // 2MB, - ContinueToken: options.Continue, - Requirements: requirements, - Labels: newSelector, - } - return s.access.GetDashboardSummaries(ctx, query) -} - -func (s *summaryStorage) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { - info, err := request.NamespaceInfoFrom(ctx, true) - if err != nil { - return nil, err - } - - return s.access.GetDashboardSummary(ctx, info.OrgID, name) -} diff --git a/pkg/tests/apis/dashboard/dashboards_test.go b/pkg/tests/apis/dashboard/dashboards_test.go index cad2432d7b1..8ff9569d91e 100644 --- a/pkg/tests/apis/dashboard/dashboards_test.go +++ b/pkg/tests/apis/dashboard/dashboards_test.go @@ -95,20 +95,6 @@ func TestIntegrationDashboardsApp(t *testing.T) { "patch", "update" ] - }, - { - "resource": "summary", - "responseKind": { - "group": "", - "kind": "DashboardSummary", - "version": "" - }, - "scope": "Namespaced", - "singularResource": "summary", - "verbs": [ - "get", - "list" - ] } ], "version": "v0alpha1"