event_logger_rails 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f372aa5098db4fbac8a61ffb11d350226a5b0df839e38f1b75907e35407e1a73
4
+ data.tar.gz: 91960c8aee0f2adb82ad167c51b62207111dca9a7cbf5ec44750d3e585e0a430
5
+ SHA512:
6
+ metadata.gz: e08ed66560764cf5fc761b3a74fcbee08d435f132c4e154053f3e9628c8de9b9c5806e9c4c0edbc8f76369dccffe0ea50898311bc5463a1579e947768daa0747
7
+ data.tar.gz: 72e6f058450d7462e6c86f80789492cfc737b6b0d6fac2e376a30c172005f378b8220490201bcbc02ab76ccb690e0aa269a5d0451fc89f145df3e983a184d687
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # EventLoggerRails
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem "event_logger_rails"
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install event_logger_rails
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+
5
+ APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
6
+ load 'rails/tasks/engine.rake'
7
+
8
+ load 'rails/tasks/statistics.rake'
9
+
10
+ require 'bundler/gem_tasks'
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EventLoggerRails
4
+ ##
5
+ # Provides event logging with relevant controller/request data.
6
+ module Loggable
7
+ extend ActiveSupport::Concern
8
+
9
+ def log_event(level, event, **data)
10
+ data_to_log = data_from_request.merge(data)
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
16
+ end
17
+
18
+ def data_from_request
19
+ {
20
+ controller: controller_name.camelcase,
21
+ action: action_name,
22
+ method: request.method,
23
+ path: request.path,
24
+ remote_ip: request.remote_ip,
25
+ parameters: request.query_parameters.to_json
26
+ }
27
+ end
28
+ end
29
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Lint/EmptyBlock
4
+ EventLoggerRails::Engine.routes.draw do
5
+ end
6
+ # rubocop:enable Lint/EmptyBlock
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EventLoggerRails
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace EventLoggerRails
6
+ end
7
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ require_relative 'exceptions/invalid_logger_level'
6
+ require_relative 'exceptions/unregistered_event'
7
+
8
+ module EventLoggerRails
9
+ ##
10
+ # Outputs event and related data logs.
11
+ class EventLogger
12
+ def initialize
13
+ @logger_levels = logger_levels_from_config
14
+ @registered_events = registered_events_from_config
15
+ @last_updated = File.ctime(config_file)
16
+ end
17
+
18
+ def log(*tags, **params)
19
+ reload_config if config_changed?
20
+
21
+ level, event = *tags
22
+ validate_tags(level, event)
23
+ logger = ActiveSupport::TaggedLogging.new(Logger.new(output_device))
24
+ logger.tagged("#{level.to_s.upcase} | #{DateTime.current} | #{event}") { logger.send(level, **params.as_json) }
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :logger_levels, :registered_events, :last_updated
30
+
31
+ def logger_levels_from_config
32
+ data_from_config[:logger_levels].map(&:to_sym)
33
+ end
34
+
35
+ def registered_events_from_config
36
+ data_from_config[:registered_events]
37
+ end
38
+
39
+ def data_from_config
40
+ @data_from_config ||= YAML.safe_load(File.read(config_file)).deep_symbolize_keys
41
+ end
42
+
43
+ def config_file
44
+ Rails.root.join('config/event_logger.yml')
45
+ end
46
+
47
+ def reload_config
48
+ @logger_levels = logger_levels_from_config
49
+ @registered_events = registered_events_from_config
50
+ @last_updated = File.ctime(config_file)
51
+ end
52
+
53
+ def config_changed?
54
+ return false unless Rails.env.development?
55
+
56
+ last_updated != File.ctime(config_file)
57
+ end
58
+
59
+ def validate_tags(level, event)
60
+ validate_logger_level(level) && validate_event(event)
61
+ end
62
+
63
+ def validate_logger_level(level)
64
+ return true if logger_levels.include?(level)
65
+
66
+ raise EventLoggerRails::Exceptions::InvalidLoggerLevel.new(logger_level: level)
67
+ end
68
+
69
+ def validate_event(event)
70
+ return true if registered_events.include?(event)
71
+
72
+ raise EventLoggerRails::Exceptions::UnregisteredEvent.new(unregistered_event: event)
73
+ end
74
+
75
+ def output_device
76
+ return $stdout unless Rails.env.test?
77
+
78
+ File.open(File::NULL, 'w')
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EventLoggerRails
4
+ module Exceptions
5
+ ##
6
+ # Indicates invalid log level provided.
7
+ class InvalidLoggerLevel < StandardError
8
+ attr_reader :logger_level
9
+
10
+ def initialize(logger_level:)
11
+ super("Invalid logger level provided: '#{logger_level}'. Valid levels: debug, info, warn, error, fatal.")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EventLoggerRails
4
+ module Exceptions
5
+ ##
6
+ # Indicates event provided not registered.
7
+ class UnregisteredEvent < StandardError
8
+ attr_reader :unregistered_event
9
+
10
+ def initialize(unregistered_event:)
11
+ super("Event provided not registered: #{unregistered_event}")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EventLoggerRails
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails'
4
+ require 'active_support/dependencies'
5
+ require 'event_logger_rails/version'
6
+ require 'event_logger_rails/engine'
7
+ require 'event_logger_rails/event_logger'
8
+ require 'event_logger_rails/exceptions/invalid_logger_level'
9
+ require 'event_logger_rails/exceptions/unregistered_event'
10
+
11
+ ##
12
+ # Namespace for UtilityClasses gem
13
+ module EventLoggerRails
14
+ autoload :EventLogger, 'event_logger_rails/event_logger'
15
+ autoload :InvalidLoggerLevel, 'event_logger_rails/exceptions/invalid_logger_level'
16
+ autoload :UnregisteredEvent, 'event_logger_rails/exceptions/unregistered_event'
17
+
18
+ def self.logger
19
+ @logger ||= EventLogger.new
20
+ end
21
+
22
+ def self.log(*tags, **params)
23
+ logger.log(*tags, **params)
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # desc "Explaining what the task does"
3
+ # task :event_logger_rails do
4
+ # # Task goes here
5
+ # end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: event_logger_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dick Davis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-12-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 7.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 7.0.0
27
+ description: Rails gem that facilitates logging events for analysis.
28
+ email:
29
+ - dick@hey.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - Rakefile
36
+ - app/controllers/concerns/event_logger_rails/loggable.rb
37
+ - config/routes.rb
38
+ - lib/event_logger_rails.rb
39
+ - lib/event_logger_rails/engine.rb
40
+ - lib/event_logger_rails/event_logger.rb
41
+ - lib/event_logger_rails/exceptions/invalid_logger_level.rb
42
+ - lib/event_logger_rails/exceptions/unregistered_event.rb
43
+ - lib/event_logger_rails/version.rb
44
+ - lib/tasks/event_logger_rails_tasks.rake
45
+ homepage: https://github.com/d3d1rty/event_logger_rails
46
+ licenses:
47
+ - MIT
48
+ metadata:
49
+ rubygems_mfa_required: 'true'
50
+ homepage_uri: https://github.com/d3d1rty/event_logger_rails
51
+ source_code_uri: https://github.com/d3d1rty/event_logger_rails
52
+ changelog_uri: https://github.com/d3d1rty/event_logger_rails/blob/main/CHANGELOG.md
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubygems_version: 3.1.2
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Rails gem that facilitates logging events for analysis.
72
+ test_files: []