coralogix_logger 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d582d5614b14fbb964f88944c436960ce35ebcd2
4
- data.tar.gz: 72644f9c85ec8be14f7f7a7cda905c7ab5635764
3
+ metadata.gz: 444f4d0977a5a0d4a0111d7e5f5a7a4ed3428d2d
4
+ data.tar.gz: b43e3f213458541180e6e14782ac5d93f3457bf9
5
5
  SHA512:
6
- metadata.gz: be293a220f99fad2f522db411f8698e10cab3e48d710ebbe7c4b458dbeccf6f55b8490020067cd97e0b54aa0a371a3f6232bca058a704cbe97f35e5c16a955c1
7
- data.tar.gz: 61a94a4d2b80727950aa227d745b673983fe5c75f6998f66bb4b22c4b7265483642ac895412eff0621f08af1c19e7a49452cb274d06c92b4a2a9539cafb31010
6
+ metadata.gz: e648ae6b4703093c37be7ef9db79018fbef19b97e93748e3b32cfedf95f0234e51cd6742e47f710ed57b9fbdc93c8f0e3b2017bb50e3f75ccf21e5e0910a19b4
7
+ data.tar.gz: abab7b3b0313cb6c206929437a99822919cd2fcec39f4d4f21d05b936394c9baaf7946ade6ff55f48a819bfbe293029fd7b8a61e6427830892a8f53cbaa1ac9f
data/README.md CHANGED
@@ -33,17 +33,18 @@ You must provide the following four variables when creating a Coralogix logger i
33
33
  APP_NAME = "MyTestApp"
34
34
  SUB_SYSTEM = "BL"
35
35
 
36
+ # Configure Coralogix SDK. You need to define it only once per process.
36
37
  Coralogix::CoralogixLogger.configure(PRIVATE_KEY, APP_NAME, SUB_SYSTEM)
37
38
 
38
- #The common practice is to get an instance of the logger in each class and setting the logger name to the class name.
39
- logger = Coralogix::CoralogixLogger.get_logger("category1")
39
+ # The common practice is to get an instance of the logger in each class and setting the logger name to the class name.
40
+ # logger name will be used as category unless specified otherwise.
41
+ logger = Coralogix::CoralogixLogger.get_logger("my class")
40
42
 
41
- #Send "Hello World!" message with severity verbose.
43
+ # Send "Hello World!" message with severity verbose.
42
44
  logger.log(Coralogix::Severity::VERBOSE, "Hello World!")
43
45
 
44
- #Additional options
45
- #Severity, category and message parameters are mandatory. The rest of the parameters are optional.
46
- #If category is not specified, logger name will be used instead
46
+ # Additional options
47
+ # Severity and message parameters are mandatory. The rest of the parameters are optional.
47
48
  logger.log(Coralogix::Severity::DEBUG, "Hello World!", category: "my category")
48
49
  logger.log(Coralogix::Severity::INFO, "Hello World!", category: "my category", className: "my class")
49
50
  logger.log(Coralogix::Severity::WARNING, "Hello World!", category: "my category", className: "my class", methodName: "my method")
data/lib/constants.rb CHANGED
@@ -27,19 +27,19 @@ module Coralogix
27
27
 
28
28
 
29
29
  #Coralogix logs url
30
- CORALOGIX_LOG_URL = "https://test.coralogix.com:443/api/v1/logs"
30
+ CORALOGIX_LOG_URL = "https://api.coralogix.com:443/api/v1/logs"
31
31
 
32
32
  #Coralogix time delat url
33
- CORALOGIX_TIME_DELTA_URL = "https://test.coralogix.com:443/sdk/v1/time"
33
+ CORALOGIX_TIME_DELTA_URL = "https://api.coralogix.com:443/sdk/v1/time"
34
34
 
35
35
  #Default private key
36
36
  FAILED_PRIVATE_KEY = "9626c7dd-8174-5015-a3fe-5572e042b6d9"
37
37
 
38
38
  #Default application name
39
- FAILED_APP_NAME = "FAILED_APP_NAME"
39
+ NO_APP_NAME = "NO_APP_NAME"
40
40
 
41
41
  #Default subsystem name
42
- FAILED_SUB_SYSTEM = "FAILED_SUB_NAME"
42
+ NO_SUB_SYSTEM = "NO_SUB_NAME"
43
43
 
44
44
  #Default log file name
45
45
  LOG_FILE_NAME = "coralogix.sdk.log"
@@ -53,4 +53,10 @@ module Coralogix
53
53
  #Interval between failed http post requests
54
54
  HTTP_SEND_RETRY_INTERVAL = 2
55
55
 
56
+ # Coralogix category
57
+ CORALOGIX_CATEGORY = 'CORALOGIX'
58
+
59
+ # Sync time update interval
60
+ SYNC_TIME_UPDATE_INTERVAL = 5 #minutes
61
+
56
62
  end
@@ -61,6 +61,9 @@ module Coralogix
61
61
  # @param sub_system - sub system name
62
62
  # @return [boolean] return a true or false.
63
63
  def self.configure private_key, app_name, sub_system
