mirror of
https://github.com/grafana/grafana.git
synced 2024-11-27 11:20:27 -06:00
69 lines
1.4 KiB
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))
|
|
}
|