thinkingdata-ruby 2.0.0 → 2.0.1

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.
@@ -1,77 +1,87 @@
1
- require 'logger'
2
- require 'thinkingdata-ruby/td_errors'
3
-
4
- module ThinkingData
5
-
6
- ##
7
- # Dismantle the header and save it under another name
8
- class HeadlessLogger < Logger
9
- def initialize(logdev, shift_age = 0, shift_size = 1048576)
10
- super(nil)
11
- if logdev
12
- @logdev = HeadlessLogger::LogDevice.new(logdev, shift_age: shift_age, shift_size: shift_size)
13
- end
14
- end
15
-
16
- class LogDevice < ::Logger::LogDevice
17
- def add_log_header(file); end
18
- end
19
- end
20
-
21
- ##
22
- # Write data to file, it works with LogBus
23
- class TDLoggerConsumer
24
-
25
- ##
26
- # Init logger consumer
27
- # @param log_path: log file's path
28
- # @param mode: file rotate mode
29
- # @param prefix: file prefix
30
- def initialize(log_path='.', mode='daily', prefix:'te.log')
31
- case mode
32
- when 'hourly'
33
- @suffix_mode = '%Y-%m-%d-%H'
34
- when 'daily'
35
- @suffix_mode = '%Y-%m-%d'
36
- else
37
- raise IllegalParameterError.new("#{mode} is unsupported for LoggerConsumer. Replaced it by daily or hourly")
38
- end
39
-
40
- raise IllegalParameterError.new("prefix couldn't be empty") if prefix.nil? || prefix.length == 0
41
-
42
- @current_suffix = Time.now.strftime(@suffix_mode)
43
- @log_path = log_path
44
- @full_prefix = "#{log_path}/#{prefix}"
45
- TDLog.info("TDLoggerConsumer init success. LogPath: #{log_path}")
46
- _reset
47
- end
48
-
49
- def add(msg)
50
- unless Time.now.strftime(@suffix_mode) == @current_suffix
51
- @logger.close
52
- @current_suffix = Time.now.strftime(@suffix_mode)
53
- _reset
54
- end
55
- msg_json_str = msg.to_json
56
- TDLog.info("Write data to file: #{msg_json_str}")
57
- @logger.info(msg_json_str)
58
- end
59
-
60
- def close
61
- @logger.close
62
- TDLog.info("TDLoggerConsumer close.")
63
- end
64
-
65
- private
66
-
67
- def _reset
68
- Dir::mkdir(@log_path) unless Dir::exist?(@log_path)
69
- @logger = HeadlessLogger.new("#{@full_prefix}.#{@current_suffix}")
70
- @logger.level = HeadlessLogger::INFO
71
- @logger.formatter = proc do |severity, datetime, progname, msg|
72
- "#{msg}\n"
73
- end
74
- end
75
-
76
- end
1
+ require 'logger'
2
+ require 'thinkingdata-ruby/td_errors'
3
+
4
+ module ThinkingData
5
+
6
+ ##
7
+ # Dismantle the header and save it under another name
8
+ class HeadlessLogger < Logger
9
+ def initialize(logdev, shift_age = 0, shift_size = 1048576)
10
+ super(nil)
11
+ if logdev
12
+ @logdev = HeadlessLogger::LogDevice.new(logdev, shift_age: shift_age, shift_size: shift_size)
13
+ end
14
+ end
15
+
16
+ class LogDevice < ::Logger::LogDevice
17
+ def add_log_header(file); end
18
+ end
19
+ end
20
+
21
+ ##
22
+ # Write data to file, it works with LogBus
23
+ class TDLoggerConsumer
24
+
25
+ ##
26
+ # Init logger consumer
27
+ # @param log_path: log file's path
28
+ # @param mode: file rotate mode
29
+ # @param prefix: file prefix
30
+ def initialize(log_path='.', mode='daily', prefix:'te.log')
31
+ case mode
32
+ when 'hourly'
33
+ @suffix_mode = '%Y-%m-%d-%H'
34
+ when 'daily'
35
+ @suffix_mode = '%Y-%m-%d'
36
+ else
37
+ raise IllegalParameterError.new("#{mode} is unsupported for LoggerConsumer. Replaced it by daily or hourly")
38
+ end
39
+
40
+ raise IllegalParameterError.new("prefix couldn't be empty") if prefix.nil? || prefix.length == 0
41
+
42
+ @current_suffix = Time.now.strftime(@suffix_mode)
43
+ @log_path = log_path
44
+ @full_prefix = "#{log_path}/#{prefix}"
45
+ @mutex = Mutex.new
46
+ TDLog.info("TDLoggerConsumer init success. LogPath: #{log_path}")
47
+ _reset
48
+ end
49
+
50
+ def add(msg)
51
+ @mutex.synchronize do
52
+ unless Time.now.strftime(@suffix_mode) == @current_suffix
53
+ @logger.close
54
+ @current_suffix = Time.now.strftime(@suffix_mode)
55
+ _reset
56
+ end
57
+ msg_json_str = msg.to_json
58
+ TDLog.info("Write data to file: #{msg_json_str}")
59
+ @logger.info(msg_json_str)
60
+ end
61
+ end
62
+
63
+ def flush
64
+ # Logger writes immediately on each call, no explicit flush needed
65
+ TDLog.info("TDLoggerConsumer flush.")
66
+ end
67
+
68
+ def close
69
+ @mutex.synchronize do
70
+ @logger.close
71
+ end
72
+ TDLog.info("TDLoggerConsumer close.")
73
+ end
74
+
75
+ private
76
+
77
+ def _reset
78
+ Dir::mkdir(@log_path) unless Dir::exist?(@log_path)
79
+ @logger = HeadlessLogger.new("#{@full_prefix}.#{@current_suffix}")
80
+ @logger.level = HeadlessLogger::INFO
81
+ @logger.formatter = proc do |severity, datetime, progname, msg|
82
+ "#{msg}\n"
83
+ end
84
+ end
85
+
86
+ end
77
87
  end
