api_dashboard.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package api
  2. import (
  3. log "github.com/alecthomas/log4go"
  4. "github.com/gin-gonic/gin"
  5. "github.com/torkelo/grafana-pro/pkg/models"
  6. )
  7. func init() {
  8. addRoutes(func(self *HttpServer) {
  9. self.addRoute("GET", "/api/dashboards/:slug", self.getDashboard)
  10. self.addRoute("GET", "/api/search/", self.search)
  11. self.addRoute("POST", "/api/dashboard/", self.postDashboard)
  12. self.addRoute("DELETE", "/api/dashboard/:slug", self.deleteDashboard)
  13. })
  14. }
  15. func (self *HttpServer) getDashboard(c *gin.Context, auth *authContext) {
  16. slug := c.Params.ByName("slug")
  17. dash, err := self.store.GetDashboard(slug, auth.getAccountId())
  18. if err != nil {
  19. c.JSON(404, newErrorResponse("Dashboard not found"))
  20. return
  21. }
  22. dash.Data["id"] = dash.Id
  23. c.JSON(200, dash.Data)
  24. }
  25. func (self *HttpServer) deleteDashboard(c *gin.Context, auth *authContext) {
  26. slug := c.Params.ByName("slug")
  27. dash, err := self.store.GetDashboard(slug, auth.getAccountId())
  28. if err != nil {
  29. c.JSON(404, newErrorResponse("Dashboard not found"))
  30. return
  31. }
  32. err = self.store.DeleteDashboard(slug, auth.getAccountId())
  33. if err != nil {
  34. c.JSON(500, newErrorResponse("Failed to delete dashboard: "+err.Error()))
  35. return
  36. }
  37. var resp = map[string]interface{}{"title": dash.Title}
  38. c.JSON(200, resp)
  39. }
  40. func (self *HttpServer) search(c *gin.Context, auth *authContext) {
  41. query := c.Params.ByName("q")
  42. results, err := self.store.Query(query, auth.getAccountId())
  43. if err != nil {
  44. log.Error("Store query error: %v", err)
  45. c.JSON(500, newErrorResponse("Failed"))
  46. return
  47. }
  48. c.JSON(200, results)
  49. }
  50. func (self *HttpServer) postDashboard(c *gin.Context, auth *authContext) {
  51. var command saveDashboardCommand
  52. if c.EnsureBody(&command) {
  53. dashboard := models.NewDashboard("test")
  54. dashboard.Data = command.Dashboard
  55. dashboard.Title = dashboard.Data["title"].(string)
  56. dashboard.AccountId = auth.getAccountId()
  57. dashboard.UpdateSlug()
  58. if dashboard.Data["id"] != nil {
  59. dashboard.Id = dashboard.Data["id"].(string)
  60. }
  61. err := self.store.SaveDashboard(dashboard)
  62. if err == nil {
  63. c.JSON(200, gin.H{"status": "success", "slug": dashboard.Slug})
  64. return
  65. }
  66. }
  67. c.JSON(500, gin.H{"error": "bad request"})
  68. }