loggie 0.0.3 → 0.0.4

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
  SHA1:
3
- metadata.gz: 54f4aa6ed07ad0839fc96270543d29a8613844a0
4
- data.tar.gz: d3cc371da73af48e08e3692c4d614f3b09ded77f
3
+ metadata.gz: 1f5379f3de4e3589a9e4932702b79244c6f26a1a
4
+ data.tar.gz: a80e9996174e3a85fdfad3f5ac0aad08a3626404
5
5
  SHA512:
6
- metadata.gz: 2069a90bcbf532b442fcf3566c16ebb4a86aa6947695f0e59c9516e2d501ef2766b90a7b184442e4f92bd90141d04c0ece94bcf16c9370dcca5ea8f5d0a8d9d1
7
- data.tar.gz: c63c50515147e7cdb02254efb0c6a8f3556416b5ce871714c2674a47f4ee59461d9adbe8e0f77576bca9b3146ec0f045a6393fb4b78133f5491b4dd854d95f11
6
+ metadata.gz: 05f8aeb73e4ae741e9bb791bd32ccb602b54c0600ab0e0e743b28d3bebe98aad998532425ea0aac87071f7cb4edc00eadf64d16dd06514300470bed65ca254ee
7
+ data.tar.gz: 1e97433ff0b40817b2eb9360be901018adb250019f4cd1ee89ff30e876506bbe0809aa1c5cdb43ccd377dc4e9aacd6ab1dfefac312481e90145f853ae9e5ba93
data/README.md CHANGED
@@ -34,6 +34,38 @@ Or, use from the command line with:
34
34
 
35
35
  `loggie foobar`
36
36
 
37
+ env is required for command line usage, and can be prefixed to the command, eg:
38
+
39
+ `READ_TOKEN=abc LOG_FILES=x,y,z loggie foobar`
40
+
41
+ Or the create a `.loggie` file in the current path.
42
+
43
+ ## Configuring Loggie
44
+
45
+ ```
46
+ Loggie.configure do |config|
47
+ # from https://logentries.com/app/<app>#/user-account/apikey
48
+ config.read_token = 'key'
49
+
50
+ # A comma separated list of log file ids
51
+ config.log_files = ['e20bd6af', 'c83c7cd7', '6fb426fd', '776dfea9']
52
+
53
+ # Depending on the size of the underlying dataset of the complexity of the query,
54
+ # a request may not yield a value straight away. In this case this gem will request
55
+ # the results up until this retry count
56
+ config.max_retry = 50
57
+
58
+ # Time to sleep before each retry, smaller value will poll more
59
+ # and could get get result quicker, but will eat into rate limit
60
+ # of request count
61
+ config.sleep_before_retry_seconds = 0.5
62
+
63
+ # If the log message is JSON parsable, then it will slice off all but
64
+ # the ones listed here. Whole log line is returned otherwise.
65
+ config.default_fields_included = ["keys", "from", "log", "output"]
66
+ end
67
+ ```
68
+
37
69
  ## Development
38
70
 
39
71
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/bin/console CHANGED
@@ -3,8 +3,5 @@
3
3
  require "bundler/setup"
4
4
  require "loggie"
5
5
 
6
- require 'dotenv'
7
- Dotenv.load
8
-
9
6
  require "pry"
10
7
  Pry.start
data/bin/loggie CHANGED
@@ -3,10 +3,6 @@
3
3
 
4
4
  require "bundler/setup"
5
5
 
6
- require 'dotenv'
7
- Dotenv.load
8
- Dotenv.load(".loggie.env")
9
-
10
6
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "/../lib"))
11
7
 
12
8
  require 'loggie'
@@ -0,0 +1,35 @@
1
+ module Loggie
2
+ class << self
3
+ attr_accessor :configuration
4
+ end
5
+
6
+ def self.configure
7
+ self.configuration ||= Configuration.new
8
+ yield(configuration)
9
+ end
10
+
11
+ class Configuration
12
+ MAX_RETRY_DELEY_SECONDS = 20.0 # max 20 seconds, or it will expire
13
+
14
+ attr_accessor :read_token
15
+ attr_accessor :log_files
16
+ attr_accessor :max_retry
17
+ attr_accessor :log_level
18
+ attr_accessor :sleep_before_retry_seconds
19
+ attr_accessor :default_fields_included
20
+
21
+ def initialize
22
+ @max_retry = 50
23
+ @log_level = :info
24
+ @sleep_before_retry_seconds = 0.5
25
+ @default_fields_included = [
26
+ "request_method", "path_info", "query_string", "agent",
27
+ "authorization", "response_body", "request_params"
28
+ ]
29
+ end
30
+
31
+ def valid?
32
+ sleep_before_retry_seconds.to_f < MAX_RETRY_DELEY_SECONDS
33
+ end
34
+ end
35
+ end
@@ -36,12 +36,8 @@ module Loggie
36
36
  # "request_params" ....
