event_logger_rails 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f372aa5098db4fbac8a61ffb11d350226a5b0df839e38f1b75907e35407e1a73
4
- data.tar.gz: 91960c8aee0f2adb82ad167c51b62207111dca9a7cbf5ec44750d3e585e0a430
3
+ metadata.gz: 95ba9a01dfc949b290f6142ac959cc206e705f5b286e2768381a82d6477f424d
4
+ data.tar.gz: aa992346f7623bb36cd0d12fd83aed155a92a8645c0cfbe8b47ec8c7d22fcc3e
5
5
  SHA512:
6
- metadata.gz: e08ed66560764cf5fc761b3a74fcbee08d435f132c4e154053f3e9628c8de9b9c5806e9c4c0edbc8f76369dccffe0ea50898311bc5463a1579e947768daa0747
7
- data.tar.gz: 72e6f058450d7462e6c86f80789492cfc737b6b0d6fac2e376a30c172005f378b8220490201bcbc02ab76ccb690e0aa269a5d0451fc89f145df3e983a184d687
6
+ metadata.gz: 7783f0fae629d0bf417b922a5b93257f22946b7b6b5f5304420341cf9e55f3a6471071fcd3bb36f1b00ed3862f181b6f222306f4975239c1353d24b57a3c94f8
7
+ data.tar.gz: 6abc431c12d4395ae0b119fb62b26731a8509d22f4b98ac3eeb868a8de27a8255b6ff6b81fc83a8ebb4764643eda90d946a36cf3c1ba81db63b34cf1c26d6e8b
data/README.md CHANGED
@@ -1,28 +1,88 @@
1
1
  # EventLoggerRails
2
- Short description and motivation.
2
+
3
+ Rails gem that facilitates logging events for analysis.
3
4
 
4
5
  ## Usage
5
- How to use my plugin.
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 "event_logger_rails"
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
- Contribution directions go here.
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 EventLogger::UnregisteredEvent => e
13
- log_event :error, 'event-logger-rails.unregistered-event.failure', message: e.message
14
- rescue EventLogger::InvalidLoggerLevel => e
15
- log_event :error, 'event-logger-rails.logger-level.failure', message: e.message
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
- @data_from_config ||= YAML.safe_load(File.read(config_file)).deep_symbolize_keys
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/event_logger.yml')
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 registered_events.include?(event)
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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EventLoggerRails
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -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.1.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-24 00:00:00.000000000 Z
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: