Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

Commit e464b6d

Browse files
authored
Merge pull request #33 from ContaAzul/write-througput
Database Writing usage.
2 parents 08c3bf2 + 01df6cf commit e464b6d

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

gauges/write_throughput.go

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package gauges
2+
3+
import (
4+
"time"
5+
6+
"github.com/prometheus/client_golang/prometheus"
7+
)
8+
9+
var databaseWritingUsageQuery = `
10+
SELECT coalesce(tup_inserted, 0) as tup_inserted
11+
, coalesce(tup_updated, 0) as tup_updated
12+
, coalesce(tup_deleted, 0) as tup_deleted
13+
FROM pg_stat_database
14+
WHERE datname = current_database()
15+
`
16+
17+
type writingUsage struct {
18+
TuplesInserted float64 `db:"tup_inserted"`
19+
TuplesUpdated float64 `db:"tup_updated"`
20+
TuplesDeleted float64 `db:"tup_deleted"`
21+
}
22+
23+
func (g *Gauges) DatabaseWritingUsage() *prometheus.GaugeVec {
24+
var gauge = prometheus.NewGaugeVec(
25+
prometheus.GaugeOpts{
26+
Name: "postgresql_database_writing_usage",
27+
Help: "Number of inserted, updated and deleted rows per database",
28+
ConstLabels: g.labels,
29+
},
30+
[]string{"stat"},
31+
)
32+
go func() {
33+
for {
34+
var writingUsage []writingUsage
35+
if err := g.query(databaseWritingUsageQuery, &writingUsage, emptyParams); err == nil {
36+
for _, database := range writingUsage {
37+
gauge.With(prometheus.Labels{
38+
"stat": "tup_inserted",
39+
}).Set(database.TuplesInserted)
40+
gauge.With(prometheus.Labels{
41+
"stat": "tup_updated",
42+
}).Set(database.TuplesUpdated)
43+
gauge.With(prometheus.Labels{
44+
"stat": "tup_deleted",
45+
}).Set(database.TuplesDeleted)
46+
}
47+
}
48+
time.Sleep(g.interval)
49+
}
50+
}()
51+
return gauge
52+
}

gauges/write_throughput_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package gauges
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestDatabaseWritingUsage(t *testing.T) {
10+
var assert = assert.New(t)
11+
_, gauges, close := prepare(t)
12+
defer close()
13+
var metrics = evaluate(t, gauges.DatabaseWritingUsage())
14+
assert.True(len(metrics) > 0)
15+
assertNoErrs(t, gauges)
16+
}

main.go

+1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ func watch(db *sql.DB, reg prometheus.Registerer, name string) {
105105
reg.MustRegister(gauges.Up())
106106
reg.MustRegister(gauges.TableScans())
107107
reg.MustRegister(gauges.DatabaseReadingUsage())
108+
reg.MustRegister(gauges.DatabaseWritingUsage())
108109
reg.MustRegister(gauges.HOTUpdates())
109110

110111
}

0 commit comments

Comments
 (0)