easymon 1.6.5 → 1.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0da61c5a7884eff9b291047c2f62fb33522ed563f7354a96668382efee677e9
4
- data.tar.gz: 6f4bd4639bbb7eb92a1704790b74dd7ad1a39e12bdb3eaaadfe9a09c80f92628
3
+ metadata.gz: 490608ebcb523864b151edb279f588666d28f9c4f7d8c82dd20ca78c693fa8b3
4
+ data.tar.gz: 0454747b69b860392618069eca04e8e6915b09d38b3b0ffc70e561a0a9d35b5c
5
5
  SHA512:
6
- metadata.gz: 629e59c09ca919641f656fd57b70ca842e475b30be7ab5e0e257a2b0ddd10a827e64fd902b876fab28f54bed3d7e4f9518917bd95acbcb5e2ff8477a741c89bf
7
- data.tar.gz: db6dddd3cc4aaf6397fad30c0314df8bdac3b98f534fa4a6713f66a953529dc301ef1f9d7f3dedc22d100caf32a472f40c46dca59a036f009a83194496e96374
6
+ metadata.gz: f74dd8bb8cf1bf24e94234e73a164f2deb1b5a0aa12e5b94ef05a157b50cbdc89cd3a5925b88c3c72879bbbcab3c40b0d50d45e120858489bce1a1ccffa757e5
7
+ data.tar.gz: 102eb2cd04c6158e3b568177925118b42cba506a676f6067943ac296977ea05d29ede3b55f6a03d5ae431a4c41354fca34784b161475400a8f0df3a590c618df
@@ -1,6 +1,7 @@
1
1
  module Easymon
2
2
  class MultiActiveRecordCheck
3
3
  attr_accessor :block
4
+ attr_accessor :query
4
5
  attr_accessor :results
5
6
 
6
7
  # Here we pass a block so we get a fresh instance of ActiveRecord::Base or
@@ -26,15 +27,36 @@ module Easymon
26
27
  # }
27
28
  # }
28
29
  # Easymon::Repository.add("multi-database", check)
30
+ #
31
+ # Optionally, a health check query can be given instead of relying on
32
+ # connection.active?. The query is run against each connection and must
33
+ # return a single truthy/falsey value (e.g. 1/0 from MySQL):
34
+ # check = Easymon::MultiActiveRecordCheck.new(query: "SELECT @@read_only") {
35
+ # { "Primary": ActiveRecord::Base.connection }
36
+ # }
37
+ #
38
+ # A per-connection query can also be given by pairing the connection with
39
+ # its query. It takes precedence over the default query: option above:
40
+ # check = Easymon::MultiActiveRecordCheck.new {
41
+ # {
42
+ # "Primary": [ActiveRecord::Base.connection, "SELECT @@read_only"],
43
+ # "PrimaryReplica": [Easymon::PrimaryReplica.connection, "SELECT TIMESTAMPDIFF(MICROSECOND, MAX(ts), NOW(6)) / 1000000 < 1 FROM percona.heartbeat"],
44
+ # "OtherReplica": Easymon::OtherReplica.connection # plain connection.active?
45
+ # }
46
+ # }
29
47
 
30
- def initialize(&block)
48
+ def initialize(query: nil, &block)
49
+ self.query = query
31
50
  self.block = block
32
51
  end
33
52
 
34
53
  def check
35
54
  connections = Hash(@block.call)
36
55
 
37
- results = connections.transform_values { |connection| database_up?(connection) }
56
+ results = connections.transform_values do |value|
57
+ connection, connection_query = value.is_a?(Array) ? value : [ value, nil ]
58
+ database_up?(connection, query: connection_query || query)
59
+ end
38
60
 
39
61
  status = results.map { |db_name, result| "#{db_name}: #{result ? 'Up' : 'Down'}" }.join(" - ")
40
62
 
@@ -42,9 +64,13 @@ module Easymon
42
64
  end
43
65
 
44
66
  private
45
- def database_up?(connection)
67
+ def database_up?(connection, query: nil)
46
68
  connection.connect!
47
- connection.active?
69
+ if query
70
+ ActiveModel::Type::Boolean.new.cast(connection.select_value(query)) || false
71
+ else
72
+ connection.active?
73
+ end
48
74
  rescue
49
75
  false
50
76
  end
@@ -1,3 +1,3 @@
1
1
  module Easymon
2
- VERSION = "1.6.5"
2
+ VERSION = "1.6.6"
3
3
  end
File without changes