Refactor controller metrics interface
This commit is contained in:
parent
bdd2c5e3be
commit
1542a12764
30 changed files with 1896 additions and 630 deletions
134
internal/ingress/metric/main.go
Normal file
134
internal/ingress/metric/main.go
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package metric
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
|
||||
"k8s.io/ingress-nginx/internal/ingress"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/class"
|
||||
"k8s.io/ingress-nginx/internal/ingress/metric/collectors"
|
||||
)
|
||||
|
||||
// Collector defines the interface for a metric collector
|
||||
type Collector interface {
|
||||
ConfigSuccess(uint64, bool)
|
||||
|
||||
IncReloadCount()
|
||||
IncReloadErrorCount()
|
||||
|
||||
RemoveMetrics(ingresses, endpoints []string)
|
||||
|
||||
SetSSLExpireTime([]*ingress.Server)
|
||||
|
||||
Start()
|
||||
Stop()
|
||||
}
|
||||
|
||||
type collector struct {
|
||||
nginxStatus collectors.NGINXStatusCollector
|
||||
nginxProcess collectors.NGINXProcessCollector
|
||||
|
||||
ingressController *collectors.Controller
|
||||
|
||||
socket *collectors.SocketCollector
|
||||
|
||||
registry *prometheus.Registry
|
||||
}
|
||||
|
||||
// NewCollector creates a new metric collector the for ingress controller
|
||||
func NewCollector(statusPort int, registry *prometheus.Registry) (Collector, error) {
|
||||
podNamespace := os.Getenv("POD_NAMESPACE")
|
||||
if podNamespace == "" {
|
||||
podNamespace = "default"
|
||||
}
|
||||
|
||||
podName := os.Getenv("POD_NAME")
|
||||
|
||||
nc, err := collectors.NewNGINXStatus(podName, podNamespace, class.IngressClass, statusPort)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pc, err := collectors.NewNGINXProcess(podName, podNamespace, class.IngressClass)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
s, err := collectors.NewSocketCollector(podName, podNamespace, class.IngressClass)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ic := collectors.NewController(podName, podNamespace, class.IngressClass)
|
||||
|
||||
return Collector(&collector{
|
||||
nginxStatus: nc,
|
||||
nginxProcess: pc,
|
||||
|
||||
ingressController: ic,
|
||||
|
||||
socket: s,
|
||||
|
||||
registry: registry,
|
||||
}), nil
|
||||
}
|
||||
|
||||
func (c *collector) ConfigSuccess(hash uint64, success bool) {
|
||||
c.ingressController.ConfigSuccess(hash, success)
|
||||
}
|
||||
|
||||
func (c *collector) IncReloadCount() {
|
||||
c.ingressController.IncReloadCount()
|
||||
}
|
||||
|
||||
func (c *collector) IncReloadErrorCount() {
|
||||
c.ingressController.IncReloadErrorCount()
|
||||
}
|
||||
|
||||
func (c *collector) RemoveMetrics(ingresses, hosts []string) {
|
||||
c.socket.RemoveMetrics(ingresses, c.registry)
|
||||
c.ingressController.RemoveMetrics(hosts, c.registry)
|
||||
}
|
||||
|
||||
func (c *collector) Start() {
|
||||
c.registry.MustRegister(c.nginxStatus)
|
||||
c.registry.MustRegister(c.nginxProcess)
|
||||
c.registry.MustRegister(c.ingressController)
|
||||
c.registry.MustRegister(c.socket)
|
||||
|
||||
go c.nginxStatus.Start()
|
||||
go c.nginxProcess.Start()
|
||||
go c.socket.Start()
|
||||
}
|
||||
|
||||
func (c *collector) Stop() {
|
||||
c.registry.Unregister(c.nginxStatus)
|
||||
c.registry.Unregister(c.nginxProcess)
|
||||
c.registry.Unregister(c.ingressController)
|
||||
c.registry.Unregister(c.socket)
|
||||
|
||||
c.nginxStatus.Stop()
|
||||
c.nginxProcess.Stop()
|
||||
c.socket.Stop()
|
||||
}
|
||||
|
||||
func (c *collector) SetSSLExpireTime(servers []*ingress.Server) {
|
||||
c.ingressController.SetSSLExpireTime(servers)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue