mirror of
https://github.com/grafana/grafana.git
synced 2025-01-18 20:43:26 -06:00
6c76aa71e8
* add SQL migrations * dashboard previews from sql: poc * added todos * refactor: use the same enums where possible * use useEffect, always return json * added todo * refactor + delete files after use * refactor + fix manual thumbnail upload * refactor: move all interactions with sqlStore to thumbnail repo * refactor: remove file operations in thumb crawler/service * refactor: fix dashboard_thumbs sql store * refactor: extracted thumbnail fetching/updating to a hook * refactor: store thumbnails in redux store * refactor: store thumbnails in redux store * refactor: private'd repo methods * removed redux storage, saving images as blobs * allow for configurable rendering timeouts * added 1) query for dashboards with stale thumbnails, 2) command for marking thumbnails as stale * use sql-based queue in crawler * ui for marking thumbnails as stale * replaced `stale` boolean prop with `state` enum * introduce rendering session * compilation errors * fix crawler stop button * rename thumbnail state frozen to locked * #44449: fix merge conflicts * #44449: remove thumb methods from `Store` interface * #44449: clean filepath, defer file closing * #44449: fix rendering.Theme cyclic import * #44449: linting * #44449: linting * #44449: mutex'd crawlerStatus access * #44449: added integration tests for `sqlstore.dashboard_thumbs` * #44449: added comments to explain the `ThumbnailState` enum * #44449: use os.ReadFile rather then os.Open * #44449: always enable dashboardPreviews feature during integration tests * #44449: add /previews/system-requirements API * #44449: remove sleep time, adjust number of threads * #44449: review fix: add `orgId` to `DashboardThumbnailMeta` * #44449: review fix: automatic parsing of thumbnailState * #44449: update returned json * #44449: UI changes - dashboard previews sytem req check * #44449: lint fixes * #44449: fix tests * #44449: typo * #44449: fix getSystemRequirements API: return 200 even if we plugin version is invalid * #44449: fix getSystemRequirements API: don't return SemverConstraint on error * #44449: fix getSystemRequirements API * #44449: fix previews sytem requirements text * #44449: add `doThumbnailsExist` to repo * #44449: remove redux api * #44449: add missing model * #44449: implement frontedsettings-driven capability check * #44449: simplify * #44449: revert test changes * #44449: add dummy setup settings * #44449: implicit typing over `FC<Props>` * #44449: refactor conditionals * #44449: replace `getText` with a react component * #44449: fix component interface * #44449: add onRemove to `PreviewsSystemRequirements` alert * #44449: add bottom/top margin to previewSystemRequirements modal * #44449: merge conflict fix * #44449: remove console.log Co-authored-by: Ryan McKinley <ryantxu@gmail.com> Co-authored-by: Alexander Emelin <frvzmb@gmail.com>
144 lines
3.6 KiB
Go
144 lines
3.6 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type ThumbnailKind string
|
|
type ThumbnailState string
|
|
type CrawlerMode string
|
|
|
|
const (
|
|
// ThumbnailKindDefault is a small 320x240 preview
|
|
ThumbnailKindDefault ThumbnailKind = "thumb"
|
|
|
|
// unsupported for now
|
|
// - ThumbnailKindLarge ThumbnailKind = "large"
|
|
// - ThumbnailKindTall ThumbnailKind = "tall"
|
|
)
|
|
|
|
const (
|
|
// ThumbnailStateDefault is the initial state for all thumbnails. Thumbnails in the "default" state will be considered stale,
|
|
// and thus refreshed by the crawler, if the dashboard version from the time of taking the thumbnail is different from the current dashboard version
|
|
ThumbnailStateDefault ThumbnailState = "default"
|
|
|
|
// ThumbnailStateStale is a manually assigned state. Thumbnails in the "stale" state will be refreshed on the next crawler run
|
|
ThumbnailStateStale ThumbnailState = "stale"
|
|
|
|
// ThumbnailStateLocked is a manually assigned state. Thumbnails in the "locked" state will not be refreshed by the crawler as long as they remain in the "locked" state.
|
|
ThumbnailStateLocked ThumbnailState = "locked"
|
|
)
|
|
|
|
func (s ThumbnailState) IsValid() bool {
|
|
return s == ThumbnailStateDefault || s == ThumbnailStateStale || s == ThumbnailStateLocked
|
|
}
|
|
|
|
func (s *ThumbnailState) UnmarshalJSON(data []byte) error {
|
|
var str string
|
|
err := json.Unmarshal(data, &str)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*s = ThumbnailState(str)
|
|
|
|
if !s.IsValid() {
|
|
if (*s) != "" {
|
|
return fmt.Errorf("JSON validation error: invalid thumbnail state value: %s", *s)
|
|
}
|
|
|
|
*s = ThumbnailStateDefault
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// IsKnownThumbnailKind checks if the value is supported
|
|
func (p ThumbnailKind) IsKnownThumbnailKind() bool {
|
|
switch p {
|
|
case
|
|
ThumbnailKindDefault:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func ParseThumbnailKind(str string) (ThumbnailKind, error) {
|
|
switch str {
|
|
case string(ThumbnailKindDefault):
|
|
return ThumbnailKindDefault, nil
|
|
}
|
|
return ThumbnailKindDefault, errors.New("unknown thumbnail kind " + str)
|
|
}
|
|
|
|
// A DashboardThumbnail includes all metadata for a dashboard thumbnail
|
|
type DashboardThumbnail struct {
|
|
Id int64 `json:"id"`
|
|
DashboardId int64 `json:"dashboardId"`
|
|
DashboardVersion int `json:"dashboardVersion"`
|
|
State ThumbnailState `json:"state"`
|
|
PanelId int64 `json:"panelId,omitempty"`
|
|
Kind ThumbnailKind `json:"kind"`
|
|
Theme Theme `json:"theme"`
|
|
Image []byte `json:"image"`
|
|
MimeType string `json:"mimeType"`
|
|
Updated time.Time `json:"updated"`
|
|
}
|
|
|
|
//
|
|
// Commands
|
|
//
|
|
|
|
// DashboardThumbnailMeta uniquely identifies a thumbnail; a natural key
|
|
type DashboardThumbnailMeta struct {
|
|
DashboardUID string
|
|
OrgId int64
|
|
PanelID int64
|
|
Kind ThumbnailKind
|
|
Theme Theme
|
|
}
|
|
|
|
type GetDashboardThumbnailCommand struct {
|
|
DashboardThumbnailMeta
|
|
|
|
Result *DashboardThumbnail
|
|
}
|
|
|
|
const DashboardVersionForManualThumbnailUpload = -1
|
|
|
|
type DashboardWithStaleThumbnail struct {
|
|
Id int64
|
|
OrgId int64
|
|
Uid string
|
|
Version int
|
|
Slug string
|
|
}
|
|
|
|
type FindDashboardThumbnailCountCommand struct {
|
|
Result int64
|
|
}
|
|
|
|
type FindDashboardsWithStaleThumbnailsCommand struct {
|
|
IncludeManuallyUploadedThumbnails bool
|
|
Theme Theme
|
|
Kind ThumbnailKind
|
|
Result []*DashboardWithStaleThumbnail
|
|
}
|
|
|
|
type SaveDashboardThumbnailCommand struct {
|
|
DashboardThumbnailMeta
|
|
DashboardVersion int
|
|
Image []byte
|
|
MimeType string
|
|
|
|
Result *DashboardThumbnail
|
|
}
|
|
|
|
type UpdateThumbnailStateCommand struct {
|
|
State ThumbnailState
|
|
DashboardThumbnailMeta
|
|
}
|