Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
0912cec0
Commit
0912cec0
authored
Oct 02, 2015
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(cloudwatch): contining work on moving hard coded stuff to backend and cleaning up code, #684
parent
180ba33a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
187 additions
and
279 deletions
+187
-279
pkg/api/cloudwatch/cloudwatch.go
+2
-15
pkg/api/cloudwatch/metrics.go
+115
-0
public/app/plugins/datasource/cloudwatch/datasource.js
+9
-195
public/app/plugins/datasource/cloudwatch/specs/datasource_specs.ts
+61
-69
No files found.
pkg/api/cloudwatch/cloudwatch.go
View file @
0912cec0
...
@@ -10,7 +10,6 @@ import (
...
@@ -10,7 +10,6 @@ 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"
"github.com/grafana/grafana/pkg/util"
)
)
type
actionHandler
func
(
*
cwRequest
,
*
middleware
.
Context
)
type
actionHandler
func
(
*
cwRequest
,
*
middleware
.
Context
)
...
@@ -29,6 +28,8 @@ func init() {
...
@@ -29,6 +28,8 @@ func init() {
"ListMetrics"
:
handleListMetrics
,
"ListMetrics"
:
handleListMetrics
,
"DescribeInstances"
:
handleDescribeInstances
,
"DescribeInstances"
:
handleDescribeInstances
,
"__GetRegions"
:
handleGetRegions
,
"__GetRegions"
:
handleGetRegions
,
"__GetNamespaces"
:
handleGetNamespaces
,
"__GetMetrics"
:
handleGetMetrics
,
}
}
}
}
...
@@ -122,20 +123,6 @@ func handleDescribeInstances(req *cwRequest, c *middleware.Context) {
...
@@ -122,20 +123,6 @@ func handleDescribeInstances(req *cwRequest, c *middleware.Context) {
c
.
JSON
(
200
,
resp
)
c
.
JSON
(
200
,
resp
)
}
}
func
handleGetRegions
(
req
*
cwRequest
,
c
*
middleware
.
Context
)
{
regions
:=
[]
string
{
"us-west-2"
,
"us-west-1"
,
"eu-west-1"
,
"eu-central-1"
,
"ap-southeast-1"
,
"ap-southeast-2"
,
"ap-northeast-1"
,
"sa-east-1"
,
}
result
:=
[]
interface
{}{}
for
_
,
region
:=
range
regions
{
result
=
append
(
result
,
util
.
DynMap
{
"text"
:
region
,
"value"
:
region
})
}
c
.
JSON
(
200
,
result
)
}
func
HandleRequest
(
c
*
middleware
.
Context
)
{
func
HandleRequest
(
c
*
middleware
.
Context
)
{
var
req
cwRequest
var
req
cwRequest
req
.
Body
,
_
=
ioutil
.
ReadAll
(
c
.
Req
.
Request
.
Body
)
req
.
Body
,
_
=
ioutil
.
ReadAll
(
c
.
Req
.
Request
.
Body
)
...
...
pkg/api/cloudwatch/metrics.go
0 → 100644
View file @
0912cec0
package
cloudwatch
import
(
"encoding/json"
"github.com/grafana/grafana/pkg/middleware"
"github.com/grafana/grafana/pkg/util"
)
var
metricsMap
map
[
string
][]
string
func
init
()
{
metricsMap
=
map
[
string
][]
string
{
"AWS/AutoScaling"
:
[]
string
{
"GroupMinSize"
,
"GroupMaxSize"
,
"GroupDesiredCapacity"
,
"GroupInServiceInstances"
,
"GroupPendingInstances"
,
"GroupStandbyInstances"
,
"GroupTerminatingInstances"
,
"GroupTotalInstances"
},
"AWS/Billing"
:
[]
string
{
"EstimatedCharges"
},
"AWS/EC2"
:
[]
string
{
"CPUCreditUsage"
,
"CPUCreditBalance"
,
"CPUUtilization"
,
"DiskReadOps"
,
"DiskWriteOps"
,
"DiskReadBytes"
,
"DiskWriteBytes"
,
"NetworkIn"
,
"NetworkOut"
,
"StatusCheckFailed"
,
"StatusCheckFailed_Instance"
,
"StatusCheckFailed_System"
},
"AWS/CloudFront"
:
[]
string
{
"Requests"
,
"BytesDownloaded"
,
"BytesUploaded"
,
"TotalErrorRate"
,
"4xxErrorRate"
,
"5xxErrorRate"
},
"AWS/CloudSearch"
:
[]
string
{
"SuccessfulRequests"
,
"SearchableDocuments"
,
"IndexUtilization"
,
"Partitions"
},
"AWS/DynamoDB"
:
[]
string
{
"ConditionalCheckFailedRequests"
,
"ConsumedReadCapacityUnits"
,
"ConsumedWriteCapacityUnits"
,
"OnlineIndexConsumedWriteCapacity"
,
"OnlineIndexPercentageProgress"
,
"OnlineIndexThrottleEvents"
,
"ProvisionedReadCapacityUnits"
,
"ProvisionedWriteCapacityUnits"
,
"ReadThrottleEvents"
,
"ReturnedItemCount"
,
"SuccessfulRequestLatency"
,
"SystemErrors"
,
"ThrottledRequests"
,
"UserErrors"
,
"WriteThrottleEvents"
},
"AWS/ElastiCache"
:
[]
string
{
"CPUUtilization"
,
"SwapUsage"
,
"FreeableMemory"
,
"NetworkBytesIn"
,
"NetworkBytesOut"
,
"BytesUsedForCacheItems"
,
"BytesReadIntoMemcached"
,
"BytesWrittenOutFromMemcached"
,
"CasBadval"
,
"CasHits"
,
"CasMisses"
,
"CmdFlush"
,
"CmdGet"
,
"CmdSet"
,
"CurrConnections"
,
"CurrItems"
,
"DecrHits"
,
"DecrMisses"
,
"DeleteHits"
,
"DeleteMisses"
,
"Evictions"
,
"GetHits"
,
"GetMisses"
,
"IncrHits"
,
"IncrMisses"
,
"Reclaimed"
,
"CurrConnections"
,
"Evictions"
,
"Reclaimed"
,
"NewConnections"
,
"BytesUsedForCache"
,
"CacheHits"
,
"CacheMisses"
,
"ReplicationLag"
,
"GetTypeCmds"
,
"SetTypeCmds"
,
"KeyBasedCmds"
,
"StringBasedCmds"
,
"HashBasedCmds"
,
"ListBasedCmds"
,
"SetBasedCmds"
,
"SortedSetBasedCmds"
,
"CurrItems"
,
},
"AWS/EBS"
:
[]
string
{
"VolumeReadBytes"
,
"VolumeWriteBytes"
,
"VolumeReadOps"
,
"VolumeWriteOps"
,
"VolumeTotalReadTime"
,
"VolumeTotalWriteTime"
,
"VolumeIdleTime"
,
"VolumeQueueLength"
,
"VolumeThroughputPercentage"
,
"VolumeConsumedReadWriteOps"
},
"AWS/ELB"
:
[]
string
{
"HealthyHostCount"
,
"UnHealthyHostCount"
,
"RequestCount"
,
"Latency"
,
"HTTPCode_ELB_4XX"
,
"HTTPCode_ELB_5XX"
,
"HTTPCode_Backend_2XX"
,
"HTTPCode_Backend_3XX"
,
"HTTPCode_Backend_4XX"
,
"HTTPCode_Backend_5XX"
,
"BackendConnectionErrors"
,
"SurgeQueueLength"
,
"SpilloverCount"
},
}
}
// "AWS/ElasticMapReduce": [
// "CoreNodesPending", "CoreNodesRunning", "HBaseBackupFailed", "HBaseMostRecentBackupDuration", "HBaseTimeSinceLastSuccessfulBackup", "HDFSBytesRead", "HDFSBytesWritten", "HDFSUtilization", "IsIdle", "JobsFailed", "JobsRunning", "LiveDataNodes", "LiveTaskTrackers", "MapSlotsOpen", "MissingBlocks", "ReduceSlotsOpen", "RemainingMapTasks", "RemainingMapTasksPerSlot", "RemainingReduceTasks", "RunningMapTasks", "RunningReduceTasks", "S3BytesRead", "S3BytesWritten", "TaskNodesPending", "TaskNodesRunning", "TotalLoad"
// ],
// "AWS/Kinesis": [
// "PutRecord.Bytes", "PutRecord.Latency", "PutRecord.Success", "PutRecords.Bytes", "PutRecords.Latency", "PutRecords.Records", "PutRecords.Success", "IncomingBytes", "IncomingRecords", "GetRecords.Bytes", "GetRecords.IteratorAgeMilliseconds", "GetRecords.Latency", "GetRecords.Success"
// ],
// "AWS/ML": [
// "PredictCount", "PredictFailureCount"
// ],
// "AWS/OpsWorks": [
// "cpu_idle", "cpu_nice", "cpu_system", "cpu_user", "cpu_waitio", "load_1", "load_5", "load_15", "memory_buffers", "memory_cached", "memory_free", "memory_swap", "memory_total", "memory_used", "procs"
// ],
// "AWS/Redshift": [
// "CPUUtilization", "DatabaseConnections", "HealthStatus", "MaintenanceMode", "NetworkReceiveThroughput", "NetworkTransmitThroughput", "PercentageDiskSpaceUsed", "ReadIOPS", "ReadLatency", "ReadThroughput", "WriteIOPS", "WriteLatency", "WriteThroughput"
// ],
// "AWS/RDS": [
// "BinLogDiskUsage", "CPUUtilization", "DatabaseConnections", "DiskQueueDepth", "FreeableMemory", "FreeStorageSpace", "ReplicaLag", "SwapUsage", "ReadIOPS", "WriteIOPS", "ReadLatency", "WriteLatency", "ReadThroughput", "WriteThroughput", "NetworkReceiveThroughput", "NetworkTransmitThroughput"
// ],
// "AWS/Route53": [
// "HealthCheckStatus", "HealthCheckPercentageHealthy"
// ],
// "AWS/SNS": [
// "NumberOfMessagesPublished", "PublishSize", "NumberOfNotificationsDelivered", "NumberOfNotificationsFailed"
// ],
// "AWS/SQS": [
// "NumberOfMessagesSent", "SentMessageSize", "NumberOfMessagesReceived", "NumberOfEmptyReceives", "NumberOfMessagesDeleted", "ApproximateNumberOfMessagesDelayed", "ApproximateNumberOfMessagesVisible", "ApproximateNumberOfMessagesNotVisible"
// ],
// "AWS/S3": [
// "BucketSizeBytes", "NumberOfObjects"
// ],
// "AWS/SWF": [
// "DecisionTaskScheduleToStartTime", "DecisionTaskStartToCloseTime", "DecisionTasksCompleted", "StartedDecisionTasksTimedOutOnClose", "WorkflowStartToCloseTime", "WorkflowsCanceled", "WorkflowsCompleted", "WorkflowsContinuedAsNew", "WorkflowsFailed", "WorkflowsTerminated", "WorkflowsTimedOut"
// ],
// "AWS/StorageGateway": [
// "CacheHitPercent", "CachePercentUsed", "CachePercentDirty", "CloudBytesDownloaded", "CloudDownloadLatency", "CloudBytesUploaded", "UploadBufferFree", "UploadBufferPercentUsed", "UploadBufferUsed", "QueuedWrites", "ReadBytes", "ReadTime", "TotalCacheSize", "WriteBytes", "WriteTime", "WorkingStorageFree", "WorkingStoragePercentUsed", "WorkingStorageUsed", "CacheHitPercent", "CachePercentUsed", "CachePercentDirty", "ReadBytes", "ReadTime", "WriteBytes", "WriteTime", "QueuedWrites"
// ],
// "AWS/WorkSpaces": [
// "Available", "Unhealthy", "ConnectionAttempt", "ConnectionSuccess", "ConnectionFailure", "SessionLaunchTime", "InSessionLatency", "SessionDisconnect"
// ],
// };
func
handleGetRegions
(
req
*
cwRequest
,
c
*
middleware
.
Context
)
{
regions
:=
[]
string
{
"us-west-2"
,
"us-west-1"
,
"eu-west-1"
,
"eu-central-1"
,
"ap-southeast-1"
,
"ap-southeast-2"
,
"ap-northeast-1"
,
"sa-east-1"
,
}
result
:=
[]
interface
{}{}
for
_
,
region
:=
range
regions
{
result
=
append
(
result
,
util
.
DynMap
{
"text"
:
region
,
"value"
:
region
})
}
c
.
JSON
(
200
,
result
)
}
func
handleGetNamespaces
(
req
*
cwRequest
,
c
*
middleware
.
Context
)
{
result
:=
[]
interface
{}{}
for
key
,
_
:=
range
metricsMap
{
result
=
append
(
result
,
util
.
DynMap
{
"text"
:
key
,
"value"
:
key
})
}
c
.
JSON
(
200
,
result
)
}
func
handleGetMetrics
(
req
*
cwRequest
,
c
*
middleware
.
Context
)
{
reqParam
:=
&
struct
{
Parameters
struct
{
Namespace
string
`json:"namespace"`
}
`json:"parameters"`
}{}
json
.
Unmarshal
(
req
.
Body
,
reqParam
)
namespaceMetrics
,
exists
:=
metricsMap
[
reqParam
.
Parameters
.
Namespace
]
if
!
exists
{
c
.
JsonApiErr
(
404
,
"Unable to find namespace "
+
reqParam
.
Parameters
.
Namespace
,
nil
)
return
}
result
:=
[]
interface
{}{}
for
_
,
name
:=
range
namespaceMetrics
{
result
=
append
(
result
,
util
.
DynMap
{
"text"
:
name
,
"value"
:
name
})
}
c
.
JSON
(
200
,
result
)
}
public/app/plugins/datasource/cloudwatch/datasource.js
View file @
0912cec0
...
@@ -18,197 +18,8 @@ function (angular, _) {
...
@@ -18,197 +18,8 @@ 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
;
/* jshint -W101 */
this
.
supportedMetrics
=
{
'AWS/AutoScaling'
:
[
'GroupMinSize'
,
'GroupMaxSize'
,
'GroupDesiredCapacity'
,
'GroupInServiceInstances'
,
'GroupPendingInstances'
,
'GroupStandbyInstances'
,
'GroupTerminatingInstances'
,
'GroupTotalInstances'
],
'AWS/Billing'
:
[
'EstimatedCharges'
],
'AWS/CloudFront'
:
[
'Requests'
,
'BytesDownloaded'
,
'BytesUploaded'
,
'TotalErrorRate'
,
'4xxErrorRate'
,
'5xxErrorRate'
],
'AWS/CloudSearch'
:
[
'SuccessfulRequests'
,
'SearchableDocuments'
,
'IndexUtilization'
,
'Partitions'
],
'AWS/DynamoDB'
:
[
'ConditionalCheckFailedRequests'
,
'ConsumedReadCapacityUnits'
,
'ConsumedWriteCapacityUnits'
,
'OnlineIndexConsumedWriteCapacity'
,
'OnlineIndexPercentageProgress'
,
'OnlineIndexThrottleEvents'
,
'ProvisionedReadCapacityUnits'
,
'ProvisionedWriteCapacityUnits'
,
'ReadThrottleEvents'
,
'ReturnedItemCount'
,
'SuccessfulRequestLatency'
,
'SystemErrors'
,
'ThrottledRequests'
,
'UserErrors'
,
'WriteThrottleEvents'
],
'AWS/ElastiCache'
:
[
'CPUUtilization'
,
'SwapUsage'
,
'FreeableMemory'
,
'NetworkBytesIn'
,
'NetworkBytesOut'
,
'BytesUsedForCacheItems'
,
'BytesReadIntoMemcached'
,
'BytesWrittenOutFromMemcached'
,
'CasBadval'
,
'CasHits'
,
'CasMisses'
,
'CmdFlush'
,
'CmdGet'
,
'CmdSet'
,
'CurrConnections'
,
'CurrItems'
,
'DecrHits'
,
'DecrMisses'
,
'DeleteHits'
,
'DeleteMisses'
,
'Evictions'
,
'GetHits'
,
'GetMisses'
,
'IncrHits'
,
'IncrMisses'
,
'Reclaimed'
,
'CurrConnections'
,
'Evictions'
,
'Reclaimed'
,
'NewConnections'
,
'BytesUsedForCache'
,
'CacheHits'
,
'CacheMisses'
,
'ReplicationLag'
,
'GetTypeCmds'
,
'SetTypeCmds'
,
'KeyBasedCmds'
,
'StringBasedCmds'
,
'HashBasedCmds'
,
'ListBasedCmds'
,
'SetBasedCmds'
,
'SortedSetBasedCmds'
,
'CurrItems'
],
'AWS/EBS'
:
[
'VolumeReadBytes'
,
'VolumeWriteBytes'
,
'VolumeReadOps'
,
'VolumeWriteOps'
,
'VolumeTotalReadTime'
,
'VolumeTotalWriteTime'
,
'VolumeIdleTime'
,
'VolumeQueueLength'
,
'VolumeThroughputPercentage'
,
'VolumeConsumedReadWriteOps'
],
'AWS/EC2'
:
[
'CPUCreditUsage'
,
'CPUCreditBalance'
,
'CPUUtilization'
,
'DiskReadOps'
,
'DiskWriteOps'
,
'DiskReadBytes'
,
'DiskWriteBytes'
,
'NetworkIn'
,
'NetworkOut'
,
'StatusCheckFailed'
,
'StatusCheckFailed_Instance'
,
'StatusCheckFailed_System'
],
'AWS/ELB'
:
[
'HealthyHostCount'
,
'UnHealthyHostCount'
,
'RequestCount'
,
'Latency'
,
'HTTPCode_ELB_4XX'
,
'HTTPCode_ELB_5XX'
,
'HTTPCode_Backend_2XX'
,
'HTTPCode_Backend_3XX'
,
'HTTPCode_Backend_4XX'
,
'HTTPCode_Backend_5XX'
,
'BackendConnectionErrors'
,
'SurgeQueueLength'
,
'SpilloverCount'
],
'AWS/ElasticMapReduce'
:
[
'CoreNodesPending'
,
'CoreNodesRunning'
,
'HBaseBackupFailed'
,
'HBaseMostRecentBackupDuration'
,
'HBaseTimeSinceLastSuccessfulBackup'
,
'HDFSBytesRead'
,
'HDFSBytesWritten'
,
'HDFSUtilization'
,
'IsIdle'
,
'JobsFailed'
,
'JobsRunning'
,
'LiveDataNodes'
,
'LiveTaskTrackers'
,
'MapSlotsOpen'
,
'MissingBlocks'
,
'ReduceSlotsOpen'
,
'RemainingMapTasks'
,
'RemainingMapTasksPerSlot'
,
'RemainingReduceTasks'
,
'RunningMapTasks'
,
'RunningReduceTasks'
,
'S3BytesRead'
,
'S3BytesWritten'
,
'TaskNodesPending'
,
'TaskNodesRunning'
,
'TotalLoad'
],
'AWS/Kinesis'
:
[
'PutRecord.Bytes'
,
'PutRecord.Latency'
,
'PutRecord.Success'
,
'PutRecords.Bytes'
,
'PutRecords.Latency'
,
'PutRecords.Records'
,
'PutRecords.Success'
,
'IncomingBytes'
,
'IncomingRecords'
,
'GetRecords.Bytes'
,
'GetRecords.IteratorAgeMilliseconds'
,
'GetRecords.Latency'
,
'GetRecords.Success'
],
'AWS/ML'
:
[
'PredictCount'
,
'PredictFailureCount'
],
'AWS/OpsWorks'
:
[
'cpu_idle'
,
'cpu_nice'
,
'cpu_system'
,
'cpu_user'
,
'cpu_waitio'
,
'load_1'
,
'load_5'
,
'load_15'
,
'memory_buffers'
,
'memory_cached'
,
'memory_free'
,
'memory_swap'
,
'memory_total'
,
'memory_used'
,
'procs'
],
'AWS/Redshift'
:
[
'CPUUtilization'
,
'DatabaseConnections'
,
'HealthStatus'
,
'MaintenanceMode'
,
'NetworkReceiveThroughput'
,
'NetworkTransmitThroughput'
,
'PercentageDiskSpaceUsed'
,
'ReadIOPS'
,
'ReadLatency'
,
'ReadThroughput'
,
'WriteIOPS'
,
'WriteLatency'
,
'WriteThroughput'
],
'AWS/RDS'
:
[
'BinLogDiskUsage'
,
'CPUUtilization'
,
'DatabaseConnections'
,
'DiskQueueDepth'
,
'FreeableMemory'
,
'FreeStorageSpace'
,
'ReplicaLag'
,
'SwapUsage'
,
'ReadIOPS'
,
'WriteIOPS'
,
'ReadLatency'
,
'WriteLatency'
,
'ReadThroughput'
,
'WriteThroughput'
,
'NetworkReceiveThroughput'
,
'NetworkTransmitThroughput'
],
'AWS/Route53'
:
[
'HealthCheckStatus'
,
'HealthCheckPercentageHealthy'
],
'AWS/SNS'
:
[
'NumberOfMessagesPublished'
,
'PublishSize'
,
'NumberOfNotificationsDelivered'
,
'NumberOfNotificationsFailed'
],
'AWS/SQS'
:
[
'NumberOfMessagesSent'
,
'SentMessageSize'
,
'NumberOfMessagesReceived'
,
'NumberOfEmptyReceives'
,
'NumberOfMessagesDeleted'
,
'ApproximateNumberOfMessagesDelayed'
,
'ApproximateNumberOfMessagesVisible'
,
'ApproximateNumberOfMessagesNotVisible'
],
'AWS/S3'
:
[
'BucketSizeBytes'
,
'NumberOfObjects'
],
'AWS/SWF'
:
[
'DecisionTaskScheduleToStartTime'
,
'DecisionTaskStartToCloseTime'
,
'DecisionTasksCompleted'
,
'StartedDecisionTasksTimedOutOnClose'
,
'WorkflowStartToCloseTime'
,
'WorkflowsCanceled'
,
'WorkflowsCompleted'
,
'WorkflowsContinuedAsNew'
,
'WorkflowsFailed'
,
'WorkflowsTerminated'
,
'WorkflowsTimedOut'
],
'AWS/StorageGateway'
:
[
'CacheHitPercent'
,
'CachePercentUsed'
,
'CachePercentDirty'
,
'CloudBytesDownloaded'
,
'CloudDownloadLatency'
,
'CloudBytesUploaded'
,
'UploadBufferFree'
,
'UploadBufferPercentUsed'
,
'UploadBufferUsed'
,
'QueuedWrites'
,
'ReadBytes'
,
'ReadTime'
,
'TotalCacheSize'
,
'WriteBytes'
,
'WriteTime'
,
'WorkingStorageFree'
,
'WorkingStoragePercentUsed'
,
'WorkingStorageUsed'
,
'CacheHitPercent'
,
'CachePercentUsed'
,
'CachePercentDirty'
,
'ReadBytes'
,
'ReadTime'
,
'WriteBytes'
,
'WriteTime'
,
'QueuedWrites'
],
'AWS/WorkSpaces'
:
[
'Available'
,
'Unhealthy'
,
'ConnectionAttempt'
,
'ConnectionSuccess'
,
'ConnectionFailure'
,
'SessionLaunchTime'
,
'InSessionLatency'
,
'SessionDisconnect'
],
};
this
.
supportedDimensions
=
{
'AWS/AutoScaling'
:
[
'AutoScalingGroupName'
],
'AWS/Billing'
:
[
'ServiceName'
,
'LinkedAccount'
,
'Currency'
],
'AWS/CloudFront'
:
[
'DistributionId'
,
'Region'
],
'AWS/CloudSearch'
:
[
],
'AWS/DynamoDB'
:
[
'TableName'
,
'GlobalSecondaryIndexName'
,
'Operation'
],
'AWS/ElastiCache'
:
[
'CacheClusterId'
,
'CacheNodeId'
],
'AWS/EBS'
:
[
'VolumeId'
],
'AWS/EC2'
:
[
'AutoScalingGroupName'
,
'ImageId'
,
'InstanceId'
,
'InstanceType'
],
'AWS/ELB'
:
[
'LoadBalancerName'
,
'AvailabilityZone'
],
'AWS/ElasticMapReduce'
:
[
'ClusterId'
,
'JobId'
],
'AWS/Kinesis'
:
[
'StreamName'
],
'AWS/ML'
:
[
'MLModelId'
,
'RequestMode'
],
'AWS/OpsWorks'
:
[
'StackId'
,
'LayerId'
,
'InstanceId'
],
'AWS/Redshift'
:
[
'NodeID'
,
'ClusterIdentifier'
],
'AWS/RDS'
:
[
'DBInstanceIdentifier'
,
'DatabaseClass'
,
'EngineName'
],
'AWS/Route53'
:
[
'HealthCheckId'
],
'AWS/SNS'
:
[
'Application'
,
'Platform'
,
'TopicName'
],
'AWS/SQS'
:
[
'QueueName'
],
'AWS/S3'
:
[
'BucketName'
,
'StorageType'
],
'AWS/SWF'
:
[
'Domain'
,
'ActivityTypeName'
,
'ActivityTypeVersion'
],
'AWS/StorageGateway'
:
[
'GatewayId'
,
'GatewayName'
,
'VolumeId'
],
'AWS/WorkSpaces'
:
[
'DirectoryId'
,
'WorkspaceId'
],
};
/* jshint +W101 */
/* load custom metrics definitions */
var
self
=
this
;
$q
.
all
(
_
.
chain
(
datasource
.
jsonData
.
customMetricsAttributes
)
.
reject
(
function
(
u
)
{
return
_
.
isEmpty
(
u
);
})
.
map
(
function
(
u
)
{
return
backendSrv
.
datasourceRequest
({
method
:
'GET'
,
url
:
u
});
})
)
.
then
(
function
(
allResponse
)
{
_
.
chain
(
allResponse
)
.
map
(
function
(
d
)
{
return
d
.
data
.
Metrics
;
})
.
flatten
()
.
reject
(
function
(
metric
)
{
return
metric
.
Namespace
.
indexOf
(
'AWS/'
)
===
0
;
})
.
map
(
function
(
metric
)
{
metric
.
Dimensions
=
_
.
chain
(
metric
.
Dimensions
)
.
map
(
function
(
d
)
{
return
d
.
Name
;
})
.
value
().
sort
();
return
metric
;
})
.
uniq
(
function
(
metric
)
{
return
metric
.
Namespace
+
metric
.
MetricName
+
metric
.
Dimensions
.
join
(
''
);
})
.
each
(
function
(
metric
)
{
if
(
!
_
.
has
(
self
.
supportedMetrics
,
metric
.
Namespace
))
{
self
.
supportedMetrics
[
metric
.
Namespace
]
=
[];
}
self
.
supportedMetrics
[
metric
.
Namespace
].
push
(
metric
.
MetricName
);
if
(
!
_
.
has
(
self
.
supportedDimensions
,
metric
.
Namespace
))
{
self
.
supportedDimensions
[
metric
.
Namespace
]
=
[];
}
self
.
supportedDimensions
[
metric
.
Namespace
]
=
_
.
union
(
self
.
supportedDimensions
[
metric
.
Namespace
],
metric
.
Dimensions
);
});
});
}
}
// Called once per panel (graph)
CloudWatchDatasource
.
prototype
.
query
=
function
(
options
)
{
CloudWatchDatasource
.
prototype
.
query
=
function
(
options
)
{
var
start
=
convertToCloudWatchTime
(
options
.
range
.
from
);
var
start
=
convertToCloudWatchTime
(
options
.
range
.
from
);
var
end
=
convertToCloudWatchTime
(
options
.
range
.
to
);
var
end
=
convertToCloudWatchTime
(
options
.
range
.
to
);
...
@@ -280,12 +91,16 @@ function (angular, _) {
...
@@ -280,12 +91,16 @@ function (angular, _) {
};
};
CloudWatchDatasource
.
prototype
.
getNamespaces
=
function
()
{
CloudWatchDatasource
.
prototype
.
getNamespaces
=
function
()
{
return
$q
.
when
(
_
.
keys
(
this
.
supportedMetrics
)
);
return
this
.
awsRequest
({
action
:
'__GetNamespaces'
}
);
};
};
CloudWatchDatasource
.
prototype
.
getMetrics
=
function
(
namespace
)
{
CloudWatchDatasource
.
prototype
.
getMetrics
=
function
(
namespace
)
{
namespace
=
templateSrv
.
replace
(
namespace
);
return
this
.
awsRequest
({
return
$q
.
when
(
this
.
supportedMetrics
[
namespace
]
||
[]);
action
:
'__GetMetrics'
,
parameters
:
{
namespace
:
templateSrv
.
replace
(
namespace
)
}
});
};
};
CloudWatchDatasource
.
prototype
.
getDimensionKeys
=
function
(
namespace
)
{
CloudWatchDatasource
.
prototype
.
getDimensionKeys
=
function
(
namespace
)
{
...
@@ -342,13 +157,12 @@ function (angular, _) {
...
@@ -342,13 +157,12 @@ function (angular, _) {
var
namespaceQuery
=
query
.
match
(
/^namespaces
\(\)
/
);
var
namespaceQuery
=
query
.
match
(
/^namespaces
\(\)
/
);
if
(
namespaceQuery
)
{
if
(
namespaceQuery
)
{
return
this
.
getNamespaces
()
.
then
(
transformSuggestData
)
;
return
this
.
getNamespaces
();
}
}
var
metricNameQuery
=
query
.
match
(
/^metrics
\(([^\)]
+
?)\)
/
);
var
metricNameQuery
=
query
.
match
(
/^metrics
\(([^\)]
+
?)\)
/
);
if
(
metricNameQuery
)
{
if
(
metricNameQuery
)
{
namespace
=
templateSrv
.
replace
(
metricNameQuery
[
1
]);
return
this
.
getMetrics
(
metricNameQuery
[
1
]);
return
this
.
getMetrics
(
namespace
).
then
(
transformSuggestData
);
}
}
var
dimensionKeysQuery
=
query
.
match
(
/^dimension_keys
\(([^\)]
+
?)\)
/
);
var
dimensionKeysQuery
=
query
.
match
(
/^dimension_keys
\(([^\)]
+
?)\)
/
);
...
...
public/app/plugins/datasource/cloudwatch/specs/datasource_specs.ts
View file @
0912cec0
...
@@ -84,87 +84,79 @@ describe('CloudWatchDatasource', function() {
...
@@ -84,87 +84,79 @@ describe('CloudWatchDatasource', function() {
});
});
});
});
describe
(
'When performing CloudWatch metricFindQuery'
,
function
()
{
function
describeMetricFindQuery
(
query
,
func
)
{
var
requestParams
;
describe
(
'metricFindQuery '
+
query
,
()
=>
{
var
response
=
{
let
scenario
:
any
=
{};
Metrics
:
[
scenario
.
setup
=
setupCallback
=>
{
{
beforeEach
(()
=>
{
Namespace
:
'AWS/EC2'
,
setupCallback
();
MetricName
:
'CPUUtilization'
,
ctx
.
backendSrv
.
datasourceRequest
=
args
=>
{
Dimensions
:
[
scenario
.
request
=
args
;
{
return
ctx
.
$q
.
when
({
data
:
scenario
.
requestResponse
});
Name
:
'InstanceId'
,
};
Value
:
'i-12345678'
ctx
.
ds
.
metricFindQuery
(
query
).
then
(
args
=>
{
}
scenario
.
result
=
args
;
]
});
}
ctx
.
$rootScope
.
$apply
();
]
});
};
beforeEach
(
function
()
{
ctx
.
backendSrv
.
datasourceRequest
=
function
(
params
)
{
requestParams
=
params
;
return
ctx
.
$q
.
when
({
data
:
response
});
};
};
func
(
scenario
);
});
});
}
describe
(
'regions()'
,
()
=>
{
describeMetricFindQuery
(
'regions()'
,
scenario
=>
{
let
params
,
result
;
scenario
.
setup
(()
=>
{
beforeEach
(()
=>
{
scenario
.
requestResponse
=
[{
text
:
'us-east-1'
}];
ctx
.
backendSrv
.
datasourceRequest
=
args
=>
{
});
params
=
args
;
return
ctx
.
$q
.
when
({
data
:
[{
text
:
'us-east-1'
}]});
};
ctx
.
ds
.
metricFindQuery
(
"regions()"
).
then
(
args
=>
{
result
=
args
;
});
ctx
.
$rootScope
.
$apply
();
});
it
(
'should issue __GetRegions request'
,
()
=>
{
it
(
'should call __GetRegions and return result'
,
()
=>
{
expect
(
result
[
0
].
text
).
to
.
contain
(
'us-east-1'
);
expect
(
scenario
.
result
[
0
].
text
).
to
.
contain
(
'us-east-1'
);
expect
(
params
.
data
.
action
).
to
.
be
(
'__GetRegions'
);
expect
(
scenario
.
request
.
data
.
action
).
to
.
be
(
'__GetRegions'
);
});
});
});
});
it
(
'should return suggest list for namespace()'
,
function
(
done
)
{
describeMetricFindQuery
(
'namespaces()'
,
scenario
=>
{
var
query
=
'namespaces()'
;
scenario
.
setup
(()
=>
{
ctx
.
ds
.
metricFindQuery
(
query
).
then
(
function
(
result
)
{
scenario
.
requestResponse
=
[{
text
:
'AWS/EC2'
}];
result
=
result
.
map
(
function
(
v
)
{
return
v
.
text
;
});
expect
(
result
).
to
.
contain
(
'AWS/EC2'
);
done
();
});
ctx
.
$rootScope
.
$apply
();
});
});
it
(
'should return suggest list for metrics()'
,
function
(
done
)
{
it
(
'should call __GetNamespaces and return result'
,
()
=>
{
var
query
=
'metrics(AWS/EC2)'
;
expect
(
scenario
.
result
[
0
].
text
).
to
.
contain
(
'AWS/EC2'
);
ctx
.
ds
.
metricFindQuery
(
query
).
then
(
function
(
result
)
{
expect
(
scenario
.
request
.
data
.
action
).
to
.
be
(
'__GetNamespaces'
);
result
=
result
.
map
(
function
(
v
)
{
return
v
.
text
;
});
expect
(
result
).
to
.
contain
(
'CPUUtilization'
);
done
();
});
ctx
.
$rootScope
.
$apply
();
});
});
});
it
(
'should return suggest list for dimension_keys()'
,
function
(
done
)
{
describeMetricFindQuery
(
'metrics(AWS/EC2)'
,
scenario
=>
{
var
query
=
'dimension_keys(AWS/EC2)'
;
scenario
.
setup
(()
=>
{
ctx
.
ds
.
metricFindQuery
(
query
).
then
(
function
(
result
)
{
scenario
.
requestResponse
=
[{
text
:
'CPUUtilization'
}];
result
=
result
.
map
(
function
(
v
)
{
return
v
.
text
;
});
expect
(
result
).
to
.
contain
(
'InstanceId'
);
done
();
});
ctx
.
$rootScope
.
$apply
();
});
});
it
(
'should return suggest list for dimension_values()'
,
function
(
done
)
{
it
(
'should call __GetMetrics and return result'
,
()
=>
{
var
query
=
'dimension_values(us-east-1,AWS/EC2,CPUUtilization)'
;
expect
(
scenario
.
result
[
0
].
text
).
to
.
be
(
'CPUUtilization'
);
ctx
.
ds
.
metricFindQuery
(
query
).
then
(
function
(
result
)
{
expect
(
scenario
.
request
.
data
.
action
).
to
.
be
(
'__GetMetrics'
);
result
=
result
.
map
(
function
(
v
)
{
return
v
.
text
;
});
expect
(
result
).
to
.
eql
([
'i-12345678'
]);
done
();
});
ctx
.
$rootScope
.
$apply
();
});
});
});
});
describe
(
'When performing metricFindQuery'
,
function
()
{
// it('should return suggest list for dimension_keys()', function(done) {
// var query = 'dimension_keys(AWS/EC2)';
// ctx.ds.metricFindQuery(query).then(function(result) {
// result = result.map(function(v) { return v.text; });
// expect(result).to.contain('InstanceId');
// done();
// });
// ctx.$rootScope.$apply();
// });
//
// it('should return suggest list for dimension_values()', function(done) {
// var query = 'dimension_values(us-east-1,AWS/EC2,CPUUtilization)';
// ctx.ds.metricFindQuery(query).then(function(result) {
// result = result.map(function(v) { return v.text; });
// expect(result).to.eql(['i-12345678']);
// done();
// });
// ctx.$rootScope.$apply();
// });
});
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment