datasource.go 6.3 KB

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