| 
									
										
										
										
											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 { | 
					
						
							| 
									
										
										
										
											2016-09-23 18:29:53 +08:00
										 |  |  | 			url = "/api/datasources/proxy/" + strconv.FormatInt(ds.Id, 10) | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var dsMap = map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2017-03-30 04:54:07 +08:00
										 |  |  | 			"id":   ds.Id, | 
					
						
							| 
									
										
										
										
											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-04-03 20:32:15 +08:00
										 |  |  | 		if ds.JsonData != nil { | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-12 14:23:44 +08:00
										 |  |  | 	// add datasources that are built in (meaning they are not added via data sources page, nor have any entry in datasource table)
 | 
					
						
							| 
									
										
										
										
											2017-04-12 04:47:53 +08:00
										 |  |  | 	for _, ds := range plugins.DataSources { | 
					
						
							| 
									
										
										
										
											2017-04-12 14:23:44 +08:00
										 |  |  | 		if ds.BuiltIn { | 
					
						
							| 
									
										
										
										
											2017-04-12 04:47:53 +08:00
										 |  |  | 			datasources[ds.Name] = map[string]interface{}{ | 
					
						
							|  |  |  | 				"type": ds.Type, | 
					
						
							|  |  |  | 				"name": ds.Name, | 
					
						
							|  |  |  | 				"meta": plugins.DataSources[ds.Id], | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-08-17 02:52:30 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											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-12-08 17:25:05 +08:00
										 |  |  | 			"module":       panel.Module, | 
					
						
							|  |  |  | 			"baseUrl":      panel.BaseUrl, | 
					
						
							|  |  |  | 			"name":         panel.Name, | 
					
						
							|  |  |  | 			"id":           panel.Id, | 
					
						
							|  |  |  | 			"info":         panel.Info, | 
					
						
							|  |  |  | 			"hideFromList": panel.HideFromList, | 
					
						
							|  |  |  | 			"sort":         getPanelSort(panel.Id), | 
					
						
							| 
									
										
										
										
											2015-11-21 20:46:18 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 	jsonObj := map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2017-03-29 17:33:28 +08:00
										 |  |  | 		"defaultDatasource":  defaultDatasource, | 
					
						
							|  |  |  | 		"datasources":        datasources, | 
					
						
							|  |  |  | 		"panels":             panels, | 
					
						
							|  |  |  | 		"appSubUrl":          setting.AppSubUrl, | 
					
						
							|  |  |  | 		"allowOrgCreate":     (setting.AllowUserOrgCreate && c.IsSignedIn) || c.IsGrafanaAdmin, | 
					
						
							|  |  |  | 		"authProxyEnabled":   setting.AuthProxyEnabled, | 
					
						
							|  |  |  | 		"ldapEnabled":        setting.LdapEnabled, | 
					
						
							|  |  |  | 		"alertingEnabled":    setting.AlertingEnabled, | 
					
						
							|  |  |  | 		"googleAnalyticsId":  setting.GoogleAnalyticsId, | 
					
						
							|  |  |  | 		"disableLoginForm":   setting.DisableLoginForm, | 
					
						
							|  |  |  | 		"disableSignoutMenu": setting.DisableSignoutMenu, | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 		"buildInfo": map[string]interface{}{ | 
					
						
							| 
									
										
										
										
											2016-04-12 01:42:52 +08:00
										 |  |  | 			"version":       setting.BuildVersion, | 
					
						
							|  |  |  | 			"commit":        setting.BuildCommit, | 
					
						
							|  |  |  | 			"buildstamp":    setting.BuildStamp, | 
					
						
							|  |  |  | 			"latestVersion": plugins.GrafanaLatestVersion, | 
					
						
							|  |  |  | 			"hasUpdate":     plugins.GrafanaHasUpdate, | 
					
						
							| 
									
										
										
										
											2016-05-17 21:00:48 +08:00
										 |  |  | 			"env":           setting.Env, | 
					
						
							| 
									
										
										
										
											2015-01-05 17:46:58 +08:00
										 |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2014-12-29 20:36:08 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return jsonObj, nil | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-02-18 21:06:44 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-26 23:42:39 +08:00
										 |  |  | func getPanelSort(id string) int { | 
					
						
							|  |  |  | 	sort := 100 | 
					
						
							|  |  |  | 	switch id { | 
					
						
							|  |  |  | 	case "graph": | 
					
						
							|  |  |  | 		sort = 1 | 
					
						
							|  |  |  | 	case "singlestat": | 
					
						
							|  |  |  | 		sort = 2 | 
					
						
							|  |  |  | 	case "table": | 
					
						
							|  |  |  | 		sort = 3 | 
					
						
							|  |  |  | 	case "text": | 
					
						
							|  |  |  | 		sort = 4 | 
					
						
							| 
									
										
										
										
											2017-05-03 14:56:51 +08:00
										 |  |  | 	case "heatmap": | 
					
						
							| 
									
										
										
										
											2016-10-26 23:42:39 +08:00
										 |  |  | 		sort = 5 | 
					
						
							| 
									
										
										
										
											2017-05-03 14:56:51 +08:00
										 |  |  | 	case "alertlist": | 
					
						
							| 
									
										
										
										
											2016-10-26 23:42:39 +08:00
										 |  |  | 		sort = 6 | 
					
						
							| 
									
										
										
										
											2017-05-03 14:56:51 +08:00
										 |  |  | 	case "dashlist": | 
					
						
							|  |  |  | 		sort = 7 | 
					
						
							| 
									
										
										
										
											2016-10-26 23:42:39 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return sort | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  | } |