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 +7 -0
- data/README.md +28 -0
- data/Rakefile +10 -0
- data/app/controllers/concerns/event_logger_rails/loggable.rb +29 -0
- data/config/routes.rb +6 -0
- data/lib/event_logger_rails/engine.rb +7 -0
- data/lib/event_logger_rails/event_logger.rb +81 -0
- data/lib/event_logger_rails/exceptions/invalid_logger_level.rb +15 -0
- data/lib/event_logger_rails/exceptions/unregistered_event.rb +15 -0
- data/lib/event_logger_rails/version.rb +5 -0
- data/lib/event_logger_rails.rb +25 -0
- data/lib/tasks/event_logger_rails_tasks.rake +5 -0
- metadata +72 -0
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,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,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,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
|
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: []
|