Merge pull request #2865 from weaveworks/intern-map-keys

"Intern" map keys
This commit is contained in:
Matthias Radestock
2017-12-14 14:19:53 +00:00
committed by GitHub
20 changed files with 265 additions and 76 deletions

View File

@@ -243,7 +243,7 @@ function generate_latest_map() {
z.DecSendContainerState(containerMapKey)
var key string
if !r.TryDecodeAsNil() {
key = r.DecodeString()
key = lookupCommonKey(r.DecodeStringAsBytes())
}
i := m.locate(key)
(*m)[i].key = key

View File

@@ -13,13 +13,13 @@ import (
// TaskFamily is the key that stores the task family of an ECS Task
const (
Cluster = "ecs_cluster"
CreatedAt = "ecs_created_at"
TaskFamily = "ecs_task_family"
ServiceDesiredCount = "ecs_service_desired_count"
ServiceRunningCount = "ecs_service_running_count"
ScaleUp = "ecs_scale_up"
ScaleDown = "ecs_scale_down"
Cluster = report.ECSCluster
CreatedAt = report.ECSCreatedAt
TaskFamily = report.ECSTaskFamily
ServiceDesiredCount = report.ECSServiceDesiredCount
ServiceRunningCount = report.ECSServiceRunningCount
ScaleUp = report.ECSScaleUp
ScaleDown = report.ECSScaleDown
)
var (

View File

@@ -18,19 +18,19 @@ import (
// These constants are keys used in node metadata
const (
ContainerName = "docker_container_name"
ContainerCommand = "docker_container_command"
ContainerPorts = "docker_container_ports"
ContainerCreated = "docker_container_created"
ContainerNetworks = "docker_container_networks"
ContainerIPs = "docker_container_ips"
ContainerHostname = "docker_container_hostname"
ContainerIPsWithScopes = "docker_container_ips_with_scopes"
ContainerState = "docker_container_state"
ContainerStateHuman = "docker_container_state_human"
ContainerUptime = "docker_container_uptime"
ContainerRestartCount = "docker_container_restart_count"
ContainerNetworkMode = "docker_container_network_mode"
ContainerName = report.DockerContainerName
ContainerCommand = report.DockerContainerCommand
ContainerPorts = report.DockerContainerPorts
ContainerCreated = report.DockerContainerCreated
ContainerNetworks = report.DockerContainerNetworks
ContainerIPs = report.DockerContainerIPs
ContainerHostname = report.DockerContainerHostname
ContainerIPsWithScopes = report.DockerContainerIPsWithScopes
ContainerState = report.DockerContainerState
ContainerStateHuman = report.DockerContainerStateHuman
ContainerUptime = report.DockerContainerUptime
ContainerRestartCount = report.DockerContainerRestartCount
ContainerNetworkMode = report.DockerContainerNetworkMode
NetworkRxDropped = "network_rx_dropped"
NetworkRxBytes = "network_rx_bytes"

View File

@@ -12,14 +12,14 @@ import (
// Control IDs used by the docker integration.
const (
StopContainer = "docker_stop_container"
StartContainer = "docker_start_container"
RestartContainer = "docker_restart_container"
PauseContainer = "docker_pause_container"
UnpauseContainer = "docker_unpause_container"
RemoveContainer = "docker_remove_container"
AttachContainer = "docker_attach_container"
ExecContainer = "docker_exec_container"
StopContainer = report.DockerStopContainer
StartContainer = report.DockerStartContainer
RestartContainer = report.DockerRestartContainer
PauseContainer = report.DockerPauseContainer
UnpauseContainer = report.DockerUnpauseContainer
RemoveContainer = report.DockerRemoveContainer
AttachContainer = report.DockerAttachContainer
ExecContainer = report.DockerExecContainer
ResizeExecTTY = "docker_resize_exec_tty"
waitTime = 10

View File

@@ -14,15 +14,15 @@ import (
// Keys for use in Node
const (
ImageID = "docker_image_id"
ImageName = "docker_image_name"
ImageSize = "docker_image_size"
ImageVirtualSize = "docker_image_virtual_size"
ImageID = report.DockerImageID
ImageName = report.DockerImageName
ImageSize = report.DockerImageSize
ImageVirtualSize = report.DockerImageVirtualSize
IsInHostNetwork = report.DockerIsInHostNetwork
ImageLabelPrefix = "docker_image_label_"
IsInHostNetwork = "docker_is_in_host_network"
ImageTableID = "image_table"
ServiceName = "service_name"
StackNamespace = "stack_namespace"
ServiceName = report.DockerServiceName
StackNamespace = report.DockerStackNamespace
DefaultNamespace = "No Stack"
)

View File

@@ -10,9 +10,8 @@ import (
// Node metadata keys.
const (
ContainerID = "docker_container_id"
Domain = "domain" // TODO this is ambiguous, be more specific
Name = "name" // TODO this is ambiguous, be more specific
ContainerID = report.DockerContainerID
Name = report.Name
)
// These vars are exported for testing.

View File

@@ -11,9 +11,9 @@ import (
// Node metadata keys.
const (
ReverseDNSNames = "reverse_dns_names"
SnoopedDNSNames = "snooped_dns_names"
CopyOf = "copy_of"
ReverseDNSNames = report.ReverseDNSNames
SnoopedDNSNames = report.SnoopedDNSNames
CopyOf = report.CopyOf
)
// ReporterConfig are the config options for the endpoint reporter.

View File

@@ -11,10 +11,10 @@ import (
// Control IDs used by the kubernetes integration.
const (
GetLogs = "kubernetes_get_logs"
DeletePod = "kubernetes_delete_pod"
ScaleUp = "kubernetes_scale_up"
ScaleDown = "kubernetes_scale_down"
GetLogs = report.KubernetesGetLogs
DeletePod = report.KubernetesDeletePod
ScaleUp = report.KubernetesScaleUp
ScaleDown = report.KubernetesScaleDown
)
// GetLogs is the control to get the logs for a kubernetes pod

View File

@@ -15,10 +15,10 @@ import (
// These constants are keys used in node metadata
const (
Schedule = "kubernetes_schedule"
Suspended = "kubernetes_suspended"
LastScheduled = "kubernetes_last_scheduled"
ActiveJobs = "kubernetes_active_jobs"
Schedule = report.KubernetesSchedule
Suspended = report.KubernetesSuspended
LastScheduled = report.KubernetesLastScheduled
ActiveJobs = report.KubernetesActiveJobs
)
// CronJob represents a Kubernetes cron job

View File

@@ -12,7 +12,7 @@ import (
// These constants are keys used in node metadata
const (
MisscheduledReplicas = "kubernetes_misscheduled_replicas"
MisscheduledReplicas = report.KubernetesMisscheduledReplicas
)
// DaemonSet represents a Kubernetes daemonset

View File

@@ -13,10 +13,10 @@ import (
// These constants are keys used in node metadata
const (
UpdatedReplicas = "kubernetes_updated_replicas"
AvailableReplicas = "kubernetes_available_replicas"
UnavailableReplicas = "kubernetes_unavailable_replicas"
Strategy = "kubernetes_strategy"
UpdatedReplicas = report.KubernetesUpdatedReplicas
AvailableReplicas = report.KubernetesAvailableReplicas
UnavailableReplicas = report.KubernetesUnavailableReplicas
Strategy = report.KubernetesStrategy
)
// Deployment represents a Kubernetes deployment

View File

@@ -10,9 +10,9 @@ import (
// These constants are keys used in node metadata
const (
Name = "kubernetes_name"
Namespace = "kubernetes_namespace"
Created = "kubernetes_created"
Name = report.KubernetesName
Namespace = report.KubernetesNamespace
Created = report.KubernetesCreated
LabelPrefix = "kubernetes_labels_"
)

View File

@@ -10,9 +10,9 @@ import (
// These constants are keys used in node metadata
const (
State = "kubernetes_state"
IsInHostNetwork = "kubernetes_is_in_host_network"
RestartCount = "kubernetes_restart_count"
State = report.KubernetesState
IsInHostNetwork = report.KubernetesIsInHostNetwork
RestartCount = report.KubernetesRestartCount
StateDeleted = "deleted"
)

View File

@@ -13,7 +13,7 @@ import (
// These constants are keys used in node metadata
const (
FullyLabeledReplicas = "kubernetes_fully_labeled_replicas"
FullyLabeledReplicas = report.KubernetesFullyLabeledReplicas
)
// ReplicaSet represents a Kubernetes replica set

View File

@@ -18,11 +18,11 @@ import (
// These constants are keys used in node metadata
const (
IP = "kubernetes_ip"
ObservedGeneration = "kubernetes_observed_generation"
Replicas = "kubernetes_replicas"
DesiredReplicas = "kubernetes_desired_replicas"
NodeType = "kubernetes_node_type"
IP = report.KubernetesIP
ObservedGeneration = report.KubernetesObservedGeneration
Replicas = report.KubernetesReplicas
DesiredReplicas = report.KubernetesDesiredReplicas
NodeType = report.KubernetesNodeType
)
// Exposed for testing

View File

@@ -9,7 +9,7 @@ import (
// These constants are keys used in node metadata
const (
PublicIP = "kubernetes_public_ip"
PublicIP = report.KubernetesPublicIP
)
// Service represents a Kubernetes service

View File

@@ -10,11 +10,11 @@ import (
// We use these keys in node metadata
const (
PID = "pid"
Name = "name"
PPID = "ppid"
Cmdline = "cmdline"
Threads = "threads"
PID = report.PID
Name = report.Name
PPID = report.PPID
Cmdline = report.Cmdline
Threads = report.Threads
CPUUsage = "process_cpu_usage_percent"
MemoryUsage = "process_memory_usage_bytes"
OpenFilesCount = "open_files_count"

View File

@@ -211,7 +211,7 @@ func (m *StringLatestMap) CodecDecodeSelf(decoder *codec.Decoder) {
z.DecSendContainerState(containerMapKey)
var key string
if !r.TryDecodeAsNil() {
key = r.DecodeString()
key = lookupCommonKey(r.DecodeStringAsBytes())
}
i := m.locate(key)
(*m)[i].key = key
@@ -432,7 +432,7 @@ func (m *NodeControlDataLatestMap) CodecDecodeSelf(decoder *codec.Decoder) {
z.DecSendContainerState(containerMapKey)
var key string
if !r.TryDecodeAsNil() {
key = r.DecodeString()
key = lookupCommonKey(r.DecodeStringAsBytes())
}
i := m.locate(key)
(*m)[i].key = key

View File

@@ -110,7 +110,7 @@ func mapRead(decoder *codec.Decoder, decodeValue func(isNil bool) interface{}) p
var key string
z.DecSendContainerState(containerMapKey)
if !r.TryDecodeAsNil() {
key = r.DecodeString()
key = lookupCommonKey(r.DecodeStringAsBytes())
}
z.DecSendContainerState(containerMapValue)

190
report/map_keys.go Normal file
View File

@@ -0,0 +1,190 @@
package report
// node metadata keys
const (
// probe/endpoint
ReverseDNSNames = "reverse_dns_names"
SnoopedDNSNames = "snooped_dns_names"
CopyOf = "copy_of"
// probe/process
PID = "pid"
Name = "name" // also used by probe/docker
PPID = "ppid"
Cmdline = "cmdline"
Threads = "threads"
// probe/docker
DockerContainerID = "docker_container_id"
DockerImageID = "docker_image_id"
DockerImageName = "docker_image_name"
DockerImageSize = "docker_image_size"
DockerImageVirtualSize = "docker_image_virtual_size"
DockerIsInHostNetwork = "docker_is_in_host_network"
DockerServiceName = "service_name"
DockerStackNamespace = "stack_namespace"
DockerStopContainer = "docker_stop_container"
DockerStartContainer = "docker_start_container"
DockerRestartContainer = "docker_restart_container"
DockerPauseContainer = "docker_pause_container"
DockerUnpauseContainer = "docker_unpause_container"
DockerRemoveContainer = "docker_remove_container"
DockerAttachContainer = "docker_attach_container"
DockerExecContainer = "docker_exec_container"
DockerContainerName = "docker_container_name"
DockerContainerCommand = "docker_container_command"
DockerContainerPorts = "docker_container_ports"
DockerContainerCreated = "docker_container_created"
DockerContainerNetworks = "docker_container_networks"
DockerContainerIPs = "docker_container_ips"
DockerContainerHostname = "docker_container_hostname"
DockerContainerIPsWithScopes = "docker_container_ips_with_scopes"
DockerContainerState = "docker_container_state"
DockerContainerStateHuman = "docker_container_state_human"
DockerContainerUptime = "docker_container_uptime"
DockerContainerRestartCount = "docker_container_restart_count"
DockerContainerNetworkMode = "docker_container_network_mode"
// probe/kubernetes
KubernetesName = "kubernetes_name"
KubernetesNamespace = "kubernetes_namespace"
KubernetesCreated = "kubernetes_created"
KubernetesIP = "kubernetes_ip"
KubernetesObservedGeneration = "kubernetes_observed_generation"
KubernetesReplicas = "kubernetes_replicas"
KubernetesDesiredReplicas = "kubernetes_desired_replicas"
KubernetesNodeType = "kubernetes_node_type"
KubernetesGetLogs = "kubernetes_get_logs"
KubernetesDeletePod = "kubernetes_delete_pod"
KubernetesScaleUp = "kubernetes_scale_up"
KubernetesScaleDown = "kubernetes_scale_down"
KubernetesUpdatedReplicas = "kubernetes_updated_replicas"
KubernetesAvailableReplicas = "kubernetes_available_replicas"
KubernetesUnavailableReplicas = "kubernetes_unavailable_replicas"
KubernetesStrategy = "kubernetes_strategy"
KubernetesFullyLabeledReplicas = "kubernetes_fully_labeled_replicas"
KubernetesState = "kubernetes_state"
KubernetesIsInHostNetwork = "kubernetes_is_in_host_network"
KubernetesRestartCount = "kubernetes_restart_count"
KubernetesMisscheduledReplicas = "kubernetes_misscheduled_replicas"
KubernetesPublicIP = "kubernetes_public_ip"
KubernetesSchedule = "kubernetes_schedule"
KubernetesSuspended = "kubernetes_suspended"
KubernetesLastScheduled = "kubernetes_last_scheduled"
KubernetesActiveJobs = "kubernetes_active_jobs"
// probe/awsecs
ECSCluster = "ecs_cluster"
ECSCreatedAt = "ecs_created_at"
ECSTaskFamily = "ecs_task_family"
ECSServiceDesiredCount = "ecs_service_desired_count"
ECSServiceRunningCount = "ecs_service_running_count"
ECSScaleUp = "ecs_scale_up"
ECSScaleDown = "ecs_scale_down"
)
/* Lookup table to allow msgpack/json decoder to avoid heap allocation
for common ps.Map keys. The map is static so we don't have to lock
access from multiple threads and don't have to worry about it
getting clogged with values that are only used once.
*/
var commonKeys = map[string]string{
Endpoint: Endpoint,
Process: Process,
Container: Container,
Pod: Pod,
Service: Service,
Deployment: Deployment,
ReplicaSet: ReplicaSet,
DaemonSet: DaemonSet,
StatefulSet: StatefulSet,
CronJob: CronJob,
ContainerImage: ContainerImage,
Host: Host,
Overlay: Overlay,
ECSService: ECSService,
ECSTask: ECSTask,
SwarmService: SwarmService,
HostNodeID: HostNodeID,
ControlProbeID: ControlProbeID,
DoesNotMakeConnections: DoesNotMakeConnections,
ReverseDNSNames: ReverseDNSNames,
SnoopedDNSNames: SnoopedDNSNames,
CopyOf: CopyOf,
PID: PID,
Name: Name,
PPID: PPID,
Cmdline: Cmdline,
Threads: Threads,
DockerContainerID: DockerContainerID,
DockerImageID: DockerImageID,
DockerImageName: DockerImageName,
DockerImageSize: DockerImageSize,
DockerImageVirtualSize: DockerImageVirtualSize,
DockerIsInHostNetwork: DockerIsInHostNetwork,
DockerServiceName: DockerServiceName,
DockerStackNamespace: DockerStackNamespace,
DockerStopContainer: DockerStopContainer,
DockerStartContainer: DockerStartContainer,
DockerRestartContainer: DockerRestartContainer,
DockerPauseContainer: DockerPauseContainer,
DockerUnpauseContainer: DockerUnpauseContainer,
DockerRemoveContainer: DockerRemoveContainer,
DockerAttachContainer: DockerAttachContainer,
DockerExecContainer: DockerExecContainer,
DockerContainerName: DockerContainerName,
DockerContainerCommand: DockerContainerCommand,
DockerContainerPorts: DockerContainerPorts,
DockerContainerCreated: DockerContainerCreated,
DockerContainerNetworks: DockerContainerNetworks,
DockerContainerIPs: DockerContainerIPs,
DockerContainerHostname: DockerContainerHostname,
DockerContainerIPsWithScopes: DockerContainerIPsWithScopes,
DockerContainerState: DockerContainerState,
DockerContainerStateHuman: DockerContainerStateHuman,
DockerContainerUptime: DockerContainerUptime,
DockerContainerRestartCount: DockerContainerRestartCount,
DockerContainerNetworkMode: DockerContainerNetworkMode,
KubernetesName: KubernetesName,
KubernetesNamespace: KubernetesNamespace,
KubernetesCreated: KubernetesCreated,
KubernetesIP: KubernetesIP,
KubernetesObservedGeneration: KubernetesObservedGeneration,
KubernetesReplicas: KubernetesReplicas,
KubernetesDesiredReplicas: KubernetesDesiredReplicas,
KubernetesNodeType: KubernetesNodeType,
KubernetesGetLogs: KubernetesGetLogs,
KubernetesDeletePod: KubernetesDeletePod,
KubernetesScaleUp: KubernetesScaleUp,
KubernetesScaleDown: KubernetesScaleDown,
KubernetesUpdatedReplicas: KubernetesUpdatedReplicas,
KubernetesAvailableReplicas: KubernetesAvailableReplicas,
KubernetesUnavailableReplicas: KubernetesUnavailableReplicas,
KubernetesStrategy: KubernetesStrategy,
KubernetesFullyLabeledReplicas: KubernetesFullyLabeledReplicas,
KubernetesState: KubernetesState,
KubernetesIsInHostNetwork: KubernetesIsInHostNetwork,
KubernetesRestartCount: KubernetesRestartCount,
KubernetesMisscheduledReplicas: KubernetesMisscheduledReplicas,
KubernetesPublicIP: KubernetesPublicIP,
KubernetesSchedule: KubernetesSchedule,
KubernetesSuspended: KubernetesSuspended,
KubernetesLastScheduled: KubernetesLastScheduled,
KubernetesActiveJobs: KubernetesActiveJobs,
ECSCluster: ECSCluster,
ECSCreatedAt: ECSCreatedAt,
ECSTaskFamily: ECSTaskFamily,
ECSServiceDesiredCount: ECSServiceDesiredCount,
ECSServiceRunningCount: ECSServiceRunningCount,
ECSScaleUp: ECSScaleUp,
ECSScaleDown: ECSScaleDown,
}
func lookupCommonKey(b []byte) string {
if key, ok := commonKeys[string(b)]; ok {
return key
}
return string(b)
}