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  }