github.com/aclisp/heapster@v0.19.2-0.20160613100040-51756f899a96/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: "compute.googleapis.com/resource_id", 87 Description: "Resource id for nodes specific for GCE.", 88 } 89 LabelGCEResourceType = LabelDescriptor{ 90 Key: "compute.googleapis.com/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 } 141 142 var gcmNodeAutoscalingLabels = []LabelDescriptor{ 143 LabelGCEResourceID, 144 LabelGCEResourceType, 145 LabelHostname, 146 } 147 148 func CommonLabels() []LabelDescriptor { 149 result := make([]LabelDescriptor, len(commonLabels)) 150 copy(result, commonLabels) 151 return result 152 } 153 154 func ContainerLabels() []LabelDescriptor { 155 result := make([]LabelDescriptor, len(containerLabels)) 156 copy(result, containerLabels) 157 return result 158 } 159 160 func PodLabels() []LabelDescriptor { 161 result := make([]LabelDescriptor, len(podLabels)) 162 copy(result, podLabels) 163 return result 164 } 165 166 func MetricLabels() []LabelDescriptor { 167 result := make([]LabelDescriptor, len(metricLabels)+len(customMetricLabels)) 168 copy(result, metricLabels) 169 copy(result, customMetricLabels) 170 return result 171 } 172 173 func SupportedLabels() []LabelDescriptor { 174 result := CommonLabels() 175 result = append(result, PodLabels()...) 176 return append(result, MetricLabels()...) 177 } 178 179 func GcmLabels() map[string]LabelDescriptor { 180 result := make(map[string]LabelDescriptor, len(gcmLabels)) 181 for _, l := range gcmLabels { 182 result[l.Key] = l 183 } 184 return result 185 } 186 func GcmNodeAutoscalingLabels() map[string]LabelDescriptor { 187 result := make(map[string]LabelDescriptor, len(gcmNodeAutoscalingLabels)) 188 for _, l := range gcmNodeAutoscalingLabels { 189 result[l.Key] = l 190 } 191 return result 192 }