easymon 1.4.2 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54cb530caec2412771ed64ef0e61841aa44e7794b2556b5549dca177b6118bfa
4
- data.tar.gz: efd43b670a69577f16fd9a8ef83eb2748989c2a0992d07e5490d12290fdbd9e4
3
+ metadata.gz: 4a3712c0b6f801e51d8ea6c772e78822a34d3ceb96f8726ed7b1e49c9d176d89
4
+ data.tar.gz: 69578f0bf9e951c067a7fb4cdfae3ef5970ba93f22507199f1574d5cb27287fb
5
5
  SHA512:
6
- metadata.gz: b79e1a2b8c43fd58ae493a7bfaf780ba6ab5948237454ee0ab86db14e1c2bb8988617f8cf68d11164c2bf94bef7373be1a77be803a0de47cb0b7e3ad33fe74bb
7
- data.tar.gz: 6190f08e784393b88c4d544b7385c66c3f25875ba35b0791f4abcd87b9481e2075bf8deddfef78b7b34db43687d11725cf753e556e16995bd42ab768fd72bfb2
6
+ metadata.gz: 5b5201d16b662203549c8c75187ee497be56340511633d65c0762ca880dc241c76f84fbea71dd23bc3bdcb9d190adf921b9016885dd2b66c7718aea1d56cfaae
7
+ data.tar.gz: 4abf477bdf728f078780a5ef85539dc38fd4810d3cff48a468220b78d088ff41e57579fdc6c6b9a5dfce8fc887ffabd0e6b9178c0eb34ed603e00384ebbd8100
data/README.md CHANGED
@@ -203,7 +203,7 @@ module Easymon
203
203
  end
204
204
  end
205
205
  def database_configuration
206
- env = "#{Rails.env}_slave"
206
+ env = "#{Rails.env}_replica"
207
207
  config = YAML.load_file(Rails.root.join('config/database.yml'))[env]
208
208
  end
209
209
  end
@@ -0,0 +1,29 @@
1
+ module Easymon
2
+ class ActiveRecordMysqlWriteableCheck
3
+ attr_accessor :klass
4
+
5
+ def initialize(klass, makara = false)
6
+ self.klass = klass
7
+ @query = "SELECT @@read_only"
8
+ # Trick makara into using the primary db
9
+ @query += " for UPDATE" if makara
10
+ end
11
+
12
+ def check
13
+ check_status = database_writeable?
14
+ if check_status
15
+ message = "@@read_only is 0"
16
+ else
17
+ message = "@@read_only is 1"
18
+ end
19
+ [check_status, message]
20
+ end
21
+
22
+ private
23
+ def database_writeable?
24
+ klass.connection.execute(@query).entries.flatten.first == 0
25
+ rescue
26
+ false
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,36 @@
1
+ require "redis"
2
+
3
+ module Easymon
4
+ class RedisWriteableCheck
5
+ attr_accessor :config
6
+
7
+ def initialize(config)
8
+ self.config = config
9
+ end
10
+
11
+ def check
12
+ check_status = redis_writeable?
13
+ message = check_status ? "Writeable" : "Read Only"
14
+
15
+ [check_status, message]
16
+ end
17
+
18
+ private
19
+ def redis_writeable?
20
+ redis = Redis.new(@config)
21
+ key = "easymon_#{Time.now.to_i}"
22
+ reply = redis.set(key, "true")
23
+ redis.del(key)
24
+
25
+ reply == "OK"
26
+ rescue
27
+ false
28
+ ensure
29
+ if redis.respond_to? :close
30
+ redis.close # Redis 4+
31
+ else
32
+ redis.client.disconnect # Older redis
33
+ end
34
+ end
35
+ end
36
+ end
@@ -2,10 +2,10 @@ module Easymon
2
2
  class SplitActiveRecordCheck
3
3
  attr_accessor :block
4
4
  attr_accessor :results
5
-
5
+
6
6
  # Here we pass a block so we get a fresh instance of ActiveRecord::Base or
7
7
  # whatever other class we might be using to make database connections
8
- #
8
+ #
9
9
  # For example, given the following other class:
10
10
  # module Easymon
11
11
  # class Base < ActiveRecord::Base
@@ -18,12 +18,12 @@ module Easymon
18
18
  # end
19
19
  #
