Bläddra i källkod

fixed gofmt issue

Torkel Ödegaard 10 år sedan
förälder
incheckning
9fc91b7aa1
3 ändrade filer med 75 tillägg och 73 borttagningar
  1. 45 45
      pkg/api/cloudwatch/metrics.go
  2. 20 7
      pkg/api/dataproxy.go
  3. 10 21
      pkg/middleware/logger.go

+ 45 - 45
pkg/api/cloudwatch/metrics.go

@@ -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})
 	}
 

+ 20 - 7
pkg/api/dataproxy.go

@@ -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)
 	}

+ 10 - 21
pkg/middleware/logger.go

@@ -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("\033[1;32m%s\033[0m", content)
-				return
-			case 304:
-				//content = fmt.Sprintf("\033[1;33m%s\033[0m", content)
-				return
-			case 404:
-				content = fmt.Sprintf("\033[1;31m%s\033[0m", content)
-			case 500:
-				content = fmt.Sprintf("\033[1;36m%s\033[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)
 	}
 }