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 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: