civo-logger 0.2.7 → 0.3.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
  SHA1:
3
- metadata.gz: 8c8b6f96b108f1af143705223a4e0a16d21abf87
4
- data.tar.gz: 84baf45f417fbcc64e3428259d11f0a1b06e56ec
3
+ metadata.gz: 714d48ad34613d53567edc6d9cbb24ad574bc041
4
+ data.tar.gz: d6888f0c43e5e8d3c8b1eb81116278d61d849736
5
5
  SHA512:
6
- metadata.gz: 1a537a4fc3799fe1be7ef3250a33da60238a892df27b8760c96f7d1ff75f34860f383b9127b05e4d1f32b124cd2174bb9abcddc27e51c8551af4ab36c9854c84
7
- data.tar.gz: 6965f2b2a4e32a9ed604390b3444902e0b98afcabd9c875de7a5df60b3eb502abbfcdf73ade60303c8f583512fd2a5fc84ed46615e8dd528f60dd5b01840f586
6
+ metadata.gz: 180403eef9272905b00dd8f9d32649234bd358c8290b3d4328993b5fe982b49fbafe8550ea65de293d07efb1c2382ce028dd2ad9e40f8a62d8790209c25fbe82
7
+ data.tar.gz: 299cb755a2178574083dc063380b15e67dcf11d7772c4365ba2afff0b672c09fd79f1f97c766766ab036723b34a3668b0db4798c4ced903d507bf1cefe1b5e8c
data/civo-logger.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
+ spec.add_dependency "influxdb"
24
25
  spec.add_development_dependency "bundler", "~> 1.14"
25
26
  spec.add_development_dependency "rake", "~> 10.0"
26
27
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -1,3 +1,4 @@
1
+ require "influxdb"
1
2
  require "active_support/core_ext/time/conversions"
2
3
  require "active_support/core_ext/object/blank"
3
4
  require "active_support/log_subscriber"
@@ -6,9 +7,11 @@ require "rack/body_proxy"
6
7
 
7
8
  module Civo
8
9
  class PerRequestLogger < ActiveSupport::LogSubscriber
9
- cattr_accessor :redis
10
10
  cattr_accessor :expires_in
11
11
  STATS_RESOLUTION = 5.minutes
12
+ INFLUXDB_PRECISION = 'ms'
13
+ INFLUXDB_RETENTION = '7d.cpu'
14
+
12
15
 
13
16
  def initialize(app, taggers = nil)
14
17
  self.class.expires_in ||= 24.hours.to_i
@@ -16,17 +19,8 @@ module Civo
16
19
  @taggers = taggers || []
17
20
  Rails.logger = ActionController::Base.logger = ActiveRecord::Base.logger = self
18
21
  $stdout.sync = true
19
- if Rails.env.test?
20
- @redis = self.class.redis || Redis.current
21
- elsif ENV["RAILS_LOGGER_HOSTNAME"].blank?
22
- @redis = nil
23
- else
24
- options = {host: ENV["RAILS_LOGGER_HOSTNAME"], port: Rails.application.config.x.redis_port, timeout: 1}
25
- if ENV["RAILS_LOGGER_PASSWORD"].present?
26
- options[:password] = ENV["RAILS_LOGGER_PASSWORD"]
27
- end
28
- @redis = Redis.new(options)
29
- end
22
+ options = {host: ENV["INFLUX_LOGGER_HOSTNAME"], port: ENV["INFLUX_LOGGER_PORT"], password: ENV["INFLUX_LOGGER_PASSWORD"], username: ENV["INFLUX_LOGGER_USERNAME"], timeout: 1, time_precision: "ms"}
23
+ @influxdb = InfluxDB::Client.new ENV["INFLUX_LOGGER_DATABASE"], options
30
24
  end
31
25
 
32
26
  def call(env)
@@ -105,7 +99,6 @@ module Civo
105
99
 
106
100
  def start_worker(name)
107
101
  @name = name
108
- @key = Time.zone.now.strftime("%Y%m%d-%H%M%S")+"-#{name}"
109
102
  @lines = []
110
103
  @start = Time.now.to_f
111
104
  @recording = true
@@ -114,32 +107,32 @@ module Civo
114
107
  def end_worker
115
108
  puts @lines.join("\n") if Rails.env.production?
116
109
 
117
- if @redis.nil?
110
+ if @influx.nil?
118
111
  puts @log
119
112
  return
120
113
  end
121
114
 
