Commit d69258e2 by Torkel Ödegaard

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

parent ce947d47
Subproject commit ad91093902bdfc0d2a87bb362a76a9057aef4361 Subproject commit 4e542d8b83844f8faa4d5ae3edab593950aaa344
...@@ -43,6 +43,9 @@ func Register(m *macaron.Macaron) { ...@@ -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)
} }
......
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) { ...@@ -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) { ...@@ -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
} }
......
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))
}
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",
},
},
}
}
...@@ -3,11 +3,11 @@ package models ...@@ -3,11 +3,11 @@ package models
import "time" import "time"
const ( const (
DS_GRAPHITE = "GRAPHITE" DS_GRAPHITE = "graphite"
DS_INFLUXDB = "INFLUXDB" DS_INFLUXDB = "influxdb"
DS_ES = "ES" DS_ES = "es"
DS_ACCESS_DIRECT = "DIRECT" DS_ACCESS_DIRECT = "direct"
DS_ACCESS_PROXY = "PROXY" DS_ACCESS_PROXY = "proxy"
) )
type DsType string type DsType string
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment