github.com/jonaz/heapster@v1.3.0-beta.0.0.20170208112634-cd3c15ca3d29/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 LabelGCEResourceID = LabelDescriptor{ 86 Key: "resource_id", 87 Description: "Resource id for nodes specific for GCE.", 88 } 89 LabelGCEResourceType = LabelDescriptor{ 90 Key: "resource_type", 91 Description: "Resource types for nodes specific for GCE.", 92 } 93 ) 94 95 type LabelDescriptor struct { 96 // Key to use for the label. 97 Key string `json:"key,omitempty"` 98 99 // Description of the label. 100 Description string `json:"description,omitempty"` 101 } 102 103 var commonLabels = []LabelDescriptor{ 104 LabelNodename, 105 LabelHostname, 106 LabelHostID, 107 } 108 109 var containerLabels = []LabelDescriptor{ 110 LabelContainerName, 111 LabelContainerBaseImage, 112 } 113 114 var podLabels = []LabelDescriptor{ 115 LabelPodName, 116 LabelPodId, 117 LabelPodNamespace, 118 LabelPodNamespaceUID, 119 LabelLabels, 120 } 121 122 var metricLabels = []LabelDescriptor{ 123 LabelResourceID, 124 } 125 126 var customMetricLabels = []LabelDescriptor{ 127 LabelCustomMetricName, 128 } 129 130 // Labels exported to GCM. The number of labels that can be exported to GCM is limited by 10. 131 var gcmLabels = []LabelDescriptor{ 132 LabelMetricSetType, 133 LabelPodName, 134 LabelNamespaceName, 135 LabelHostname, 136 LabelHostID, 137 LabelContainerName, 138 LabelContainerBaseImage, 139 LabelCustomMetricName, 140 LabelResourceID, 141 } 142 143 var gcmNodeAutoscalingLabels = []LabelDescriptor{ 144 LabelGCEResourceID, 145 LabelGCEResourceType, 146 LabelHostname, 147 } 148 149 func CommonLabels() []LabelDescriptor { 150 result := make([]LabelDescriptor, len(commonLabels)) 151 copy(result, commonLabels) 152 return result 153 } 154 155 func ContainerLabels() []LabelDescriptor { 156 result := make([]LabelDescriptor, len(containerLabels)) 157 copy(result, containerLabels) 158 return result 159 } 160 161 func PodLabels() []LabelDescriptor { 162 result := make([]LabelDescriptor, len(podLabels)) 163 copy(result, podLabels) 164 return result 165 } 166 167 func MetricLabels() []LabelDescriptor { 168 result := make([]LabelDescriptor, len(metricLabels)+len(customMetricLabels)) 169 copy(result, metricLabels) 170 copy(result, customMetricLabels) 171 return result 172 } 173 174 func SupportedLabels() []LabelDescriptor { 175 result := CommonLabels() 176 result = append(result, PodLabels()...) 177 return append(result, MetricLabels()...) 178 } 179 180 func GcmLabels() map[string]LabelDescriptor { 181 result := make(map[string]LabelDescriptor, len(gcmLabels)) 182 for _, l := range gcmLabels { 183 result[l.Key] = l 184 } 185 return result 186 } 187 func GcmNodeAutoscalingLabels() map[string]LabelDescriptor { 188 result := make(map[string]LabelDescriptor, len(gcmNodeAutoscalingLabels)) 189 for _, l := range gcmNodeAutoscalingLabels { 190 result[l.Key] = l 191 } 192 return result 193 }