github.com/timstclair/heapster@v0.20.0-alpha1/metrics/core/labels.go (about) 1 // Copyright 2015 Google Inc. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package core 16 17 // Definition of labels supported in MetricSet. 18 19 var ( 20 LabelMetricSetType = LabelDescriptor{ 21 Key: "type", 22 Description: "Type of the metrics set (container, pod, namespace, node, cluster)", 23 } 24 MetricSetTypeSystemContainer = "sys_container" 25 MetricSetTypePodContainer = "pod_container" 26 MetricSetTypePod = "pod" 27 MetricSetTypeNamespace = "ns" 28 MetricSetTypeNode = "node" 29 MetricSetTypeCluster = "cluster" 30 31 LabelPodId = LabelDescriptor{ 32 Key: "pod_id", 33 Description: "The unique ID of the pod", 34 } 35 LabelPodName = LabelDescriptor{ 36 Key: "pod_name", 37 Description: "The name of the pod", 38 } 39 // Deprecated label 40 LabelPodNamespace = LabelDescriptor{ 41 Key: "pod_namespace", 42 Description: "The namespace of the pod", 43 } 44 LabelNamespaceName = LabelDescriptor{ 45 Key: "namespace_name", 46 Description: "The name of the namespace", 47 } 48 LabelPodNamespaceUID = LabelDescriptor{ 49 Key: "namespace_id", 50 Description: "The UID of namespace of the pod", 51 } 52 LabelContainerName = LabelDescriptor{ 53 Key: "container_name", 54 Description: "User-provided name of the container or full container name for system containers", 55 } 56 LabelLabels = LabelDescriptor{ 57 Key: "labels", 58 Description: "Comma-separated list of user-provided labels", 59 } 60 LabelNodename = LabelDescriptor{ 61 Key: "nodename", 62 Description: "nodename where the container ran", 63 } 64 LabelHostname = LabelDescriptor{ 65 Key: "hostname", 66 Description: "Hostname where the container ran", 67 } 68 LabelResourceID = LabelDescriptor{ 69 Key: "resource_id", 70 Description: "Identifier(s) specific to a metric", 71 } 72 LabelHostID = LabelDescriptor{ 73 Key: "host_id", 74 Description: "Identifier specific to a host. Set by cloud provider or user", 75 } 76 LabelContainerBaseImage = LabelDescriptor{ 77 Key: "container_base_image", 78 Description: "User-defined image name that is run inside the container", 79 } 80 // The label is populated only for GCM 81 LabelCustomMetricName = LabelDescriptor{ 82 Key: "custom_metric_name", 83 Description: "User-defined name of the exported custom metric", 84 } 85 ) 86 87 type LabelDescriptor struct { 88 // Key to use for the label. 89 Key string `json:"key,omitempty"` 90 91 // Description of the label. 92 Description string `json:"description,omitempty"` 93 } 94 95 var commonLabels = []LabelDescriptor{ 96 LabelNodename, 97 LabelHostname, 98 LabelHostID, 99 } 100 101 var containerLabels = []LabelDescriptor{ 102 LabelContainerName, 103 LabelContainerBaseImage, 104 } 105 106 var podLabels = []LabelDescriptor{ 107 LabelPodName, 108 LabelPodId, 109 LabelPodNamespace, 110 // TODO: Enable label once it is supported by NamespaceEnricher 111 // LabelPodNamespaceUID, 112 LabelLabels, 113 } 114 115 var metricLabels = []LabelDescriptor{ 116 LabelResourceID, 117 LabelCustomMetricName, 118 } 119 120 // Labels exported to GCM. The number of labels that can be exported to GCM is limited by 10. 121 var gcmLabels = []LabelDescriptor{ 122 LabelMetricSetType, 123 LabelPodName, 124 LabelNamespaceName, 125 LabelHostname, 126 LabelHostID, 127 LabelContainerName, 128 LabelContainerBaseImage, 129 LabelCustomMetricName, 130 } 131 132 func CommonLabels() []LabelDescriptor { 133 result := make([]LabelDescriptor, len(commonLabels)) 134 copy(result, commonLabels) 135 return result 136 } 137 138 func ContainerLabels() []LabelDescriptor { 139 result := make([]LabelDescriptor, len(containerLabels)) 140 copy(result, containerLabels) 141 return result 142 } 143 144 func PodLabels() []LabelDescriptor { 145 result := make([]LabelDescriptor, len(podLabels)) 146 copy(result, podLabels) 147 return result 148 } 149 150 func MetricLabels() []LabelDescriptor { 151 result := make([]LabelDescriptor, len(metricLabels)) 152 copy(result, metricLabels) 153 return result 154 } 155 156 func SupportedLabels() []LabelDescriptor { 157 result := CommonLabels() 158 result = append(result, PodLabels()...) 159 return append(result, MetricLabels()...) 160 } 161 162 func GcmLabels() map[string]LabelDescriptor { 163 result := make(map[string]LabelDescriptor, len(gcmLabels)) 164 for _, l := range gcmLabels { 165 result[l.Key] = l 166 } 167 return result 168 }