hot_catch 0.1.4.1 → 0.1.5
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/generators/hot_catch/install_generator.rb +2 -1
- data/lib/hot_catch.rb +35 -25
- data/lib/hot_catch/get_nginx_logs.rb +18 -0
- data/lib/hot_catch/hard_worker.rb +21 -5
- data/lib/hot_catch/nginx_worker.rb +11 -0
- data/lib/hot_catch/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db8e2f32d740a79b8e344f50fa3346a7c8614fee
|
4
|
+
data.tar.gz: d7a9c3d845ac1bd9109558b1fde39036215de76a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c49b96f10cb27a39805080ddc1a854ac475f1ddf27167d92ad6f81add2f94ea900dd77e371c037406121f4620074bef26b40be831dc778ce8c1124d86b0fb3f4
|
7
|
+
data.tar.gz: d9446c3a2b474e4d611209174774982998cb7245a85878b694d29204444f1780396df98b18bcec720c67b5f19a77222136fcb3180f1cfb483fcf343d69ba7104
|
@@ -34,7 +34,8 @@ module HotCatch
|
|
34
34
|
|
35
35
|
def add_initialize_file_for_sender_logs
|
36
36
|
create_file "config/initializers/hot_catch_sender_logs.rb" do
|
37
|
-
"Rails.application.config.sender_logs = HotCatch::MakeHttpsRequest.new"
|
37
|
+
"Rails.application.config.sender_logs = HotCatch::MakeHttpsRequest.new\n" +
|
38
|
+
"Sidekiq::Cron::Job.create(name: 'NginxWorker - every 5min', cron: '*/5 * * * *', class: 'NginxWorker') # execute at every 5 minutes, ex: 12:05, 12:10, 12:15...etc\n"
|
38
39
|
end
|
39
40
|
end
|
40
41
|
|
data/lib/hot_catch.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
module HotCatch
|
2
2
|
require 'hot_catch/hard_worker'
|
3
|
-
|
3
|
+
require 'hot_catch/nginx_worker'
|
4
4
|
require 'hot_catch/custom_log_subscribers.rb'
|
5
|
+
require 'hot_catch/get_nginx_logs.rb'
|
6
|
+
|
5
7
|
require 'uri'
|
6
8
|
require 'net/https'
|
7
9
|
require 'json'
|
@@ -22,8 +24,10 @@ module HotCatch
|
|
22
24
|
# 5. Ошибки доступны в файле hot_catch_log_response_errors
|
23
25
|
# ======================================================================
|
24
26
|
|
27
|
+
# Отвечает за отправку логов на главное приложение
|
25
28
|
class MakeHttpsRequest
|
26
|
-
def initialize(url = nil)
|
29
|
+
def initialize(url = nil, try_count = 0)
|
30
|
+
@try_count = try_count
|
27
31
|
@url = url
|
28
32
|
unless @url
|
29
33
|
File.open("config/hot_catch_config.json"){ |file| @url = JSON.parse(file.read)["url"] }
|
@@ -32,33 +36,39 @@ module HotCatch
|
|
32
36
|
end
|
33
37
|
|
34
38
|
def rails_g_log(log_data, status)
|
35
|
-
|
36
|
-
{
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
body_log = {main_hot_catch_log:
|
40
|
+
{
|
41
|
+
"log_data":log_data,
|
42
|
+
"name_app":Rails.application.class.parent_name,
|
43
|
+
"from_log":"Rails",
|
44
|
+
"status":status
|
45
|
+
}
|
46
|
+
}
|
47
|
+
HardWorker.perform_async(body_log, @url, @try_count)
|
48
|
+
end
|
49
|
+
|
50
|
+
def nginx_g_log(log_data)
|
51
|
+
body_log = {main_hot_catch_log:
|
52
|
+
{
|
53
|
+
"log_data":log_data,
|
54
|
+
"name_app":Rails.application.class.parent_name,
|
55
|
+
"from_log":"Nginx"
|
43
56
|
}
|
44
|
-
|
57
|
+
}
|
58
|
+
HardWorker.perform_async(body_log, @url, @try_count)
|
45
59
|
end
|
46
60
|
|
47
61
|
def send_log(body_log)
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}) }
|
59
|
-
end
|
60
|
-
rescue
|
61
|
-
HardWorker.perform_in(10.seconds, body_log, @url)
|
62
|
+
response = call(@url, body_log)
|
63
|
+
# если на запрос пришёл ответ, то пришло уведомление об ошибке, которое логируется
|
64
|
+
# Кроме того данное сообщение помещается в очередь и отправляется через какое-то время
|
65
|
+
unless response.empty?
|
66
|
+
str = "\n" + (?-*20) + "\n#{Time.now}\nlogs:\n#{body_log.to_s}\nresponse\n:#{response}\n" + (?-*20) + "\n"
|
67
|
+
File.open("log/hot_catch_log_response_errors", 'a'){ |file| file.write str.encode('UTF-8', {
|
68
|
+
:invalid => :replace,
|
69
|
+
:undef => :replace,
|
70
|
+
:replace => '?'
|
71
|
+
}) }
|
62
72
|
end
|
63
73
|
end
|
64
74
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
def copy_nginx_logs(from_time = (Time.now() - 5 * 60), input_file = 'log/nginx.access.log')
|
4
|
+
str = ""
|
5
|
+
if File.open(input_file, 'r'){|file| str = file.readlines}
|
6
|
+
ind = nil
|
7
|
+
|
8
|
+
for i in 0 ... str.size
|
9
|
+
t = Time.strptime(str[0 - i - 1].match(/\d{2}\/\w+\/\d{4}:\d{2}:\d{2}:\d{2}/)[0], "%d/%b/%Y:%H:%M")
|
10
|
+
if from_time < t
|
11
|
+
ind = 0 - i - 1
|
12
|
+
else
|
13
|
+
break
|
14
|
+
end
|
15
|
+
end
|
16
|
+
ind ? str[ind..-1].join("") : nil
|
17
|
+
end
|
18
|
+
end
|
@@ -1,10 +1,26 @@
|
|
1
1
|
require 'sidekiq'
|
2
|
+
# Отвечает за отправку логов на главное приложение
|
2
3
|
class HardWorker
|
3
4
|
include Sidekiq::Worker
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
def perform(body_log, url, try_count)
|
6
|
+
if try_count > 15
|
7
|
+
File.open("log/hot_catch_log_response_errors", 'a'){ |file| file.write body_log.encode('UTF-8', {
|
8
|
+
:invalid => :replace,
|
9
|
+
:undef => :replace,
|
10
|
+
:replace => '?'
|
11
|
+
}) }
|
12
|
+
else
|
13
|
+
sender = HotCatch::MakeHttpsRequest.new(url, try_count + 1)
|
14
|
+
sender.send_log(body_log)
|
15
|
+
sender = nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def cancelled?
|
20
|
+
Sidekiq.redis {|c| c.exists("cancelled-#{jid}") }
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.cancel!(jid)
|
24
|
+
Sidekiq.redis {|c| c.setex("cancelled-#{jid}", 86400, 1) }
|
9
25
|
end
|
10
26
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'sidekiq'
|
2
|
+
# Отвечает за сбор и отправку логов Nginx
|
3
|
+
class NginxWorker
|
4
|
+
include Sidekiq::Worker
|
5
|
+
sidekiq_options :retry => false
|
6
|
+
def perform
|
7
|
+
logs = copy_nginx_logs()
|
8
|
+
sender = HotCatch::MakeHttpsRequest.new
|
9
|
+
sender.nginx_g_log(logs)
|
10
|
+
end
|
11
|
+
end
|
data/lib/hot_catch/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hot_catch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Davhot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sidekiq-cron
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.6.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.6.3
|
27
41
|
description: Description of Testgem.
|
28
42
|
email:
|
29
43
|
- david.home@mail.ru
|
@@ -38,8 +52,10 @@ files:
|
|
38
52
|
- lib/generators/hot_catch/uninstall_generator.rb
|
39
53
|
- lib/hot_catch.rb
|
40
54
|
- lib/hot_catch/custom_log_subscribers.rb
|
55
|
+
- lib/hot_catch/get_nginx_logs.rb
|
41
56
|
- lib/hot_catch/hard_worker.rb
|
42
57
|
- lib/hot_catch/hot_catch_logger.rb
|
58
|
+
- lib/hot_catch/nginx_worker.rb
|
43
59
|
- lib/hot_catch/version.rb
|
44
60
|
- lib/tasks/hot_catch_tasks.rake
|
45
61
|
homepage: https://myhomepage.com
|