Class: PgEventstore::Web::Metrics::Collectors::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/pg_eventstore/web/metrics/collectors/base.rb,
sig/pg_eventstore/web/metrics/collectors/base.rbs

Overview

Base class for metric collectors. A collector runs read-only queries and returns an array of MetricFamily objects.

Constant Summary collapse

STATEMENT_TIMEOUT =

Milliseconds. Guards the store from a metrics query that got stuck - a scrape then fails visibly instead of piling up on the database.

Returns:

  • (Integer)
5_000

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection, sets: []) ⇒ Base

Returns a new instance of Base.

Parameters:

  • connection (PgEventstore::Connection)
  • sets (Array<String>) (defaults to: [])

    subscription sets to report on; an empty array means all of them

  • sets: (Array[String]) (defaults to: [])


25
26
27
28
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 25

def initialize(connection, sets: [])
  @connection = connection
  @sets = sets
end

Instance Attribute Details

#connectionConnection

Returns the value of attribute connection.

Returns:



17
18
19
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 17

def connection
  @connection
end

#setsArray[String]

Returns the value of attribute sets.

Returns:

  • (Array[String])


20
21
22
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 20

def sets
  @sets
end

Instance Method Details

#callArray<PgEventstore::Web::Metrics::MetricFamily>

Returns:

Raises:

  • (NotImplementedError)


31
32
33
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 31

def call
  raise NotImplementedError, "#{self.class} must implement #call"
end

#subscription_labels(row) ⇒ Hash<Symbol => String>

Parameters:

  • row (Hash)

Returns:

  • (Hash<Symbol => String>)


57
58
59
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 57

def subscription_labels(row)
  { set: row['set'], name: row['name'] }
end

#subscriptions_sql_builderPgEventstore::SQLBuilder

Returns:

  • (PgEventstore::SQLBuilder)


38
39
40
41
42
43
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 38

def subscriptions_sql_builder
  sql_builder = SQLBuilder.new.from('subscriptions', table_alias: 's')
  sql_builder.order('s.set, s.name')
  sql_builder.where('s.set = any(?::varchar[])', sets) if sets.any?
  sql_builder
end

#transaction_queriesPgEventstore::TransactionQueries

Returns:

  • (PgEventstore::TransactionQueries)


62
63
64
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 62

def transaction_queries
  TransactionQueries.new(connection)
end

#with_safe_conn {|conn| ... } ⇒ Array<Hash>

Yields:

Yield Parameters:

  • conn (PgConnection)

Yield Returns:

Returns:

  • (Array<Hash>)


46
47
48
49
50
51
52
53
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 46

def with_safe_conn
  transaction_queries.transaction(:read_committed, read_only: true) do
    connection.with do |conn|
      conn.exec("set local statement_timeout to #{STATEMENT_TIMEOUT}")
      yield conn
    end
  end.to_a
end