appydays 0.5.1 → 0.7.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 664f5e1c23eb4359cdbc71c7f9e9b62648764ef727b35110fb450e2418cc181f
|
4
|
+
data.tar.gz: 6f74c5970b4f8932e879ff342d63c19f92bbe606c51af846fab1497b8acf936e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: abc2c53d7ec2b119cbc80f71b253968cb3767197019fef2d0f71e3377d917efd24685d4f06a66df22ec6c444c03b7db46cf1196d1c4fa6b4ae12598530772ecf
|
7
|
+
data.tar.gz: af84d1800825fe54cd8d9182c2d15139a86da3e14040db1ac71b79de386df3f60e662aa04a93c36f5aa6e46124a44b372af1871a50e4668e19d699015e45c23f
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "appydays/configurable"
|
4
|
+
|
5
|
+
module Appydays::Configurable::SpecHelpers
|
6
|
+
def self.included(context)
|
7
|
+
context.around(:each) do |example|
|
8
|
+
to_reset = example.metadata[:reset_configuration]
|
9
|
+
if to_reset
|
10
|
+
to_reset = [to_reset] unless to_reset.respond_to?(:to_ary)
|
11
|
+
to_reset.each(&:reset_configuration)
|
12
|
+
end
|
13
|
+
begin
|
14
|
+
example.run
|
15
|
+
ensure
|
16
|
+
to_reset&.each(&:reset_configuration)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "httparty"
|
4
|
+
|
5
|
+
# Formatter that sends structred log information to HTTParty.
|
6
|
+
# After requiring this module, use
|
7
|
+
# `HTTParty.<method>(..., logger: semantic_logger, log_format: :appydays)`
|
8
|
+
# to write out a nice structured log.
|
9
|
+
# You can also subclass this formatter to use your own message (default to httparty_request),
|
10
|
+
# and modify the fields (override #fields).
|
11
|
+
class Appydays::Loggable::HTTPartyFormatter
|
12
|
+
attr_accessor :level, :logger, :message
|
13
|
+
attr_reader :request, :response
|
14
|
+
|
15
|
+
def initialize(logger, level)
|
16
|
+
@logger = logger
|
17
|
+
@level = level.to_sym
|
18
|
+
@message = "httparty_request"
|
19
|
+
end
|
20
|
+
|
21
|
+
def format(request, response)
|
22
|
+
@request = request
|
23
|
+
@response = response
|
24
|
+
self.logger.public_send(self.level, self.message, **self.fields)
|
25
|
+
end
|
26
|
+
|
27
|
+
def fields
|
28
|
+
return {
|
29
|
+
"content_length" => content_length || "-",
|
30
|
+
"http_method" => http_method,
|
31
|
+
"path" => path,
|
32
|
+
"response_code" => response.code,
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def http_method
|
37
|
+
@http_method ||= request.http_method.name.split("::").last.upcase
|
38
|
+
end
|
39
|
+
|
40
|
+
def path
|
41
|
+
@path ||= request.path.to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
def content_length
|
45
|
+
@content_length ||= response.respond_to?(:headers) ? response.headers["Content-Length"] : response["Content-Length"]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
HTTParty::Logger.add_formatter(:appydays, Appydays::Loggable::HTTPartyFormatter)
|
@@ -4,6 +4,32 @@
|
|
4
4
|
require "sequel/database/logging"
|
5
5
|
|
6
6
|
class Sequel::Database
|
7
|
+
# Helpers for the Appydays Sequel logger.
|
8
|
+
# Very long messages may end up getting logged; the logger will truncate anything
|
9
|
+
# longer than +truncate_messages_over+, with +truncation_context+ number of chars
|
10
|
+
# at the beginning and at the end.
|
11
|
+
#
|
12
|
+
# If a message is truncated, the full message is logged at +log_full_message_level+ (default :debug).
|
13
|
+
# Use nil to disable the full message logging.
|
14
|
+
module AppydaysLogger
|
15
|
+
class << self
|
16
|
+
attr_accessor :truncate_messages_over, :truncation_message, :truncation_context, :log_full_message_level
|
17
|
+
|
18
|
+
def setdefaults
|
19
|
+
@truncate_messages_over = 2000
|
20
|
+
@truncation_message = "<truncated, full message logged at debug>"
|
21
|
+
@truncation_context = 200
|
22
|
+
end
|
23
|
+
|
24
|
+
def truncate_message(message)
|
25
|
+
return message if message.size <= self.truncate_messages_over
|
26
|
+
msg = message[...self.truncation_context] + self.truncation_message + message[-self.truncation_context..]
|
27
|
+
return msg
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
AppydaysLogger.setdefaults
|
32
|
+
|
7
33
|
def log_exception(exception, message)
|
8
34
|
level = message.match?(/^SELECT NULL AS "?nil"? FROM .* LIMIT 1$/i) ? :debug : :error
|
9
35
|
log_each(
|
@@ -30,10 +56,25 @@ class Sequel::Database
|
|
30
56
|
# warn level if duration is greater than log_warn_duration.
|
31
57
|
def log_duration(duration, message)
|
32
58
|
lwd = log_warn_duration
|
59
|
+
was_truncated = false
|
33
60
|
log_each(
|
34
61
|
lwd && (duration >= lwd) ? :warn : sql_log_level,
|
35
62
|
proc { "(#{'%0.6fs' % duration}) #{message}" },
|
36
|
-
proc
|
63
|
+
proc do
|
64
|
+
query = AppydaysLogger.truncate_message(message)
|
65
|
+
params = {duration: duration * 1000, query: query}
|
66
|
+
if query != message
|
67
|
+
params[:truncated] = true
|
68
|
+
was_truncated = true
|
69
|
+
end
|
70
|
+
["sequel_query", params]
|
71
|
+
end,
|
72
|
+
)
|
73
|
+
return unless was_truncated && Sequel::Database::AppydaysLogger.log_full_message_level
|
74
|
+
log_each(
|
75
|
+
Sequel::Database::AppydaysLogger.log_full_message_level,
|
76
|
+
nil,
|
77
|
+
proc { ["sequel_query_debug", {duration: duration * 1000, query: message}] },
|
37
78
|
)
|
38
79
|
end
|
39
80
|
|
@@ -41,7 +82,7 @@ class Sequel::Database
|
|
41
82
|
@loggers.each do |logger|
|
42
83
|
if logger.is_a?(SemanticLogger::Base)
|
43
84
|
logger.public_send(level, *semantic.call)
|
44
|
-
|
85
|
+
elsif std
|
45
86
|
logger.public_send(level, std.call)
|
46
87
|
end
|
47
88
|
end
|
data/lib/appydays/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appydays
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lithic Tech
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: httparty
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.20'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.20'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: monetize
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,56 +142,56 @@ dependencies:
|
|
128
142
|
requirements:
|
129
143
|
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
145
|
+
version: 1.31.1
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
152
|
+
version: 1.31.1
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rubocop-performance
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
159
|
+
version: 1.14.2
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
166
|
+
version: 1.14.2
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: rubocop-rake
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - "~>"
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
173
|
+
version: 0.6.0
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
178
|
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
180
|
+
version: 0.6.0
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: rubocop-sequel
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
185
|
- - "~>"
|
172
186
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
187
|
+
version: 0.3.4
|
174
188
|
type: :development
|
175
189
|
prerelease: false
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
177
191
|
requirements:
|
178
192
|
- - "~>"
|
179
193
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
194
|
+
version: 0.3.4
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: sequel
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,6 +220,20 @@ dependencies:
|
|
206
220
|
- - "~>"
|
207
221
|
- !ruby/object:Gem::Version
|
208
222
|
version: '6.0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: webmock
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '3.1'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "~>"
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '3.1'
|
209
237
|
description: 'appydays provides support for env-based configuration, and common structured
|
210
238
|
logging capabilities
|
211
239
|
|
@@ -216,8 +244,10 @@ extensions: []
|
|
216
244
|
extra_rdoc_files: []
|
217
245
|
files:
|
218
246
|
- lib/appydays/configurable.rb
|
247
|
+
- lib/appydays/configurable/spec_helpers.rb
|
219
248
|
- lib/appydays/dotenviable.rb
|
220
249
|
- lib/appydays/loggable.rb
|
250
|
+
- lib/appydays/loggable/httparty_formatter.rb
|
221
251
|
- lib/appydays/loggable/request_logger.rb
|
222
252
|
- lib/appydays/loggable/sequel_logger.rb
|
223
253
|
- lib/appydays/loggable/sidekiq_job_logger.rb
|