20
20
  # def database_configuration
21
- # env = "#{Rails.env}_slave"
21
+ # env = "#{Rails.env}_replica"
22
22
  # config = YAML.load_file(Rails.root.join('config/database.yml'))[env]
23
23
  # end
24
24
  # end
25
25
  # end
26
- #
26
+ #
27
27
  # We would check both it and ActiveRecord::Base like so:
28
28
  # check = Easymon::SplitActiveRecordCheck.new {
29
29
  # [ActiveRecord::Base.connection, Easymon::Base.connection]
@@ -31,20 +31,20 @@ module Easymon
31
31
  # Easymon::Repository.add("split-database", check)
32
32
  def initialize(&block)
33
33
  self.block = block
34
- end
35
-
34
+ end
35
+
36
36
  # Assumes only 2 connections
37
37
  def check
38
38
  connections = Array(@block.call)
39
39
 
40
40
  results = connections.map{|connection| database_up?(connection) }
41
-
42
- master_status = results.first ? "Master: Up" : "Master: Down"
43
- slave_status = results.last ? "Slave: Up" : "Slave: Down"
44
-
45
- [(results.all? && results.count > 0), "#{master_status} - #{slave_status}"]
41
+
42
+ primary_status = results.first ? "Primary: Up" : "Primary: Down"
43
+ replica_status = results.last ? "Replica: Up" : "Replica: Down"
44
+
45
+ [(results.all? && results.count > 0), "#{primary_status} - #{replica_status}"]
46
46
  end
47
-
47
+
48
48
  private
49
49
  def database_up?(connection)
50
50
  connection.active?
@@ -1,3 +1,3 @@
1
1
  module Easymon
2
- VERSION = "1.4.2"
2
+ VERSION = "1.6.1"
3
3
  end
data/lib/easymon.rb CHANGED
@@ -8,8 +8,10 @@ require "easymon/repository"
8
8
  require "easymon/result"
9
9
 
10
10
  require "easymon/checks/active_record_check"
11
+ require "easymon/checks/active_record_mysql_writeable_check"
11
12
  require "easymon/checks/split_active_record_check"
12
13
  require "easymon/checks/redis_check"
14
+ require "easymon/checks/redis_writeable_check"
13
15
  require "easymon/checks/memcached_check"
14
16
  require "easymon/checks/semaphore_check"
15
17
  require "easymon/checks/traffic_enabled_check"
File without changes
@@ -17,10 +17,10 @@ test:
17
17
  host: 127.0.0.1
18
18
  port: 3306
19
19
 
20
- test_slave:
20
+ test_replica:
21
21
  adapter: mysql2
22
22
  encoding: utf8
23
- database: dummy_test_slave
23
+ database: dummy_test_replica
24
24
  username: root
25
25
  host: 127.0.0.1
26
26
  port: 3306
