dataproxy.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package api
  2. import (
  3. "github.com/grafana/grafana/pkg/api/pluginproxy"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/metrics"
  6. "github.com/grafana/grafana/pkg/middleware"
  7. m "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/plugins"
  9. )
  10. func getDatasource(id int64, orgId int64) (*m.DataSource, error) {
  11. query := m.GetDataSourceByIdQuery{Id: id, OrgId: orgId}
  12. if err := bus.Dispatch(&query); err != nil {
  13. return nil, err
  14. }
  15. return query.Result, nil
  16. }
  17. func ProxyDataSourceRequest(c *middleware.Context) {
  18. c.TimeRequest(metrics.M_DataSource_ProxyReq_Timer)
  19. ds, err := getDatasource(c.ParamsInt64(":id"), c.OrgId)
  20. if err != nil {
  21. c.JsonApiErr(500, "Unable to load datasource meta data", err)
  22. return
  23. }
  24. // find plugin
  25. plugin, ok := plugins.DataSources[ds.Type]
  26. if !ok {
  27. c.JsonApiErr(500, "Unable to find datasource plugin", err)
  28. return
  29. }
  30. proxyPath := c.Params("*")
  31. proxy := pluginproxy.NewDataSourceProxy(ds, plugin, c, proxyPath)
  32. proxy.HandleRequest()
  33. }