mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
refactoring: some minor refactoring and changes to AWS profile PR #3053
This commit is contained in:
@@ -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"`
|
Region string `json:"region"`
|
||||||
Profile string `json:"profile"`
|
Action string `json:"action"`
|
||||||
Action string `json:"action"`
|
Body []byte `json:"-"`
|
||||||
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 {
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ func ProxyDataSourceRequest(c *middleware.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ds.Type == m.DS_CLOUDWATCH {
|
if ds.Type == m.DS_CLOUDWATCH {
|
||||||
cloudwatch.HandleRequest(c)
|
cloudwatch.HandleRequest(c, ds)
|
||||||
} else {
|
} else {
|
||||||
proxyPath := c.Params("*")
|
proxyPath := c.Params("*")
|
||||||
proxy := NewReverseProxy(ds, proxyPath, targetUrl)
|
proxy := NewReverseProxy(ds, proxyPath, targetUrl)
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ function (angular, _) {
|
|||||||
this.supportMetrics = true;
|
this.supportMetrics = true;
|
||||||
this.proxyUrl = datasource.url;
|
this.proxyUrl = datasource.url;
|
||||||
this.defaultRegion = datasource.jsonData.defaultRegion;
|
this.defaultRegion = datasource.jsonData.defaultRegion;
|
||||||
this.profile = datasource.jsonData.profile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CloudWatchDatasource.prototype.query = function(options) {
|
CloudWatchDatasource.prototype.query = function(options) {
|
||||||
@@ -74,7 +73,6 @@ function (angular, _) {
|
|||||||
CloudWatchDatasource.prototype.performTimeSeriesQuery = function(query, start, end) {
|
CloudWatchDatasource.prototype.performTimeSeriesQuery = function(query, start, end) {
|
||||||
return this.awsRequest({
|
return this.awsRequest({
|
||||||
region: query.region,
|
region: query.region,
|
||||||
profile: this.profile,
|
|
||||||
action: 'GetMetricStatistics',
|
action: 'GetMetricStatistics',
|
||||||
parameters: {
|
parameters: {
|
||||||
namespace: query.namespace,
|
namespace: query.namespace,
|
||||||
@@ -117,7 +115,6 @@ function (angular, _) {
|
|||||||
CloudWatchDatasource.prototype.getDimensionValues = function(region, namespace, metricName, dimensions) {
|
CloudWatchDatasource.prototype.getDimensionValues = function(region, namespace, metricName, dimensions) {
|
||||||
var request = {
|
var request = {
|
||||||
region: templateSrv.replace(region),
|
region: templateSrv.replace(region),
|
||||||
profile: this.profile,
|
|
||||||
action: 'ListMetrics',
|
action: 'ListMetrics',
|
||||||
parameters: {
|
parameters: {
|
||||||
namespace: templateSrv.replace(namespace),
|
namespace: templateSrv.replace(namespace),
|
||||||
|
|||||||
@@ -1,73 +1,29 @@
|
|||||||
<br>
|
<br>
|
||||||
<h5>CloudWatch details</h5>
|
<h5>CloudWatch details</h5>
|
||||||
|
|
||||||
<div class="tight-form last">
|
<div class="editor-row">
|
||||||
<ul class="tight-form-list">
|
<div class="section tight-form-container" style="margin-bottom: 20px">
|
||||||
<li class="tight-form-item" style="width: 160px">
|
<div class="tight-form">
|
||||||
Default Region<tip>Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.</tip>
|
<ul class="tight-form-list">
|
||||||
</li>
|
<li class="tight-form-item" style="width: 200px">
|
||||||
<li>
|
Credentials profile name<tip>Credentials profile name, as specified in ~/.aws/credentials, leave blank for default</tip>
|
||||||
<input type="text" class="tight-form-input input-xlarge" ng-model='current.jsonData.defaultRegion' placeholder="" required></input>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
</ul>
|
<input type="text" class="tight-form-input input-large last" ng-model='current.database' placeholder="default" required></input>
|
||||||
<div class="clearfix"></div>
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
|
<div class="tight-form">
|
||||||
|
<ul class="tight-form-list">
|
||||||
|
<li class="tight-form-item" style="width: 200px">
|
||||||
|
Default Region<tip>Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.</tip>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<input type="text" class="tight-form-input input-large last" ng-model='current.jsonData.defaultRegion' placeholder="" required></input>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tight-form last">
|
|
||||||
<ul class="tight-form-list">
|
|
||||||
<li class="tight-form-item" style="width: 160px">
|
|
||||||
AWS Profile
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<input type="text" class="tight-form-input input-xlarge" ng-model='current.jsonData.profile' placeholder="default" required></input>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- <div class="tight-form" ng-show="current.jsonData.access === 'direct'"> -->
|
|
||||||
<!-- <ul class="tight-form-list"> -->
|
|
||||||
<!-- <li class="tight-form-item" style="width: 160px"> -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- <li> -->
|
|
||||||
<!-- <input type="text" class="tight-form-input input-xlarge" ng-model='current.jsonData.accessKeyId' placeholder=""></input> -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- </ul> -->
|
|
||||||
<!-- <div class="clearfix"></div> -->
|
|
||||||
<!-- </div> -->
|
|
||||||
<!-- <div class="tight-form" ng-show="current.jsonData.access === 'direct'"> -->
|
|
||||||
<!-- <ul class="tight-form-list"> -->
|
|
||||||
<!-- <li class="tight-form-item" style="width: 160px"> -->
|
|
||||||
<!-- Access Key Id -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- <li> -->
|
|
||||||
<!-- <input type="text" class="tight-form-input input-xlarge" ng-model='current.jsonData.accessKeyId' placeholder=""></input> -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- </ul> -->
|
|
||||||
<!-- <div class="clearfix"></div> -->
|
|
||||||
<!-- </div> -->
|
|
||||||
<!-- <div class="tight-form" ng-show="current.jsonData.access === 'direct'"> -->
|
|
||||||
<!-- <ul class="tight-form-list"> -->
|
|
||||||
<!-- <li class="tight-form-item" style="width: 160px"> -->
|
|
||||||
<!-- Secret Access Key -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- <li> -->
|
|
||||||
<!-- <input type="password" class="tight-form-input input-xlarge" ng-model='current.jsonData.secretAccessKey' placeholder=""></input> -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- </ul> -->
|
|
||||||
<!-- <div class="clearfix"></div> -->
|
|
||||||
<!-- </div> -->
|
|
||||||
|
|
||||||
<!-- <div class="tight-form last"> -->
|
|
||||||
<!-- <ul class="tight-form-list"> -->
|
|
||||||
<!-- <li class="tight-form-item" style="width: 160px"> -->
|
|
||||||
<!-- Custom Metric Attributes -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- <li> -->
|
|
||||||
<!-- <input type="text" class="tight-form-input input-xlarge" -->
|
|
||||||
<!-- ng-model='current.jsonData.customMetricsAttributes[0]' -->
|
|
||||||
<!-- ng-init="current.jsonData.customMetricsAttributes = current.jsonData.customMetricsAttributes || []" placeholder="JSON url" bs-tooltip="'Set JSON url of the result, \'aws cloudwatch list-metrics --output json\''"> -->
|
|
||||||
<!-- </input> -->
|
|
||||||
<!-- </li> -->
|
|
||||||
<!-- </ul> -->
|
|
||||||
<!-- <div class="clearfix"></div> -->
|
|
||||||
<!-- </div> -->
|
|
||||||
|
|||||||
Reference in New Issue
Block a user