@@ -1,3 +1,3 @@
1
- module ThinkingData
2
- VERSION = '2.0.0'
3
- end
1
+ module ThinkingData
2
+ VERSION = '2.0.1'
3
+ end
@@ -1,5 +1,5 @@
1
- require 'thinkingdata-ruby/td_logger_consumer'
2
- require 'thinkingdata-ruby/td_debug_consumer'
3
- require 'thinkingdata-ruby/td_batch_consumer'
4
- require 'thinkingdata-ruby/td_analytics'
1
+ require 'thinkingdata-ruby/td_logger_consumer'
2
+ require 'thinkingdata-ruby/td_debug_consumer'
3
+ require 'thinkingdata-ruby/td_batch_consumer'
4
+ require 'thinkingdata-ruby/td_analytics'
5
5
  require 'thinkingdata-ruby/td_errors'
@@ -1,16 +1,16 @@
1
- require File.join(File.dirname(__FILE__), 'lib/thinkingdata-ruby/td_version.rb')
2
-
3
- spec = Gem::Specification.new do |spec|
4
- spec.name = 'thinkingdata-ruby'
5
- spec.version = ThinkingData::VERSION
6
- spec.files = Dir.glob(`git ls-files`.split("\n"))
7
- spec.require_paths = ['lib']
8
- spec.summary = 'Official ThinkingData Analytics API for ruby'
9
- spec.description = 'The official ThinkingData Analytics API for ruby'
10
- spec.authors = [ 'ThinkingData' ]
11
- spec.email = 'sdk@thinkingdata.cn'
12
- spec.homepage = 'https://github.com/ThinkingDataAnalytics/ruby-sdk'
13
- spec.license = 'Apache-2.0'
14
-
15
- spec.required_ruby_version = '>= 2.0.0'
16
- end
1
+ require File.join(File.dirname(__FILE__), 'lib/thinkingdata-ruby/td_version.rb')
2
+
3
+ spec = Gem::Specification.new do |spec|
4
+ spec.name = 'thinkingdata-ruby'
5
+ spec.version = ThinkingData::VERSION
6
+ spec.files = Dir.glob(`git ls-files`.split("\n"))
7
+ spec.require_paths = ['lib']
8
+ spec.summary = 'Official ThinkingData Analytics API for ruby'
9
+ spec.description = 'The official ThinkingData Analytics API for ruby'
10
+ spec.authors = [ 'ThinkingData' ]
11
+ spec.email = 'sdk@thinkingdata.cn'
12
+ spec.homepage = 'https://github.com/ThinkingDataAnalytics/ruby-sdk'
13
+ spec.license = 'Apache-2.0'
14
+
15
+ spec.required_ruby_version = '>= 2.0.0'
16
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thinkingdata-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ThinkingData
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-26 00:00:00.000000000 Z
11
+ date: 2026-05-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The official ThinkingData Analytics API for ruby
14
14
  email: sdk@thinkingdata.cn
@@ -34,7 +34,7 @@ homepage: https://github.com/ThinkingDataAnalytics/ruby-sdk
34
34
  licenses:
35
35
  - Apache-2.0
36
36
  metadata: {}
37
- post_install_message:
37
+ post_install_message:
38
38
  rdoc_options: []
39
39
  require_paths:
40
40
  - lib
@@ -49,8 +49,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  requirements: []
52
- rubygems_version: 3.4.6
53
- signing_key:
52
+ rubygems_version: 3.0.3.1
53
+ signing_key:
54
54
  specification_version: 4
55
55
  summary: Official ThinkingData Analytics API for ruby
56
56
  test_files: []