122
- @redis.set("#{app_name}:log-worker:#{@key}", @lines.join("\n"), ex: self.class.expires_in)
123
- rescue Redis::TimeoutError, Redis::CannotConnectError => e
124
- puts "ERROR! Redis error #{e.message}"
115
+ data = {
116
+ values: { log: @lines.join("\n") },
117
+ tags: { url: "worker://#{@name}", app: app_name },
118
+ timestamp: (Time.now.to_r * 1000).to_i
119
+ }
120
+
121
+ @influxdb.write_point("requests", data, INFLUXDB_PRECISION)# , INFLUXDB_RETENTION)
122
+ # rescue Redis::TimeoutError, Redis::CannotConnectError => e
123
+ # puts "ERROR! Redis error #{e.message}"
125
124
  ensure
126
125
  @recording = false
127
126
  end
128
127
 
129
128
  private
130
129
 
131
- def request_key(request)
132
- token = rand(8999) + 1000
133
- @key = Time.zone.now.strftime("%Y%m%d-%H%M%S") +
134
- "-#{token}-#{request.request_method}-#{request.fullpath.gsub("/", "_")}".strip
135
- end
136
-
137
130
  def call_app(request, env) # :doc:
138
131
  @lines = []
139
132
  @recording = true
140
133
  @status = nil
141
134
  @time_taken = nil
142
- @key = request_key(request)
135
+ @url = request.fullpath
143
136
  Rails.logger = ActionController::Base.logger = ActiveRecord::Base.logger = self
144
137
  instrumenter = ActiveSupport::Notifications.instrumenter
145
138
  instrumenter.start "request.action_dispatch", request: request
@@ -196,28 +189,18 @@ module Civo
196
189
  @output = body.to_s
197
190
  end
198
191
 
199
- if @redis.nil?
192
+ if @influxdb.nil?
200
193
  puts @log
201
194
  return
202
195
  end
203
196
 
204
- @redis.set("#{app_name}:log:#{@key}", @log[0, 65535], ex: self.class.expires_in)
205
- @redis.set("#{app_name}:log-output:#{@key}", @output, ex: self.class.expires_in)
206
-
207
- puts "#{request.request_method}-#{request.fullpath}-#{@output.length}-#{@status}-#{@time_taken}" if Rails.env.production?
208
-
209
- @redis.set("#{app_name}:log-request-summary:#{@key}",
210
- "#{request.request_method}:#{request.fullpath}:#{@output.length}:#{@status}:#{@time_taken}", ex: self.class.expires_in)
211
- puts @log if Rails.env.production?
197
+ data = {
198
+ values: { log: Base64.urlsafe_encode64(@log[0, 65535]), output: Base64.urlsafe_encode64(@output), output_length: @output.length, status: @status || "-", ms_taken: @time_taken.to_i},
199
+ tags: { url: request.fullpath, method: request.request_method, app: app_name },
200
+ timestamp: (Time.now.to_r * 1000).to_i
201
+ }
212
202
 
213
- stat_key = Time.zone.at(Time.zone.now.to_i / STATS_RESOLUTION * STATS_RESOLUTION).strftime("%Y%m%d-%H%I%S")
214
- if @status.to_i > 399
215
- @redis.incr("#{app_name}:req-stat-failure:#{stat_key}")
216
- @redis.expire("#{app_name}:req-stat-failure:#{stat_key}", 7.days)
217
- else
218
- @redis.incr("#{app_name}:req-stat-success:#{stat_key}")
219
- @redis.expire("#{app_name}:req-stat-success:#{stat_key}", 7.days)
220
- end
203
+ @influxdb.write_point("requests", data, INFLUXDB_PRECISION)# , INFLUXDB_RETENTION)
221
204
  end
222
205
 
223
206
  if Rails.env.development? || Rails.env.test?
@@ -226,8 +209,8 @@ module Civo
226
209
  end
227
210
  end
228
211
 
229
- rescue Redis::TimeoutError, Redis::CannotConnectError => e
230
- puts "ERROR! Redis error #{e.message}"
212
+ # rescue Redis::TimeoutError, Redis::CannotConnectError => e
213
+ # puts "ERROR! Redis error #{e.message}"
231
214
  ensure
232
215
  @recording = false
233
216
  end
@@ -1,5 +1,5 @@
1
1
  module Civo
2
2
  module Logger
3
- VERSION = "0.2.7"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: civo-logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jeffries
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-09 00:00:00.000000000 Z
11
+ date: 2018-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: influxdb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement