grafana/pkg/api/api_config.go

69 lines
1.4 KiB
Go

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))
}