datasource.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package models
  2. import (
  3. "errors"
  4. "time"
  5. "github.com/grafana/grafana/pkg/components/securejsondata"
  6. "github.com/grafana/grafana/pkg/components/simplejson"
  7. )
  8. const (
  9. DS_GRAPHITE = "graphite"
  10. DS_INFLUXDB = "influxdb"
  11. DS_INFLUXDB_08 = "influxdb_08"
  12. DS_ES = "elasticsearch"
  13. DS_OPENTSDB = "opentsdb"
  14. DS_CLOUDWATCH = "cloudwatch"
  15. DS_KAIROSDB = "kairosdb"
  16. DS_PROMETHEUS = "prometheus"
  17. DS_POSTGRES = "postgres"
  18. DS_MYSQL = "mysql"
  19. DS_MSSQL = "mssql"
  20. DS_ACCESS_DIRECT = "direct"
  21. DS_ACCESS_PROXY = "proxy"
  22. DS_STACKDRIVER = "stackdriver"
  23. DS_AZURE_MONITOR = "grafana-azure-monitor-datasource"
  24. )
  25. var (
  26. ErrDataSourceNotFound = errors.New("Data source not found")
  27. ErrDataSourceNameExists = errors.New("Data source with same name already exists")
  28. ErrDataSourceUpdatingOldVersion = errors.New("Trying to update old version of datasource")
  29. ErrDatasourceIsReadOnly = errors.New("Data source is readonly. Can only be updated from configuration.")
  30. ErrDataSourceAccessDenied = errors.New("Data source access denied")
  31. )
  32. type DsAccess string
  33. type DataSource struct {
  34. Id int64
  35. OrgId int64
  36. Version int
  37. Name string
  38. Type string
  39. Access DsAccess
  40. Url string
  41. Password string
  42. User string
  43. Database string
  44. BasicAuth bool
  45. BasicAuthUser string
  46. BasicAuthPassword string
  47. WithCredentials bool
  48. IsDefault bool
  49. JsonData *simplejson.Json
  50. SecureJsonData securejsondata.SecureJsonData
  51. ReadOnly bool
  52. Created time.Time
  53. Updated time.Time
  54. }
  55. var knownDatasourcePlugins = map[string]bool{
  56. DS_ES: true,
  57. DS_GRAPHITE: true,
  58. DS_INFLUXDB: true,
  59. DS_INFLUXDB_08: true,
  60. DS_KAIROSDB: true,
  61. DS_CLOUDWATCH: true,
  62. DS_PROMETHEUS: true,
  63. DS_OPENTSDB: true,
  64. DS_POSTGRES: true,
  65. DS_MYSQL: true,
  66. DS_MSSQL: true,
  67. DS_STACKDRIVER: true,
  68. DS_AZURE_MONITOR: true,
  69. "opennms": true,
  70. "abhisant-druid-datasource": true,
  71. "dalmatinerdb-datasource": true,
  72. "gnocci": true,
  73. "zabbix": true,
  74. "newrelic-app": true,
  75. "grafana-datadog-datasource": true,
  76. "grafana-simple-json": true,
  77. "grafana-splunk-datasource": true,
  78. "udoprog-heroic-datasource": true,
  79. "grafana-openfalcon-datasource": true,
  80. "opennms-datasource": true,
  81. "rackerlabs-blueflood-datasource": true,
  82. "crate-datasource": true,
  83. "ayoungprogrammer-finance-datasource": true,
  84. "monasca-datasource": true,
  85. "vertamedia-clickhouse-datasource": true,
  86. "alexanderzobnin-zabbix-datasource": true,
  87. }
  88. func IsKnownDataSourcePlugin(dsType string) bool {
  89. _, exists := knownDatasourcePlugins[dsType]
  90. return exists
  91. }
  92. // ----------------------
  93. // COMMANDS
  94. // Also acts as api DTO
  95. type AddDataSourceCommand struct {
  96. Name string `json:"name" binding:"Required"`
  97. Type string `json:"type" binding:"Required"`
  98. Access DsAccess `json:"access" binding:"Required"`
  99. Url string `json:"url"`
  100. Password string `json:"password"`
  101. Database string `json:"database"`
  102. User string `json:"user"`
  103. BasicAuth bool `json:"basicAuth"`
  104. BasicAuthUser string `json:"basicAuthUser"`
  105. BasicAuthPassword string `json:"basicAuthPassword"`
  106. WithCredentials bool `json:"withCredentials"`
  107. IsDefault bool `json:"isDefault"`
  108. JsonData *simplejson.Json `json:"jsonData"`
  109. SecureJsonData map[string]string `json:"secureJsonData"`
  110. ReadOnly bool `json:"readOnly"`
  111. OrgId int64 `json:"-"`
  112. Result *DataSource
  113. }
  114. // Also acts as api DTO
  115. type UpdateDataSourceCommand struct {
  116. Name string `json:"name" binding:"Required"`
  117. Type string `json:"type" binding:"Required"`
  118. Access DsAccess `json:"access" binding:"Required"`
  119. Url string `json:"url"`
  120. Password string `json:"password"`
  121. User string `json:"user"`
  122. Database string `json:"database"`
  123. BasicAuth bool `json:"basicAuth"`
  124. BasicAuthUser string `json:"basicAuthUser"`
  125. BasicAuthPassword string `json:"basicAuthPassword"`
  126. WithCredentials bool `json:"withCredentials"`
  127. IsDefault bool `json:"isDefault"`
  128. JsonData *simplejson.Json `json:"jsonData"`
  129. SecureJsonData map[string]string `json:"secureJsonData"`
  130. Version int `json:"version"`
  131. ReadOnly bool `json:"readOnly"`
  132. OrgId int64 `json:"-"`
  133. Id int64 `json:"-"`
  134. Result *DataSource
  135. }
  136. type DeleteDataSourceByIdCommand struct {
  137. Id int64
  138. OrgId int64
  139. DeletedDatasourcesCount int64
  140. }
  141. type DeleteDataSourceByNameCommand struct {
  142. Name string
  143. OrgId int64
  144. DeletedDatasourcesCount int64
  145. }
  146. // ---------------------
  147. // QUERIES
  148. type GetDataSourcesQuery struct {
  149. OrgId int64
  150. User *SignedInUser
  151. Result []*DataSource
  152. }
  153. type GetAllDataSourcesQuery struct {
  154. Result []*DataSource
  155. }
  156. type GetDataSourceByIdQuery struct {
  157. Id int64
  158. OrgId int64
  159. Result *DataSource
  160. }
  161. type GetDataSourceByNameQuery struct {
  162. Name string
  163. OrgId int64
  164. Result *DataSource
  165. }
  166. // ---------------------
  167. // Permissions
  168. // ---------------------
  169. type DsPermissionType int
  170. const (
  171. DsPermissionNoAccess DsPermissionType = iota
  172. DsPermissionQuery
  173. )
  174. func (p DsPermissionType) String() string {
  175. names := map[int]string{
  176. int(DsPermissionQuery): "Query",
  177. int(DsPermissionNoAccess): "No Access",
  178. }
  179. return names[int(p)]
  180. }
  181. type DatasourcesPermissionFilterQuery struct {
  182. User *SignedInUser
  183. Datasources []*DataSource
  184. Result []*DataSource
  185. }