Skip to content

Instantly share code, notes, and snippets.

@slonka
Last active March 29, 2023 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slonka/4a54b687151888790a5447a35e62c719 to your computer and use it in GitHub Desktop.
Save slonka/4a54b687151888790a5447a35e62c719 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<!-- saved from url=(0073)file:///private/var/folders/ts/xg_0vxrd0yj9n7pckrc0fq5r0000gn/T/diff.html -->
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Pretty Diff</title>
<style>
body {
text-align: center;
}
#wrapper {
display: inline-block;
margin-top: 1em;
min-width: 800px;
text-align: left;
}
h2 {
background: #fafafa;
background: -moz-linear-gradient(#fafafa, #eaeaea);
background: -webkit-linear-gradient(#fafafa, #eaeaea);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')";
border: 1px solid #d8d8d8;
border-bottom: 0;
color: #555;
font: 14px sans-serif;
overflow: hidden;
padding: 10px 6px;
text-shadow: 0 1px 0 white;
margin: 0;
}
.copy {
float: right;
}
.file-diff {
border: 1px solid #d8d8d8;
margin-bottom: 1em;
overflow: auto;
padding: 0.5em 0;
}
.file-diff > div {
width: 100%;
}
pre {
margin: 0;
font-family: "Bitstream Vera Sans Mono", Courier, monospace;
font-size: 12px;
line-height: 1.4em;
text-indent: 0.5em;
}
.file {
color: #aaa;
}
.delete {
background-color: #fdd;
}
.insert {
background-color: #dfd;
}
.info {
color: #a0b;
}
</style>
</head>
<body>
<div id="wrapper">
<h2>pkg/plugins/resources/postgres/pq_store.go<button class="copy" onclick="navigator.clipboard.writeText(&quot;pkg/plugins/resources/postgres/pq_store.go&quot;)">copy path</button></h2><div class="file-diff"><div><pre class="file">diff --git a/pkg/plugins/resources/postgres/pq_store.go b/pkg/plugins/resources/postgres/pgx_store.go</pre>
<pre class="file">index ee25cc1c0..d420009ca 100644</pre>
<pre class="delete">--- a/pkg/plugins/resources/postgres/pq_store.go</pre>
<pre class="insert">+++ b/pkg/plugins/resources/postgres/pgx_store.go</pre>
<pre class="info">@@ -2,13 +2,15 @@ package postgres</pre>
<pre class="context"> </pre>
<pre class="context"> import (</pre>
<pre class="context"> "context"</pre>
<pre class="delete">- "database/sql"</pre>
<pre class="context"> "fmt"</pre>
<pre class="insert">+ "math"</pre>
<pre class="context"> "strconv"</pre>
<pre class="context"> "strings"</pre>
<pre class="context"> "time"</pre>
<pre class="context"> </pre>
<pre class="delete">- _ "github.com/lib/pq"</pre>
<pre class="insert">+ "github.com/jackc/pgx/v5"</pre>
<pre class="insert">+ "github.com/jackc/pgx/v5/pgxpool"</pre>
<pre class="insert">+ _ "github.com/jackc/pgx/v5/stdlib"</pre>
<pre class="context"> "github.com/pkg/errors"</pre>
<pre class="context"> "github.com/prometheus/client_golang/prometheus"</pre>
<pre class="context"> </pre>
<pre class="info">@@ -16,31 +18,57 @@ import (</pre>
<pre class="context"> core_model "github.com/kumahq/kuma/pkg/core/resources/model"</pre>
<pre class="context"> "github.com/kumahq/kuma/pkg/core/resources/store"</pre>
<pre class="context"> core_metrics "github.com/kumahq/kuma/pkg/metrics"</pre>
<pre class="delete">- common_postgres "github.com/kumahq/kuma/pkg/plugins/common/postgres"</pre>
<pre class="context"> )</pre>
<pre class="context"> </pre>
<pre class="delete">-type postgresResourceStore struct {</pre>
<pre class="delete">- db *sql.DB</pre>
<pre class="insert">+type pgxResourceStore struct {</pre>
<pre class="insert">+ pool *pgxpool.Pool</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-var _ store.ResourceStore = &amp;postgresResourceStore{}</pre>
<pre class="insert">+var _ store.ResourceStore = &amp;pgxResourceStore{}</pre>
<pre class="context"> </pre>
<pre class="delete">-func NewPqStore(metrics core_metrics.Metrics, config config.PostgresStoreConfig) (store.ResourceStore, error) {</pre>
<pre class="delete">- db, err := common_postgres.ConnectToDb(config)</pre>
<pre class="insert">+func NewPgxStore(metrics core_metrics.Metrics, config config.PostgresStoreConfig) (store.ResourceStore, error) {</pre>
<pre class="insert">+ pool, err := connect(config)</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> return nil, err</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">- if err := registerPqMetrics(metrics, db); err != nil {</pre>
<pre class="insert">+ if err := registerMetrics(metrics, pool); err != nil {</pre>
<pre class="context"> return nil, errors.Wrapf(err, "could not register DB metrics")</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">- return &amp;postgresResourceStore{</pre>
<pre class="delete">- db: db,</pre>
<pre class="insert">+ return &amp;pgxResourceStore{</pre>
<pre class="insert">+ pool: pool,</pre>
<pre class="context"> }, nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func (r *postgresResourceStore) Create(_ context.Context, resource core_model.Resource, fs ...store.CreateOptionsFunc) error {</pre>
<pre class="insert">+func connect(postgresStoreConfig config.PostgresStoreConfig) (*pgxpool.Pool, error) {</pre>
<pre class="insert">+ connectionString, err := postgresStoreConfig.ConnectionString()</pre>
<pre class="insert">+ if err != nil {</pre>
<pre class="insert">+ return nil, err</pre>
<pre class="insert">+ }</pre>
<pre class="insert">+ pgxConfig, err := pgxpool.ParseConfig(connectionString)</pre>
<pre class="insert">+</pre>
<pre class="insert">+ if postgresStoreConfig.MaxOpenConnections == 0 {</pre>
<pre class="insert">+ // pgx MaxCons must be &gt; 0, see https://github.com/jackc/puddle/blob/c5402ce53663d3c6481ea83c2912c339aeb94adc/pool.go#L160</pre>
<pre class="insert">+ // so unlimited is just max int</pre>
<pre class="insert">+ pgxConfig.MaxConns = math.MaxInt32</pre>
<pre class="insert">+ } else {</pre>
<pre class="insert">+ pgxConfig.MaxConns = int32(postgresStoreConfig.MaxOpenConnections)</pre>
<pre class="insert">+ }</pre>
<pre class="insert">+ pgxConfig.MinConns = int32(postgresStoreConfig.MinOpenConnections)</pre>
<pre class="insert">+ pgxConfig.MaxConnIdleTime = time.Duration(postgresStoreConfig.ConnectionTimeout) * time.Second</pre>
<pre class="insert">+ pgxConfig.MaxConnLifetime = postgresStoreConfig.MaxConnectionLifetime.Duration</pre>
<pre class="insert">+ pgxConfig.MaxConnLifetimeJitter = postgresStoreConfig.MaxConnectionLifetime.Duration</pre>
<pre class="insert">+ pgxConfig.HealthCheckPeriod = postgresStoreConfig.HealthCheckInterval.Duration</pre>
<pre class="insert">+</pre>
<pre class="insert">+ if err != nil {</pre>
<pre class="insert">+ return nil, err</pre>
<pre class="insert">+ }</pre>
<pre class="insert">+</pre>
<pre class="insert">+ return pgxpool.NewWithConfig(context.Background(), pgxConfig)</pre>
<pre class="insert">+}</pre>
<pre class="insert">+</pre>
<pre class="insert">+func (r *pgxResourceStore) Create(ctx context.Context, resource core_model.Resource, fs ...store.CreateOptionsFunc) error {</pre>
<pre class="context"> opts := store.NewCreateOptions(fs...)</pre>
<pre class="context"> </pre>
<pre class="context"> bytes, err := core_model.ToJSON(resource.GetSpec())</pre>
<pre class="info">@@ -61,7 +89,7 @@ func (r *postgresResourceStore) Create(_ context.Context, resource core_model.Re</pre>
<pre class="context"> </pre>
<pre class="context"> version := 0</pre>
<pre class="context"> statement := `INSERT INTO resources VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);`</pre>
<pre class="delete">- _, err = r.db.Exec(statement, opts.Name, opts.Mesh, resource.Descriptor().Name, version, string(bytes),</pre>
<pre class="insert">+ _, err = r.pool.Exec(ctx, statement, opts.Name, opts.Mesh, resource.Descriptor().Name, version, string(bytes),</pre>
<pre class="context"> opts.CreationTime.UTC(), opts.CreationTime.UTC(), ownerName, ownerMesh, ownerType)</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> if strings.Contains(err.Error(), duplicateKeyErrorMsg) {</pre>
<pre class="info">@@ -80,7 +108,7 @@ func (r *postgresResourceStore) Create(_ context.Context, resource core_model.Re</pre>
<pre class="context"> return nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func (r *postgresResourceStore) Update(_ context.Context, resource core_model.Resource, fs ...store.UpdateOptionsFunc) error {</pre>
<pre class="insert">+func (r *pgxResourceStore) Update(ctx context.Context, resource core_model.Resource, fs ...store.UpdateOptionsFunc) error {</pre>
<pre class="context"> bytes, err := core_model.ToJSON(resource.GetSpec())</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> return err</pre>
<pre class="info">@@ -94,7 +122,8 @@ func (r *postgresResourceStore) Update(_ context.Context, resource core_model.Re</pre>
<pre class="context"> return errors.Wrap(err, "failed to convert meta version to int")</pre>
<pre class="context"> }</pre>
<pre class="context"> statement := `UPDATE resources SET spec=$1, version=$2, modification_time=$3 WHERE name=$4 AND mesh=$5 AND type=$6 AND version=$7;`</pre>
<pre class="delete">- result, err := r.db.Exec(</pre>
<pre class="insert">+ result, err := r.pool.Exec(</pre>
<pre class="insert">+ ctx,</pre>
<pre class="context"> statement,</pre>
<pre class="context"> string(bytes),</pre>
<pre class="context"> newVersion,</pre>
<pre class="info">@@ -107,7 +136,7 @@ func (r *postgresResourceStore) Update(_ context.Context, resource core_model.Re</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> return errors.Wrapf(err, "failed to execute query %s", statement)</pre>
<pre class="context"> }</pre>
<pre class="delete">- if rows, _ := result.RowsAffected(); rows != 1 { // error ignored, postgres supports RowsAffected()</pre>
<pre class="insert">+ if rows := result.RowsAffected(); rows != 1 {</pre>
<pre class="context"> return store.ErrorResourceConflict(resource.Descriptor().Name, resource.GetMeta().GetName(), resource.GetMeta().GetMesh())</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="info">@@ -122,32 +151,32 @@ func (r *postgresResourceStore) Update(_ context.Context, resource core_model.Re</pre>
<pre class="context"> return nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func (r *postgresResourceStore) Delete(_ context.Context, resource core_model.Resource, fs ...store.DeleteOptionsFunc) error {</pre>
<pre class="insert">+func (r *pgxResourceStore) Delete(ctx context.Context, resource core_model.Resource, fs ...store.DeleteOptionsFunc) error {</pre>
<pre class="context"> opts := store.NewDeleteOptions(fs...)</pre>
<pre class="context"> </pre>
<pre class="context"> statement := `DELETE FROM resources WHERE name=$1 AND type=$2 AND mesh=$3`</pre>
<pre class="delete">- result, err := r.db.Exec(statement, opts.Name, resource.Descriptor().Name, opts.Mesh)</pre>
<pre class="insert">+ result, err := r.pool.Exec(ctx, statement, opts.Name, resource.Descriptor().Name, opts.Mesh)</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> return errors.Wrapf(err, "failed to execute query: %s", statement)</pre>
<pre class="context"> }</pre>
<pre class="delete">- if rows, _ := result.RowsAffected(); rows == 0 { // error ignored, postgres supports RowsAffected()</pre>
<pre class="insert">+ if rows := result.RowsAffected(); rows == 0 {</pre>
<pre class="context"> return store.ErrorResourceNotFound(resource.Descriptor().Name, opts.Name, opts.Mesh)</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="context"> return nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func (r *postgresResourceStore) Get(_ context.Context, resource core_model.Resource, fs ...store.GetOptionsFunc) error {</pre>
<pre class="insert">+func (r *pgxResourceStore) Get(ctx context.Context, resource core_model.Resource, fs ...store.GetOptionsFunc) error {</pre>
<pre class="context"> opts := store.NewGetOptions(fs...)</pre>
<pre class="context"> </pre>
<pre class="context"> statement := `SELECT spec, version, creation_time, modification_time FROM resources WHERE name=$1 AND mesh=$2 AND type=$3;`</pre>
<pre class="delete">- row := r.db.QueryRow(statement, opts.Name, opts.Mesh, resource.Descriptor().Name)</pre>
<pre class="insert">+ row := r.pool.QueryRow(ctx, statement, opts.Name, opts.Mesh, resource.Descriptor().Name)</pre>
<pre class="context"> </pre>
<pre class="context"> var spec string</pre>
<pre class="context"> var version int</pre>
<pre class="context"> var creationTime, modificationTime time.Time</pre>
<pre class="context"> err := row.Scan(&amp;spec, &amp;version, &amp;creationTime, &amp;modificationTime)</pre>
<pre class="delete">- if err == sql.ErrNoRows {</pre>
<pre class="insert">+ if err == pgx.ErrNoRows {</pre>
<pre class="context"> return store.ErrorResourceNotFound(resource.Descriptor().Name, opts.Name, opts.Mesh)</pre>
<pre class="context"> }</pre>
<pre class="context"> if err != nil {</pre>
<pre class="info">@@ -173,7 +202,7 @@ func (r *postgresResourceStore) Get(_ context.Context, resource core_model.Resou</pre>
<pre class="context"> return nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func (r *postgresResourceStore) List(_ context.Context, resources core_model.ResourceList, args ...store.ListOptionsFunc) error {</pre>
<pre class="insert">+func (r *pgxResourceStore) List(ctx context.Context, resources core_model.ResourceList, args ...store.ListOptionsFunc) error {</pre>
<pre class="context"> opts := store.NewListOptions(args...)</pre>
<pre class="context"> </pre>
<pre class="context"> statement := `SELECT name, mesh, spec, version, creation_time, modification_time FROM resources WHERE type=$1`</pre>
<pre class="info">@@ -192,7 +221,7 @@ func (r *postgresResourceStore) List(_ context.Context, resources core_model.Res</pre>
<pre class="context"> }</pre>
<pre class="context"> statement += " ORDER BY name, mesh"</pre>
<pre class="context"> </pre>
<pre class="delete">- rows, err := r.db.Query(statement, statementArgs...)</pre>
<pre class="insert">+ rows, err := r.pool.Query(ctx, statement, statementArgs...)</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> return errors.Wrapf(err, "failed to execute query: %s", statement)</pre>
<pre class="context"> }</pre>
<pre class="info">@@ -200,7 +229,7 @@ func (r *postgresResourceStore) List(_ context.Context, resources core_model.Res</pre>
<pre class="context"> </pre>
<pre class="context"> total := 0</pre>
<pre class="context"> for rows.Next() {</pre>
<pre class="delete">- item, err := pqRowToItem(resources, rows)</pre>
<pre class="insert">+ item, err := rowToItem(resources, rows)</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> return err</pre>
<pre class="context"> }</pre>
<pre class="info">@@ -214,7 +243,7 @@ func (r *postgresResourceStore) List(_ context.Context, resources core_model.Res</pre>
<pre class="context"> return nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func pqRowToItem(resources core_model.ResourceList, rows *sql.Rows) (core_model.Resource, error) {</pre>
<pre class="insert">+func rowToItem(resources core_model.ResourceList, rows pgx.Rows) (core_model.Resource, error) {</pre>
<pre class="context"> var name, mesh, spec string</pre>
<pre class="context"> var version int</pre>
<pre class="context"> var creationTime, modificationTime time.Time</pre>
<pre class="info">@@ -239,11 +268,12 @@ func pqRowToItem(resources core_model.ResourceList, rows *sql.Rows) (core_model.</pre>
<pre class="context"> return item, nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func (r *postgresResourceStore) Close() error {</pre>
<pre class="delete">- return r.db.Close()</pre>
<pre class="insert">+func (r *pgxResourceStore) Close() error {</pre>
<pre class="insert">+ r.pool.Close() // does not work, at least on my machine</pre>
<pre class="insert">+ return nil</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func registerPqMetrics(metrics core_metrics.Metrics, db *sql.DB) error {</pre>
<pre class="insert">+func registerMetrics(metrics core_metrics.Metrics, pool *pgxpool.Pool) error {</pre>
<pre class="context"> postgresCurrentConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="context"> Name: "store_postgres_connections",</pre>
<pre class="context"> Help: "Current number of postgres store connections",</pre>
<pre class="info">@@ -251,7 +281,7 @@ func registerPqMetrics(metrics core_metrics.Metrics, db *sql.DB) error {</pre>
<pre class="context"> "type": "open_connections",</pre>
<pre class="context"> },</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().OpenConnections)</pre>
<pre class="insert">+ return float64(pool.Stat().TotalConns())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="context"> postgresInUseConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="info">@@ -261,7 +291,7 @@ func registerPqMetrics(metrics core_metrics.Metrics, db *sql.DB) error {</pre>
<pre class="context"> "type": "in_use",</pre>
<pre class="context"> },</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().InUse)</pre>
<pre class="insert">+ return float64(pool.Stat().AcquiredConns())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="context"> postgresIdleConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="info">@@ -271,28 +301,28 @@ func registerPqMetrics(metrics core_metrics.Metrics, db *sql.DB) error {</pre>
<pre class="context"> "type": "idle",</pre>
<pre class="context"> },</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().Idle)</pre>
<pre class="insert">+ return float64(pool.Stat().IdleConns())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="context"> postgresMaxOpenConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="context"> Name: "store_postgres_connections_max",</pre>
<pre class="context"> Help: "Max postgres store open connections",</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().MaxOpenConnections)</pre>
<pre class="insert">+ return float64(pool.Stat().MaxConns())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="context"> postgresWaitConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="context"> Name: "store_postgres_connection_wait_count",</pre>
<pre class="context"> Help: "Current waiting postgres store connections",</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().WaitCount)</pre>
<pre class="insert">+ return float64(pool.Stat().EmptyAcquireCount())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="context"> postgresWaitConnectionDurationMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="context"> Name: "store_postgres_connection_wait_duration",</pre>
<pre class="context"> Help: "Time Blocked waiting for new connection in seconds",</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return db.Stats().WaitDuration.Seconds()</pre>
<pre class="insert">+ return pool.Stat().AcquireDuration().Seconds()</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="context"> postgresMaxIdleClosedConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="info">@@ -302,33 +332,65 @@ func registerPqMetrics(metrics core_metrics.Metrics, db *sql.DB) error {</pre>
<pre class="context"> "type": "max_idle_conns",</pre>
<pre class="context"> },</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().MaxIdleClosed)</pre>
<pre class="insert">+ return float64(pool.Stat().MaxIdleDestroyCount())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="delete">- postgresMaxIdleTimeClosedConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="insert">+ postgresMaxLifeTimeClosedConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="context"> Name: "store_postgres_connection_closed",</pre>
<pre class="context"> Help: "Current number of closed postgres store connections",</pre>
<pre class="context"> ConstLabels: map[string]string{</pre>
<pre class="delete">- "type": "conn_max_idle_time",</pre>
<pre class="insert">+ "type": "conn_max_life_time",</pre>
<pre class="context"> },</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().MaxIdleTimeClosed)</pre>
<pre class="insert">+ return float64(pool.Stat().MaxLifetimeDestroyCount())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="delete">- postgresMaxLifeTimeClosedConnectionMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="delete">- Name: "store_postgres_connection_closed",</pre>
<pre class="delete">- Help: "Current number of closed postgres store connections",</pre>
<pre class="insert">+ postgresSuccessfulAcquireCountMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="insert">+ Name: "store_postgres_connection_acquire",</pre>
<pre class="insert">+ Help: "Cumulative count of acquires from the pool",</pre>
<pre class="context"> ConstLabels: map[string]string{</pre>
<pre class="delete">- "type": "conn_max_life_time",</pre>
<pre class="insert">+ "type": "successful",</pre>
<pre class="insert">+ },</pre>
<pre class="insert">+ }, func() float64 {</pre>
<pre class="insert">+ return float64(pool.Stat().AcquireCount())</pre>
<pre class="insert">+ })</pre>
<pre class="insert">+</pre>
<pre class="insert">+ postgresCanceledAcquireCountMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="insert">+ Name: "store_postgres_connection_acquire",</pre>
<pre class="insert">+ Help: "Cumulative count of acquires from the pool",</pre>
<pre class="insert">+ ConstLabels: map[string]string{</pre>
<pre class="insert">+ "type": "canceled",</pre>
<pre class="insert">+ },</pre>
<pre class="insert">+ }, func() float64 {</pre>
<pre class="insert">+ return float64(pool.Stat().CanceledAcquireCount())</pre>
<pre class="insert">+ })</pre>
<pre class="insert">+</pre>
<pre class="insert">+ postgresConstructingConnectionsCountMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="insert">+ Name: "store_postgres_connections",</pre>
<pre class="insert">+ Help: "Current number of postgres store connections",</pre>
<pre class="insert">+ ConstLabels: map[string]string{</pre>
<pre class="insert">+ "type": "constructing",</pre>
<pre class="insert">+ },</pre>
<pre class="insert">+ }, func() float64 {</pre>
<pre class="insert">+ return float64(pool.Stat().ConstructingConns())</pre>
<pre class="insert">+ })</pre>
<pre class="insert">+</pre>
<pre class="insert">+ postgresNewConnectionsCountMetric := prometheus.NewGaugeFunc(prometheus.GaugeOpts{</pre>
<pre class="insert">+ Name: "store_postgres_connections",</pre>
<pre class="insert">+ Help: "Current number of postgres store connections",</pre>
<pre class="insert">+ ConstLabels: map[string]string{</pre>
<pre class="insert">+ "type": "new",</pre>
<pre class="context"> },</pre>
<pre class="context"> }, func() float64 {</pre>
<pre class="delete">- return float64(db.Stats().MaxLifetimeClosed)</pre>
<pre class="insert">+ return float64(pool.Stat().NewConnsCount())</pre>
<pre class="context"> })</pre>
<pre class="context"> </pre>
<pre class="context"> if err := metrics.</pre>
<pre class="context"> BulkRegister(postgresCurrentConnectionMetric, postgresInUseConnectionMetric, postgresIdleConnectionMetric,</pre>
<pre class="context"> postgresMaxOpenConnectionMetric, postgresWaitConnectionMetric, postgresWaitConnectionDurationMetric,</pre>
<pre class="delete">- postgresMaxIdleClosedConnectionMetric, postgresMaxIdleTimeClosedConnectionMetric, postgresMaxLifeTimeClosedConnectionMetric); err != nil {</pre>
<pre class="insert">+ postgresMaxIdleClosedConnectionMetric, postgresMaxLifeTimeClosedConnectionMetric, postgresSuccessfulAcquireCountMetric,</pre>
<pre class="insert">+ postgresCanceledAcquireCountMetric, postgresConstructingConnectionsCountMetric, postgresNewConnectionsCountMetric,</pre>
<pre class="insert">+ ); err != nil {</pre>
<pre class="context"> return err</pre>
<pre class="context"> }</pre>
<pre class="context"> return nil</pre></div></div>
</div>
</body></html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment