Class: PgEventstore::Web::Metrics::Collectors::Base
- Inherits:
-
Object
- Object
- PgEventstore::Web::Metrics::Collectors::Base
- 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.
Direct Known Subclasses
SubscriptionsHealth, SubscriptionsLatency, SubscriptionsThroughput
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.
5_000
Instance Attribute Summary collapse
-
#connection ⇒ Connection
Returns the value of attribute connection.
-
#sets ⇒ Array[String]
Returns the value of attribute sets.
Instance Method Summary collapse
- #call ⇒ Array<PgEventstore::Web::Metrics::MetricFamily>
-
#initialize(connection, sets: []) ⇒ Base
constructor
A new instance of Base.
- #subscription_labels(row) ⇒ Hash<Symbol => String>
- #subscriptions_sql_builder ⇒ PgEventstore::SQLBuilder
- #transaction_queries ⇒ PgEventstore::TransactionQueries
- #with_safe_conn {|conn| ... } ⇒ Array<Hash>
Constructor Details
#initialize(connection, sets: []) ⇒ Base
Returns a new instance of Base.
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
#connection ⇒ Connection
Returns the value of attribute connection.
17 18 19 |
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 17 def connection @connection end |
#sets ⇒ Array[String]
Returns the value of attribute sets.
20 21 22 |
# File 'lib/pg_eventstore/web/metrics/collectors/base.rb', line 20 def sets @sets end |
Instance Method Details
#call ⇒ Array<PgEventstore::Web::Metrics::MetricFamily>
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>
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_builder ⇒ 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_queries ⇒ 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>
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 |