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.
- checksums.yaml +4 -4
- data/.gitignore +58 -58
- data/CHANGELOG.md +28 -21
- data/Gemfile +7 -7
- data/LICENSE +201 -201
- data/README.md +11 -11
- data/demo/demo.rb +104 -104
- data/lib/thinkingdata-ruby/td_analytics.rb +509 -495
- data/lib/thinkingdata-ruby/td_batch_consumer.rb +154 -142
- data/lib/thinkingdata-ruby/td_debug_consumer.rb +73 -73
- data/lib/thinkingdata-ruby/td_errors.rb +37 -37
- data/lib/thinkingdata-ruby/td_logger_consumer.rb +86 -76
- data/lib/thinkingdata-ruby/td_version.rb +3 -3
- data/lib/thinkingdata-ruby.rb +4 -4
- data/thinkingdata-ruby.gemspec +16 -16
- metadata +6 -6
|
@@ -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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
@
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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.
|
|
3
|
-
end
|
|
1
|
+
module ThinkingData
|
|
2
|
+
VERSION = '2.0.1'
|
|
3
|
+
end
|
data/lib/thinkingdata-ruby.rb
CHANGED
|
@@ -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'
|
data/thinkingdata-ruby.gemspec
CHANGED
|
@@ -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.
|
|
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:
|
|
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.
|
|
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: []
|