plugin_setting.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package api
  2. import (
  3. "github.com/grafana/grafana/pkg/api/dtos"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/middleware"
  6. m "github.com/grafana/grafana/pkg/models"
  7. "github.com/grafana/grafana/pkg/plugins"
  8. )
  9. func GetPluginList(c *middleware.Context) Response {
  10. pluginSettingsMap, err := plugins.GetPluginSettings(c.OrgId)
  11. if err != nil {
  12. return ApiError(500, "Failed to get list of plugins", err)
  13. }
  14. result := make([]*dtos.PluginListItem, 0)
  15. for _, pluginDef := range plugins.Plugins {
  16. // filter out plugin components
  17. if pluginDef.IncludedInAppId != "" {
  18. continue
  19. }
  20. listItem := &dtos.PluginListItem{
  21. PluginId: pluginDef.Id,
  22. Name: pluginDef.Name,
  23. Type: pluginDef.Type,
  24. Info: &pluginDef.Info,
  25. }
  26. if pluginSetting, exists := pluginSettingsMap[pluginDef.Id]; exists {
  27. listItem.Enabled = pluginSetting.Enabled
  28. listItem.Pinned = pluginSetting.Pinned
  29. }
  30. result = append(result, listItem)
  31. }
  32. return Json(200, result)
  33. }
  34. func GetPluginSettingById(c *middleware.Context) Response {
  35. pluginId := c.Params(":pluginId")
  36. if def, exists := plugins.Plugins[pluginId]; !exists {
  37. return ApiError(404, "Plugin not found, no installed plugin with that id", nil)
  38. } else {
  39. dto := &dtos.PluginSetting{
  40. Type: def.Type,
  41. PluginId: def.Id,
  42. Name: def.Name,
  43. Info: &def.Info,
  44. Dependencies: &def.Dependencies,
  45. }
  46. if app, exists := plugins.Apps[pluginId]; exists {
  47. dto.Pages = app.Pages
  48. dto.Includes = app.Includes
  49. dto.BaseUrl = app.BaseUrl
  50. dto.Module = app.Module
  51. }
  52. query := m.GetPluginSettingByIdQuery{PluginId: pluginId, OrgId: c.OrgId}
  53. if err := bus.Dispatch(&query); err != nil {
  54. if err != m.ErrPluginSettingNotFound {
  55. return ApiError(500, "Failed to get login settings", nil)
  56. }
  57. } else {
  58. dto.Enabled = query.Result.Enabled
  59. dto.Pinned = query.Result.Pinned
  60. dto.JsonData = query.Result.JsonData
  61. }
  62. return Json(200, dto)
  63. }
  64. }
  65. func UpdatePluginSetting(c *middleware.Context, cmd m.UpdatePluginSettingCmd) Response {
  66. pluginId := c.Params(":pluginId")
  67. cmd.OrgId = c.OrgId
  68. cmd.PluginId = pluginId
  69. if _, ok := plugins.Apps[cmd.PluginId]; !ok {
  70. return ApiError(404, "Plugin not installed.", nil)
  71. }
  72. if err := bus.Dispatch(&cmd); err != nil {
  73. return ApiError(500, "Failed to update plugin setting", err)
  74. }
  75. return ApiSuccess("Plugin settings updated")
  76. }