diff --git a/Gopkg.lock b/Gopkg.lock index 5bcec0c60f..2323ce808d 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -26,12 +26,12 @@ revision = "3a771d992973f24aa725d07868b467d1ddfceafb" [[projects]] - digest = "1:83222dd265299f065a2ae969c7780b6c6a225c770975051955320a95b0526239" + digest = "1:10bbd98644cb90c574544ab5e63a52999a652e0d24f052c66f4c2637e5da4c27" name = "github.com/coreos/prometheus-operator" packages = ["pkg/client/monitoring/v1"] pruneopts = "" - revision = "4a7fea51ab3f10329472c07028354617fb6635fe" - version = "v0.24.0" + revision = "82a6ad2071ff653e38b3b4719ecb789d73f3ab05" + version = "v0.25.0" [[projects]] digest = "1:0deddd908b6b4b768cfc272c16ee61e7088a60f7fe2f06c547bd3d8e1f8b8e77" @@ -69,12 +69,12 @@ revision = "9fb12b3b21c5415d16ac18dc5cd42c1cfdd40c4e" [[projects]] - branch = "master" digest = "1:ce43ad4015e7cdad3f0e8f2c8339439dd4470859a828d2a6988b0f713699e94a" name = "github.com/go-logr/zapr" packages = ["."] pruneopts = "" revision = "7536572e8d55209135cd5e7ccf7fce43dca217ab" + version = "v0.1.0" [[projects]] digest = "1:c8052dcf3ec378a9a6bc4f00ecc10d6d5eb3cc1f8faaf6b2f70f047e8881d446" @@ -82,7 +82,7 @@ packages = ["."] pruneopts = "" revision = "ef5f0afec364d3b9396b7b77b43dbe26bf1f8004" - version = "v0.17.0" + version = "v0.17.2" [[projects]] digest = "1:1824e5330b35b2a2418d06aa55629cc59ad454b72e338aa125ba8ff98f16298b" @@ -90,7 +90,7 @@ packages = ["."] pruneopts = "" revision = "8483a886a90412cd6858df4ea3483dce9c8e35a3" - version = "v0.17.0" + version = "v0.17.2" [[projects]] branch = "master" @@ -106,15 +106,15 @@ packages = ["."] pruneopts = "" revision = "5899d5c5e619fda5fa86e14795a835f473ca284c" - version = "v0.17.0" + version = "v0.17.2" [[projects]] - digest = "1:a51f75337287a485731485c646d701e237246f7c5d0e221dee18ca37b672538e" + digest = "1:01e8f4827a279f4764ab75410f7f416322e425e04238d20a242c5bc123c4a94c" name = "github.com/gobuffalo/envy" packages = ["."] pruneopts = "" - revision = "047ecc927cd0b7d27bab83eb948e120fb7d1ea68" - version = "v1.6.5" + revision = "e0b181c424e7ca1a36f6f2db4bdfd25ef3421e77" + version = "v1.6.7" [[projects]] digest = "1:6e73003ecd35f4487a5e88270d3ca0a81bc80dc88053ac7e4dcfec5fba30d918" @@ -137,11 +137,11 @@ [[projects]] branch = "master" - digest = "1:9854532d7b2fee9414d4fcd8d8bccd6b1c1e1663d8ec0337af63a19aaf4a778e" + digest = "1:aa2251148505e561bfa8cd6b69a319b37761da57b0b25529c4af08389559e3b9" name = "github.com/golang/groupcache" packages = ["lru"] pruneopts = "" - revision = "6f2cf27854a4a29e3811b0371547be335d411b8b" + revision = "c65c006176ff7ff98bb916961c7abbc6b0afc0aa" [[projects]] digest = "1:3dd078fda7500c341bc26cfbc6c6a34614f295a2457149fc1045cab767cbcf18" @@ -268,12 +268,12 @@ revision = "60711f1a8329503b04e1c88535f419d0bb440bff" [[projects]] - digest = "1:3d8a9dd6693e55d63b28634d66d11d647cd0b65362dedc18d686db01aa5f8678" + digest = "1:68145053d55a0fa6b5f259eb70de75cb3914f6440472007e67c87894e1c06697" name = "github.com/markbates/inflect" packages = ["."] pruneopts = "" - revision = "28bf78dadb0f64748ff13a0b6547e4972a5cea64" - version = "v1.0.1" + revision = "24b83195037b3bc61fcda2d28b7b0518bce293b6" + version = "v1.0.4" [[projects]] branch = "master" @@ -348,7 +348,7 @@ version = "v0.8.0" [[projects]] - digest = "1:f3e56d302f80d760e718743f89f4e7eaae532d4218ba330e979bd051f78de141" + digest = "1:8b2082f564fe20dbb43a621ee0d57ae2777656ab14111d100d3d92d1b5b958b9" name = "github.com/prometheus/client_golang" packages = [ "prometheus", @@ -356,8 +356,8 @@ "prometheus/promhttp", ] pruneopts = "" - revision = "1cafe34db7fdec6022e17e00e1c1ea501022f3e4" - version = "v0.9.0" + revision = "abad2d1bd44235a26707c172eab6bca5bf2dbad3" + version = "v0.9.1" [[projects]] branch = "master" @@ -369,7 +369,7 @@ [[projects]] branch = "master" - digest = "1:d1b5970f2a453e7c4be08117fb683b5d096bad9d17f119a6e58d4c561ca205dd" + digest = "1:117e1e4f1ed83191a4a225d23488e14802ff8f91b3ed4ff0d229e8ea0faf0a88" name = "github.com/prometheus/common" packages = [ "expfmt", @@ -377,7 +377,7 @@ "model", ] pruneopts = "" - revision = "bcb74de08d37a417cb6789eec1d6c810040f0470" + revision = "7e9e6cabbd393fc208072eedef99188d0ce788b6" [[projects]] branch = "master" @@ -401,12 +401,12 @@ version = "v1.0.0" [[projects]] - digest = "1:5f48b818f16848d05cf74f4cbdd0cbe9e0dcddb3c459b4c510c6e2c8e1b4dff1" + digest = "1:9d57e200ef5ccc4217fe0a34287308bac652435e7c6513f6263e0493d2245c56" name = "github.com/sirupsen/logrus" packages = ["."] pruneopts = "" - revision = "ad15b42461921f1fb3529b058c6786c6a45d5162" - version = "v1.1.1" + revision = "bcd833dfe83d3cebad139e4a29ed79cb2318bf95" + version = "v1.2.0" [[projects]] digest = "1:d0431c2fd72e39ee43ea7742322abbc200c3e704c9102c5c3c2e2e667095b0ca" @@ -468,15 +468,15 @@ [[projects]] branch = "master" - digest = "1:78f41d38365ccef743e54ed854a2faf73313ba0750c621116a8eeb0395590bd0" + digest = "1:a242f23ceb22423c0a2111d9488a2ab19a2e817111a4f3e2385f5f89a53e619f" name = "golang.org/x/crypto" packages = ["ssh/terminal"] pruneopts = "" - revision = "0c41d7ab0a0ee717d4590a44bcb987dfd9e183eb" + revision = "e4dc69e5b2fd71dcaf8bd5d054eb936deb78d1fa" [[projects]] branch = "master" - digest = "1:6543c75ddc1efc0041202dd49378ee2e5711b7cc82c2845c0437eef6276cc984" + digest = "1:33ff56b9cc51b337d3bf1f5b375c9928221f7cfa72e94773d48482d5437f6468" name = "golang.org/x/net" packages = [ "context", @@ -488,18 +488,18 @@ "idna", ] pruneopts = "" - revision = "04a2e542c03f1d053ab3e4d6e5abcd4b66e2be8e" + revision = "a544f70c90f196e50d198126db0c4cb2b562fec0" [[projects]] branch = "master" - digest = "1:9bbe878c5cef3e193360515704d01ddb34c756e8cfd4abf7166f3f6a2059c553" + digest = "1:fe967eeaf65a031c524f4913123d7ce1b79a17376ca1210d1dc1af51a17aa7d6" name = "golang.org/x/sys" packages = [ "unix", "windows", ] pruneopts = "" - revision = "8f1d3d21f81be6e86ebcd6febee89c89bc50719f" + revision = "3a76605856fddce5718553cbb8bd50ca492a7274" [[projects]] digest = "1:5acd3512b047305d49e8763eef7ba423901e85d5dd2fd1e71778a0ea8de10bd4" @@ -535,7 +535,7 @@ [[projects]] branch = "master" - digest = "1:82ccb6c2d7281541440010c216e7e1eeab3f056f83e3d44911a69fca2e746443" + digest = "1:21bc3190fc22f88afc39585a9da370fed5a092e8970860c7ec09568d04e3ccd8" name = "golang.org/x/tools" packages = [ "go/ast/astutil", @@ -544,7 +544,7 @@ "internal/gopathwalk", ] pruneopts = "" - revision = "6adeb8aab2ded9eb693b831d5fd090c10a6ebdfa" + revision = "e21233ffa6c386fc230b4328493f77af54ff9372" [[projects]] digest = "1:75fb3fcfc73a8c723efde7777b40e8e8ff9babf30d8c56160d01beffea8a95a6" @@ -741,18 +741,17 @@ version = "kubernetes-1.11.2" [[projects]] - branch = "master" - digest = "1:27b5d6ad25d086dda2c482099d4b918a2c3e947f80e0671fa366732daf59afed" + digest = "1:a2f78b8fd86be41f2aa77404245aed4f4f410ac3aabc5f3bd9bd1fcc09076c53" name = "k8s.io/kube-openapi" packages = [ "pkg/common", "pkg/util/proto", ] pruneopts = "" - revision = "e494cc58111187acad93e64529228a2fc0153e39" + revision = "0cf8f7e6ed1d2e3d47d02e3b6e559369af24d803" [[projects]] - digest = "1:6cad2468c5831529b860a01f09032f6ff38202bc4f76332ef7ad74a993e4aa5a" + digest = "1:9e859df288d941d0d740cc923766890a5a3b4d01f9161a26829ad945b17fe750" name = "sigs.k8s.io/controller-runtime" packages = [ "pkg/cache", @@ -782,8 +781,8 @@ "pkg/webhook/types", ] pruneopts = "" - revision = "53fc44b56078cd095b11bd44cfa0288ee4cf718f" - version = "v0.1.4" + revision = "5fd1e9e9fac5261e9ad9d47c375afc014fc31d21" + version = "v0.1.7" [solve-meta] analyzer-name = "dep" diff --git a/pkg/k8sutil/constants.go b/pkg/k8sutil/constants.go index d5b75cd39e..a3b740d15e 100644 --- a/pkg/k8sutil/constants.go +++ b/pkg/k8sutil/constants.go @@ -26,10 +26,4 @@ const ( // OperatorNameEnvVar is the constant for env variable OPERATOR_NAME // wich is the name of the current operator OperatorNameEnvVar = "OPERATOR_NAME" - - // PrometheusMetricsPort defines the port which expose prometheus metrics - PrometheusMetricsPort = 60000 - - // PrometheusMetricsPortName define the port name used in kubernetes deployment and service - PrometheusMetricsPortName = "metrics" ) diff --git a/pkg/k8sutil/k8sutil.go b/pkg/k8sutil/k8sutil.go index 3e6570853a..2e2235f0da 100644 --- a/pkg/k8sutil/k8sutil.go +++ b/pkg/k8sutil/k8sutil.go @@ -45,7 +45,7 @@ func GetOperatorName() (string, error) { } // InitOperatorService return the static service which expose operator metrics -func InitOperatorService() (*v1.Service, error) { +func InitOperatorService(port int32, portName string) (*v1.Service, error) { operatorName, err := GetOperatorName() if err != nil { return nil, err @@ -67,13 +67,13 @@ func InitOperatorService() (*v1.Service, error) { Spec: v1.ServiceSpec{ Ports: []v1.ServicePort{ { - Port: PrometheusMetricsPort, + Port: port, Protocol: v1.ProtocolTCP, TargetPort: intstr.IntOrString{ Type: intstr.String, - StrVal: PrometheusMetricsPortName, + StrVal: portName, }, - Name: PrometheusMetricsPortName, + Name: portName, }, }, Selector: map[string]string{"name": operatorName}, diff --git a/pkg/metrics/constants.go b/pkg/metrics/constants.go new file mode 100644 index 0000000000..09f84b3d24 --- /dev/null +++ b/pkg/metrics/constants.go @@ -0,0 +1,26 @@ +// Copyright 2018 The Operator-SDK 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 metrics + +const ( + // OperatorSDKPrometheusMetricsPortValue defines the port which expose prometheus metrics + OperatorSDKPrometheusMetricsPort = 60000 + + // OperatorSDKPrometheusMetricsPortName define the port name used in kubernetes deployment and service + OperatorSDKPrometheusMetricsPortName = "sdk-metrics" + + // PrometheusMetricsPath + PrometheusMetricsPath = "/metrics" +) diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go new file mode 100644 index 0000000000..a7e5df1553 --- /dev/null +++ b/pkg/metrics/metrics.go @@ -0,0 +1,74 @@ +// Copyright 2018 The Operator-SDK 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 metrics + +import ( + "fmt" + "net/http" + "os" + "strconv" + + "github.com/operator-framework/operator-sdk/pkg/k8sutil" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" + v1 "k8s.io/api/core/v1" +) + +// Setup function registers go and process metrics, serves metrics and exposes Prometheus metrics port. +// It also generates and returns a Kubernetes Service to expose the metrics port. +func Setup() (*v1.Service, error) { + reg := NewPrometheusRegistery() + mux := http.NewServeMux() + HandlerFuncs(mux, reg) + go func() { + err := http.ListenAndServe(":"+strconv.Itoa(OperatorSDKPrometheusMetricsPort), mux) + if err != nil { + fmt.Printf("Serving metrics failed: %v", err) + } + }() + + service, err := k8sutil.InitOperatorService(int32(OperatorSDKPrometheusMetricsPort), OperatorSDKPrometheusMetricsPortName) + if err != nil { + return nil, fmt.Errorf("failed to initialize service object for operator metrics: %v", err) + } + return service, nil +} + +// NewPrometheusRegistery returns a newly created prometheus registry. +// It also registers go collector and process collector metrics. +func NewPrometheusRegistery() *prometheus.Registry { + r := prometheus.NewRegistry() + r.MustRegister( + prometheus.NewGoCollector(), + prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{ + PidFn: func() (int, error) { return os.Getpid(), nil }, + Namespace: "", + ReportErrors: false, + }), + ) + return r +} + +// HandlerFuncs registers the handles the /healthz and /metrics, to be able to serve the prometheus registry. +func HandlerFuncs(mux *http.ServeMux, reg *prometheus.Registry) { + mux.HandleFunc("/healthz", handlerHealthz) + mux.Handle(PrometheusMetricsPath, promhttp.HandlerFor(reg, promhttp.HandlerOpts{ErrorHandling: promhttp.ContinueOnError})) +} + +func handlerHealthz(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("ok")) +} diff --git a/pkg/sdk/service-monitor.go b/pkg/metrics/service-monitor.go similarity index 98% rename from pkg/sdk/service-monitor.go rename to pkg/metrics/service-monitor.go index 6c531ab5ab..860a0069d8 100644 --- a/pkg/sdk/service-monitor.go +++ b/pkg/metrics/service-monitor.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package sdk +package metrics import ( monitoringv1 "github.com/coreos/prometheus-operator/pkg/client/monitoring/v1" diff --git a/pkg/scaffold/ansible/operator.go b/pkg/scaffold/ansible/operator.go index c4031e7eb0..0b4cb4d10d 100644 --- a/pkg/scaffold/ansible/operator.go +++ b/pkg/scaffold/ansible/operator.go @@ -54,7 +54,7 @@ spec: image: REPLACE_IMAGE ports: - containerPort: 60000 - name: metrics + name: sdk-metrics imagePullPolicy: Always env: - name: WATCH_NAMESPACE diff --git a/pkg/scaffold/cmd.go b/pkg/scaffold/cmd.go index 8410d16e3a..2957833fbc 100644 --- a/pkg/scaffold/cmd.go +++ b/pkg/scaffold/cmd.go @@ -37,6 +37,7 @@ func (s *Cmd) GetInput() (input.Input, error) { const cmdTmpl = `package main import ( + "context" "flag" "log" "runtime" @@ -45,6 +46,7 @@ import ( "{{ .Repo }}/pkg/controller" "github.com/operator-framework/operator-sdk/pkg/k8sutil" + "github.com/operator-framework/operator-sdk/pkg/metrics" sdkVersion "github.com/operator-framework/operator-sdk/version" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" "sigs.k8s.io/controller-runtime/pkg/client/config" @@ -91,6 +93,14 @@ func main() { log.Fatal(err) } + // Create metric service and start the metrics registry + s, err := metrics.Setup() + if err != nil { + log.Println(err) + } + client := mgr.GetClient() + client.Create(context.TODO(), s) + log.Print("Starting the Cmd.") // Start the Cmd diff --git a/pkg/scaffold/cmd_test.go b/pkg/scaffold/cmd_test.go index 94e5d4f882..782130e35b 100644 --- a/pkg/scaffold/cmd_test.go +++ b/pkg/scaffold/cmd_test.go @@ -34,13 +34,16 @@ func TestCmd(t *testing.T) { const cmdExp = `package main import ( + "context" "flag" "log" "runtime" "github.com/example-inc/app-operator/pkg/apis" "github.com/example-inc/app-operator/pkg/controller" + "github.com/operator-framework/operator-sdk/pkg/k8sutil" + "github.com/operator-framework/operator-sdk/pkg/metrics" sdkVersion "github.com/operator-framework/operator-sdk/version" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" "sigs.k8s.io/controller-runtime/pkg/client/config" @@ -87,6 +90,14 @@ func main() { log.Fatal(err) } + // Create metric service and start the metrics registry + s, err := metrics.Setup() + if err != nil { + log.Println(err) + } + client := mgr.GetClient() + client.Create(context.TODO(), s) + log.Print("Starting the Cmd.") // Start the Cmd diff --git a/pkg/scaffold/controller_kind_test.go b/pkg/scaffold/controller_kind_test.go index 020dd2ba4e..bcbb3c2cf6 100644 --- a/pkg/scaffold/controller_kind_test.go +++ b/pkg/scaffold/controller_kind_test.go @@ -42,6 +42,7 @@ import ( "log" appv1alpha1 "github.com/example-inc/app-operator/pkg/apis/app/v1alpha1" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/pkg/scaffold/gopkgtoml.go b/pkg/scaffold/gopkgtoml.go index 108ec4e2d4..2845219ccd 100644 --- a/pkg/scaffold/gopkgtoml.go +++ b/pkg/scaffold/gopkgtoml.go @@ -73,6 +73,10 @@ required = [ name = "sigs.k8s.io/controller-runtime" version = "v0.1.4" +[[override]] + name = "github.com/coreos/prometheus-operator" + version = "0.24.0" + [[constraint]] name = "github.com/operator-framework/operator-sdk" # The version rule is used for a specific release and the master branch for in between releases. diff --git a/pkg/scaffold/gopkgtoml_test.go b/pkg/scaffold/gopkgtoml_test.go index 42e2c97b13..7a8741d3e5 100644 --- a/pkg/scaffold/gopkgtoml_test.go +++ b/pkg/scaffold/gopkgtoml_test.go @@ -72,6 +72,10 @@ required = [ name = "sigs.k8s.io/controller-runtime" version = "v0.1.4" +[[override]] + name = "github.com/coreos/prometheus-operator" + version = "0.24.0" + [[constraint]] name = "github.com/operator-framework/operator-sdk" # The version rule is used for a specific release and the master branch for in between releases. diff --git a/pkg/scaffold/operator.go b/pkg/scaffold/operator.go index f89eaf8d14..78280747b5 100644 --- a/pkg/scaffold/operator.go +++ b/pkg/scaffold/operator.go @@ -55,7 +55,7 @@ spec: image: REPLACE_IMAGE ports: - containerPort: 60000 - name: metrics + name: sdk-metrics command: - {{.ProjectName}} imagePullPolicy: Always diff --git a/pkg/scaffold/operator_test.go b/pkg/scaffold/operator_test.go index 18cd1a99d1..7f6a6ff364 100644 --- a/pkg/scaffold/operator_test.go +++ b/pkg/scaffold/operator_test.go @@ -52,7 +52,7 @@ spec: image: REPLACE_IMAGE ports: - containerPort: 60000 - name: metrics + name: sdk-metrics command: - app-operator imagePullPolicy: Always diff --git a/pkg/sdk/internal/metrics/metrics.go b/pkg/sdk/internal/metrics/metrics.go deleted file mode 100644 index dacdbfb18d..0000000000 --- a/pkg/sdk/internal/metrics/metrics.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2018 The Operator-SDK 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 metrics - -import ( - "sync" - - prom "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" -) - -const ( - eventTypesMetricName = "operator_event_types_total" - reconcileResultsMetricName = "operator_reconcile_results_total" - // EventTypeLabel - metric label for event type - EventTypeLabel = "type" - // EventTypeAdd - addition event label - EventTypeAdd = "add" - // EventTypeDelete - deletion event label - EventTypeDelete = "delete" - // EventTypeUpdate - update event label - EventTypeUpdate = "update" - // ReconcileResultLabel - metric label for event result - ReconcileResultLabel = "result" - // ReconcileResultSuccess - successful event label - ReconcileResultSuccess = "success" - // ReconcileResultFailure - failed event label - ReconcileResultFailure = "failure" -) - -var ( - once sync.Once -) - -// Collector - metric collector for all the metrics the sdk will watch -type Collector struct { - EventType *prom.CounterVec - ReconcileResult *prom.CounterVec -} - -// New - create a new Collector -func New() *Collector { - return &Collector{ - EventType: prom.NewCounterVec(prom.CounterOpts{ - Name: eventTypesMetricName, - Help: "events that the sdk has recieved, segmented by type(add or delete or update)", - }, []string{EventTypeLabel}), - ReconcileResult: prom.NewCounterVec(prom.CounterOpts{ - Name: reconcileResultsMetricName, - Help: "reconcilation events that the sdk has processed segmented by result(success or failure)", - }, []string{ReconcileResultLabel}), - } -} - -// RegisterCollector - add collector safely to prometheus -func RegisterCollector(c *Collector) { - once.Do(func() { - err := prom.Register(c) - if err != nil { - logrus.Errorf("unable to register collector with prometheus: %v", err) - } - }) -} - -// Describe returns all the descriptions of the collector -func (c *Collector) Describe(ch chan<- *prom.Desc) { - c.EventType.Describe(ch) - c.ReconcileResult.Describe(ch) - -} - -// Collect returns the current state of the metrics -func (c *Collector) Collect(ch chan<- prom.Metric) { - c.EventType.Collect(ch) - c.ReconcileResult.Collect(ch) -} diff --git a/pkg/sdk/metrics.go b/pkg/sdk/metrics.go deleted file mode 100644 index 2e603e9735..0000000000 --- a/pkg/sdk/metrics.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2018 The Operator-SDK 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 sdk - -import ( - "context" - "net/http" - "strconv" - - "github.com/operator-framework/operator-sdk/pkg/k8sutil" - "github.com/prometheus/client_golang/prometheus/promhttp" - "github.com/sirupsen/logrus" - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/errors" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/config" -) - -// ExposeMetricsPort generate a Kubernetes Service to expose metrics port -func ExposeMetricsPort() *v1.Service { - http.Handle("/"+k8sutil.PrometheusMetricsPortName, promhttp.Handler()) - go http.ListenAndServe(":"+strconv.Itoa(k8sutil.PrometheusMetricsPort), nil) - - service, err := k8sutil.InitOperatorService() - if err != nil { - logrus.Errorf("failed to initialize service object for operator metrics: %v", err) - return nil - } - kubeconfig, err := config.GetConfig() - if err != nil { - panic(err) - } - runtimeClient, err := client.New(kubeconfig, client.Options{}) - if err != nil { - panic(err) - } - err = runtimeClient.Create(context.TODO(), service) - if err != nil && !errors.IsAlreadyExists(err) { - logrus.Errorf("failed to create service for operator metrics: %v", err) - return nil - } - logrus.Infof("Metrics service %s created", service.Name) - return service -}