37
37
  # "duration"
38
38
 
39
- DEFAULT_FIELDS_INCLUDED = [
40
- "request_method", "path_info", "query_string", "agent", "authorization", "response_body", "request_params"
41
- ]
42
-
43
39
  def initialize
44
- @keep_fields = DEFAULT_FIELDS_INCLUDED
40
+ @keep_fields = Loggie.configuration.default_fields_included
45
41
  end
46
42
 
47
43
  ##
@@ -72,7 +68,7 @@ module Loggie
72
68
  m = remove_rails_timestamp(m)
73
69
  m = safe_parse(m)
74
70
  m = remove_empty_fields(m)
75
- m.except(*keep_fields)
71
+ m.slice(*keep_fields)
76
72
  end
77
73
 
78
74
  def remove_rails_timestamp(message)
@@ -5,16 +5,18 @@ module Loggie
5
5
  # It checks the response and extracts the polling URI for progress
6
6
  class Retry
7
7
  include Logging
8
- MAX_RETRY = ENV.fetch('MAX_RETRY', 5).to_i
9
- RETRY_DELAY_SECONDS = ENV.fetch('RETRY_DELAY_SECONDS', 0.2).to_f
10
- MAX_RETRY_DELEY_SECONDS = 20 # max 20 seconds, or it will expire
11
8
 
12
9
  class RetryError < RuntimeError; end
13
10
  class RetryCountExceededError < RetryError; end
14
11
  class RetryResponseError < RetryError; end
15
12
 
13
+ def initialize
14
+ @retry_count = 0
15
+ @max_retry = Loggie.configuration.max_retry
16
+ @sleep_before_retry_seconds = Loggie.configuration.sleep_before_retry_seconds
17
+ end
18
+
16
19
  def call(url, method, options, &block)
17
- # TODO: ensure retry_count is reset or if that matters
18
20
  @retry_count ||= 0
19
21
  response = block.call(url, method, options)
20
22
  logger.debug "#{self.class} retry:#{@retry_count}, response:#{response.body}"
@@ -28,11 +30,11 @@ module Loggie
28
30
  logger.info "Logentries returned progress:#{res.progress}"
29
31
 
30
32
  @retry_count += 1
31
- if @retry_count > MAX_RETRY
32
- raise RetryCountExceededError, "Retry count of #{MAX_RETRY} reached"
33
+ if @retry_count > max_retry
34
+ raise RetryCountExceededError, "Retry count of #{max_retry} reached"
33
35
  end
34
36
 
35
- sleep RETRY_DELAY_SECONDS
37
+ sleep sleep_before_retry_seconds
36
38
 
37
39
  self.call(res.next_url, :get, nil, &block)
38
40
 
@@ -40,6 +42,10 @@ module Loggie
40
42
  logger.error e.message
41
43
  nil
42
44
  end
45
+
46
+ private
47
+
48
+ attr_reader :max_retry, :sleep_before_retry_seconds
43
49
  end
44
50
  end
45
51
  end
@@ -5,7 +5,6 @@ module Loggie
5
5
  include Logging
6
6
  BASE_URI = "https://rest.logentries.com"
7
7
  QUERY_PATH = "query/logs"
8
- LOG_FILES = ENV['LOG_FILES']
9
8
 
10
9
  ##
11
10
  # @param [String] query: to perform
@@ -15,7 +14,7 @@ module Loggie
15
14
  #
16
15
  def initialize(query: nil, from: nil, to: nil, log_files: nil)
17
16
  @query, @from, @to = query, from, to
18
- @log_files = log_files || log_files_from_env
17
+ @log_files = log_files || Loggie.configuration.log_files
19
18
  @extract = Extract.new
20
19
  @request = Request.new(retry_mechanism: Retry.new)
21
20
  end
@@ -52,10 +51,6 @@ module Loggie
52
51
  def convert(time)
