event_logger_rails 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +64 -4
- data/app/controllers/concerns/event_logger_rails/loggable.rb +4 -4
- data/lib/event_logger_rails/event_logger.rb +19 -3
- data/lib/event_logger_rails/version.rb +1 -1
- data/lib/generators/event_logger_rails/install_generator.rb +16 -0
- data/lib/generators/event_logger_rails/templates/event_logger_rails.yml +25 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95ba9a01dfc949b290f6142ac959cc206e705f5b286e2768381a82d6477f424d
|
4
|
+
data.tar.gz: aa992346f7623bb36cd0d12fd83aed155a92a8645c0cfbe8b47ec8c7d22fcc3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7783f0fae629d0bf417b922a5b93257f22946b7b6b5f5304420341cf9e55f3a6471071fcd3bb36f1b00ed3862f181b6f222306f4975239c1353d24b57a3c94f8
|
7
|
+
data.tar.gz: 6abc431c12d4395ae0b119fb62b26731a8509d22f4b98ac3eeb868a8de27a8255b6ff6b81fc83a8ebb4764643eda90d946a36cf3c1ba81db63b34cf1c26d6e8b
|
data/README.md
CHANGED
@@ -1,28 +1,88 @@
|
|
1
1
|
# EventLoggerRails
|
2
|
-
|
2
|
+
|
3
|
+
Rails gem that facilitates logging events for analysis.
|
3
4
|
|
4
5
|
## Usage
|
5
|
-
|
6
|
+
|
7
|
+
You can define a registry of events that your application emits via the config file (`config/event_logger_rails.yml`).
|
8
|
+
The events that you define are placed in the `registered_events` structure in the config file.
|
9
|
+
|
10
|
+
For example, to register a user signup event, first define the event as a registered event:
|
11
|
+
|
12
|
+
```yaml
|
13
|
+
registered_events:
|
14
|
+
user:
|
15
|
+
signup:
|
16
|
+
success: 'Indicates a user signup was successful.'
|
17
|
+
failure: 'Indicates a user signup was not successful.'
|
18
|
+
```
|
19
|
+
|
20
|
+
Then, from the controller action that processes user signup's, include the `Loggable` concern and use the `log_event` method to log details about the event:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
class UsersController < ApplicationController
|
24
|
+
include Loggable
|
25
|
+
|
26
|
+
def create
|
27
|
+
user = User.new(user_params)
|
28
|
+
if user.save
|
29
|
+
log_event :info, 'user.signup.success'
|
30
|
+
redirect_to dashboard_path
|
31
|
+
else
|
32
|
+
log_event :error, 'user.signup.failure', errors: user.errors
|
33
|
+
render :new
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
In this example, a possible successful signup could be structured like this:
|
40
|
+
|
41
|
+
```
|
42
|
+
[INFO | 2021-12-27T20:57:06+00:00 | user.signup.success] {"controller"=>"Users", "action"=>"create", "method"=>"POST", "path"=>"/users", "remote_ip"=>"::1", "parameters"=>"{ "user"=>{ "email"=>"validemail@example.com", "first_name"=>"Test", "last_name"=>"User" } }"}
|
43
|
+
```
|
44
|
+
|
45
|
+
...while a failed signup might look like this:
|
46
|
+
|
47
|
+
```
|
48
|
+
[ERROR | 2021-12-27T20:57:06+00:00 | user.signup.failure] {"controller"=>"Users", "action"=>"create", "method"=>"POST", "path"=>"/users", "remote_ip"=>"::1", "parameters"=>"{ "user"=>{ "first_name"=>"Test", "last_name"=>"User" } }", "errors"=>"{ "email"=>"is missing" }"}
|
49
|
+
```
|
50
|
+
|
51
|
+
The log entry indicates the logger level (useful for filtering results), the registered event, and more useful information from the controller and request.
|
52
|
+
This makes it simple use a tool like `awk` or another monitoring solution to parse the logs for emitted events, facilitating troubleshooting and analytics.
|
6
53
|
|
7
54
|
## Installation
|
55
|
+
|
8
56
|
Add this line to your application's Gemfile:
|
9
57
|
|
10
58
|
```ruby
|
11
|
-
gem
|
59
|
+
gem 'event_logger_rails'
|
12
60
|
```
|
13
61
|
|
14
62
|
And then execute:
|
63
|
+
|
15
64
|
```bash
|
16
65
|
$ bundle
|
17
66
|
```
|
18
67
|
|
19
68
|
Or install it yourself as:
|
69
|
+
|
20
70
|
```bash
|
21
71
|
$ gem install event_logger_rails
|
22
72
|
```
|
23
73
|
|
74
|
+
Run the install generator to create a config file (`config/event_logger_rails.yml`):
|
75
|
+
|
76
|
+
```bash
|
77
|
+
$ bin/rails generate event_logger_rails:install
|
78
|
+
```
|
79
|
+
|
80
|
+
Add your events to the generated config file following the structure of the examples.
|
81
|
+
|
24
82
|
## Contributing
|
25
|
-
|
83
|
+
|
84
|
+
Contributions are welcome. Feel free to open a PR.
|
26
85
|
|
27
86
|
## License
|
87
|
+
|
28
88
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -9,10 +9,10 @@ module EventLoggerRails
|
|
9
9
|
def log_event(level, event, **data)
|
10
10
|
data_to_log = data_from_request.merge(data)
|
11
11
|
EventLoggerRails.log(level, event, **data_to_log)
|
12
|
-
rescue
|
13
|
-
log_event :error, 'event
|
14
|
-
rescue
|
15
|
-
log_event :error, '
|
12
|
+
rescue EventLoggerRails::Exceptions::UnregisteredEvent => e
|
13
|
+
log_event :error, 'event_logger_rails.event.unregistered', message: e.message
|
14
|
+
rescue EventLoggerRails::Exceptions::InvalidLoggerLevel => e
|
15
|
+
log_event :error, 'event_logger_rails.logger_level.invalid', message: e.message
|
16
16
|
end
|
17
17
|
|
18
18
|
def data_from_request
|
@@ -9,6 +9,13 @@ module EventLoggerRails
|
|
9
9
|
##
|
10
10
|
# Outputs event and related data logs.
|
11
11
|
class EventLogger
|
12
|
+
DEFAULT_EVENTS = [
|
13
|
+
'event_logger_rails.logger_level.invalid',
|
14
|
+
'event_logger_rails.event.unregistered',
|
15
|
+
'event_logger_rails.event.testing'
|
16
|
+
].freeze
|
17
|
+
private_constant :DEFAULT_EVENTS
|
18
|
+
|
12
19
|
def initialize
|
13
20
|
@logger_levels = logger_levels_from_config
|
14
21
|
@registered_events = registered_events_from_config
|
@@ -37,11 +44,11 @@ module EventLoggerRails
|
|
37
44
|
end
|
38
45
|
|
39
46
|
def data_from_config
|
40
|
-
|
47
|
+
YAML.safe_load(File.read(config_file)).deep_symbolize_keys
|
41
48
|
end
|
42
49
|
|
43
50
|
def config_file
|
44
|
-
Rails.root.join('config/
|
51
|
+
Rails.root.join('config/event_logger_rails.yml')
|
45
52
|
end
|
46
53
|
|
47
54
|
def reload_config
|
@@ -67,11 +74,20 @@ module EventLoggerRails
|
|
67
74
|
end
|
68
75
|
|
69
76
|
def validate_event(event)
|
70
|
-
return true if
|
77
|
+
return true if event_registered?(event) || default_event?(event)
|
71
78
|
|
72
79
|
raise EventLoggerRails::Exceptions::UnregisteredEvent.new(unregistered_event: event)
|
73
80
|
end
|
74
81
|
|
82
|
+
def event_registered?(event)
|
83
|
+
parsed_event = event.split('.').map(&:to_sym)
|
84
|
+
registered_events.dig(*parsed_event)
|
85
|
+
end
|
86
|
+
|
87
|
+
def default_event?(event)
|
88
|
+
DEFAULT_EVENTS.include?(event)
|
89
|
+
end
|
90
|
+
|
75
91
|
def output_device
|
76
92
|
return $stdout unless Rails.env.test?
|
77
93
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EventLoggerRails
|
4
|
+
module Generators
|
5
|
+
##
|
6
|
+
# Creates basic config file for EventLoggerRails
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
desc 'Create basic config file for EventLoggerRails'
|
9
|
+
source_root File.expand_path('templates', __dir__)
|
10
|
+
|
11
|
+
def copy_config_file
|
12
|
+
copy_file 'event_logger_rails.yml', 'config/event_logger_rails.yml'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
##
|
2
|
+
# Allowed logger levels for use with EventLoggerRails
|
3
|
+
# You can add/remove levels, if desired; however, an exception will occur
|
4
|
+
# when using a logger level that is not enumerated here.
|
5
|
+
#
|
6
|
+
logger_levels:
|
7
|
+
- 'debug'
|
8
|
+
- 'info'
|
9
|
+
- 'warn'
|
10
|
+
- 'error'
|
11
|
+
- 'fatal'
|
12
|
+
|
13
|
+
##
|
14
|
+
# Registered events for use with EventLoggerRails
|
15
|
+
# Add your custom event definitions to this section; attempting to log events
|
16
|
+
# that are not registered here will result in an exception.
|
17
|
+
#
|
18
|
+
# Example event:
|
19
|
+
#
|
20
|
+
# registered_events:
|
21
|
+
# user:
|
22
|
+
# signup:
|
23
|
+
# success: 'Indicates a successful user signup.'
|
24
|
+
#
|
25
|
+
registered_events:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: event_logger_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dick Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -41,6 +41,8 @@ files:
|
|
41
41
|
- lib/event_logger_rails/exceptions/invalid_logger_level.rb
|
42
42
|
- lib/event_logger_rails/exceptions/unregistered_event.rb
|
43
43
|
- lib/event_logger_rails/version.rb
|
44
|
+
- lib/generators/event_logger_rails/install_generator.rb
|
45
|
+
- lib/generators/event_logger_rails/templates/event_logger_rails.yml
|
44
46
|
- lib/tasks/event_logger_rails_tasks.rake
|
45
47
|
homepage: https://github.com/d3d1rty/event_logger_rails
|
46
48
|
licenses:
|