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
9fc91b7a
Commit
9fc91b7a
authored
Oct 08, 2015
by
Torkel Ödegaard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed gofmt issue
parent
04eefb84
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
75 additions
and
73 deletions
+75
-73
pkg/api/cloudwatch/metrics.go
+45
-45
pkg/api/dataproxy.go
+20
-7
pkg/middleware/logger.go
+10
-21
No files found.
pkg/api/cloudwatch/metrics.go
View file @
9fc91b7a
...
...
@@ -12,56 +12,56 @@ var dimensionsMap 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
{
"AWS/AutoScaling"
:
{
"GroupMinSize"
,
"GroupMaxSize"
,
"GroupDesiredCapacity"
,
"GroupInServiceInstances"
,
"GroupPendingInstances"
,
"GroupStandbyInstances"
,
"GroupTerminatingInstances"
,
"GroupTotalInstances"
},
"AWS/Billing"
:
{
"EstimatedCharges"
},
"AWS/EC2"
:
{
"CPUCreditUsage"
,
"CPUCreditBalance"
,
"CPUUtilization"
,
"DiskReadOps"
,
"DiskWriteOps"
,
"DiskReadBytes"
,
"DiskWriteBytes"
,
"NetworkIn"
,
"NetworkOut"
,
"StatusCheckFailed"
,
"StatusCheckFailed_Instance"
,
"StatusCheckFailed_System"
},
"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"
:
[]
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"
:
[]
string
{
"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"
:
[]
string
{
"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"
:
[]
string
{
"PredictCount"
,
"PredictFailureCount"
},
"AWS/OpsWorks"
:
[]
string
{
"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"
:
[]
string
{
"CPUUtilization"
,
"DatabaseConnections"
,
"HealthStatus"
,
"MaintenanceMode"
,
"NetworkReceiveThroughput"
,
"NetworkTransmitThroughput"
,
"PercentageDiskSpaceUsed"
,
"ReadIOPS"
,
"ReadLatency"
,
"ReadThroughput"
,
"WriteIOPS"
,
"WriteLatency"
,
"WriteThroughput"
},
"AWS/RDS"
:
[]
string
{
"BinLogDiskUsage"
,
"CPUUtilization"
,
"DatabaseConnections"
,
"DiskQueueDepth"
,
"FreeableMemory"
,
"FreeStorageSpace"
,
"ReplicaLag"
,
"SwapUsage"
,
"ReadIOPS"
,
"WriteIOPS"
,
"ReadLatency"
,
"WriteLatency"
,
"ReadThroughput"
,
"WriteThroughput"
,
"NetworkReceiveThroughput"
,
"NetworkTransmitThroughput"
},
"AWS/Route53"
:
[]
string
{
"HealthCheckStatus"
,
"HealthCheckPercentageHealthy"
},
"AWS/SNS"
:
[]
string
{
"NumberOfMessagesPublished"
,
"PublishSize"
,
"NumberOfNotificationsDelivered"
,
"NumberOfNotificationsFailed"
},
"AWS/SQS"
:
[]
string
{
"NumberOfMessagesSent"
,
"SentMessageSize"
,
"NumberOfMessagesReceived"
,
"NumberOfEmptyReceives"
,
"NumberOfMessagesDeleted"
,
"ApproximateNumberOfMessagesDelayed"
,
"ApproximateNumberOfMessagesVisible"
,
"ApproximateNumberOfMessagesNotVisible"
},
"AWS/S3"
:
[]
string
{
"BucketSizeBytes"
,
"NumberOfObjects"
},
"AWS/SWF"
:
[]
string
{
"DecisionTaskScheduleToStartTime"
,
"DecisionTaskStartToCloseTime"
,
"DecisionTasksCompleted"
,
"StartedDecisionTasksTimedOutOnClose"
,
"WorkflowStartToCloseTime"
,
"WorkflowsCanceled"
,
"WorkflowsCompleted"
,
"WorkflowsContinuedAsNew"
,
"WorkflowsFailed"
,
"WorkflowsTerminated"
,
"WorkflowsTimedOut"
},
"AWS/StorageGateway"
:
[]
string
{
"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"
:
[]
string
{
"Available"
,
"Unhealthy"
,
"ConnectionAttempt"
,
"ConnectionSuccess"
,
"ConnectionFailure"
,
"SessionLaunchTime"
,
"InSessionLatency"
,
"SessionDisconnect"
},
"AWS/EBS"
:
{
"VolumeReadBytes"
,
"VolumeWriteBytes"
,
"VolumeReadOps"
,
"VolumeWriteOps"
,
"VolumeTotalReadTime"
,
"VolumeTotalWriteTime"
,
"VolumeIdleTime"
,
"VolumeQueueLength"
,
"VolumeThroughputPercentage"
,
"VolumeConsumedReadWriteOps"
},
"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"
},
}
dimensionsMap
=
map
[
string
][]
string
{
"AWS/AutoScaling"
:
[]
string
{
"AutoScalingGroupName"
},
"AWS/Billing"
:
[]
string
{
"ServiceName"
,
"LinkedAccount"
,
"Currency"
},
"AWS/CloudFront"
:
[]
string
{
"DistributionId"
,
"Region"
},
"AWS/CloudSearch"
:
[]
string
{},
"AWS/DynamoDB"
:
[]
string
{
"TableName"
,
"GlobalSecondaryIndexName"
,
"Operation"
},
"AWS/ElastiCache"
:
[]
string
{
"CacheClusterId"
,
"CacheNodeId"
},
"AWS/EBS"
:
[]
string
{
"VolumeId"
},
"AWS/EC2"
:
[]
string
{
"AutoScalingGroupName"
,
"ImageId"
,
"InstanceId"
,
"InstanceType"
},
"AWS/ELB"
:
[]
string
{
"LoadBalancerName"
,
"AvailabilityZone"
},
"AWS/ElasticMapReduce"
:
[]
string
{
"ClusterId"
,
"JobId"
},
"AWS/Kinesis"
:
[]
string
{
"StreamName"
},
"AWS/ML"
:
[]
string
{
"MLModelId"
,
"RequestMode"
},
"AWS/OpsWorks"
:
[]
string
{
"StackId"
,
"LayerId"
,
"InstanceId"
},
"AWS/Redshift"
:
[]
string
{
"NodeID"
,
"ClusterIdentifier"
},
"AWS/RDS"
:
[]
string
{
"DBInstanceIdentifier"
,
"DatabaseClass"
,
"EngineName"
},
"AWS/Route53"
:
[]
string
{
"HealthCheckId"
},
"AWS/SNS"
:
[]
string
{
"Application"
,
"Platform"
,
"TopicName"
},
"AWS/SQS"
:
[]
string
{
"QueueName"
},
"AWS/S3"
:
[]
string
{
"BucketName"
,
"StorageType"
},
"AWS/SWF"
:
[]
string
{
"Domain"
,
"ActivityTypeName"
,
"ActivityTypeVersion"
},
"AWS/StorageGateway"
:
[]
string
{
"GatewayId"
,
"GatewayName"
,
"VolumeId"
},
"AWS/WorkSpaces"
:
[]
string
{
"DirectoryId"
,
"WorkspaceId"
},
"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"
},
}
}
...
...
@@ -81,7 +81,7 @@ func handleGetRegions(req *cwRequest, c *middleware.Context) {
func
handleGetNamespaces
(
req
*
cwRequest
,
c
*
middleware
.
Context
)
{
result
:=
[]
interface
{}{}
for
key
,
_
:=
range
metricsMap
{
for
key
:=
range
metricsMap
{
result
=
append
(
result
,
util
.
DynMap
{
"text"
:
key
,
"value"
:
key
})
}
...
...
pkg/api/dataproxy.go
View file @
9fc91b7a
...
...
@@ -64,17 +64,30 @@ func NewReverseProxy(ds *m.DataSource, proxyPath string, targetUrl *url.URL) *ht
return
&
httputil
.
ReverseProxy
{
Director
:
director
}
}
//ProxyDataSourceRequest TODO need to cache datasources
func
ProxyDataSourceRequest
(
c
*
middleware
.
Context
)
{
id
:=
c
.
ParamsInt64
(
":id"
)
query
:=
m
.
GetDataSourceByIdQuery
{
Id
:
id
,
OrgId
:
c
.
OrgId
}
var
dsMap
map
[
int64
]
*
m
.
DataSource
=
make
(
map
[
int64
]
*
m
.
DataSource
)
func
getDatasource
(
id
int64
,
orgId
int64
)
(
*
m
.
DataSource
,
error
)
{
// ds, exists := dsMap[id]
// if exists && ds.OrgId == orgId {
// return ds, nil
// }
query
:=
m
.
GetDataSourceByIdQuery
{
Id
:
id
,
OrgId
:
orgId
}
if
err
:=
bus
.
Dispatch
(
&
query
);
err
!=
nil
{
return
nil
,
err
}
dsMap
[
id
]
=
&
query
.
Result
return
&
query
.
Result
,
nil
}
func
ProxyDataSourceRequest
(
c
*
middleware
.
Context
)
{
ds
,
err
:=
getDatasource
(
c
.
ParamsInt64
(
":id"
),
c
.
OrgId
)
if
err
!=
nil
{
c
.
JsonApiErr
(
500
,
"Unable to load datasource meta data"
,
err
)
return
}
ds
:=
query
.
Result
targetUrl
,
_
:=
url
.
Parse
(
ds
.
Url
)
if
len
(
setting
.
DataProxyWhiteList
)
>
0
{
if
_
,
exists
:=
setting
.
DataProxyWhiteList
[
targetUrl
.
Host
];
!
exists
{
...
...
@@ -83,11 +96,11 @@ func ProxyDataSourceRequest(c *middleware.Context) {
}
}
if
query
.
Result
.
Type
==
m
.
DS_CLOUDWATCH
{
if
ds
.
Type
==
m
.
DS_CLOUDWATCH
{
cloudwatch
.
HandleRequest
(
c
)
}
else
{
proxyPath
:=
c
.
Params
(
"*"
)
proxy
:=
NewReverseProxy
(
&
ds
,
proxyPath
,
targetUrl
)
proxy
:=
NewReverseProxy
(
ds
,
proxyPath
,
targetUrl
)
proxy
.
Transport
=
dataProxyTransport
proxy
.
ServeHTTP
(
c
.
RW
(),
c
.
Req
.
Request
)
}
...
...
pkg/middleware/logger.go
View file @
9fc91b7a
...
...
@@ -18,20 +18,12 @@ package middleware
import
(
"fmt"
"net/http"
"runtime"
"time"
"github.com/Unknwon/macaron"
"github.com/grafana/grafana/pkg/log"
)
var
isWindows
bool
func
init
()
{
isWindows
=
runtime
.
GOOS
==
"windows"
}
// Logger returns a middleware handler that logs the request as it goes in and the response as it goes out.
func
Logger
()
macaron
.
Handler
{
return
func
(
res
http
.
ResponseWriter
,
req
*
http
.
Request
,
c
*
macaron
.
Context
)
{
start
:=
time
.
Now
()
...
...
@@ -40,20 +32,17 @@ func Logger() macaron.Handler {
c
.
Next
()
content
:=
fmt
.
Sprintf
(
"Completed %s %v %s in %v"
,
req
.
URL
.
Path
,
rw
.
Status
(),
http
.
StatusText
(
rw
.
Status
()),
time
.
Since
(
start
))
if
!
isWindows
{
switch
rw
.
Status
()
{
case
200
:
content
=
fmt
.
Sprintf
(
"
\0
33[1;32m%s
\0
33[0m"
,
content
)
return
case
304
:
//content = fmt.Sprintf("\033[1;33m%s\033[0m", content)
return
case
404
:
content
=
fmt
.
Sprintf
(
"
\0
33[1;31m%s
\0
33[0m"
,
content
)
case
500
:
content
=
fmt
.
Sprintf
(
"
\0
33[1;36m%s
\0
33[0m"
,
content
)
}
switch
rw
.
Status
()
{
case
200
,
304
:
content
=
fmt
.
Sprintf
(
"%s"
,
content
)
return
case
404
:
content
=
fmt
.
Sprintf
(
"%s"
,
content
)
case
500
:
content
=
fmt
.
Sprintf
(
"%s"
,
content
)
}
log
.
Info
(
content
)
}
}
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