diff --git a/pkg/api/dtos/plugins.go b/pkg/api/dtos/plugins.go
index fccb7c36849..70e732424ab 100644
--- a/pkg/api/dtos/plugins.go
+++ b/pkg/api/dtos/plugins.go
@@ -1,6 +1,9 @@
package dtos
-import "github.com/grafana/grafana/pkg/plugins"
+import (
+ "github.com/grafana/grafana/pkg/components/simplejson"
+ "github.com/grafana/grafana/pkg/plugins"
+)
type PluginSetting struct {
Name string `json:"name"`
@@ -50,5 +53,6 @@ type ImportDashboardCommand struct {
PluginId string `json:"pluginId"`
Path string `json:"path"`
Overwrite bool `json:"overwrite"`
+ Dashboard *simplejson.Json `json:"dashboard"`
Inputs []plugins.ImportDashboardInput `json:"inputs"`
}
diff --git a/pkg/api/plugins.go b/pkg/api/plugins.go
index 7d6d5906913..9d25b9c331e 100644
--- a/pkg/api/plugins.go
+++ b/pkg/api/plugins.go
@@ -168,10 +168,11 @@ func ImportDashboard(c *middleware.Context, apiCmd dtos.ImportDashboardCommand)
Path: apiCmd.Path,
Inputs: apiCmd.Inputs,
Overwrite: apiCmd.Overwrite,
+ Dashboard: apiCmd.Dashboard,
}
if err := bus.Dispatch(&cmd); err != nil {
- return ApiError(500, "Failed to install dashboard", err)
+ return ApiError(500, "Failed to import dashboard", err)
}
return Json(200, cmd.Result)
diff --git a/pkg/plugins/dashboard_importer.go b/pkg/plugins/dashboard_importer.go
index 4d2757b9a0e..aa489fcdaaf 100644
--- a/pkg/plugins/dashboard_importer.go
+++ b/pkg/plugins/dashboard_importer.go
@@ -11,6 +11,7 @@ import (
)
type ImportDashboardCommand struct {
+ Dashboard *simplejson.Json
Path string
Inputs []ImportDashboardInput
Overwrite bool
@@ -41,17 +42,15 @@ func init() {
}
func ImportDashboard(cmd *ImportDashboardCommand) error {
- plugin, exists := Plugins[cmd.PluginId]
-
- if !exists {
- return PluginNotFoundError{cmd.PluginId}
- }
-
var dashboard *m.Dashboard
var err error
- if dashboard, err = loadPluginDashboard(plugin, cmd.Path); err != nil {
- return err
+ if cmd.PluginId != "" {
+ if dashboard, err = loadPluginDashboard(cmd.PluginId, cmd.Path); err != nil {
+ return err
+ }
+ } else {
+ dashboard = m.NewDashboardFromJson(cmd.Dashboard)
}
evaluator := &DashTemplateEvaluator{
@@ -76,13 +75,13 @@ func ImportDashboard(cmd *ImportDashboardCommand) error {
}
cmd.Result = &PluginDashboardInfoDTO{
- PluginId: cmd.PluginId,
- Title: dashboard.Title,
- Path: cmd.Path,
- Revision: dashboard.GetString("revision", "1.0"),
- InstalledUri: "db/" + saveCmd.Result.Slug,
- InstalledRevision: dashboard.GetString("revision", "1.0"),
- Installed: true,
+ PluginId: cmd.PluginId,
+ Title: dashboard.Title,
+ Path: cmd.Path,
+ Revision: dashboard.Data.Get("revision").MustInt64(1),
+ ImportedUri: "db/" + saveCmd.Result.Slug,
+ ImportedRevision: dashboard.Data.Get("revision").MustInt64(1),
+ Imported: true,
}
return nil
diff --git a/pkg/plugins/dashboards.go b/pkg/plugins/dashboards.go
index 932196a42a9..1a160fe6632 100644
--- a/pkg/plugins/dashboards.go
+++ b/pkg/plugins/dashboards.go
@@ -10,14 +10,14 @@ import (
)
type PluginDashboardInfoDTO struct {
- PluginId string `json:"pluginId"`
- Title string `json:"title"`
- Installed bool `json:"installed"`
- InstalledUri string `json:"installedUri"`
- InstalledRevision string `json:"installedRevision"`
- Revision string `json:"revision"`
- Description string `json:"description"`
- Path string `json:"path"`
+ PluginId string `json:"pluginId"`
+ Title string `json:"title"`
+ Imported bool `json:"imported"`
+ ImportedUri string `json:"importedUri"`
+ ImportedRevision int64 `json:"importedRevision"`
+ Revision int64 `json:"revision"`
+ Description string `json:"description"`
+ Path string `json:"path"`
}
func GetPluginDashboards(orgId int64, pluginId string) ([]*PluginDashboardInfoDTO, error) {
@@ -42,7 +42,12 @@ func GetPluginDashboards(orgId int64, pluginId string) ([]*PluginDashboardInfoDT
return result, nil
}
-func loadPluginDashboard(plugin *PluginBase, path string) (*m.Dashboard, error) {
+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)
@@ -66,14 +71,14 @@ func getDashboardImportStatus(orgId int64, plugin *PluginBase, path string) (*Pl
var dashboard *m.Dashboard
var err error
- if dashboard, err = loadPluginDashboard(plugin, path); err != nil {
+ if dashboard, err = loadPluginDashboard(plugin.Id, path); err != nil {
return nil, err
}
res.Path = path
res.PluginId = plugin.Id
res.Title = dashboard.Title
- res.Revision = dashboard.GetString("revision", "1.0")
+ res.Revision = dashboard.Data.Get("revision").MustInt64(1)
query := m.GetDashboardQuery{OrgId: orgId, Slug: dashboard.Slug}
@@ -82,9 +87,9 @@ func getDashboardImportStatus(orgId int64, plugin *PluginBase, path string) (*Pl
return nil, err
}
} else {
- res.Installed = true
- res.InstalledUri = "db/" + query.Result.Slug
- res.InstalledRevision = query.Result.GetString("revision", "1.0")
+ res.Imported = true
+ res.ImportedUri = "db/" + query.Result.Slug
+ res.ImportedRevision = query.Result.Data.Get("revision").MustInt64(1)
}
return res, nil
diff --git a/public/app/core/components/search/search.html b/public/app/core/components/search/search.html
index 72ff0d15f83..6344a26c886 100644
--- a/public/app/core/components/search/search.html
+++ b/public/app/core/components/search/search.html
@@ -67,7 +67,7 @@
Create New
-
+
Import
diff --git a/public/app/core/components/search/search.ts b/public/app/core/components/search/search.ts
index 9da95278c57..a581afe3fd3 100644
--- a/public/app/core/components/search/search.ts
+++ b/public/app/core/components/search/search.ts
@@ -149,11 +149,6 @@ export class SearchCtrl {
this.searchDashboards();
};
- import() {
- appEvents.emit('show-modal', {
- templateHtml: '