浏览代码

Backend can now generate config.js, the very basic stuff, more work needed

Torkel Ödegaard 11 年之前
父节点
当前提交
d69258e28f
共有 6 个文件被更改,包括 79 次插入49 次删除
  1. 1 1
      grafana
  2. 3 0
      pkg/api/api.go
  3. 2 3
      pkg/api/api_account.go
  4. 68 0
      pkg/api/api_config.go
  5. 0 40
      pkg/configuration/configuration.go
  6. 5 5
      pkg/models/datasource.go

+ 1 - 1
grafana

@@ -1 +1 @@
-Subproject commit ad91093902bdfc0d2a87bb362a76a9057aef4361
+Subproject commit 4e542d8b83844f8faa4d5ae3edab593950aaa344

+ 3 - 0
pkg/api/api.go

@@ -43,6 +43,9 @@ func Register(m *macaron.Macaron) {
 	m.Post("/api/dashboard/", auth, PostDashboard)
 	m.Post("/api/dashboard/", auth, PostDashboard)
 	m.Delete("/api/dashboard/:slug", auth, DeleteDashboard)
 	m.Delete("/api/dashboard/:slug", auth, DeleteDashboard)
 
 
+	// frontend config
+	m.Get("/frontend/config", auth, GetConfigJS)
+
 	// rendering
 	// rendering
 	m.Get("/render/*", auth, RenderToPng)
 	m.Get("/render/*", auth, RenderToPng)
 }
 }

+ 2 - 3
pkg/api/api_account.go

@@ -1,7 +1,6 @@
 package api
 package api
 
 
 import (
 import (
-	"github.com/gin-gonic/gin"
 	"github.com/torkelo/grafana-pro/pkg/api/dtos"
 	"github.com/torkelo/grafana-pro/pkg/api/dtos"
 	"github.com/torkelo/grafana-pro/pkg/middleware"
 	"github.com/torkelo/grafana-pro/pkg/middleware"
 	"github.com/torkelo/grafana-pro/pkg/models"
 	"github.com/torkelo/grafana-pro/pkg/models"
@@ -96,7 +95,7 @@ func SetUsingAccount(c *middleware.Context) {
 	otherAccounts, err := models.GetOtherAccountsFor(c.UserAccount.Id)
 	otherAccounts, err := models.GetOtherAccountsFor(c.UserAccount.Id)
 
 
 	if err != nil {
 	if err != nil {
-		c.JSON(500, gin.H{"message": err.Error()})
+		c.JSON(500, utils.DynMap{"message": err.Error()})
 		return
 		return
 	}
 	}
 
 
@@ -116,7 +115,7 @@ func SetUsingAccount(c *middleware.Context) {
 	account.UsingAccountId = usingAccountId
 	account.UsingAccountId = usingAccountId
 	err = models.SaveAccount(account)
 	err = models.SaveAccount(account)
 	if err != nil {
 	if err != nil {
-		c.JSON(500, gin.H{"message": err.Error()})
+		c.JSON(500, utils.DynMap{"message": err.Error()})
 		return
 		return
 	}
 	}
 
 

+ 68 - 0
pkg/api/api_config.go

@@ -0,0 +1,68 @@
+package api
+
+import (
+	"encoding/json"
+	"strings"
+
+	"github.com/torkelo/grafana-pro/pkg/bus"
+	"github.com/torkelo/grafana-pro/pkg/middleware"
+	m "github.com/torkelo/grafana-pro/pkg/models"
+)
+
+const configTemplate = `
+	define(['settings'],
+	function (Settings) {
+		"use strict";
+		return new Settings(%json%);
+	});
+	`
+
+type configJsTmplModel struct {
+	DataSources []*m.DataSource
+}
+
+func renderConfig(data *configJsTmplModel) string {
+	datasources := make(map[string]interface{})
+
+	for _, ds := range data.DataSources {
+		datasources[ds.Name] = map[string]interface{}{
+			"type": ds.Type,
+			"url":  ds.Url,
+		}
+	}
+
+	jsonObj := map[string]interface{}{
+		"datasources": datasources,
+	}
+
+	buff, _ := json.Marshal(jsonObj)
+
+	return strings.Replace(configTemplate, "%json%", string(buff), 1)
+}
+
+func GetConfigJS(c *middleware.Context) {
+
+	query := m.GetDataSourcesQuery{AccountId: c.GetAccountId()}
+	err := bus.Dispatch(&query)
+
+	if err != nil {
+		c.Handle(500, "cold not load data sources", err)
+		return
+	}
+
+	vm := configJsTmplModel{DataSources: query.Result}
+	configStr := renderConfig(&vm)
+
+	if err != nil {
+		c.Handle(500, "Failed to generate config.js", err)
+		return
+	}
+
+	c.Header().Set("Content-Type", "text/javascript; charset=UTF-8")
+	c.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+	c.Header().Set("Pragma", "no-cache")
+	c.Header().Set("Expires", "0")
+	c.WriteHeader(200)
+
+	c.Write([]byte(configStr))
+}

+ 0 - 40
pkg/configuration/configuration.go

@@ -1,40 +0,0 @@
-package configuration
-
-type Cfg struct {
-	Http HttpCfg
-}
-
-type HttpCfg struct {
-	Port        string
-	GoogleOAuth OAuthCfg
-	GithubOAuth OAuthCfg
-}
-
-type OAuthCfg struct {
-	Enabled      bool
-	ClientId     string
-	ClientSecret string
-}
-
-type DashboardSourceCfg struct {
-	sourceType string
-	path       string
-}
-
-func NewCfg(port string) *Cfg {
-	return &Cfg{
-		Http: HttpCfg{
-			Port: port,
-			GoogleOAuth: OAuthCfg{
-				Enabled:      true,
-				ClientId:     "106011922963-4pvl05e9urtrm8bbqr0vouosj3e8p8kb.apps.googleusercontent.com",
-				ClientSecret: "K2evIa4QhfbhhAm3SO72t2Zv",
-			},
-			GithubOAuth: OAuthCfg{
-				Enabled:      true,
-				ClientId:     "de054205006b9baa2e17",
-				ClientSecret: "72b7ea52d9f1096fdf36cea95e95362a307e0322",
-			},
-		},
-	}
-}

+ 5 - 5
pkg/models/datasource.go

@@ -3,11 +3,11 @@ package models
 import "time"
 import "time"
 
 
 const (
 const (
-	DS_GRAPHITE      = "GRAPHITE"
-	DS_INFLUXDB      = "INFLUXDB"
-	DS_ES            = "ES"
-	DS_ACCESS_DIRECT = "DIRECT"
-	DS_ACCESS_PROXY  = "PROXY"
+	DS_GRAPHITE      = "graphite"
+	DS_INFLUXDB      = "influxdb"
+	DS_ES            = "es"
+	DS_ACCESS_DIRECT = "direct"
+	DS_ACCESS_PROXY  = "proxy"
 )
 )
 
 
 type DsType string
 type DsType string