64
+ private_key = private_key.strip.empty? ? FAILED_PRIVATE_KEY : private_key
65
+ app_name = app_name.strip.empty? ? NO_APP_NAME : app_name
66
+ sub_system = sub_system.strip.empty? ? NO_SUB_SYSTEM : sub_system
64
67
  LoggerManager.configure(:privateKey => private_key, :applicationName => app_name, :subsystemName => sub_system) unless LoggerManager.configured
65
68
  end
66
69
 
@@ -72,7 +75,7 @@ module Coralogix
72
75
  # @param className - log class name
73
76
  # @param methodName - log method name
74
77
  # @param threadId - log thread id
75
- def log severity, message, category: @category, className: "", methodName: "", threadId: ""
78
+ def log severity, message, category: @category, className: "", methodName: "", threadId: Thread.current.object_id.to_s
76
79
  LoggerManager.add_logline message, severity, category, :className => className, :methodName => methodName, :threadId => threadId
77
80
  end
78
81
 
@@ -81,7 +84,7 @@ module Coralogix
81
84
  # For instance, for info severity it will create a method:
82
85
  # def info message, category: @category, className: "", methodName: "", threadId: ""
83
86
  SEVERITIES.keys.each do |severity|
84
- define_method("#{severity}") do |message, category: @category, className: "", methodName: "", threadId: ""|
87
+ define_method("#{severity}") do |message, category: @category, className: "", methodName: "", threadId: Thread.current.object_id.to_s|
85
88
  LoggerManager.add_logline message, SEVERITIES["#{__method__}".to_sym], category, :className => className, :methodName => methodName, :threadId => threadId
86
89
  end
87
90
  end
data/lib/httpsender.rb CHANGED
@@ -6,13 +6,13 @@ require 'openssl'
6
6
  require 'benchmark'
7
7
  require 'date'
8
8
  require 'time'
9
-
10
9
  module Coralogix
11
10
  # @private
12
11
  module CoralogixHTTPSender
13
12
  TICKS_IN_SECOND = 10**7
14
13
  @initialized = false
15
-
14
+ @mutex = Mutex.new
15
+
16
16
  def CoralogixHTTPSender.disable_proxy value
17
17
  @disable_proxy = value
18
18
  end
@@ -33,7 +33,9 @@ module Coralogix
33
33
  @http.keep_alive_timeout = 10
34
34
  @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
35
35
  @http.read_timeout = HTTP_TIMEOUT # seconds
36
+
36
37
  @req = Net::HTTP::Post.new(@uri.path, 'Content-Type' => 'application/json')
38
+ #@req_get = Net::HTTP::Get.new URI(CORALOGIX_TIME_DELTA_URL)
37
39
  @initialized = true
38
40
  rescue Exception => e
39
41
  DebugLogger.error e.message
@@ -73,29 +75,31 @@ module Coralogix
73
75
  #
74
76
  # @return [float] - time delta
75
77
  def CoralogixHTTPSender.get_time_sync
76
- self.initialize unless @initialized
77
- begin
78
- DebugLogger.info "Syncing time with coralogix server"
79
- res = @http.get(CORALOGIX_TIME_DELTA_URL)
80
-
81
- if res.is_a?(Net::HTTPSuccess) && !res.body.to_s.empty?
82
- #Get server ticks from 1970
83
- server_ticks = res.body.to_i.to_s # Relative to 1970
84
- #Take the first 13 digits
85
- server_ticks = server_ticks[0..12]
86
- #Convert the ticks to utc time
87
- server_time = Time.parse(Time.at(server_ticks.to_i / 1000.to_f).strftime('%H:%M:%S.%L')).utc
88
- local_time = Time.now.utc
78
+ @mutex.synchronize do
79
+ self.initialize unless @initialized
80
+ begin
81
+ DebugLogger.info "Syncing time with coralogix server"
82
+ res = @http.get(CORALOGIX_TIME_DELTA_URL)
89
83
 
90
- time_delta = (server_time - local_time) * 1000.0
91
- DebugLogger.info "Updating time delta to: #{time_delta}"
92
- return true, time_delta
84
+ if res.is_a?(Net::HTTPSuccess) && !res.body.to_s.empty?
85
+ #Get server ticks from 1970
86
+ server_ticks = res.body.to_i.to_s # Relative to 1970
87
+ #Take the first 13 digits
88
+ server_ticks = server_ticks[0..12]
89
+ #Convert the ticks to utc time
90
+ server_time = Time.parse(Time.at(server_ticks.to_i / 1000.to_f).strftime('%H:%M:%S.%L')).utc
91
+ local_time = Time.now.utc
92
+
93
+ time_delta = (server_time - local_time) * 1000.0
94
+ DebugLogger.info "Updating time delta to: #{time_delta}"
95
+ return true, time_delta
96
+ end
97
+ return false, 0
98
+ rescue Exception => e
99
+ DebugLogger.error e.message
100
+ DebugLogger.error e.backtrace.inspect
101
+ return false, 0
93
102
  end
94
- return false, 0
95
- rescue Exception => e
96
- DebugLogger.error e.message
97
- DebugLogger.error e.backtrace.inspect
98
- return false, 0
99
103
  end
