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  }