Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
---
# This action is synced from https://github.com/prometheus/prometheus
version: 1
name: golangci-lint
on:
push:
Expand All @@ -26,11 +25,12 @@ jobs:
- name: install Go
uses: actions/setup-go@v5
with:
go-version: 1.25.x
go-version: 1.26.x
- name: Install snmp_exporter/generator dependencies
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
if: github.repository == 'prometheus/snmp_exporter'
- name: Lint
uses: golangci/golangci-lint-action@v8
with:
version: v2.4.0
version: v2.12.2
install-mode: goinstall
38 changes: 19 additions & 19 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
---
version: "2"

linters:
enable:
- misspell
- revive

issues:
exclude-rules:
- path: _test.go
linters:
- errcheck

linters-settings:
errcheck:
exclude-functions:
# Never check for logger errors.
- (github.com/go-kit/log.Logger).Log
revive:
- misspell
- revive
settings:
errcheck:
exclude-functions:
# Never check for logger errors.
- (github.com/go-kit/log.Logger).Log
revive:
rules:
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-parameter
- name: unused-parameter
severity: warning
disabled: true
exclusions:
rules:
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-parameter
- name: unused-parameter
severity: warning
disabled: true
- path: _test.go
linters:
- errcheck
4 changes: 2 additions & 2 deletions cmd/postgres_exporter/namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ func queryNamespaceMapping(server *Server, namespace string, mapping MetricMapNa
if !found {
// I've no idea how to avoid this properly at the moment, but this is
// an admin tool so you're not injecting SQL right?
rows, err = server.db.Query(fmt.Sprintf("SELECT * FROM %s;", namespace)) // nolint: gas
rows, err = server.db.Query(fmt.Sprintf("SELECT * FROM %s;", namespace)) // nolint: gosec
} else {
rows, err = server.db.Query(query)
}
if err != nil {
return []prometheus.Metric{}, []error{}, fmt.Errorf("Error running query on database %q: %s %v", server, namespace, err)
return []prometheus.Metric{}, []error{}, fmt.Errorf("error running query on database %q: %s %v", server, namespace, err)
}
defer rows.Close() // nolint: errcheck

Expand Down
10 changes: 5 additions & 5 deletions cmd/postgres_exporter/pg_setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,15 @@ func querySettings(ch chan<- prometheus.Metric, server *Server) error {

rows, err := server.db.Query(query)
if err != nil {
return fmt.Errorf("Error running query on database %q: %s %v", server, namespace, err)
return fmt.Errorf("error running query on database %q: %s %v", server, namespace, err)
}
defer rows.Close() // nolint: errcheck

for rows.Next() {
s := &pgSetting{}
err = rows.Scan(&s.name, &s.setting, &s.unit, &s.shortDesc, &s.vartype)
if err != nil {
return fmt.Errorf("Error retrieving rows on %q: %s %v", server, namespace, err)
return fmt.Errorf("error retrieving rows on %q: %s %v", server, namespace, err)
}

ch <- s.metric(server.labels)
Expand All @@ -68,7 +68,7 @@ type pgSetting struct {
func (s *pgSetting) metric(labels prometheus.Labels) prometheus.Metric {
var (
err error
name = strings.Replace(s.name, ".", "_", -1)
name = strings.ReplaceAll(s.name, ".", "_")
unit = s.unit // nolint: ineffassign
shortDesc = fmt.Sprintf("Server Parameter: %s", s.name)
subsystem = "settings"
Expand Down Expand Up @@ -120,7 +120,7 @@ func (s *pgSetting) normaliseUnit() (val float64, unit string, err error) {

val, err = strconv.ParseFloat(s.setting, 64)
if err != nil {
return val, unit, fmt.Errorf("Error converting setting %q value %q to float: %s", s.name, s.setting, err)
return val, unit, fmt.Errorf("error converting setting %q value %q to float: %s", s.name, s.setting, err)
}

// Units defined in: https://www.postgresql.org/docs/current/static/config-setting.html
Expand All @@ -132,7 +132,7 @@ func (s *pgSetting) normaliseUnit() (val float64, unit string, err error) {
case "B", "kB", "MB", "GB", "TB", "1kB", "2kB", "4kB", "8kB", "16kB", "32kB", "64kB", "16MB", "32MB", "64MB":
unit = "bytes"
default:
err = fmt.Errorf("Unknown unit for runtime variable: %q", s.unit)
err = fmt.Errorf("unknown unit for runtime variable: %q", s.unit)
return
}

Expand Down
6 changes: 3 additions & 3 deletions cmd/postgres_exporter/postgres_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -587,11 +587,11 @@ func checkPostgresVersion(db *sql.DB, server string) (semver.Version, string, er
var versionString string
err := versionRow.Scan(&versionString)
if err != nil {
return semver.Version{}, "", fmt.Errorf("Error scanning version string on %q: %v", server, err)
return semver.Version{}, "", fmt.Errorf("error scanning version string on %q: %v", server, err)
}
semanticVersion, err := parseVersion(versionString)
if err != nil {
return semver.Version{}, "", fmt.Errorf("Error parsing version string on %q: %v", server, err)
return semver.Version{}, "", fmt.Errorf("error parsing version string on %q: %v", server, err)
}

return semanticVersion, versionString, nil
Expand All @@ -601,7 +601,7 @@ func checkPostgresVersion(db *sql.DB, server string) (semver.Version, string, er
func (e *Exporter) checkMapVersions(ch chan<- prometheus.Metric, server *Server) error {
semanticVersion, versionString, err := checkPostgresVersion(server.db, server.String())
if err != nil {
return fmt.Errorf("Error fetching version string on %q: %v", server, err)
return fmt.Errorf("error fetching version string on %q: %v", server, err)
}

if !e.disableDefaultMetrics && semanticVersion.LT(lowestSupportedVersion) {
Expand Down
2 changes: 1 addition & 1 deletion cmd/postgres_exporter/probe.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func handleProbe(logger log.Logger, excludeDatabases []string) http.HandlerFunc
}

// Cleanup underlying connections to prevent connection leaks
defer pc.Close()
defer func() { _ = pc.Close() }()

// TODO(@sysadmind): Remove the registry.MustRegister() call below and instead handle the collection here. That will allow
// for the passing of context, handling of timeouts, and more control over the collection.
Expand Down
2 changes: 1 addition & 1 deletion cmd/postgres_exporter/queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ func addQueries(content []byte, pgVersion semver.Version, server *Server) error
func queryDatabases(server *Server) ([]string, error) {
rows, err := server.db.Query("SELECT datname FROM pg_database WHERE datallowconn = true AND datistemplate = false AND datname != current_database()")
if err != nil {
return nil, fmt.Errorf("Error retrieving databases: %v", err)
return nil, fmt.Errorf("error retrieving databases: %v", err)
}
defer rows.Close() // nolint: errcheck

Expand Down
2 changes: 1 addition & 1 deletion collector/collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ func (p PostgresCollector) Collect(ch chan<- prometheus.Metric) {
level.Error(p.logger).Log("msg", "Error opening connection to database", "err", err)
return
}
defer inst.Close()
defer func() { _ = inst.Close() }()

wg := sync.WaitGroup{}
wg.Add(len(p.Collectors))
Expand Down
20 changes: 10 additions & 10 deletions collector/collector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ func readMetric(m prometheus.Metric) MetricResult {

func sanitizeQuery(q string) string {
q = strings.Join(strings.Fields(q), " ")
q = strings.Replace(q, "(", "\\(", -1)
q = strings.Replace(q, "?", "\\?", -1)
q = strings.Replace(q, ")", "\\)", -1)
q = strings.Replace(q, "[", "\\[", -1)
q = strings.Replace(q, "]", "\\]", -1)
q = strings.Replace(q, "{", "\\{", -1)
q = strings.Replace(q, "}", "\\}", -1)
q = strings.Replace(q, "*", "\\*", -1)
q = strings.Replace(q, "^", "\\^", -1)
q = strings.Replace(q, "$", "\\$", -1)
q = strings.ReplaceAll(q, "(", "\\(")
q = strings.ReplaceAll(q, "?", "\\?")
q = strings.ReplaceAll(q, ")", "\\)")
q = strings.ReplaceAll(q, "[", "\\[")
q = strings.ReplaceAll(q, "]", "\\]")
q = strings.ReplaceAll(q, "{", "\\{")
q = strings.ReplaceAll(q, "}", "\\}")
q = strings.ReplaceAll(q, "*", "\\*")
q = strings.ReplaceAll(q, "^", "\\^")
q = strings.ReplaceAll(q, "$", "\\$")
return q
}
2 changes: 1 addition & 1 deletion collector/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func newInstance(dsn string) (*instance, error) {
if err != nil {
return nil, err
}
db.Close()
_ = db.Close()

return i, nil
}
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_database.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ func (c PGDatabaseCollector) Update(ctx context.Context, instance *instance, ch
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

var databases []string

Expand Down
2 changes: 1 addition & 1 deletion collector/pg_database_wraparound.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func (c *PGDatabaseWraparoundCollector) Update(ctx context.Context, instance *in
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var datname sql.NullString
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_locks.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ func (c PGLocksCollector) Update(ctx context.Context, instance *instance, ch cha
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

var datname, mode sql.NullString
var count sql.NullInt64
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_long_running_transactions.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ func (PGLongRunningTransactionsCollector) Update(ctx context.Context, instance *
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var transactions, ageInSeconds float64
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_replication_slot.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func (PGReplicationSlotCollector) Update(ctx context.Context, instance *instance
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var slotName sql.NullString
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_stat_activity_autovacuum.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func (PGStatActivityAutovacuumCollector) Update(ctx context.Context, instance *i
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var relname string
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_stat_database.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ func (c *PGStatDatabaseCollector) Update(ctx context.Context, instance *instance
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var datid, datname sql.NullString
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_stat_statements.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func (PGStatStatementsCollector) Update(ctx context.Context, instance *instance,
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()
for rows.Next() {
var user, datname, queryid sql.NullString
var callsTotal, rowsTotal sql.NullInt64
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_stat_user_tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var datname, schemaname, relname sql.NullString
Expand Down
4 changes: 2 additions & 2 deletions collector/pg_stat_walreceiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,13 @@ func (c *PGStatWalReceiverCollector) Update(ctx context.Context, instance *insta
query = fmt.Sprintf(pgStatWalReceiverQueryTemplate, "")
}

hasFlushedLSNRows.Close()
_ = hasFlushedLSNRows.Close()

rows, err := db.QueryContext(ctx, query)
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()
for rows.Next() {
var upstreamHost, slotName, status sql.NullString
var receiveStartLsn, receiveStartTli, flushedLsn, receivedTli, latestEndLsn, upstreamNode sql.NullInt64
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_statio_user_indexes.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func (c *PGStatioUserIndexesCollector) Update(ctx context.Context, instance *ins
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()
for rows.Next() {
var schemaname, relname, indexrelname sql.NullString
var idxBlksRead, idxBlksHit sql.NullFloat64
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_statio_user_tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ func (PGStatIOUserTablesCollector) Update(ctx context.Context, instance *instanc
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var datname, schemaname, relname sql.NullString
Expand Down
2 changes: 1 addition & 1 deletion collector/pg_xlog_location.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func (c PGXlogLocationCollector) Update(ctx context.Context, instance *instance,
if err != nil {
return err
}
defer rows.Close()
defer func() { _ = rows.Close() }()

for rows.Next() {
var bytes float64
Expand Down
2 changes: 1 addition & 1 deletion collector/probe.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func (pc *ProbeCollector) Collect(ch chan<- prometheus.Metric) {
level.Error(pc.logger).Log("msg", "Error opening connection to database", "err", err)
return
}
defer pc.instance.Close()
defer func() { _ = pc.instance.Close() }()

wg := sync.WaitGroup{}
wg.Add(len(pc.collectors))
Expand Down
6 changes: 3 additions & 3 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,14 @@ func (ch *Handler) ReloadConfig(f string, logger log.Logger) error {

yamlReader, err := os.Open(f)
if err != nil {
return fmt.Errorf("Error opening config file %q: %s", f, err)
return fmt.Errorf("error opening config file %q: %s", f, err)
}
defer yamlReader.Close()
defer func() { _ = yamlReader.Close() }()
decoder := yaml.NewDecoder(yamlReader)
decoder.KnownFields(true)

if err = decoder.Decode(config); err != nil {
return fmt.Errorf("Error parsing config file %q: %s", f, err)
return fmt.Errorf("error parsing config file %q: %s", f, err)
}

ch.Lock()
Expand Down
Loading