func newHorizontalPodAutoscalerInformer(client internalclientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { sharedIndexInformer := cache.NewSharedIndexInformer( &cache.ListWatch{ ListFunc: func(options v1.ListOptions) (runtime.Object, error) { var internalOptions api.ListOptions if err := api.Scheme.Convert(&options, &internalOptions, nil); err != nil { return nil, err } return client.Autoscaling().HorizontalPodAutoscalers(api.NamespaceAll).List(internalOptions) }, WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { var internalOptions api.ListOptions if err := api.Scheme.Convert(&options, &internalOptions, nil); err != nil { return nil, err } return client.Autoscaling().HorizontalPodAutoscalers(api.NamespaceAll).Watch(internalOptions) }, }, &autoscaling.HorizontalPodAutoscaler{}, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, ) return sharedIndexInformer }
// GetHorizontalPodAutoscalerDetail returns detailed information about a horizontal pod autoscaler func GetHorizontalPodAutoscalerDetail(client client.Interface, namespace string, name string) (*HorizontalPodAutoscalerDetail, error) { log.Printf("Getting details of %s horizontal pod autoscaler", name) rawHorizontalPodAutoscaler, err := client.Autoscaling().HorizontalPodAutoscalers(namespace).Get(name) if err != nil { return nil, err } return getHorizontalPodAutoscalerDetail(rawHorizontalPodAutoscaler), nil }
// TODO: Move this upstream func printAutoscalingInfo(res unversioned.GroupResource, namespace, name string, kclient kclientset.Interface, w *tabwriter.Writer) { hpaList, err := kclient.Autoscaling().HorizontalPodAutoscalers(namespace).List(kapi.ListOptions{LabelSelector: labels.Everything()}) if err != nil { return } scaledBy := []autoscaling.HorizontalPodAutoscaler{} for _, hpa := range hpaList.Items { if hpa.Spec.ScaleTargetRef.Name == name && hpa.Spec.ScaleTargetRef.Kind == res.String() { scaledBy = append(scaledBy, hpa) } } for _, hpa := range scaledBy { cpuUtil := "" if hpa.Spec.TargetCPUUtilizationPercentage != nil { cpuUtil = fmt.Sprintf(", triggered at %d%% CPU usage", *hpa.Spec.TargetCPUUtilizationPercentage) } fmt.Fprintf(w, "Autoscaling:\tbetween %d and %d replicas%s\n", *hpa.Spec.MinReplicas, hpa.Spec.MaxReplicas, cpuUtil) // TODO: Print a warning in case of multiple hpas. // Related oc status PR: https://github.com/openshift/origin/pull/7799 break } }
// GetPodListMetricsChannel returns a pair of channels to MetricsByPod and errors that // both must be read numReads times. func GetHorizontalPodAutoscalerListChannel(client client.Interface, nsQuery *NamespaceQuery, numReads int) HorizontalPodAutoscalerListChannel { channel := HorizontalPodAutoscalerListChannel{ List: make(chan *autoscaling.HorizontalPodAutoscalerList, numReads), Error: make(chan error, numReads), } go func() { list, err := client.Autoscaling().HorizontalPodAutoscalers(nsQuery.ToRequestParam()).List(listEverything) for i := 0; i < numReads; i++ { channel.List <- list channel.Error <- err } }() return channel }