| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package plugins
- import (
- "os"
- "path/filepath"
- "github.com/grafana/grafana/pkg/bus"
- "github.com/grafana/grafana/pkg/components/simplejson"
- m "github.com/grafana/grafana/pkg/models"
- )
- type PluginDashboardInfoDTO struct {
- PluginId string `json:"pluginId"`
- Title string `json:"title"`
- Imported bool `json:"imported"`
- ImportedUri string `json:"importedUri"`
- ImportedUrl string `json:"importedUrl"`
- Slug string `json:"slug"`
- DashboardId int64 `json:"dashboardId"`
- FolderId int64 `json:"folderId"`
- ImportedRevision int64 `json:"importedRevision"`
- Revision int64 `json:"revision"`
- Description string `json:"description"`
- Path string `json:"path"`
- Removed bool `json:"removed"`
- }
- func GetPluginDashboards(orgId int64, pluginId string) ([]*PluginDashboardInfoDTO, error) {
- plugin, exists := Plugins[pluginId]
- if !exists {
- return nil, PluginNotFoundError{pluginId}
- }
- result := make([]*PluginDashboardInfoDTO, 0)
- // load current dashboards
- query := m.GetDashboardsByPluginIdQuery{OrgId: orgId, PluginId: pluginId}
- if err := bus.Dispatch(&query); err != nil {
- return nil, err
- }
- existingMatches := make(map[int64]bool)
- for _, include := range plugin.Includes {
- if include.Type != PluginTypeDashboard {
- continue
- }
- res := &PluginDashboardInfoDTO{}
- var dashboard *m.Dashboard
- var err error
- if dashboard, err = loadPluginDashboard(plugin.Id, include.Path); err != nil {
- return nil, err
- }
- res.Path = include.Path
- res.PluginId = plugin.Id
- res.Title = dashboard.Title
- res.Revision = dashboard.Data.Get("revision").MustInt64(1)
- // find existing dashboard
- for _, existingDash := range query.Result {
- if existingDash.Slug == dashboard.Slug {
- res.DashboardId = existingDash.Id
- res.Imported = true
- res.ImportedUri = "db/" + existingDash.Slug
- res.ImportedUrl = existingDash.GetUrl()
- res.ImportedRevision = existingDash.Data.Get("revision").MustInt64(1)
- existingMatches[existingDash.Id] = true
- }
- }
- result = append(result, res)
- }
- // find deleted dashboards
- for _, dash := range query.Result {
- if _, exists := existingMatches[dash.Id]; !exists {
- result = append(result, &PluginDashboardInfoDTO{
- Slug: dash.Slug,
- DashboardId: dash.Id,
- Removed: true,
- })
- }
- }
- return result, nil
- }
- func loadPluginDashboard(pluginId, path string) (*m.Dashboard, error) {
- plugin, exists := Plugins[pluginId]
- if !exists {
- return nil, PluginNotFoundError{pluginId}
- }
- dashboardFilePath := filepath.Join(plugin.PluginDir, path)
- reader, err := os.Open(dashboardFilePath)
- if err != nil {
- return nil, err
- }
- defer reader.Close()
- data, err := simplejson.NewFromReader(reader)
- if err != nil {
- return nil, err
- }
- return m.NewDashboardFromJson(data), nil
- }
|