diff --git a/dm/dumpling/dumpling.go b/dm/dumpling/dumpling.go index e37acef9066..7f6c4f780ee 100644 --- a/dm/dumpling/dumpling.go +++ b/dm/dumpling/dumpling.go @@ -30,7 +30,6 @@ import ( "go.uber.org/atomic" "go.uber.org/zap" - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/engine/pkg/promutil" "github.com/pingcap/tiflow/dm/config" @@ -81,8 +80,7 @@ func (m *Dumpling) Init(ctx context.Context) error { // will register and deregister metrics, so we must use NoopRegistry // to avoid duplicated registration. m.metricProxies = &metricProxies{} - m.metricProxies.dumplingExitWithErrorCounter = metricsproxy.NewCounterVec( - m.cfg.MetricsFactory, + m.metricProxies.dumplingExitWithErrorCounter = m.cfg.MetricsFactory.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "dumpling", diff --git a/dm/dumpling/metrics.go b/dm/dumpling/metrics.go index a1b206dc051..08095e0fcb4 100644 --- a/dm/dumpling/metrics.go +++ b/dm/dumpling/metrics.go @@ -14,18 +14,18 @@ package dumpling import ( - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/engine/pkg/promutil" "github.com/prometheus/client_golang/prometheus" ) type metricProxies struct { - dumplingExitWithErrorCounter *metricsproxy.CounterVecProxy + dumplingExitWithErrorCounter *prometheus.CounterVec } +var f = &promutil.PromFactory{} + var defaultMetricProxies = &metricProxies{ - dumplingExitWithErrorCounter: metricsproxy.NewCounterVec( - &promutil.PromFactory{}, + dumplingExitWithErrorCounter: f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "dumpling", @@ -41,5 +41,5 @@ func RegisterMetrics(registry *prometheus.Registry) { func (m *Dumpling) removeLabelValuesWithTaskInMetrics(task, source string) { labels := prometheus.Labels{"task": task, "source_id": source} - m.metricProxies.dumplingExitWithErrorCounter.DeleteAllAboutLabels(labels) + m.metricProxies.dumplingExitWithErrorCounter.DeletePartialMatch(labels) } diff --git a/dm/loader/metrics.go b/dm/loader/metrics.go index f47607508e8..efedc1b9a29 100644 --- a/dm/loader/metrics.go +++ b/dm/loader/metrics.go @@ -16,13 +16,12 @@ package loader import ( "github.com/pingcap/tiflow/engine/pkg/promutil" "github.com/prometheus/client_golang/prometheus" - - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" ) var ( + f = &promutil.PromFactory{} // should error. - tidbExecutionErrorCounter = metricsproxy.NewCounterVec(&promutil.PromFactory{}, + tidbExecutionErrorCounter = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "loader", @@ -30,7 +29,7 @@ var ( Help: "Total count of tidb execution errors", }, []string{"task", "source_id"}) - queryHistogram = metricsproxy.NewHistogramVec(&promutil.PromFactory{}, + queryHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "loader", @@ -39,7 +38,7 @@ var ( Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"task", "source_id"}) - txnHistogram = metricsproxy.NewHistogramVec(&promutil.PromFactory{}, + txnHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "loader", @@ -48,7 +47,7 @@ var ( Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"task", "worker", "source_id", "target_schema", "target_table"}) - stmtHistogram = metricsproxy.NewHistogramVec(&promutil.PromFactory{}, + stmtHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "loader", @@ -57,7 +56,7 @@ var ( Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"type", "task"}) - dataFileGauge = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + dataFileGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "loader", @@ -65,7 +64,7 @@ var ( Help: "data files in total", }, []string{"task", "source_id"}) - tableGauge = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + tableGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "loader", @@ -73,7 +72,7 @@ var ( Help: "tables in total", }, []string{"task", "source_id"}) - dataSizeGauge = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + dataSizeGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "loader", @@ -81,7 +80,7 @@ var ( Help: "data size in total", }, []string{"task", "source_id"}) - progressGauge = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + progressGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "loader", @@ -90,7 +89,7 @@ var ( }, []string{"task", "source_id"}) // should alert. - loaderExitWithErrorCounter = metricsproxy.NewCounterVec(&promutil.PromFactory{}, + loaderExitWithErrorCounter = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "loader", @@ -98,7 +97,7 @@ var ( Help: "counter for loader exits with error", }, []string{"task", "source_id"}) - remainingTimeGauge = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + remainingTimeGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "loader", @@ -122,14 +121,14 @@ func RegisterMetrics(registry *prometheus.Registry) { } func (l *Loader) removeLabelValuesWithTaskInMetrics(task string) { - tidbExecutionErrorCounter.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - txnHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - queryHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - stmtHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - dataFileGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - tableGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - dataSizeGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - progressGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - loaderExitWithErrorCounter.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - remainingTimeGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) + tidbExecutionErrorCounter.DeletePartialMatch(prometheus.Labels{"task": task}) + txnHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + queryHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + stmtHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + dataFileGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + tableGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + dataSizeGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + progressGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + loaderExitWithErrorCounter.DeletePartialMatch(prometheus.Labels{"task": task}) + remainingTimeGauge.DeletePartialMatch(prometheus.Labels{"task": task}) } diff --git a/dm/master/metrics/metrics.go b/dm/master/metrics/metrics.go index 8c2ca8aa017..29805c8e41d 100644 --- a/dm/master/metrics/metrics.go +++ b/dm/master/metrics/metrics.go @@ -20,8 +20,6 @@ import ( cpu "github.com/pingcap/tidb-tools/pkg/utils" "github.com/pingcap/tiflow/engine/pkg/promutil" "github.com/prometheus/client_golang/prometheus" - - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" ) // used for ddlPendingCounter, no "Resolved" lock because they will be @@ -48,7 +46,8 @@ const ( ) var ( - workerState = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + f = &promutil.PromFactory{} + workerState = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "master", @@ -64,7 +63,7 @@ var ( Help: "the cpu usage of master", }) - ddlPendingCounter = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + ddlPendingCounter = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "master", @@ -72,7 +71,7 @@ var ( Help: "number of pending DDL in different states, Un-synced (waiting all upstream), Synced (all upstream finished, waiting all downstream)", }, []string{"task", "type"}) - ddlErrCounter = metricsproxy.NewCounterVec(&promutil.PromFactory{}, + ddlErrCounter = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "master", @@ -80,7 +79,7 @@ var ( Help: "number of shard DDL lock/operation error", }, []string{"task", "type"}) - workerEventErrCounter = metricsproxy.NewCounterVec(&promutil.PromFactory{}, + workerEventErrCounter = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "master", @@ -137,7 +136,7 @@ func ReportWorkerStage(name string, state float64) { // RemoveWorkerState cleans state of deleted worker. func RemoveWorkerState(name string) { - workerState.DeleteAllAboutLabels(prometheus.Labels{"worker": name}) + workerState.DeletePartialMatch(prometheus.Labels{"worker": name}) } // ReportDDLPending inc/dec by 1 to ddlPendingCounter. @@ -152,7 +151,7 @@ func ReportDDLPending(task, oldStatus, newStatus string) { // RemoveDDLPending removes all counter of this task. func RemoveDDLPending(task string) { - ddlPendingCounter.DeleteAllAboutLabels(prometheus.Labels{"task": task}) + ddlPendingCounter.DeletePartialMatch(prometheus.Labels{"task": task}) } // ReportDDLError is a setter for ddlErrCounter. diff --git a/dm/pkg/conn/baseconn.go b/dm/pkg/conn/baseconn.go index 08f1c664753..3620e231b59 100644 --- a/dm/pkg/conn/baseconn.go +++ b/dm/pkg/conn/baseconn.go @@ -23,11 +23,11 @@ import ( gmysql "github.com/go-mysql-org/go-mysql/mysql" "github.com/go-sql-driver/mysql" "github.com/pingcap/failpoint" + "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" tcontext "github.com/pingcap/tiflow/dm/pkg/context" "github.com/pingcap/tiflow/dm/pkg/log" - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/dm/pkg/retry" "github.com/pingcap/tiflow/dm/pkg/terror" "github.com/pingcap/tiflow/dm/pkg/utils" @@ -117,7 +117,7 @@ func (conn *BaseConn) QuerySQL(tctx *tcontext.Context, query string, args ...int // return // 1. failed: (the index of sqls executed error, error) // 2. succeed: (len(sqls), nil). -func (conn *BaseConn) ExecuteSQLWithIgnoreError(tctx *tcontext.Context, hVec *metricsproxy.HistogramVecProxy, task string, ignoreErr func(error) bool, queries []string, args ...[]interface{}) (int, error) { +func (conn *BaseConn) ExecuteSQLWithIgnoreError(tctx *tcontext.Context, hVec *prometheus.HistogramVec, task string, ignoreErr func(error) bool, queries []string, args ...[]interface{}) (int, error) { // inject an error to trigger retry, this should be placed before the real execution of the SQL statement. failpoint.Inject("retryableError", func(val failpoint.Value) { if mark, ok := val.(string); ok { @@ -216,7 +216,7 @@ func (conn *BaseConn) ExecuteSQLWithIgnoreError(tctx *tcontext.Context, hVec *me // return // 1. failed: (the index of sqls executed error, error) // 2. succeed: (len(sqls), nil). -func (conn *BaseConn) ExecuteSQL(tctx *tcontext.Context, hVec *metricsproxy.HistogramVecProxy, task string, queries []string, args ...[]interface{}) (int, error) { +func (conn *BaseConn) ExecuteSQL(tctx *tcontext.Context, hVec *prometheus.HistogramVec, task string, queries []string, args ...[]interface{}) (int, error) { return conn.ExecuteSQLWithIgnoreError(tctx, hVec, task, nil, queries, args...) } diff --git a/dm/pkg/conn/baseconn_test.go b/dm/pkg/conn/baseconn_test.go index 366b5f45132..000b1fdb820 100644 --- a/dm/pkg/conn/baseconn_test.go +++ b/dm/pkg/conn/baseconn_test.go @@ -19,7 +19,6 @@ import ( "testing" tcontext "github.com/pingcap/tiflow/dm/pkg/context" - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/dm/pkg/retry" "github.com/pingcap/tiflow/dm/pkg/terror" "github.com/pingcap/tiflow/engine/pkg/promutil" @@ -37,7 +36,9 @@ var _ = Suite(&testBaseConnSuite{}) type testBaseConnSuite struct{} -var testStmtHistogram = metricsproxy.NewHistogramVec(&promutil.PromFactory{}, +var f = &promutil.PromFactory{} + +var testStmtHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "conn", diff --git a/dm/pkg/metricsproxy/countervec.go b/dm/pkg/metricsproxy/countervec.go deleted file mode 100644 index 7a41c96f6c8..00000000000 --- a/dm/pkg/metricsproxy/countervec.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "sync" - - "github.com/pingcap/tiflow/engine/pkg/promutil" - "github.com/prometheus/client_golang/prometheus" -) - -// CounterVecProxy to proxy prometheus.CounterVec. -type CounterVecProxy struct { - mu sync.Mutex - - LabelNamesIndex map[string]int - Labels map[string][]string - *prometheus.CounterVec -} - -// NewCounterVec creates a new CounterVec based on the provided CounterOpts and -// partitioned by the given label names. -func NewCounterVec(f promutil.Factory, opts prometheus.CounterOpts, labelNames []string) *CounterVecProxy { - counterVecProxy := &CounterVecProxy{ - LabelNamesIndex: make(map[string]int, len(labelNames)), - Labels: make(map[string][]string), - CounterVec: f.NewCounterVec(opts, labelNames), - } - for idx, v := range labelNames { - counterVecProxy.LabelNamesIndex[v] = idx - } - return counterVecProxy -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// -// myVec.WithLabelValues("404", "GET").Add(42) -func (c *CounterVecProxy) WithLabelValues(lvs ...string) prometheus.Counter { - if len(lvs) > 0 { - noteLabelsInMetricsProxy(c, lvs) - } - return c.CounterVec.WithLabelValues(lvs...) -} - -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) -func (c *CounterVecProxy) With(labels prometheus.Labels) prometheus.Counter { - if len(labels) > 0 { - values := make([]string, len(labels)) - labelNameIndex := c.GetLabelNamesIndex() - for k, v := range labels { - values[labelNameIndex[k]] = v - } - noteLabelsInMetricsProxy(c, values) - } - - return c.CounterVec.With(labels) -} - -// DeleteAllAboutLabels Remove all labelsValue with these labels. -func (c *CounterVecProxy) DeleteAllAboutLabels(labels prometheus.Labels) bool { - if len(labels) == 0 { - return false - } - c.mu.Lock() - defer c.mu.Unlock() - return findAndDeleteLabelsInMetricsProxy(c, labels) -} - -// GetLabelNamesIndex to support get CounterVecProxy's LabelNames when you use Proxy object. -func (c *CounterVecProxy) GetLabelNamesIndex() map[string]int { - return c.LabelNamesIndex -} - -// GetLabels to support get CounterVecProxy's Labels when you use Proxy object. -func (c *CounterVecProxy) GetLabels() map[string][]string { - return c.Labels -} - -// SetLabel to support set CounterVecProxy's Label when you use Proxy object. -func (c *CounterVecProxy) SetLabel(key string, vals []string) { - c.mu.Lock() - defer c.mu.Unlock() - c.Labels[key] = vals -} - -// vecDelete to support delete CounterVecProxy's Labels when you use Proxy object. -func (c *CounterVecProxy) vecDelete(labels prometheus.Labels) bool { - return c.CounterVec.Delete(labels) -} diff --git a/dm/pkg/metricsproxy/countervec_test.go b/dm/pkg/metricsproxy/countervec_test.go deleted file mode 100644 index f7a8b5dd29b..00000000000 --- a/dm/pkg/metricsproxy/countervec_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "math/rand" - "time" - - . "github.com/pingcap/check" - "github.com/pingcap/tiflow/engine/pkg/promutil" - - "github.com/prometheus/client_golang/prometheus" -) - -func (t *testMetricsProxySuite) TestCounterVecProxy(c *C) { - rand.Seed(time.Now().UnixNano()) - for _, oneCase := range testCases { - counter := NewCounterVec(&promutil.PromFactory{}, - prometheus.CounterOpts{ - Namespace: "dm", - Subsystem: "metricsProxy", - Name: "Test_Counter", - Help: "dm counter metrics proxy test", - ConstLabels: nil, - }, oneCase.LabelsNames) - for _, aArgs := range oneCase.AddArgs { - if rand.Intn(199)%2 == 0 { - counter.WithLabelValues(aArgs...).Add(float64(rand.Intn(199))) - } else { - labels := make(prometheus.Labels) - for k, labelName := range oneCase.LabelsNames { - labels[labelName] = aArgs[k] - } - counter.With(labels) - } - } - for _, dArgs := range oneCase.DeleteArgs { - counter.DeleteAllAboutLabels(dArgs) - } - - cOutput := make(chan prometheus.Metric, len(oneCase.AddArgs)*3) - - counter.Collect(cOutput) - - c.Assert(len(cOutput), Equals, oneCase.WantResLength) - } -} diff --git a/dm/pkg/metricsproxy/gaugevec.go b/dm/pkg/metricsproxy/gaugevec.go deleted file mode 100644 index 76eee4dc148..00000000000 --- a/dm/pkg/metricsproxy/gaugevec.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "sync" - - "github.com/pingcap/tiflow/engine/pkg/promutil" - "github.com/prometheus/client_golang/prometheus" -) - -// GaugeVecProxy to proxy prometheus.GaugeVec. -type GaugeVecProxy struct { - mu sync.Mutex - - LabelNamesIndex map[string]int - Labels map[string][]string - *prometheus.GaugeVec -} - -// NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and -// partitioned by the given label names. -func NewGaugeVec(f promutil.Factory, opts prometheus.GaugeOpts, labelNames []string) *GaugeVecProxy { - gaugeVecProxy := &GaugeVecProxy{ - LabelNamesIndex: make(map[string]int, len(labelNames)), - Labels: make(map[string][]string), - GaugeVec: f.NewGaugeVec(opts, labelNames), - } - for idx, v := range labelNames { - gaugeVecProxy.LabelNamesIndex[v] = idx - } - return gaugeVecProxy -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// -// myVec.WithLabelValues("404", "GET").Add(42) -func (c *GaugeVecProxy) WithLabelValues(lvs ...string) prometheus.Gauge { - if len(lvs) > 0 { - noteLabelsInMetricsProxy(c, lvs) - } - return c.GaugeVec.WithLabelValues(lvs...) -} - -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Add(42) -func (c *GaugeVecProxy) With(labels prometheus.Labels) prometheus.Gauge { - if len(labels) > 0 { - values := make([]string, len(labels)) - labelNameIndex := c.GetLabelNamesIndex() - for k, v := range labels { - values[labelNameIndex[k]] = v - } - noteLabelsInMetricsProxy(c, values) - } - - return c.GaugeVec.With(labels) -} - -// DeleteAllAboutLabels Remove all labelsValue with these labels. -func (c *GaugeVecProxy) DeleteAllAboutLabels(labels prometheus.Labels) bool { - if len(labels) == 0 { - return false - } - c.mu.Lock() - defer c.mu.Unlock() - return findAndDeleteLabelsInMetricsProxy(c, labels) -} - -// GetLabelNamesIndex to support get GaugeVecProxy's LabelNames when you use Proxy object. -func (c *GaugeVecProxy) GetLabelNamesIndex() map[string]int { - return c.LabelNamesIndex -} - -// GetLabels to support get GaugeVecProxy's Labels when you use Proxy object. -func (c *GaugeVecProxy) GetLabels() map[string][]string { - return c.Labels -} - -// SetLabel to support set GaugeVecProxy's Label when you use Proxy object. -func (c *GaugeVecProxy) SetLabel(key string, vals []string) { - c.mu.Lock() - defer c.mu.Unlock() - c.Labels[key] = vals -} - -// vecDelete to support delete GaugeVecProxy's Labels when you use Proxy object. -func (c *GaugeVecProxy) vecDelete(labels prometheus.Labels) bool { - return c.GaugeVec.Delete(labels) -} diff --git a/dm/pkg/metricsproxy/gaugevec_test.go b/dm/pkg/metricsproxy/gaugevec_test.go deleted file mode 100644 index b95c3e7a429..00000000000 --- a/dm/pkg/metricsproxy/gaugevec_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "math/rand" - "time" - - . "github.com/pingcap/check" - "github.com/pingcap/tiflow/engine/pkg/promutil" - - "github.com/prometheus/client_golang/prometheus" -) - -func (t *testMetricsProxySuite) TestGaugeVecProxy(c *C) { - rand.Seed(time.Now().UnixNano()) - for _, oneCase := range testCases { - gauge := NewGaugeVec(&promutil.PromFactory{}, - prometheus.GaugeOpts{ - Namespace: "dm", - Subsystem: "metricsProxy", - Name: "Test_Gauge", - Help: "dm gauge metrics proxy test", - ConstLabels: nil, - }, oneCase.LabelsNames) - for _, aArgs := range oneCase.AddArgs { - if rand.Intn(199)%2 == 0 { - gauge.WithLabelValues(aArgs...).Add(float64(rand.Intn(199))) - } else { - labels := make(prometheus.Labels) - for k, labelName := range oneCase.LabelsNames { - labels[labelName] = aArgs[k] - } - gauge.With(labels) - } - } - for _, dArgs := range oneCase.DeleteArgs { - gauge.DeleteAllAboutLabels(dArgs) - } - - cOutput := make(chan prometheus.Metric, len(oneCase.AddArgs)*3) - - gauge.Collect(cOutput) - - c.Assert(len(cOutput), Equals, oneCase.WantResLength) - } -} diff --git a/dm/pkg/metricsproxy/histogramvec.go b/dm/pkg/metricsproxy/histogramvec.go deleted file mode 100644 index 58905e276ab..00000000000 --- a/dm/pkg/metricsproxy/histogramvec.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "sync" - - "github.com/pingcap/tiflow/engine/pkg/promutil" - "github.com/prometheus/client_golang/prometheus" -) - -// HistogramVecProxy to proxy prometheus.HistogramVec. -type HistogramVecProxy struct { - mu sync.Mutex - - LabelNamesIndex map[string]int - Labels map[string][]string - *prometheus.HistogramVec -} - -// NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and -// partitioned by the given label names. -func NewHistogramVec(f promutil.Factory, opts prometheus.HistogramOpts, labelNames []string) *HistogramVecProxy { - histogramVecProxy := &HistogramVecProxy{ - LabelNamesIndex: make(map[string]int), - Labels: make(map[string][]string), - HistogramVec: f.NewHistogramVec(opts, labelNames), - } - for idx, v := range labelNames { - histogramVecProxy.LabelNamesIndex[v] = idx - } - return histogramVecProxy -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// -// myVec.WithLabelValues("404", "GET").Observe(42.21) -func (c *HistogramVecProxy) WithLabelValues(lvs ...string) prometheus.Observer { - if len(lvs) > 0 { - noteLabelsInMetricsProxy(c, lvs) - } - return c.HistogramVec.WithLabelValues(lvs...) -} - -// With works as GetMetricWith but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) -func (c *HistogramVecProxy) With(labels prometheus.Labels) prometheus.Observer { - if len(labels) > 0 { - values := make([]string, len(labels)) - labelNameIndex := c.GetLabelNamesIndex() - for k, v := range labels { - values[labelNameIndex[k]] = v - } - noteLabelsInMetricsProxy(c, values) - } - - return c.HistogramVec.With(labels) -} - -// DeleteAllAboutLabels Remove all labelsValue with these labels. -func (c *HistogramVecProxy) DeleteAllAboutLabels(labels prometheus.Labels) bool { - if len(labels) == 0 { - return false - } - c.mu.Lock() - defer c.mu.Unlock() - return findAndDeleteLabelsInMetricsProxy(c, labels) -} - -// GetLabelNamesIndex to support get HistogramVecProxy's LabelNames when you use Proxy object. -func (c *HistogramVecProxy) GetLabelNamesIndex() map[string]int { - return c.LabelNamesIndex -} - -// GetLabels to support get HistogramVecProxy's Labels when you use Proxy object. -func (c *HistogramVecProxy) GetLabels() map[string][]string { - return c.Labels -} - -// SetLabel to support set HistogramVecProxy's Label when you use Proxy object. -func (c *HistogramVecProxy) SetLabel(key string, vals []string) { - c.mu.Lock() - defer c.mu.Unlock() - c.Labels[key] = vals -} - -// vecDelete to support delete HistogramVecProxy's Labels when you use Proxy object. -func (c *HistogramVecProxy) vecDelete(labels prometheus.Labels) bool { - return c.HistogramVec.Delete(labels) -} diff --git a/dm/pkg/metricsproxy/histogramvec_test.go b/dm/pkg/metricsproxy/histogramvec_test.go deleted file mode 100644 index 41509f32a45..00000000000 --- a/dm/pkg/metricsproxy/histogramvec_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "math/rand" - "time" - - . "github.com/pingcap/check" - "github.com/pingcap/tiflow/engine/pkg/promutil" - - "github.com/prometheus/client_golang/prometheus" -) - -func (t *testMetricsProxySuite) TestHistogramVecProxy(c *C) { - rand.Seed(time.Now().UnixNano()) - for _, oneCase := range testCases { - histogram := NewHistogramVec(&promutil.PromFactory{}, - prometheus.HistogramOpts{ - Namespace: "dm", - Subsystem: "metricsProxy", - Name: "Test_Histogram", - Help: "dm histogram metrics proxy test", - ConstLabels: nil, - }, oneCase.LabelsNames) - for _, aArgs := range oneCase.AddArgs { - if rand.Intn(199)%2 == 0 { - histogram.WithLabelValues(aArgs...).Observe(float64(rand.Intn(199))) - } else { - labels := make(prometheus.Labels) - for k, labelName := range oneCase.LabelsNames { - labels[labelName] = aArgs[k] - } - histogram.With(labels) - } - } - for _, dArgs := range oneCase.DeleteArgs { - histogram.DeleteAllAboutLabels(dArgs) - } - - cOutput := make(chan prometheus.Metric, len(oneCase.AddArgs)*3) - - histogram.Collect(cOutput) - - c.Assert(len(cOutput), Equals, oneCase.WantResLength) - } -} diff --git a/dm/pkg/metricsproxy/proxy.go b/dm/pkg/metricsproxy/proxy.go deleted file mode 100644 index 7190bd92bfb..00000000000 --- a/dm/pkg/metricsproxy/proxy.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy - -import ( - "strings" - - "github.com/prometheus/client_golang/prometheus" -) - -// Proxy Interface. -type Proxy interface { - GetLabelNamesIndex() map[string]int - GetLabels() map[string][]string - SetLabel(string, []string) - vecDelete(prometheus.Labels) bool -} - -// noteLabelsInMetricsProxy common function in Proxy. -func noteLabelsInMetricsProxy(proxy Proxy, values []string) { - key := strings.Join(values, ",") - proxy.SetLabel(key, values) -} - -// findAndDeleteLabelsInMetricsProxy common function in Proxy. -func findAndDeleteLabelsInMetricsProxy(proxy Proxy, labels prometheus.Labels) bool { - var ( - deleteLabelsList = make([]map[string]string, 0) - res = true - ) - - labelNamesIndex := proxy.GetLabelNamesIndex() - inputLabelsLen := len(labels) - for _, ls := range proxy.GetLabels() { - t := 0 - for k := range labels { - if ls[labelNamesIndex[k]] == labels[k] { - t++ - } - } - if t == inputLabelsLen { - deleteLabel := make(map[string]string, len(labelNamesIndex)) - for labelKey, idx := range labelNamesIndex { - deleteLabel[labelKey] = ls[idx] - } - deleteLabelsList = append(deleteLabelsList, deleteLabel) - } - } - - for _, deleteLabels := range deleteLabelsList { - res = proxy.vecDelete(deleteLabels) && res - } - return res -} diff --git a/dm/pkg/metricsproxy/proxy_test.go b/dm/pkg/metricsproxy/proxy_test.go deleted file mode 100644 index 42ec62b799f..00000000000 --- a/dm/pkg/metricsproxy/proxy_test.go +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy - -import ( - "testing" - - . "github.com/pingcap/check" -) - -var _ = Suite(&testMetricsProxySuite{}) - -func TestSuite(t *testing.T) { - TestingT(t) -} - -type testMetricsProxySuite struct{} - -type testCase struct { - LabelsNames []string - AddArgs [][]string - DeleteArgs []map[string]string - WantResLength int -} - -var testCases = []testCase{ - { - LabelsNames: []string{ - "task", - "name", - }, - AddArgs: [][]string{ - {"task1", "name1"}, - {"task2", "name2"}, - {"task3", "name3"}, - {"task4", "name4"}, - {"task5", "name5"}, - {"task6", "name6"}, - {"task7", "name7"}, - {"task8", "name7"}, - {"task8", "name9"}, - {"task10", "name10"}, - }, - DeleteArgs: []map[string]string{ - {"task": "task1", "name": "name1"}, - {"task": "task1", "name": "name1"}, - {"task": "task2"}, - {"task": "task8"}, - {"name": "name10"}, - }, - WantResLength: 5, - }, - { - LabelsNames: []string{ - "task", - }, - AddArgs: [][]string{ - {"task1"}, - {"task2"}, - {"task3"}, - {"task4"}, - {"task5"}, - {"task6"}, - {"task7"}, - }, - DeleteArgs: []map[string]string{ - {"task": "task2"}, - {"task": "task8"}, - }, - WantResLength: 6, - }, - { - LabelsNames: []string{ - "type", - "task", - "queueNo", - }, - AddArgs: [][]string{ - {"flash", "task2", "No.2"}, - {"flash", "task3", "No.3"}, - {"flash", "task4", "No.4"}, - {"flash", "task5", "No.5"}, - {"flash", "task6", "No.6"}, - }, - DeleteArgs: []map[string]string{ - {"type": "flash"}, - }, - WantResLength: 0, - }, - { - LabelsNames: []string{ - "type", - "task", - "queueNo", - }, - AddArgs: [][]string{ - {"flash", "task2", "No.2"}, - {"flash", "task2", "No.3"}, - {"flash", "task4", "No.4"}, - {"flash", "task5", "No.4"}, - {"start", "task6", "No.6"}, - }, - DeleteArgs: []map[string]string{ - {"type": "start"}, - {"type": "flash", "task": "task2", "queueNo": "No.3"}, - {"type": "start", "task": "task2", "queueNo": "No.4"}, - }, - WantResLength: 3, - }, - { - LabelsNames: []string{ - "type", - "task", - "queueNo", - }, - AddArgs: [][]string{ - {"flash", "task2", "No.2"}, - {"flash", "task2", "No.3"}, - {"flash", "task4", "No.4"}, - {"flash", "task5", "No.4"}, - {"start", "task6", "No.6"}, - }, - DeleteArgs: []map[string]string{ - {}, - }, - WantResLength: 5, - }, -} diff --git a/dm/pkg/metricsproxy/summaryvec.go b/dm/pkg/metricsproxy/summaryvec.go deleted file mode 100644 index dc75b0c4a88..00000000000 --- a/dm/pkg/metricsproxy/summaryvec.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "sync" - - "github.com/prometheus/client_golang/prometheus" -) - -// SummaryVecProxy to proxy prometheus.SummaryVec. -type SummaryVecProxy struct { - mu sync.Mutex - - LabelNamesIndex map[string]int - Labels map[string][]string - *prometheus.SummaryVec -} - -// NewSummaryVec creates a new SummaryVec based on the provided SummaryOpts and -// partitioned by the given label names. -// -// Due to the way a Summary is represented in the Prometheus text format and how -// it is handled by the Prometheus server internally, “quantile” is an illegal -// label name. NewSummaryVec will panic if this label name is used. -func NewSummaryVec(opts prometheus.SummaryOpts, labelNames []string) *SummaryVecProxy { - summaryVecProxy := &SummaryVecProxy{ - LabelNamesIndex: make(map[string]int), - Labels: make(map[string][]string), - SummaryVec: prometheus.NewSummaryVec(opts, labelNames), - } - for idx, v := range labelNames { - summaryVecProxy.LabelNamesIndex[v] = idx - } - return summaryVecProxy -} - -// WithLabelValues works as GetMetricWithLabelValues, but panics where -// GetMetricWithLabelValues would have returned an error. Not returning an -// error allows shortcuts like -// -// myVec.WithLabelValues("404", "GET").Observe(42.21) -func (c *SummaryVecProxy) WithLabelValues(lvs ...string) prometheus.Observer { - if len(lvs) > 0 { - noteLabelsInMetricsProxy(c, lvs) - } - return c.SummaryVec.WithLabelValues(lvs...) -} - -// With works as GetMetricWith, but panics where GetMetricWithLabels would have -// returned an error. Not returning an error allows shortcuts like -// -// myVec.With(prometheus.Labels{"code": "404", "method": "GET"}).Observe(42.21) -func (c *SummaryVecProxy) With(labels prometheus.Labels) prometheus.Observer { - if len(labels) > 0 { - values := make([]string, len(labels)) - labelNameIndex := c.GetLabelNamesIndex() - for k, v := range labels { - values[labelNameIndex[k]] = v - } - noteLabelsInMetricsProxy(c, values) - } - - return c.SummaryVec.With(labels) -} - -// DeleteAllAboutLabels Remove all labelsValue with these labels. -func (c *SummaryVecProxy) DeleteAllAboutLabels(labels prometheus.Labels) bool { - if len(labels) == 0 { - return false - } - c.mu.Lock() - defer c.mu.Unlock() - return findAndDeleteLabelsInMetricsProxy(c, labels) -} - -// GetLabelNamesIndex to support get SummaryVecProxy's LabelNames when you use Proxy object. -func (c *SummaryVecProxy) GetLabelNamesIndex() map[string]int { - return c.LabelNamesIndex -} - -// GetLabels to support get SummaryVecProxy's Labels when you use Proxy object. -func (c *SummaryVecProxy) GetLabels() map[string][]string { - return c.Labels -} - -// SetLabel to support set SummaryVecProxy's Label when you use Proxy object. -func (c *SummaryVecProxy) SetLabel(key string, vals []string) { - c.mu.Lock() - defer c.mu.Unlock() - c.Labels[key] = vals -} - -// vecDelete to support delete SummaryVecProxy's Labels when you use Proxy object. -func (c *SummaryVecProxy) vecDelete(labels prometheus.Labels) bool { - return c.SummaryVec.Delete(labels) -} diff --git a/dm/pkg/metricsproxy/summaryvec_test.go b/dm/pkg/metricsproxy/summaryvec_test.go deleted file mode 100644 index f3edaa95150..00000000000 --- a/dm/pkg/metricsproxy/summaryvec_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// 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, -// See the License for the specific language governing permissions and -// limitations under the License. - -package metricsproxy // nolint:dupl - -import ( - "math/rand" - "time" - - . "github.com/pingcap/check" - - "github.com/prometheus/client_golang/prometheus" -) - -func (t *testMetricsProxySuite) TestSummaryVecProxy(c *C) { - rand.Seed(time.Now().UnixNano()) - for _, oneCase := range testCases { - summary := NewSummaryVec(prometheus.SummaryOpts{ - Namespace: "dm", - Subsystem: "metricsProxy", - Name: "Test_Summary", - Help: "dm summary metrics proxy test", - ConstLabels: nil, - }, oneCase.LabelsNames) - for _, aArgs := range oneCase.AddArgs { - if rand.Intn(199)%2 == 0 { - summary.WithLabelValues(aArgs...).Observe(float64(rand.Intn(199))) - } else { - labels := make(prometheus.Labels) - for k, labelName := range oneCase.LabelsNames { - labels[labelName] = aArgs[k] - } - summary.With(labels) - } - } - for _, dArgs := range oneCase.DeleteArgs { - summary.DeleteAllAboutLabels(dArgs) - } - - cOutput := make(chan prometheus.Metric, len(oneCase.AddArgs)*3) - - summary.Collect(cOutput) - - c.Assert(len(cOutput), Equals, oneCase.WantResLength) - } -} diff --git a/dm/relay/metrics.go b/dm/relay/metrics.go index 3ed0cfaea0d..394528590b2 100644 --- a/dm/relay/metrics.go +++ b/dm/relay/metrics.go @@ -22,14 +22,13 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/pingcap/tiflow/dm/pkg/log" - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/dm/pkg/terror" "github.com/pingcap/tiflow/dm/pkg/utils" ) var ( - relayLogPosGauge = metricsproxy.NewGaugeVec( - &promutil.PromFactory{}, + f = &promutil.PromFactory{} + relayLogPosGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "relay", @@ -37,8 +36,7 @@ var ( Help: "current binlog pos in current binlog file", }, []string{"node"}) - relayLogFileGauge = metricsproxy.NewGaugeVec( - &promutil.PromFactory{}, + relayLogFileGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "relay", @@ -48,8 +46,7 @@ var ( // split sub directory info from relayLogPosGauge / relayLogFileGauge // to make compare relayLogFileGauge for master / relay more easier. - relaySubDirIndex = metricsproxy.NewGaugeVec( - &promutil.PromFactory{}, + relaySubDirIndex = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "relay", @@ -58,8 +55,7 @@ var ( }, []string{"node", "uuid"}) // should alert if available space < 10G. - relayLogSpaceGauge = metricsproxy.NewGaugeVec( - &promutil.PromFactory{}, + relayLogSpaceGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "relay", diff --git a/dm/syncer/dbconn/db.go b/dm/syncer/dbconn/db.go index 30bcb946d72..2155c53f7c8 100644 --- a/dm/syncer/dbconn/db.go +++ b/dm/syncer/dbconn/db.go @@ -20,13 +20,13 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/util/dbutil" + "github.com/prometheus/client_golang/prometheus" "go.uber.org/zap" "github.com/pingcap/tiflow/dm/config" "github.com/pingcap/tiflow/dm/pkg/conn" tcontext "github.com/pingcap/tiflow/dm/pkg/context" "github.com/pingcap/tiflow/dm/pkg/log" - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/dm/pkg/retry" "github.com/pingcap/tiflow/dm/pkg/terror" "github.com/pingcap/tiflow/dm/pkg/utils" @@ -216,7 +216,7 @@ func (conn *DBConn) ExecuteSQLWithIgnore( params, func(ctx *tcontext.Context) (interface{}, error) { startTime := time.Now() - var histProxy *metricsproxy.HistogramVecProxy + var histProxy *prometheus.HistogramVec if metricProxies != nil { histProxy = metricProxies.StmtHistogram } diff --git a/dm/syncer/metrics/metrics.go b/dm/syncer/metrics/metrics.go index f080abaea03..c13b1c34bba 100644 --- a/dm/syncer/metrics/metrics.go +++ b/dm/syncer/metrics/metrics.go @@ -16,8 +16,6 @@ package metrics import ( "github.com/pingcap/tiflow/engine/pkg/promutil" "github.com/prometheus/client_golang/prometheus" - - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" ) // for BinlogEventCost metric stage field. @@ -57,34 +55,34 @@ type Metrics struct { // private members have a corresponding cached variable in Metrics. type Proxies struct { Metrics *Metrics - binlogReadDurationHistogram *metricsproxy.HistogramVecProxy - binlogEventSizeHistogram *metricsproxy.HistogramVecProxy - BinlogEventCost *metricsproxy.HistogramVecProxy - conflictDetectDurationHistogram *metricsproxy.HistogramVecProxy - AddJobDurationHistogram *metricsproxy.HistogramVecProxy + binlogReadDurationHistogram *prometheus.HistogramVec + binlogEventSizeHistogram *prometheus.HistogramVec + BinlogEventCost *prometheus.HistogramVec + conflictDetectDurationHistogram *prometheus.HistogramVec + AddJobDurationHistogram *prometheus.HistogramVec // dispatch/add multiple jobs for one binlog event. // NOTE: only observe for DML now. - DispatchBinlogDurationHistogram *metricsproxy.HistogramVecProxy - SkipBinlogDurationHistogram *metricsproxy.HistogramVecProxy - AddedJobsTotal *metricsproxy.CounterVecProxy - FinishedJobsTotal *metricsproxy.CounterVecProxy - idealQPS *metricsproxy.GaugeVecProxy - QueueSizeGauge *metricsproxy.GaugeVecProxy - binlogPosGauge *metricsproxy.GaugeVecProxy - binlogFileGauge *metricsproxy.GaugeVecProxy - binlogEventRowHistogram *metricsproxy.HistogramVecProxy - txnHistogram *metricsproxy.HistogramVecProxy - queryHistogram *metricsproxy.HistogramVecProxy - StmtHistogram *metricsproxy.HistogramVecProxy - syncerExitWithErrorCounter *metricsproxy.CounterVecProxy - replicationLagGauge *metricsproxy.GaugeVecProxy - replicationLagHistogram *metricsproxy.HistogramVecProxy - remainingTimeGauge *metricsproxy.GaugeVecProxy - UnsyncedTableGauge *metricsproxy.GaugeVecProxy - shardLockResolving *metricsproxy.GaugeVecProxy - finishedTransactionTotal *metricsproxy.CounterVecProxy - ReplicationTransactionBatch *metricsproxy.HistogramVecProxy - flushCheckPointsTimeInterval *metricsproxy.HistogramVecProxy + DispatchBinlogDurationHistogram *prometheus.HistogramVec + SkipBinlogDurationHistogram *prometheus.HistogramVec + AddedJobsTotal *prometheus.CounterVec + FinishedJobsTotal *prometheus.CounterVec + idealQPS *prometheus.GaugeVec + QueueSizeGauge *prometheus.GaugeVec + binlogPosGauge *prometheus.GaugeVec + binlogFileGauge *prometheus.GaugeVec + binlogEventRowHistogram *prometheus.HistogramVec + txnHistogram *prometheus.HistogramVec + queryHistogram *prometheus.HistogramVec + StmtHistogram *prometheus.HistogramVec + syncerExitWithErrorCounter *prometheus.CounterVec + replicationLagGauge *prometheus.GaugeVec + replicationLagHistogram *prometheus.HistogramVec + remainingTimeGauge *prometheus.GaugeVec + UnsyncedTableGauge *prometheus.GaugeVec + shardLockResolving *prometheus.GaugeVec + finishedTransactionTotal *prometheus.CounterVec + ReplicationTransactionBatch *prometheus.HistogramVec + flushCheckPointsTimeInterval *prometheus.HistogramVec } var DefaultMetricsProxies *Proxies @@ -96,7 +94,7 @@ func init() { // Init creates Metrics proxy variables from Factory. func (m *Proxies) Init(f promutil.Factory) { - m.binlogReadDurationHistogram = metricsproxy.NewHistogramVec(f, + m.binlogReadDurationHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -104,7 +102,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "bucketed histogram of read time (s) for single binlog event from the relay log or master.", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"task", "source_id"}) - m.binlogEventSizeHistogram = metricsproxy.NewHistogramVec(f, + m.binlogEventSizeHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -112,7 +110,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "size of a binlog event", Buckets: prometheus.ExponentialBuckets(16, 2, 20), }, []string{"task", "worker", "source_id"}) - m.BinlogEventCost = metricsproxy.NewHistogramVec(f, + m.BinlogEventCost = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -120,7 +118,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "cost of binlog event transform", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"stage", "task", "worker", "source_id"}) - m.conflictDetectDurationHistogram = metricsproxy.NewHistogramVec(f, + m.conflictDetectDurationHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -128,7 +126,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "bucketed histogram of conflict detect time (s) for single DML statement", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"task", "source_id"}) - m.AddJobDurationHistogram = metricsproxy.NewHistogramVec(f, + m.AddJobDurationHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -136,7 +134,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "bucketed histogram of add a job to the queue time (s)", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"type", "task", "queueNo", "source_id"}) - m.DispatchBinlogDurationHistogram = metricsproxy.NewHistogramVec(f, + m.DispatchBinlogDurationHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -144,7 +142,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "bucketed histogram of dispatch a binlog event time (s)", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"type", "task", "source_id"}) - m.SkipBinlogDurationHistogram = metricsproxy.NewHistogramVec(f, + m.SkipBinlogDurationHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -152,49 +150,49 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "bucketed histogram of skip a binlog event time (s)", Buckets: prometheus.ExponentialBuckets(0.0000005, 2, 25), // this should be very fast. }, []string{"type", "task", "source_id"}) - m.AddedJobsTotal = metricsproxy.NewCounterVec(f, + m.AddedJobsTotal = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "syncer", Name: "added_jobs_total", Help: "total number of added jobs", }, []string{"type", "task", "queueNo", "source_id", "worker", "target_schema", "target_table"}) - m.FinishedJobsTotal = metricsproxy.NewCounterVec(f, + m.FinishedJobsTotal = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "syncer", Name: "finished_jobs_total", Help: "total number of finished jobs", }, []string{"type", "task", "queueNo", "source_id", "worker", "target_schema", "target_table"}) - m.idealQPS = metricsproxy.NewGaugeVec(f, + m.idealQPS = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "ideal_qps", Help: "the highest QPS that can be achieved ideally", }, []string{"task", "worker", "source_id"}) - m.QueueSizeGauge = metricsproxy.NewGaugeVec(f, + m.QueueSizeGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "queue_size", Help: "remain size of the DML queue", }, []string{"task", "queue_id", "source_id"}) - m.binlogPosGauge = metricsproxy.NewGaugeVec(f, + m.binlogPosGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "binlog_pos", Help: "current binlog pos", }, []string{"node", "task", "source_id"}) - m.binlogFileGauge = metricsproxy.NewGaugeVec(f, + m.binlogFileGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "binlog_file", Help: "current binlog file index", }, []string{"node", "task", "source_id"}) - m.binlogEventRowHistogram = metricsproxy.NewHistogramVec(f, + m.binlogEventRowHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -202,7 +200,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "number of rows in a binlog event", Buckets: prometheus.LinearBuckets(0, 100, 101), // linear from 0 to 10000, i think this is enough }, []string{"worker", "task", "source_id"}) - m.txnHistogram = metricsproxy.NewHistogramVec(f, + m.txnHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -210,7 +208,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "Bucketed histogram of processing time (s) of a txn.", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"task", "worker", "source_id"}) - m.queryHistogram = metricsproxy.NewHistogramVec(f, + m.queryHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -218,7 +216,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "Bucketed histogram of query time (s).", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"task", "worker", "source_id"}) - m.StmtHistogram = metricsproxy.NewHistogramVec(f, + m.StmtHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -226,21 +224,21 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "Bucketed histogram of every statement query time (s).", Buckets: prometheus.ExponentialBuckets(0.000005, 2, 25), }, []string{"type", "task"}) - m.syncerExitWithErrorCounter = metricsproxy.NewCounterVec(f, + m.syncerExitWithErrorCounter = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "syncer", Name: "exit_with_error_count", Help: "counter for syncer exits with error", }, []string{"task", "source_id"}) - m.replicationLagGauge = metricsproxy.NewGaugeVec(f, + m.replicationLagGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "replication_lag_gauge", Help: "replication lag gauge in second between mysql and syncer", }, []string{"task", "source_id", "worker"}) - m.replicationLagHistogram = metricsproxy.NewHistogramVec(f, + m.replicationLagHistogram = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -248,35 +246,35 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "replication lag histogram in second between mysql and syncer", Buckets: prometheus.ExponentialBuckets(0.5, 2, 12), // exponential from 0.5s to 1024s }, []string{"task", "source_id", "worker"}) - m.remainingTimeGauge = metricsproxy.NewGaugeVec(f, + m.remainingTimeGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "remaining_time", Help: "the remaining time in second to catch up master", }, []string{"task", "source_id", "worker"}) - m.UnsyncedTableGauge = metricsproxy.NewGaugeVec(f, + m.UnsyncedTableGauge = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "unsynced_table_number", Help: "number of unsynced tables in the subtask", }, []string{"task", "table", "source_id"}) - m.shardLockResolving = metricsproxy.NewGaugeVec(f, + m.shardLockResolving = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "syncer", Name: "shard_lock_resolving", Help: "waiting shard DDL lock to be resolved", }, []string{"task", "source_id"}) - m.finishedTransactionTotal = metricsproxy.NewCounterVec(f, + m.finishedTransactionTotal = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "syncer", Name: "finished_transaction_total", Help: "total number of finished transaction", }, []string{"task", "worker", "source_id"}) - m.ReplicationTransactionBatch = metricsproxy.NewHistogramVec(f, + m.ReplicationTransactionBatch = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -284,7 +282,7 @@ func (m *Proxies) Init(f promutil.Factory) { Help: "number of sql's contained in a transaction that executed to downstream", Buckets: prometheus.LinearBuckets(1, 50, 21), // linear from 1 to 1001 }, []string{"worker", "task", "source_id", "queueNo", "type"}) - m.flushCheckPointsTimeInterval = metricsproxy.NewHistogramVec(f, + m.flushCheckPointsTimeInterval = f.NewHistogramVec( prometheus.HistogramOpts{ Namespace: "dm", Subsystem: "syncer", @@ -352,30 +350,30 @@ func (m *Proxies) RegisterMetrics(registry *prometheus.Registry) { // RemoveLabelValuesWithTaskInMetrics cleans all Metrics related to the task. func (m *Proxies) RemoveLabelValuesWithTaskInMetrics(task string) { - m.binlogReadDurationHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.binlogEventSizeHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.BinlogEventCost.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.binlogEventRowHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.conflictDetectDurationHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.AddJobDurationHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.DispatchBinlogDurationHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.SkipBinlogDurationHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.AddedJobsTotal.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.FinishedJobsTotal.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.QueueSizeGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.binlogPosGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.binlogFileGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.txnHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.StmtHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.queryHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.syncerExitWithErrorCounter.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.replicationLagGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.replicationLagHistogram.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.remainingTimeGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.UnsyncedTableGauge.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.shardLockResolving.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.idealQPS.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.finishedTransactionTotal.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.ReplicationTransactionBatch.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - m.flushCheckPointsTimeInterval.DeleteAllAboutLabels(prometheus.Labels{"task": task}) + m.binlogReadDurationHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.binlogEventSizeHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.BinlogEventCost.DeletePartialMatch(prometheus.Labels{"task": task}) + m.binlogEventRowHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.conflictDetectDurationHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.AddJobDurationHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.DispatchBinlogDurationHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.SkipBinlogDurationHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.AddedJobsTotal.DeletePartialMatch(prometheus.Labels{"task": task}) + m.FinishedJobsTotal.DeletePartialMatch(prometheus.Labels{"task": task}) + m.QueueSizeGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + m.binlogPosGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + m.binlogFileGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + m.txnHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.StmtHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.queryHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.syncerExitWithErrorCounter.DeletePartialMatch(prometheus.Labels{"task": task}) + m.replicationLagGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + m.replicationLagHistogram.DeletePartialMatch(prometheus.Labels{"task": task}) + m.remainingTimeGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + m.UnsyncedTableGauge.DeletePartialMatch(prometheus.Labels{"task": task}) + m.shardLockResolving.DeletePartialMatch(prometheus.Labels{"task": task}) + m.idealQPS.DeletePartialMatch(prometheus.Labels{"task": task}) + m.finishedTransactionTotal.DeletePartialMatch(prometheus.Labels{"task": task}) + m.ReplicationTransactionBatch.DeletePartialMatch(prometheus.Labels{"task": task}) + m.flushCheckPointsTimeInterval.DeletePartialMatch(prometheus.Labels{"task": task}) } diff --git a/dm/syncer/metrics/validator_metrics.go b/dm/syncer/metrics/validator_metrics.go index 81491fbc15c..07102f0c488 100644 --- a/dm/syncer/metrics/validator_metrics.go +++ b/dm/syncer/metrics/validator_metrics.go @@ -16,14 +16,13 @@ package metrics import ( "github.com/prometheus/client_golang/prometheus" - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/engine/pkg/promutil" ) var defaultFactory = &promutil.PromFactory{} var ( - validatorErrorCount = metricsproxy.NewGaugeVec(defaultFactory, + validatorErrorCount = defaultFactory.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "validator", @@ -31,14 +30,14 @@ var ( Help: "total number of validator errors", }, []string{"task", "source_id"}) - validatorLogPosLatency = metricsproxy.NewGaugeVec(defaultFactory, + validatorLogPosLatency = defaultFactory.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "validator", Name: "validator_logpos_latency", Help: "the log pos latency between validator and syncer", }, []string{"task", "source_id"}) - validatorLogFileLatency = metricsproxy.NewGaugeVec(defaultFactory, + validatorLogFileLatency = defaultFactory.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "validator", @@ -46,7 +45,7 @@ var ( Help: "the log file latency between validator and syncer", }, []string{"task", "source_id"}) - validatorBinlogPos = metricsproxy.NewGaugeVec(defaultFactory, + validatorBinlogPos = defaultFactory.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "validator", @@ -54,7 +53,7 @@ var ( Help: "binlog position of the validator", }, []string{"task", "source_id"}) - validatorBinlogFile = metricsproxy.NewGaugeVec(defaultFactory, + validatorBinlogFile = defaultFactory.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "validator", @@ -72,11 +71,11 @@ func RegisterValidatorMetrics(registry *prometheus.Registry) { } func RemoveValidatorLabelValuesWithTask(task string) { - validatorErrorCount.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - validatorLogPosLatency.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - validatorLogFileLatency.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - validatorBinlogPos.DeleteAllAboutLabels(prometheus.Labels{"task": task}) - validatorBinlogFile.DeleteAllAboutLabels(prometheus.Labels{"task": task}) + validatorErrorCount.DeletePartialMatch(prometheus.Labels{"task": task}) + validatorLogPosLatency.DeletePartialMatch(prometheus.Labels{"task": task}) + validatorLogFileLatency.DeletePartialMatch(prometheus.Labels{"task": task}) + validatorBinlogPos.DeletePartialMatch(prometheus.Labels{"task": task}) + validatorBinlogFile.DeletePartialMatch(prometheus.Labels{"task": task}) } type ValidatorMetrics struct { diff --git a/dm/worker/metrics.go b/dm/worker/metrics.go index 35eebd6c31b..5e241903978 100644 --- a/dm/worker/metrics.go +++ b/dm/worker/metrics.go @@ -31,7 +31,6 @@ import ( "github.com/pingcap/tiflow/dm/dumpling" "github.com/pingcap/tiflow/dm/loader" "github.com/pingcap/tiflow/dm/pkg/log" - "github.com/pingcap/tiflow/dm/pkg/metricsproxy" "github.com/pingcap/tiflow/dm/relay" "github.com/pingcap/tiflow/pkg/version" ) @@ -43,7 +42,8 @@ const ( ) var ( - taskState = metricsproxy.NewGaugeVec(&promutil.PromFactory{}, + f = &promutil.PromFactory{} + taskState = f.NewGaugeVec( prometheus.GaugeOpts{ Namespace: "dm", Subsystem: "worker", @@ -52,7 +52,7 @@ var ( }, []string{"task", "source_id", "worker"}) // opErrCounter cleans on worker close, which is the same time dm-worker exits, so no explicit clean. - opErrCounter = metricsproxy.NewCounterVec(&promutil.PromFactory{}, + opErrCounter = f.NewCounterVec( prometheus.CounterOpts{ Namespace: "dm", Subsystem: "worker", diff --git a/dm/worker/subtask.go b/dm/worker/subtask.go index 88d3468dfb8..5dccbfe59ab 100644 --- a/dm/worker/subtask.go +++ b/dm/worker/subtask.go @@ -890,7 +890,7 @@ func (st *SubTask) getValidatorStage() pb.Stage { func updateTaskMetric(task, sourceID string, stage pb.Stage, workerName string) { if stage == pb.Stage_Stopped || stage == pb.Stage_Finished { - taskState.DeleteAllAboutLabels(prometheus.Labels{"task": task, "source_id": sourceID}) + taskState.DeletePartialMatch(prometheus.Labels{"task": task, "source_id": sourceID}) } else { taskState.WithLabelValues(task, sourceID, workerName).Set(float64(stage)) } diff --git a/go.mod b/go.mod index 5873cea20ce..6fdf9d32d91 100644 --- a/go.mod +++ b/go.mod @@ -61,7 +61,7 @@ require ( github.com/pingcap/tidb v1.1.0-beta.0.20220819091852-41b9e26d1ef4 github.com/pingcap/tidb-tools v6.1.1-0.20220715000306-1d2f00da8c3e+incompatible github.com/pingcap/tidb/parser v0.0.0-20220819091852-41b9e26d1ef4 - github.com/prometheus/client_golang v1.12.2 + github.com/prometheus/client_golang v1.13.0 github.com/prometheus/client_model v0.2.0 github.com/r3labs/diff v1.1.0 github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 @@ -102,7 +102,7 @@ require ( golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f google.golang.org/grpc v1.48.0 - google.golang.org/protobuf v1.28.0 + google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v2 v2.4.0 gorm.io/driver/mysql v1.3.3 gorm.io/gorm v1.23.8 @@ -227,8 +227,8 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/prometheus/common v0.32.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rogpeppe/go-internal v1.8.0 // indirect diff --git a/go.sum b/go.sum index 62d750f310f..147b63563e8 100644 --- a/go.sum +++ b/go.sum @@ -395,10 +395,12 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-mysql-org/go-mysql v1.6.1-0.20220718092400-c855c26b37bd h1:kgQrwjBbmoOZzzbF1CDDIYeuBfLA+wA10DgQl6J5qZ8= @@ -1046,8 +1048,9 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1060,16 +1063,18 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/prometheus v0.0.0-20190525122359-d20e84d0fb64 h1:3DyLm+sTAJkfLyR/1pJ3L+fU2lFufWbpcgMFlGtqeyA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.8.0 h1:w1tAGxsBMLkuGrFMhqgcCeBkM5d1YI24udArs+aASuQ= @@ -1999,8 +2004,9 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=