100
104
  end
101
105
  end
data/lib/manager.rb CHANGED
@@ -15,7 +15,7 @@ module Coralogix
15
15
  def self.initialize
16
16
  @buffer = []
17
17
  @buffer_size = 0
18
- @bulk_template = {:privateKey => FAILED_PRIVATE_KEY, :applicationName => FAILED_APP_NAME, :subsystemName => FAILED_SUB_SYSTEM}
18
+ @bulk_template = {:privateKey => FAILED_PRIVATE_KEY, :applicationName => NO_APP_NAME, :subsystemName => NO_SUB_SYSTEM}
19
19
  @mutex = Mutex.new
20
20
  @time_delta_last_update = 0
21
21
  @time_delta = 0
@@ -32,12 +32,27 @@ module Coralogix
32
32
  def self.configure **args
33
33
  begin
34
34
  @bulk_template = args.merge({:computerName => `hostname`.strip})
35
- configured = true
36
- rescue
37
- return false
35
+ DebugLogger.info "Successfully configured Coralogix logger."
36
+ @configured = true
37
+ self.update_time_delta_interval
38
+ self.add_logline "The Application Name #{@bulk_template[:applicationName]} and Subsystem Name #{@bulk_template[:subsystemName]} from the Ruby SDK, version #{self.version?} has started to send data.", Severity::INFO, CORALOGIX_CATEGORY
39
+ rescue Exception => e
40
+ DebugLogger.error e.message
41
+ DebugLogger.error e.backtrace.inspect
42
+ @configured = false
38
43
  end
44
+ return @configured
39
45
  end
40
46
 
47
+ def self.version?
48
+ begin
49
+ Gem.loaded_specs['coralogix_logger'].version.to_s
50
+ rescue Exception => e
51
+ DebugLogger.error e.message
52
+ DebugLogger.error e.backtrace.inspect
53
+ return '0.0.0'
54
+ end
55
+ end
41
56
  # Add a log line to our buffer.
42
57
  #
43
58
  # @param message - The logs message. This is a must parameter.
@@ -55,10 +70,8 @@ module Coralogix
55
70
  #Combine a logentry from the must parameters together with the optional one.
56
71
  new_entry = {:text => message, :timestamp => Time.now.utc.to_f * 1000 + @time_delta, :severity => severity, :category => category}.merge(args)
57
72
  @buffer << new_entry
58
- #Updte the buffer size to reflect the new size.
73
+ #Update the buffer size to reflect the new size.
59
74
  @buffer_size+=new_entry.to_json.bytesize
60
- else
61
- DebugLogger.warn "Buffer is full. Ignoring current message."
62
75
  end
63
76
  end
64
77
  rescue Exception => e
@@ -77,12 +90,17 @@ module Coralogix
77
90
  @mutex.synchronize do
78
91
  # Total buffer size
79
92
  size = @buffer.size
93
+ return unless size > 0
80
94
 
81
95
  # If the size is bigger than the maximum allowed chunk size then split it by half.
82
96
  # Keep splitting it until the size is less than MAX_LOG_CHUNK_SIZE
83
- while @buffer.take(size).join(",").bytesize > MAX_LOG_CHUNK_SIZE
97
+ while (@buffer.take(size).join(",").bytesize > MAX_LOG_CHUNK_SIZE) || (size == 0)
84
98
  size=size/2;
85
99
  end
100
+
101
+ # We must take at leat one value. If the first message is bigger than MAX_LOG_CHUNK_SIZE
102
+ # we need to take it anyway.
103
+ size = size > 0 ? size : 1
86
104
 
87
105
  DebugLogger.info "Checking buffer size. Total log entries is: #{size}"
88
106
  @bulk_template[:logEntries] = @buffer.shift(size)
@@ -90,6 +108,9 @@ module Coralogix
90
108
  # Extract from the buffer size the total amount of the logs we removed from the buffer
91
109
  @buffer_size-= (@bulk_template[:logEntries].to_json.bytesize - 2 - size-1)
92
110
 
111
+ # Make sure we are always positive
112
+ @buffer_size = @buffer_size >= 0 ? @buffer_size : 0
113
+
93
114
  DebugLogger.info "Bufer size after removal is: #{@buffer.join(",").bytesize}"
94
115
  end
95
116
  CoralogixHTTPSender.send_request(@bulk_template) unless @bulk_template[:logEntries].empty?
@@ -103,7 +124,7 @@ module Coralogix
103
124
  def self.update_time_delta_interval
104
125
  begin
105
126
  #If more than 5 seconds passed from the last sync update
106
- if ((DateTime.now.strftime('%Q').to_i - @time_delta_last_update) / 1000) >= 300 #5 minuts
127
+ if ((DateTime.now.strftime('%Q').to_i - @time_delta_last_update) / 1000) >= (60 * SYNC_TIME_UPDATE_INTERVAL) #5 minuts
107
128
  res, _time_delta = CoralogixHTTPSender.get_time_sync
108
129
  if res
109
130
  @time_delta = _time_delta
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coralogix_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Royee Goldberg