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 +4 -4
- data/lib/easymon/checks/multi_active_record_check.rb +30 -4
- data/lib/easymon/version.rb +1 -1
- data/test/dummy/log/development.log +0 -0
- data/test/dummy/log/test.log +23610 -572
- data/test/dummy/tmp/local_secret.txt +1 -1
- data/test/unit/checks/multi_active_record_check_test.rb +94 -0
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 490608ebcb523864b151edb279f588666d28f9c4f7d8c82dd20ca78c693fa8b3
|
|
4
|
+
data.tar.gz: 0454747b69b860392618069eca04e8e6915b09d38b3b0ffc70e561a0a9d35b5c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
|
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
|
-
|
|
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
|
data/lib/easymon/version.rb
CHANGED
|
File without changes
|