File without changes
@@ -1,66 +1,24 @@
1
- DEPRECATION WARNING: Using `Rails::Application` subclass to start the server is deprecated and will be removed in Rails 6.0. Please change `run Dummy::Application` to `run Rails.application` in config.ru. (called from require at script/rails:6)
2
- Started GET "/up" for 127.0.0.1 at 2018-11-08 22:46:44 -0500
3
- Processing by Easymon::ChecksController#index as */*
4
- Rendering text template
5
- Rendered text template (0.0ms)
6
- Completed 503 Service Unavailable in 33ms (Views: 0.6ms)
7
-
8
-
9
- Started GET "/up/foobar" for 127.0.0.1 at 2018-11-08 22:46:48 -0500
10
- Processing by Easymon::ChecksController#show as */*
11
- Parameters: {"check"=>"foobar"}
12
- Rendering text template
13
- Rendered text template (0.0ms)
14
- Completed 404 Not Found in 1ms (Views: 0.3ms)
15
-
16
-
17
- Started GET "/up/foobar" for 127.0.0.1 at 2018-11-08 22:47:10 -0500
18
- Processing by Easymon::ChecksController#show as */*
19
- Parameters: {"check"=>"foobar"}
20
- Rendering text template
21
- Rendered text template (0.0ms)
22
- Completed 404 Not Found in 1ms (Views: 0.4ms)
23
-
24
-
25
- Started GET "/up/foobar" for 127.0.0.1 at 2018-11-08 22:49:15 -0500
26
- Processing by Easymon::ChecksController#show as */*
27
- Parameters: {"check"=>"foobar"}
28
- Rendering text template
29
- Rendered text template (0.0ms)
30
- Completed 404 Not Found in 1ms (Views: 0.5ms)
31
-
32
-
33
- DEPRECATION WARNING: Using `Rails::Application` subclass to start the server is deprecated and will be removed in Rails 6.0. Please change `run Dummy::Application` to `run Rails.application` in config.ru. (called from require at script/rails:6)
34
- Started GET "/up/critical/foobar" for 127.0.0.1 at 2018-11-08 22:50:46 -0500
35
-
36
- ActionController::RoutingError (No route matches [GET] "/up/critical/foobar"):
37
-
38
- actionpack (5.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:65:in `call'
39
- actionpack (5.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
40
- railties (5.2.1) lib/rails/rack/logger.rb:38:in `call_app'
41
- railties (5.2.1) lib/rails/rack/logger.rb:26:in `block in call'
42
- activesupport (5.2.1) lib/active_support/tagged_logging.rb:71:in `block in tagged'
43
- activesupport (5.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
44
- activesupport (5.2.1) lib/active_support/tagged_logging.rb:71:in `tagged'
45
- railties (5.2.1) lib/rails/rack/logger.rb:26:in `call'
46
- actionpack (5.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
47
- actionpack (5.2.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
48
- rack (2.0.6) lib/rack/method_override.rb:22:in `call'
49
- rack (2.0.6) lib/rack/runtime.rb:22:in `call'
50
- activesupport (5.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
51
- actionpack (5.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
52
- actionpack (5.2.1) lib/action_dispatch/middleware/static.rb:127:in `call'
53
- rack (2.0.6) lib/rack/sendfile.rb:111:in `call'
54
- railties (5.2.1) lib/rails/engine.rb:524:in `call'
55
- rack (2.0.6) lib/rack/handler/webrick.rb:86:in `service'
56
- /Users/nathan/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:140:in `service'
57
- /Users/nathan/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:96:in `run'
58
- /Users/nathan/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'
59
- Started GET "/up/critical" for 127.0.0.1 at 2018-11-08 22:51:07 -0500
60
- Processing by Easymon::ChecksController#show as */*
61
- Parameters: {"check"=>"critical"}
62
- Rendering text template
63
- Rendered text template (0.0ms)
64
- Completed 503 Service Unavailable in 29ms (Views: 0.5ms)
65
-
66
-
1
+  (0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
2
+  (1.4ms) CREATE DATABASE `dummy_development` DEFAULT CHARACTER SET `utf8`
3
+  (0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
4
+  (1.0ms) CREATE DATABASE `dummy_test` DEFAULT CHARACTER SET `utf8`
5
+  (0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
6
+  (0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
7
+  (25.9ms) CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL PRIMARY KEY)
8
+  (20.9ms) CREATE TABLE `ar_internal_metadata` (`key` varchar(255) NOT NULL PRIMARY KEY, `value` varchar(255), `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL)
9
+  (0.1ms) SELECT GET_LOCK('1721091371569202325', 0)
10
+  (0.2ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
11
+ ActiveRecord::InternalMetadata Load (0.2ms) SELECT `ar_internal_metadata`.* FROM `ar_internal_metadata` WHERE `ar_internal_metadata`.`key` = 'environment' LIMIT 1
12
+  (0.1ms) BEGIN
13
+ ActiveRecord::InternalMetadata Create (0.2ms) INSERT INTO `ar_internal_metadata` (`key`, `value`, `created_at`, `updated_at`) VALUES ('environment', 'development', '2022-05-04 18:01:28', '2022-05-04 18:01:28')
14
+  (0.1ms) COMMIT
15
+  (0.1ms) SELECT RELEASE_LOCK('1721091371569202325')
16
+  (0.3ms) SELECT @@read_only
17
+  (0.2ms) SELECT @@read_only
18
+  (0.1ms) SELECT @@read_only
19
+  (0.8ms) SELECT @@read_only;
20
+  (0.9ms) SELECT @@read_only;
21
+  (3.2ms) SELECT @@read_only;
22
+  (0.2ms) SELECT @@read_only
23
+  (0.2ms) SELECT @@read_only;
24
+  (0.2ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC