hot_catch 0.1.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -3
- data/lib/generators/hot_catch/install_generator.rb +14 -2
- data/lib/generators/hot_catch/uninstall_generator.rb +12 -0
- data/lib/hot_catch.rb +72 -0
- data/lib/hot_catch/custom_log_subscribers.rb +1 -1
- data/lib/hot_catch/hot_catch_log.rb +11 -1
- data/lib/hot_catch/hot_catch_logger.rb +4 -4
- data/lib/hot_catch/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c3ffc6c97a1c071dd500eb5bf63d32525484983
|
4
|
+
data.tar.gz: 3ab01fd9408f014fe245dfbfba5cc75d83b372e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51f63b5bd8658ac2feed968223acecf87264c1d7dd2b02b095f53ae24d2ffd82655a4ea7f73d6e6d4e126bb5c943f61537d1beef7b572aa088d1559fe3e7dd24
|
7
|
+
data.tar.gz: d37489e27e967197f739988a0418c706d549f5fb55f9f3e4b015903668593db468d3ee678cbdec022558af476de5fcd5bc99913e381a007adb9f08c9057a3572
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# HotCatch
|
2
|
-
Данный гем позволяет изменить логирование в базу
|
3
|
-
|
2
|
+
Данный гем позволяет изменить логирование в базу данных и посылать
|
3
|
+
запросы на главный сервер.
|
4
4
|
|
5
5
|
## Использование
|
6
6
|
Логи можно посмотреть в консоли:
|
@@ -9,7 +9,10 @@
|
|
9
9
|
> HotCatchLog.first.log_data
|
10
10
|
```
|
11
11
|
В данной реализации логи разделены по статусам запросов (поле `status HotCatchLog`).
|
12
|
-
Кроме того одинаковые ошибки собираются в одну, при этом увеличивается счётчик в моделе
|
12
|
+
Кроме того одинаковые ошибки собираются в одну, при этом увеличивается счётчик в моделе `HotCatchLog` поле `count_log`.
|
13
|
+
|
14
|
+
Ответы от сервера, куда отправляются логи, доступен в файле `log/hot_catch_log_response_errors`.
|
15
|
+
Если всё порядке - этого файла нет или он пуст.
|
13
16
|
|
14
17
|
## Установка
|
15
18
|
1. Добавить гем в `Gemfile`
|
@@ -20,6 +23,8 @@ gem 'hot_catch'
|
|
20
23
|
3. Запустить генератор установки: `$ rails generate hot_catch:install`
|
21
24
|
Для удаления: `$ rails generate hot_catch:uninstall`
|
22
25
|
4. `$ rails db:migrate`
|
26
|
+
5. Изменить в `config/hot_catch_config.json` url - адрес сервера для отправки лог файлов.
|
27
|
+
Автоматически запросы посылаются на адрес *url/main_hot_catch_logs*, но нужно указать только *url*.
|
23
28
|
|
24
29
|
Это всё! Теперь все логи формируются в базе данных.
|
25
30
|
|
@@ -41,17 +41,29 @@ RUBY
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def change_files
|
44
|
-
insert_into_file "config/application.rb", "\nrequire_relative 'hot_catch_logger'\n", :before => "module
|
44
|
+
insert_into_file "config/application.rb", "\nrequire_relative 'hot_catch_logger'\n", :before => "module"
|
45
45
|
|
46
46
|
application "config.middleware.insert_before Rails::Rack::Logger, Rails::Rack::HotCatchLogger\n
|
47
47
|
config.middleware.delete Rails::Rack::Logger"
|
48
48
|
|
49
49
|
insert_string = "\n require 'hot_catch/custom_log_subscribers.rb'
|
50
|
-
config.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new('hot_catch_buf_file'))\n"
|
50
|
+
config.logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new('tmp/hot_catch_buf_file'))\n"
|
51
51
|
|
52
52
|
insert_into_file "config/environments/development.rb", insert_string, :after => "Rails.application.configure do"
|
53
53
|
insert_into_file "config/environments/production.rb", insert_string, :after => "Rails.application.configure do"
|
54
54
|
end
|
55
55
|
|
56
|
+
def add_hot_catch_config
|
57
|
+
create_file "config/hot_catch_config.json" do
|
58
|
+
"/* http://[url] */
|
59
|
+
{\"url\":\"[your_server_url]\"}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_initialize_file_for_sender_logs
|
64
|
+
create_file "config/initializers/hot_catch_sender_logs.rb" do
|
65
|
+
"Rails.application.config.sender_logs = HotCatch::MakeHttpsRequest.new"
|
66
|
+
end
|
67
|
+
end
|
56
68
|
end
|
57
69
|
end
|
@@ -23,6 +23,18 @@ module HotCatch
|
|
23
23
|
gsub_file "config/environments/production.rb", /.*\s.*hot_catch_buf_file'\)\)/, ""
|
24
24
|
end
|
25
25
|
|
26
|
+
def remove_log_files
|
27
|
+
remove_file "tmp/hot_catch_buf_file"
|
28
|
+
remove_file "tmp/hot_catch_buf_file2"
|
29
|
+
end
|
30
|
+
|
31
|
+
def remove_hot_catch_config
|
32
|
+
remove_file "config/hot_catch_config.json"
|
33
|
+
end
|
34
|
+
|
35
|
+
def remove_initialize_file_for_sender_logs
|
36
|
+
remove_file "config/initializers/hot_catch_sender_logs.rb"
|
37
|
+
end
|
26
38
|
|
27
39
|
end
|
28
40
|
end
|
data/lib/hot_catch.rb
CHANGED
@@ -1,3 +1,75 @@
|
|
1
1
|
module HotCatch
|
2
2
|
require 'hot_catch/custom_log_subscribers.rb'
|
3
|
+
require 'uri'
|
4
|
+
require 'net/https'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
# ======================================================================
|
8
|
+
# Для использования нужно:
|
9
|
+
# 1. Править файл hot_catch_config.json для указания url нужного сервера
|
10
|
+
# 2. sender_logs = HotCatch::MakeHttpsRequest.new
|
11
|
+
# 3. Сформировать сообщение на примере:
|
12
|
+
# ====================================
|
13
|
+
# body_log = {main_hot_catch_log: {
|
14
|
+
# "log_data":"some message",
|
15
|
+
# "name_app":"new6_app",
|
16
|
+
# "count_log":10,
|
17
|
+
# "id_log_origin_app":1,
|
18
|
+
# "from_log":"Rails",
|
19
|
+
# "status":"SERVER_ERROR"}
|
20
|
+
# }
|
21
|
+
# ====================================
|
22
|
+
# 4. sender_logs.send_log(body_log)
|
23
|
+
# 5. Ошибки доступны в файле hot_catch_log_response_errors
|
24
|
+
# ======================================================================
|
25
|
+
|
26
|
+
class MakeHttpsRequest
|
27
|
+
def initialize
|
28
|
+
@url = ""
|
29
|
+
File.open("config/hot_catch_config.json"){ |file| @url = JSON.parse(file.read)["url"] }
|
30
|
+
@url += "/main_hot_catch_logs"
|
31
|
+
end
|
32
|
+
|
33
|
+
def rails_g_log(log_data, count_log, id_log, status)
|
34
|
+
send_log(
|
35
|
+
{main_hot_catch_log:
|
36
|
+
{
|
37
|
+
"log_data":log_data,
|
38
|
+
"name_app":Rails.application.class.parent_name,
|
39
|
+
"count_log":count_log,
|
40
|
+
"id_log_origin_app":id_log,
|
41
|
+
"from_log":"Rails",
|
42
|
+
"status":status
|
43
|
+
}
|
44
|
+
}
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
def send_log(body_log)
|
49
|
+
response = call(@url, body_log)
|
50
|
+
# логируется, если на запрос пришёл какой-либо ответ
|
51
|
+
unless response.empty?
|
52
|
+
str = "\n" + (?-*20) + "\n#{Time.now}\nlogs:\n#{body_log.to_s}\nresponse\n:#{response}\n" + (?-*20) + "\n"
|
53
|
+
File.open("log/hot_catch_log_response_errors", 'a'){ |file| file.write str }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def call(url, hash_json)
|
60
|
+
uri = URI.parse(url)
|
61
|
+
req = Net::HTTP::Post.new(uri.to_s)
|
62
|
+
req.body = hash_json.to_json
|
63
|
+
req['Content-Type'] = 'application/json'
|
64
|
+
response = https(uri).request(req)
|
65
|
+
response.body
|
66
|
+
end
|
67
|
+
|
68
|
+
def https(uri)
|
69
|
+
Net::HTTP.new(uri.host, uri.port).tap do |http|
|
70
|
+
# http.use_ssl = true
|
71
|
+
# http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
3
75
|
end
|
@@ -50,7 +50,7 @@ class CustomActionControllerLogSubscriber < ActionController::LogSubscriber
|
|
50
50
|
status = ActionDispatch::ExceptionWrapper.status_code_for_exception(exception_class_name)
|
51
51
|
end
|
52
52
|
|
53
|
-
File.open('hot_catch_buf_file', 'a'){ |file| file.puts "!!!#{status}!!!" }
|
53
|
+
File.open('tmp/hot_catch_buf_file', 'a'){ |file| file.puts "!!!#{status}!!!" }
|
54
54
|
|
55
55
|
info do
|
56
56
|
|
@@ -19,13 +19,23 @@ class HotCatchLog < ApplicationRecord
|
|
19
19
|
if strip_str(cur_log.log_data) == str2
|
20
20
|
cur_log.count_log += 1
|
21
21
|
cur_log.save
|
22
|
+
|
23
|
+
# Отправка лога на сервер
|
24
|
+
Rails.application.config.sender_logs.rails_g_log(cur_log.log_data,
|
25
|
+
cur_log.count_log, cur_log.id, cur_log.status)
|
26
|
+
|
22
27
|
opt = false
|
23
28
|
return
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
27
32
|
if opt && str.strip.present? && status.present?
|
28
|
-
HotCatchLog.create(log_data: format_log(str), status: status)
|
33
|
+
l = HotCatchLog.create(log_data: format_log(str), status: status)
|
34
|
+
|
35
|
+
# Отправка лога на сервер
|
36
|
+
# args: log_data, count_log, id_log, status
|
37
|
+
Rails.application.config.sender_logs.rails_g_log(l.log_data, l.count_log,
|
38
|
+
l.id, l.status)
|
29
39
|
end
|
30
40
|
|
31
41
|
end
|
@@ -82,14 +82,14 @@ module Rails
|
|
82
82
|
|
83
83
|
# Считали данные из основного лог-файла
|
84
84
|
logs = ""
|
85
|
-
File.open('hot_catch_buf_file'){ |file| logs = file.read}
|
86
|
-
File.open('hot_catch_buf_file', 'w'){ |file| file.print "" }
|
85
|
+
File.open('tmp/hot_catch_buf_file'){ |file| logs = file.read}
|
86
|
+
File.open('tmp/hot_catch_buf_file', 'w'){ |file| file.print "" }
|
87
87
|
logs = logs.split("BEGIN").delete_if{|x| !x.present? }
|
88
88
|
|
89
89
|
# Считали данные из дополнительного лог-файла и записали начало последнего лога
|
90
90
|
add_log = ""
|
91
|
-
File.open('hot_catch_buf_file2'){ |file| add_log = file.read} if File.exist?('hot_catch_buf_file2')
|
92
|
-
File.open('hot_catch_buf_file2', 'w'){ |file| file.print logs[-1] }
|
91
|
+
File.open('tmp/hot_catch_buf_file2'){ |file| add_log = file.read} if File.exist?('tmp/hot_catch_buf_file2')
|
92
|
+
File.open('tmp/hot_catch_buf_file2', 'w'){ |file| file.print logs[-1] }
|
93
93
|
logs.delete_at(-1)
|
94
94
|
|
95
95
|
# Собираем начало лога и конец
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Davhot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Description of Testgem.
|
14
14
|
email:
|
@@ -48,7 +48,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
48
48
|
version: '0'
|
49
49
|
requirements: []
|
50
50
|
rubyforge_project:
|
51
|
-
rubygems_version: 2.
|
51
|
+
rubygems_version: 2.6.12
|
52
52
|
signing_key:
|
53
53
|
specification_version: 4
|
54
54
|
summary: Summary of Testgem.
|