event_logger_rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []