|
@@ -12,6 +12,7 @@ import (
|
|
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
|
|
"github.com/aws/aws-sdk-go/service/ec2"
|
|
"github.com/aws/aws-sdk-go/service/ec2"
|
|
|
"github.com/grafana/grafana/pkg/middleware"
|
|
"github.com/grafana/grafana/pkg/middleware"
|
|
|
|
|
+ m "github.com/grafana/grafana/pkg/models"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
type actionHandler func(*cwRequest, *middleware.Context)
|
|
type actionHandler func(*cwRequest, *middleware.Context)
|
|
@@ -19,10 +20,10 @@ type actionHandler func(*cwRequest, *middleware.Context)
|
|
|
var actionHandlers map[string]actionHandler
|
|
var actionHandlers map[string]actionHandler
|
|
|
|
|
|
|
|
type cwRequest struct {
|
|
type cwRequest struct {
|
|
|
- Region string `json:"region"`
|
|
|
|
|
- Profile string `json:"profile"`
|
|
|
|
|
- Action string `json:"action"`
|
|
|
|
|
- Body []byte `json:"-"`
|
|
|
|
|
|
|
+ Region string `json:"region"`
|
|
|
|
|
+ Action string `json:"action"`
|
|
|
|
|
+ Body []byte `json:"-"`
|
|
|
|
|
+ DataSource *m.DataSource
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
func init() {
|
|
@@ -41,7 +42,7 @@ func handleGetMetricStatistics(req *cwRequest, c *middleware.Context) {
|
|
|
creds := credentials.NewChainCredentials(
|
|
creds := credentials.NewChainCredentials(
|
|
|
[]credentials.Provider{
|
|
[]credentials.Provider{
|
|
|
&credentials.EnvProvider{},
|
|
&credentials.EnvProvider{},
|
|
|
- &credentials.SharedCredentialsProvider{Filename: "", Profile: req.Profile},
|
|
|
|
|
|
|
+ &credentials.SharedCredentialsProvider{Filename: "", Profile: req.DataSource.Database},
|
|
|
&ec2rolecreds.EC2RoleProvider{ExpiryWindow: 5 * time.Minute},
|
|
&ec2rolecreds.EC2RoleProvider{ExpiryWindow: 5 * time.Minute},
|
|
|
})
|
|
})
|
|
|
svc := cloudwatch.New(&aws.Config{
|
|
svc := cloudwatch.New(&aws.Config{
|
|
@@ -85,7 +86,7 @@ func handleListMetrics(req *cwRequest, c *middleware.Context) {
|
|
|
creds := credentials.NewChainCredentials(
|
|
creds := credentials.NewChainCredentials(
|
|
|
[]credentials.Provider{
|
|
[]credentials.Provider{
|
|
|
&credentials.EnvProvider{},
|
|
&credentials.EnvProvider{},
|
|
|
- &credentials.SharedCredentialsProvider{Filename: "", Profile: req.Profile},
|
|
|
|
|
|
|
+ &credentials.SharedCredentialsProvider{Filename: "", Profile: req.DataSource.Database},
|
|
|
&ec2rolecreds.EC2RoleProvider{ExpiryWindow: 5 * time.Minute},
|
|
&ec2rolecreds.EC2RoleProvider{ExpiryWindow: 5 * time.Minute},
|
|
|
})
|
|
})
|
|
|
svc := cloudwatch.New(&aws.Config{
|
|
svc := cloudwatch.New(&aws.Config{
|
|
@@ -145,9 +146,10 @@ func handleDescribeInstances(req *cwRequest, c *middleware.Context) {
|
|
|
c.JSON(200, resp)
|
|
c.JSON(200, resp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func HandleRequest(c *middleware.Context) {
|
|
|
|
|
|
|
+func HandleRequest(c *middleware.Context, ds *m.DataSource) {
|
|
|
var req cwRequest
|
|
var req cwRequest
|
|
|
req.Body, _ = ioutil.ReadAll(c.Req.Request.Body)
|
|
req.Body, _ = ioutil.ReadAll(c.Req.Request.Body)
|
|
|
|
|
+ req.DataSource = ds
|
|
|
json.Unmarshal(req.Body, &req)
|
|
json.Unmarshal(req.Body, &req)
|
|
|
|
|
|
|
|
if handler, found := actionHandlers[req.Action]; !found {
|
|
if handler, found := actionHandlers[req.Action]; !found {
|