53
52
  (time.to_f * 1000).floor
54
53
  end
55
-
56
- def log_files_from_env
57
- LOG_FILES&.split(",")
58
- end
59
54
  end
60
55
  end
61
56
  end
@@ -1,11 +1,9 @@
1
1
  require 'logger'
2
2
 
3
3
  module Logging
4
- LOG_LEVEL = ENV.fetch('LOG_LEVEL', :warn).to_sym
5
-
6
4
  class << self
7
5
  def logger
8
- @logger ||= ::Logger.new(STDOUT).tap { |l| l.level = LOG_LEVEL }
6
+ @logger ||= ::Logger.new(STDOUT).tap { |l| l.level = Loggie.configuration.log_level }
9
7
  end
10
8
 
11
9
  def logger=(logger)
@@ -6,7 +6,6 @@ module Loggie
6
6
  # polling long running queries on remote server
7
7
  class Request
8
8
  include Logging
9
- READ_TOKEN = ENV['READ_TOKEN']
10
9
 
11
10
  def initialize(retry_mechanism: )
12
11
  @retry_mechanism = retry_mechanism || Retry.new
@@ -40,7 +39,7 @@ module Loggie
40
39
  else
41
40
  Net::HTTP::Post.new(url)
42
41
  end
43
- request["x-api-key"] = READ_TOKEN
42
+ request["x-api-key"] = Loggie.configuration.read_token
44
43
 
45
44
  if method == :post
46
45
  request["content-type"] = 'application/json'
@@ -1,3 +1,3 @@
1
1
  module Loggie
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/loggie.rb CHANGED
@@ -3,6 +3,7 @@ Time.zone = 'Europe/London'
3
3
 
4
4
  require "loggie/version"
5
5
  require "loggie/logging"
6
+ require 'loggie/configuration'
6
7
 
7
8
  require "loggie/extract"
8
9
  require "loggie/request"
data/loggie.gemspec CHANGED
@@ -18,8 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.executables << "loggie"
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "dotenv", "~> 2.1"
22
- spec.add_dependency "activesupport", "~> 5.0"
21
+ spec.add_dependency "activesupport", "~> 4.0"
23
22
 
24
23
  spec.add_development_dependency "bundler", "~> 1.12"
25
24
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loggie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Vaughan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-18 00:00:00.000000000 Z
11
+ date: 2017-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: dotenv
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.1'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.1'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: activesupport
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '5.0'
19
+ version: '4.0'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '5.0'
26
+ version: '4.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -144,8 +130,6 @@ executables:
144
130
  extensions: []
145
131
  extra_rdoc_files: []
146
132
  files:
147
- - ".env.example"
148
- - ".env.test"
149
133
  - ".gitignore"
150
134
  - ".rspec"
151
135
  - ".ruby-version"
@@ -158,6 +142,7 @@ files:
158
142
  - bin/loggie
159
143
  - bin/setup
160
144
  - lib/loggie.rb
145
+ - lib/loggie/configuration.rb
161
146
  - lib/loggie/extract.rb
162
147
  - lib/loggie/logentries/response.rb
163
148
  - lib/loggie/logentries/retry.rb
data/.env.example DELETED
@@ -1,13 +0,0 @@
1
- # from https://logentries.com/app/<app>#/user-account/apikey
2
- READ_TOKEN=key
3
-
4
- # A comma separated list of log file ids
5
- LOG_FILES=e20bd6af, c83c7cd7, 6fb426fd, 776dfea9
6
-
7
- # Depending on the size of the underlying dataset of the complexity of the query,
8
- # a request may not yield a value straight away. In this case this gem will request
9
- # the results up until this retry count
10
- MAX_RETRY=50
11
-
12
- # Internal logging level. default: info
13
- LOG_LEVEL=info
data/.env.test DELETED
@@ -1,12 +0,0 @@
1
- READ_TOKEN=bf3b4d32
2
-
3
- # A comma separated list of log file ids
4
- LOG_FILES=e20bd6af,c83c7cd7,6fb426fd,776dfea9
5
-
6
- # Depending on the size of the underlying dataset of the complexity of the query,
7
- # a request may not yield a value straight away. In this case this gem will request
8
- # the results up until this retry count
9
- MAX_RETRY=50
10
-
11
- # LOG_LEVEL=info
12
- LOG_LEVEL=debug