firehol/netdata

View on GitHub
src/go/plugin/go.d/modules/postgres/metrics.go

Summary

Maintainability
A
0 mins
Test Coverage
// SPDX-License-Identifier: GPL-3.0-or-later

package postgres

import "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/metrics"

type pgMetrics struct {
    srvMetrics
    dbs       map[string]*dbMetrics
    tables    map[string]*tableMetrics
    indexes   map[string]*indexMetrics
    replApps  map[string]*replStandbyAppMetrics
    replSlots map[string]*replSlotMetrics
}

type srvMetrics struct {
    xactTimeHist  metrics.Histogram
    queryTimeHist metrics.Histogram

    maxConnections int64
    maxLocksHeld   int64

    uptime int64

    relkindOrdinaryTable        int64
    relkindIndex                int64
    relkindSequence             int64
    relkindTOASTTable           int64
    relkindView                 int64
    relkindMatView              int64
    relkindCompositeType        int64
    relkindForeignTable         int64
    relkindPartitionedTable     int64
    relkindPartitionedIndex     int64
    relkindOrdinaryTableSize    int64
    relkindIndexSize            int64
    relkindSequenceSize         int64
    relkindTOASTTableSize       int64
    relkindViewSize             int64
    relkindMatViewSize          int64
    relkindCompositeTypeSize    int64
    relkindForeignTableSize     int64
    relkindPartitionedTableSize int64
    relkindPartitionedIndexSize int64

    connUsed                      int64
    connStateActive               int64
    connStateIdle                 int64
    connStateIdleInTrans          int64
    connStateIdleInTransAborted   int64
    connStateFastpathFunctionCall int64
    connStateDisabled             int64

    checkpointsTimed    int64
    checkpointsReq      int64
    checkpointWriteTime int64
    checkpointSyncTime  int64
    buffersCheckpoint   int64
    buffersClean        int64
    maxwrittenClean     int64
    buffersBackend      int64
    buffersBackendFsync int64
    buffersAlloc        int64

    oldestXID                         int64
    percentTowardsWraparound          int64
    percentTowardsEmergencyAutovacuum int64

    walWrites            int64
    walRecycledFiles     int64
    walWrittenFiles      int64
    walArchiveFilesReady int64
    walArchiveFilesDone  int64

    autovacuumWorkersAnalyze       int64
    autovacuumWorkersVacuumAnalyze int64
    autovacuumWorkersVacuum        int64
    autovacuumWorkersVacuumFreeze  int64
    autovacuumWorkersBrinSummarize int64
}

type dbMetrics struct {
    name string

    updated   bool
    hasCharts bool

    numBackends  int64
    datConnLimit int64
    xactCommit   int64
    xactRollback int64
    blksRead     incDelta
    blksHit      incDelta
    tupReturned  incDelta
    tupFetched   incDelta
    tupInserted  int64
    tupUpdated   int64
    tupDeleted   int64
    conflicts    int64
    tempFiles    int64
    tempBytes    int64
    deadlocks    int64

    size *int64 // need 'connect' privilege for pg_database_size()

    conflTablespace int64
    conflLock       int64
    conflSnapshot   int64
    conflBufferpin  int64
    conflDeadlock   int64

    accessShareLockHeld             int64
    rowShareLockHeld                int64
    rowExclusiveLockHeld            int64
    shareUpdateExclusiveLockHeld    int64
    shareLockHeld                   int64
    shareRowExclusiveLockHeld       int64
    exclusiveLockHeld               int64
    accessExclusiveLockHeld         int64
    accessShareLockAwaited          int64
    rowShareLockAwaited             int64
    rowExclusiveLockAwaited         int64
    shareUpdateExclusiveLockAwaited int64
    shareLockAwaited                int64
    shareRowExclusiveLockAwaited    int64
    exclusiveLockAwaited            int64
    accessExclusiveLockAwaited      int64
}

type replStandbyAppMetrics struct {
    name string

    updated   bool
    hasCharts bool

    walSentDelta   int64
    walWriteDelta  int64
    walFlushDelta  int64
    walReplayDelta int64

    walWriteLag  int64
    walFlushLag  int64
    walReplayLag int64
}

type replSlotMetrics struct {
    name string

    updated   bool
    hasCharts bool

    walKeep int64
    files   int64
}

type tableMetrics struct {
    name       string
    parentName string
    db         string
    schema     string

    updated                  bool
    hasCharts                bool
    hasLastAutoVacuumChart   bool
    hasLastVacuumChart       bool
    hasLastAutoAnalyzeChart  bool
    hasLastAnalyzeChart      bool
    hasTableIOCharts         bool
    hasTableIdxIOCharts      bool
    hasTableTOASTIOCharts    bool
    hasTableTOASTIdxIOCharts bool

    // pg_stat_user_tables
    seqScan            int64
    seqTupRead         int64
    idxScan            int64
    idxTupFetch        int64
    nTupIns            int64
    nTupUpd            incDelta
    nTupDel            int64
    nTupHotUpd         incDelta
    nLiveTup           int64
    nDeadTup           int64
    lastVacuumAgo      int64
    lastAutoVacuumAgo  int64
    lastAnalyzeAgo     int64
    lastAutoAnalyzeAgo int64
    vacuumCount        int64
    autovacuumCount    int64
    analyzeCount       int64
    autoAnalyzeCount   int64

    // pg_statio_user_tables
    heapBlksRead  incDelta
    heapBlksHit   incDelta
    idxBlksRead   incDelta
    idxBlksHit    incDelta
    toastBlksRead incDelta
    toastBlksHit  incDelta
    tidxBlksRead  incDelta
    tidxBlksHit   incDelta

    totalSize int64

    bloatSize     *int64 // need 'SELECT' access to the table
    bloatSizePerc *int64 // need 'SELECT' access to the table
    nullColumns   *int64 // need 'SELECT' access to the table
}

type indexMetrics struct {
    name        string
    db          string
    schema      string
    table       string
    parentTable string

    updated   bool
    hasCharts bool

    idxScan     int64
    idxTupRead  int64
    idxTupFetch int64

    size int64

    bloatSize     *int64 // need 'SELECT' access to the table
    bloatSizePerc *int64 // need 'SELECT' access to the table
}
type incDelta struct{ prev, last int64 }

func (pc *incDelta) delta() int64 { return pc.last - pc.prev }