| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"strconv" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							| 
									
										
										
										
											2015-03-27 21:23:23 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/log" | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/middleware" | 
					
						
							|  |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2015-02-28 05:29:00 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/plugins" | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2015-03-02 16:58:35 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/util" | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-18 21:06:44 +08:00
										 |  |  | func getFrontendSettingsMap(c *middleware.Context) (map[string]interface{}, error) { | 
					
						
							| 
									
										
										
										
											2015-02-24 03:07:49 +08:00
										 |  |  | 	orgDataSources := make([]*m.DataSource, 0) | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-12 00:34:11 +08:00
										 |  |  | 	if c.OrgId != 0 { | 
					
						
							| 
									
										
										
										
											2015-02-24 03:07:49 +08:00
										 |  |  | 		query := m.GetDataSourcesQuery{OrgId: c.OrgId} | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 		err := bus.Dispatch(&query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return nil, err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:07:49 +08:00
										 |  |  | 		orgDataSources = query.Result | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	datasources := make(map[string]interface{}) | 
					
						
							| 
									
										
										
										
											2015-02-27 20:45:00 +08:00
										 |  |  | 	var defaultDatasource string | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-11 04:37:11 +08:00
										 |  |  | 	enabledPlugins, err := plugins.GetEnabledPlugins(c.OrgId) | 
					
						
							| 
									
										
										
										
											2015-12-03 23:43:55 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-12-22 18:37:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 03:07:49 +08:00
										 |  |  | 	for _, ds := range orgDataSources { | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 		url := ds.Url | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if ds.Access == m.DS_ACCESS_PROXY { | 
					
						
							| 
									
										
										
										
											2015-01-05 14:59:18 +08:00
										 |  |  | 			url = setting.AppSubUrl + "/api/datasources/proxy/" + strconv.FormatInt(ds.Id, 10) | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var dsMap = map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2015-02-27 20:45:00 +08:00
										 |  |  | 			"type": ds.Type, | 
					
						
							| 
									
										
										
										
											2015-02-28 17:52:25 +08:00
										 |  |  | 			"name": ds.Name, | 
					
						
							| 
									
										
										
										
											2015-02-27 20:45:00 +08:00
										 |  |  | 			"url":  url, | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-22 18:37:44 +08:00
										 |  |  | 		meta, exists := enabledPlugins.DataSources[ds.Type] | 
					
						
							| 
									
										
										
										
											2015-02-28 05:29:00 +08:00
										 |  |  | 		if !exists { | 
					
						
							| 
									
										
										
										
											2015-03-27 21:23:23 +08:00
										 |  |  | 			log.Error(3, "Could not find plugin definition for data source: %v", ds.Type) | 
					
						
							|  |  |  | 			continue | 
					
						
							| 
									
										
										
										
											2015-02-28 05:29:00 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		dsMap["meta"] = meta | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-27 20:45:00 +08:00
										 |  |  | 		if ds.IsDefault { | 
					
						
							|  |  |  | 			defaultDatasource = ds.Name | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-12 06:28:33 +08:00
										 |  |  | 		if len(ds.JsonData.MustMap()) > 0 { | 
					
						
							| 
									
										
										
										
											2015-05-21 00:29:20 +08:00
										 |  |  | 			dsMap["jsonData"] = ds.JsonData | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-02 16:58:35 +08:00
										 |  |  | 		if ds.Access == m.DS_ACCESS_DIRECT { | 
					
						
							|  |  |  | 			if ds.BasicAuth { | 
					
						
							|  |  |  | 				dsMap["basicAuth"] = util.GetBasicAuthHeader(ds.BasicAuthUser, ds.BasicAuthPassword) | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-12-09 11:37:08 +08:00
										 |  |  | 			if ds.WithCredentials { | 
					
						
							|  |  |  | 				dsMap["withCredentials"] = ds.WithCredentials | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-03-02 16:58:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			if ds.Type == m.DS_INFLUXDB_08 { | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 				dsMap["username"] = ds.User | 
					
						
							|  |  |  | 				dsMap["password"] = ds.Password | 
					
						
							|  |  |  | 				dsMap["url"] = url + "/db/" + ds.Database | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-02 16:58:35 +08:00
										 |  |  | 			if ds.Type == m.DS_INFLUXDB { | 
					
						
							| 
									
										
										
										
											2015-02-26 01:43:44 +08:00
										 |  |  | 				dsMap["username"] = ds.User | 
					
						
							|  |  |  | 				dsMap["password"] = ds.Password | 
					
						
							|  |  |  | 				dsMap["database"] = ds.Database | 
					
						
							|  |  |  | 				dsMap["url"] = url | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-17 17:39:26 +08:00
										 |  |  | 		if ds.Type == m.DS_ES { | 
					
						
							|  |  |  | 			dsMap["index"] = ds.Database | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-18 14:28:01 +08:00
										 |  |  | 		if ds.Type == m.DS_INFLUXDB { | 
					
						
							|  |  |  | 			dsMap["database"] = ds.Database | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-02 00:01:09 +08:00
										 |  |  | 		if ds.Type == m.DS_PROMETHEUS { | 
					
						
							|  |  |  | 			// add unproxied server URL for link to Prometheus web UI
 | 
					
						
							|  |  |  | 			dsMap["directUrl"] = ds.Url | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 		datasources[ds.Name] = dsMap | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// add grafana backend data source
 | 
					
						
							| 
									
										
										
										
											2015-02-28 16:46:37 +08:00
										 |  |  | 	grafanaDatasourceMeta, _ := plugins.DataSources["grafana"] | 
					
						
							| 
									
										
										
										
											2015-08-17 23:07:33 +08:00
										 |  |  | 	datasources["-- Grafana --"] = map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2015-02-28 16:46:37 +08:00
										 |  |  | 		"type": "grafana", | 
					
						
							|  |  |  | 		"meta": grafanaDatasourceMeta, | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-08-17 23:07:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-17 02:52:30 +08:00
										 |  |  | 	// add mixed backend data source
 | 
					
						
							| 
									
										
										
										
											2015-08-17 23:07:33 +08:00
										 |  |  | 	datasources["-- Mixed --"] = map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2015-08-17 02:52:30 +08:00
										 |  |  | 		"type": "mixed", | 
					
						
							|  |  |  | 		"meta": plugins.DataSources["mixed"], | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-28 16:46:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if defaultDatasource == "" { | 
					
						
							| 
									
										
										
										
											2015-08-18 20:54:56 +08:00
										 |  |  | 		defaultDatasource = "-- Grafana --" | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-21 20:46:18 +08:00
										 |  |  | 	panels := map[string]interface{}{} | 
					
						
							| 
									
										
										
										
											2015-12-22 18:37:44 +08:00
										 |  |  | 	for _, panel := range enabledPlugins.Panels { | 
					
						
							| 
									
										
										
										
											2016-01-09 06:15:44 +08:00
										 |  |  | 		panels[panel.Id] = map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2016-02-10 01:17:32 +08:00
										 |  |  | 			"module":  panel.Module, | 
					
						
							|  |  |  | 			"baseUrl": panel.BaseUrl, | 
					
						
							|  |  |  | 			"name":    panel.Name, | 
					
						
							|  |  |  | 			"id":      panel.Id, | 
					
						
							|  |  |  | 			"info":    panel.Info, | 
					
						
							| 
									
										
										
										
											2015-11-21 20:46:18 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 	jsonObj := map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2015-02-27 20:45:00 +08:00
										 |  |  | 		"defaultDatasource": defaultDatasource, | 
					
						
							|  |  |  | 		"datasources":       datasources, | 
					
						
							| 
									
										
										
										
											2015-11-21 20:46:18 +08:00
										 |  |  | 		"panels":            panels, | 
					
						
							| 
									
										
										
										
											2015-02-27 20:45:00 +08:00
										 |  |  | 		"appSubUrl":         setting.AppSubUrl, | 
					
						
							| 
									
										
										
										
											2015-06-25 23:06:43 +08:00
										 |  |  | 		"allowOrgCreate":    (setting.AllowUserOrgCreate && c.IsSignedIn) || c.IsGrafanaAdmin, | 
					
						
							| 
									
										
										
										
											2015-10-30 21:02:29 +08:00
										 |  |  | 		"authProxyEnabled":  setting.AuthProxyEnabled, | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 		"buildInfo": map[string]interface{}{ | 
					
						
							|  |  |  | 			"version":    setting.BuildVersion, | 
					
						
							|  |  |  | 			"commit":     setting.BuildCommit, | 
					
						
							|  |  |  | 			"buildstamp": setting.BuildStamp, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return jsonObj, nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-02-18 21:06:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func GetFrontendSettings(c *middleware.Context) { | 
					
						
							|  |  |  | 	settings, err := getFrontendSettingsMap(c) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		c.JsonApiErr(400, "Failed to get frontend settings", err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c.JSON(200, settings) | 
					
						
							|  |  |  | } |