2022-06-02 18:27:23 -08:00
|
|
|
package models
|
|
|
|
|
|
2022-06-22 13:58:52 -08:00
|
|
|
import (
|
2022-09-13 13:33:41 -03:00
|
|
|
"encoding/json"
|
2022-06-22 13:58:52 -08:00
|
|
|
"time"
|
|
|
|
|
|
Reconcile coremodels, entities, objects under new kind framework (#56492)
* Update thema to latest
* Deal with s/Library/*Runtime/
* Commit new, working results of codegen
* We like pointers now
* Always take runtime arg for NewBase()
* Sketchy handwavy pass at entity meta framework
* Little nibbles
* Update pkg/framework/coremodel/entityframework.cue
Co-authored-by: Artur Wierzbicki <wierzbicki.artur.94@gmail.com>
* Move file into new framework location
* Introduce loaders, Go code
* Complete rename to kind
* Flesh out framework, add svg/dashboard examples
* Cruft removal
* Remove generated kind go files from gitignore
* Refine maturity concept, add SlotKind
* Update embed and go deps
* Export PrefixWithGrafanaCUE
* Make the loader actually work, holy crap
* Many small tweaks to type.cue
* Add Apache 2 licensing exceptions for kinds
* Add new kinds dir, start of generator
* Roll back to earlier oapi-codegen
* Introduce new grafana-specific CUE loaders
* Introduce new tidy code generators framework
* Catch up kind framework with tinkering
* Add slices for the generators
* Add write/verify step to main generator
* Many renames
* Split up kind framework cue files
* Use kind.Decl within generated kinds
* Create kind.SomeDecl wrapper type to cache lineages
* Better names again
* Get one generated implemented, hopefully
* Copy dashboard schema into new kind.cue
* Small fixes to make the initial gen work
* Put svg kind in its new home
* Add generated Go dashboard type
* More renames and cleanups
* Add base kind registry and generator
* Stop blacklisting *_gen.go files
This is not the Go best practice, anyway. All we actually want to ignore
for enterprise is generated wire files.
* Change codegen output directories
pkg/kind -> pkg/kinds
pkg/registry/kindreg -> pkg/registry/corekind
* Rename pkg/framework/kind to pkg/kindsys
* Add core structured kind generator
* Add plural and machine names to kind spec
* Copy playlist over to kind system
* Consolidate kindsys files
* Add raw kind generator
* Update CODEOWNERS for kind framework
* Touch up comments a bit
* More docs tweaks
* Remove generated types to reduce noise for review
* Split each generator into its own file
* Rename Slot kind to Composable kind
* Add handwavy types for customkind loading
* Guard against init calls to framework loader
* First pass at doc on extending the kind system
* Improve attribute example in docs
* Fix wire imports
* Add basic TS types generator
* Fix composable kind category def
* No need for a separate file with generate directive
* Catch dashboard schema up
* Rename generator types to something saner and generic
* Make version configurable in ts/go generators
* Add CommonMeta to ease property access
* Add kindsys prop indicating whether lineage is group
* Put all kind categories back in a single file
* Finish with kindsys group props
* Refactor maturity progression per discussion
- Replace "committed" with "merged"
- All kindcats can use all maturity levels, at least for now
* Convert ts veneer index generator to modular system
* Move over to new jennywrites framework
* Strip down old coremodel generator
* Use public version of jennywrites
* Pull latest thema
* Commit generated Go types
* Add header injection postprocessor
* Move sdboyer/jennywrites to grafana/codejen
* Tweak header output
* Remove dashboard and playlist coremodels
* Fix up backend dashboards devenv test
* Fix TS import patterns to new gen filename
* Update internal imports, remove coremodel registry
* Fix compilation errors, wire generation
* Export and replace the prefix dropper
* More Go struct and field name changes
* Last name fixes, hopefully
* Fix lint errors
* Last lint error
Co-authored-by: Artur Wierzbicki <wierzbicki.artur.94@gmail.com>
2022-11-10 15:36:40 -05:00
|
|
|
"github.com/grafana/grafana/pkg/kinds/dashboard"
|
2023-06-21 10:48:09 -03:00
|
|
|
"github.com/grafana/grafana/pkg/services/user"
|
2022-07-06 15:51:44 -08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// PublicDashboardErr represents a dashboard error.
|
|
|
|
|
type PublicDashboardErr struct {
|
|
|
|
|
StatusCode int
|
|
|
|
|
Status string
|
|
|
|
|
Reason string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Error returns the error message.
|
|
|
|
|
func (e PublicDashboardErr) Error() string {
|
|
|
|
|
if e.Reason != "" {
|
|
|
|
|
return e.Reason
|
|
|
|
|
}
|
|
|
|
|
return "Dashboard Error"
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-09 15:44:09 -03:00
|
|
|
const (
|
2024-02-22 09:34:14 +01:00
|
|
|
QuerySuccess = "success"
|
|
|
|
|
QueryFailure = "failure"
|
|
|
|
|
EmailShareType ShareType = "email"
|
|
|
|
|
PublicShareType ShareType = "public"
|
|
|
|
|
FeaturePublicDashboardsEmailSharing = "publicDashboardsEmailSharing"
|
2023-02-09 15:44:09 -03:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
QueryResultStatuses = []string{QuerySuccess, QueryFailure}
|
|
|
|
|
ValidShareTypes = []ShareType{EmailShareType, PublicShareType}
|
|
|
|
|
)
|
2022-09-27 12:25:56 -06:00
|
|
|
|
2023-02-09 15:44:09 -03:00
|
|
|
type ShareType string
|
2022-09-27 12:25:56 -06:00
|
|
|
|
2022-06-02 18:27:23 -08:00
|
|
|
type PublicDashboard struct {
|
2023-05-29 12:59:29 -03:00
|
|
|
Uid string `json:"uid" xorm:"pk uid"`
|
|
|
|
|
DashboardUid string `json:"dashboardUid" xorm:"dashboard_uid"`
|
|
|
|
|
OrgId int64 `json:"-" xorm:"org_id"` // Don't ever marshal orgId to Json
|
|
|
|
|
AccessToken string `json:"accessToken" xorm:"access_token"`
|
|
|
|
|
CreatedBy int64 `json:"createdBy" xorm:"created_by"`
|
|
|
|
|
UpdatedBy int64 `json:"updatedBy" xorm:"updated_by"`
|
|
|
|
|
CreatedAt time.Time `json:"createdAt" xorm:"created_at"`
|
|
|
|
|
UpdatedAt time.Time `json:"updatedAt" xorm:"updated_at"`
|
|
|
|
|
//config fields
|
2023-06-29 18:28:30 -03:00
|
|
|
TimeSettings *TimeSettings `json:"-" xorm:"time_settings"`
|
2023-05-29 12:59:29 -03:00
|
|
|
TimeSelectionEnabled bool `json:"timeSelectionEnabled" xorm:"time_selection_enabled"`
|
2022-12-01 11:37:08 -03:00
|
|
|
IsEnabled bool `json:"isEnabled" xorm:"is_enabled"`
|
|
|
|
|
AnnotationsEnabled bool `json:"annotationsEnabled" xorm:"annotations_enabled"`
|
2023-02-09 15:44:09 -03:00
|
|
|
Share ShareType `json:"share" xorm:"share"`
|
2023-03-02 15:20:24 -03:00
|
|
|
Recipients []EmailDTO `json:"recipients,omitempty" xorm:"-"`
|
2023-05-29 12:59:29 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type PublicDashboardDTO struct {
|
2023-08-29 17:25:07 -04:00
|
|
|
Uid string `json:"uid"`
|
2023-09-01 10:21:54 -04:00
|
|
|
AccessToken string `json:"accessToken"`
|
2023-06-29 18:28:30 -03:00
|
|
|
TimeSelectionEnabled *bool `json:"timeSelectionEnabled"`
|
|
|
|
|
IsEnabled *bool `json:"isEnabled"`
|
|
|
|
|
AnnotationsEnabled *bool `json:"annotationsEnabled"`
|
|
|
|
|
Share ShareType `json:"share"`
|
2022-06-02 18:27:23 -08:00
|
|
|
}
|
|
|
|
|
|
2023-03-02 15:20:24 -03:00
|
|
|
type EmailDTO struct {
|
|
|
|
|
Uid string `json:"uid"`
|
|
|
|
|
Recipient string `json:"recipient"`
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-18 19:48:20 -06:00
|
|
|
// Alias the generated type
|
|
|
|
|
type DashAnnotation = dashboard.AnnotationQuery
|
|
|
|
|
|
|
|
|
|
type AnnotationsDto struct {
|
|
|
|
|
Annotations struct {
|
|
|
|
|
List []DashAnnotation `json:"list"`
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type AnnotationEvent struct {
|
|
|
|
|
Id int64 `json:"id"`
|
|
|
|
|
DashboardId int64 `json:"dashboardId"`
|
|
|
|
|
PanelId int64 `json:"panelId"`
|
|
|
|
|
Tags []string `json:"tags"`
|
|
|
|
|
IsRegion bool `json:"isRegion"`
|
|
|
|
|
Text string `json:"text"`
|
|
|
|
|
Color string `json:"color"`
|
|
|
|
|
Time int64 `json:"time"`
|
|
|
|
|
TimeEnd int64 `json:"timeEnd"`
|
|
|
|
|
Source dashboard.AnnotationQuery `json:"source"`
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-02 18:27:23 -08:00
|
|
|
func (pd PublicDashboard) TableName() string {
|
2022-06-22 13:58:52 -08:00
|
|
|
return "dashboard_public"
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-21 10:48:09 -03:00
|
|
|
type PublicDashboardListQuery struct {
|
|
|
|
|
OrgID int64
|
|
|
|
|
Query string
|
|
|
|
|
Page int
|
|
|
|
|
Limit int
|
|
|
|
|
Offset int
|
|
|
|
|
User *user.SignedInUser
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type PublicDashboardListResponseWithPagination struct {
|
|
|
|
|
PublicDashboards []*PublicDashboardListResponse `json:"publicDashboards"`
|
|
|
|
|
TotalCount int64 `json:"totalCount"`
|
|
|
|
|
Page int `json:"page"`
|
|
|
|
|
PerPage int `json:"perPage"`
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-12 21:36:05 -08:00
|
|
|
type PublicDashboardListResponse struct {
|
|
|
|
|
Uid string `json:"uid" xorm:"uid"`
|
|
|
|
|
AccessToken string `json:"accessToken" xorm:"access_token"`
|
|
|
|
|
Title string `json:"title" xorm:"title"`
|
|
|
|
|
DashboardUid string `json:"dashboardUid" xorm:"dashboard_uid"`
|
|
|
|
|
IsEnabled bool `json:"isEnabled" xorm:"is_enabled"`
|
2023-12-14 14:35:17 -05:00
|
|
|
Slug string `json:"slug" xorm:"slug"`
|
2022-10-12 21:36:05 -08:00
|
|
|
}
|
|
|
|
|
|
2022-06-22 13:58:52 -08:00
|
|
|
type TimeSettings struct {
|
2022-09-13 13:33:41 -03:00
|
|
|
From string `json:"from,omitempty"`
|
|
|
|
|
To string `json:"to,omitempty"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (ts *TimeSettings) FromDB(data []byte) error {
|
|
|
|
|
return json.Unmarshal(data, ts)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (ts *TimeSettings) ToDB() ([]byte, error) {
|
|
|
|
|
return json.Marshal(ts)
|
2022-06-22 13:58:52 -08:00
|
|
|
}
|
|
|
|
|
|
2022-07-06 15:51:44 -08:00
|
|
|
// DTO for transforming user input in the api
|
2022-10-27 17:08:11 -08:00
|
|
|
type SavePublicDashboardDTO struct {
|
2023-06-29 14:35:23 -03:00
|
|
|
Uid string
|
2022-07-06 15:51:44 -08:00
|
|
|
DashboardUid string
|
2023-06-29 14:35:23 -03:00
|
|
|
OrgID int64
|
2022-07-06 15:51:44 -08:00
|
|
|
UserId int64
|
2023-05-29 12:59:29 -03:00
|
|
|
PublicDashboard *PublicDashboardDTO
|
2022-07-06 15:51:44 -08:00
|
|
|
}
|
|
|
|
|
|
2023-06-14 17:35:01 -03:00
|
|
|
type TimeRangeDTO struct {
|
|
|
|
|
From string
|
|
|
|
|
To string
|
|
|
|
|
Timezone string
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-29 18:13:06 -03:00
|
|
|
type PublicDashboardQueryDTO struct {
|
2023-02-02 23:39:54 -05:00
|
|
|
IntervalMs int64
|
|
|
|
|
MaxDataPoints int64
|
|
|
|
|
QueryCachingTTL int64
|
2023-06-14 17:35:01 -03:00
|
|
|
TimeRange TimeRangeDTO
|
2022-08-29 18:13:06 -03:00
|
|
|
}
|
|
|
|
|
|
2022-10-18 19:48:20 -06:00
|
|
|
type AnnotationsQueryDTO struct {
|
|
|
|
|
From int64
|
|
|
|
|
To int64
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-02 18:27:23 -08:00
|
|
|
//
|
|
|
|
|
// COMMANDS
|
|
|
|
|
//
|
|
|
|
|
|
2022-10-27 17:08:11 -08:00
|
|
|
type SavePublicDashboardCommand struct {
|
2022-06-22 13:58:52 -08:00
|
|
|
PublicDashboard PublicDashboard
|
2022-06-02 18:27:23 -08:00
|
|
|
}
|