datasource.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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_INFLUXDB_IFQL = "influxdb-ifql"
  13. DS_ES = "elasticsearch"
  14. DS_OPENTSDB = "opentsdb"
  15. DS_CLOUDWATCH = "cloudwatch"
  16. DS_KAIROSDB = "kairosdb"
  17. DS_PROMETHEUS = "prometheus"
  18. DS_POSTGRES = "postgres"
  19. DS_MYSQL = "mysql"
  20. DS_MSSQL = "mssql"
  21. DS_ACCESS_DIRECT = "direct"
  22. DS_ACCESS_PROXY = "proxy"
  23. )
  24. var (
  25. ErrDataSourceNotFound = errors.New("Data source not found")
  26. ErrDataSourceNameExists = errors.New("Data source with same name already exists")
  27. ErrDataSourceUpdatingOldVersion = errors.New("Trying to update old version of datasource")
  28. ErrDatasourceIsReadOnly = errors.New("Data source is readonly. Can only be updated from configuration.")
  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. Result []*DataSource
  147. }
  148. type GetAllDataSourcesQuery struct {
  149. Result []*DataSource
  150. }
  151. type GetDataSourceByIdQuery struct {
  152. Id int64
  153. OrgId int64
  154. Result *DataSource
  155. }
  156. type GetDataSourceByNameQuery struct {
  157. Name string
  158. OrgId int64
  159. Result *DataSource
  160. }
  161. // ---------------------
  162. // EVENTS
  163. type DataSourceCreatedEvent struct {
  164. }