stat-count-client 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +1 -0
- data/doc/collecter.thrift +299 -0
- data/doc/gen.txt +1 -0
- data/lib/config_loader.rb +2 -7
- data/lib/hessian_data_utils.rb +0 -7
- data/lib/logger_factory.rb +7 -12
- data/lib/stat-count-client.rb +2 -332
- data/lib/stat-count-client/config_loader.rb +13 -0
- data/lib/stat-count-client/hessian/stat_data_utils.rb +16 -0
- data/lib/stat-count-client/hessian_client.rb +179 -0
- data/lib/stat-count-client/logger_factory.rb +32 -0
- data/lib/stat-count-client/stat_count_data.rb +135 -0
- data/lib/stat-count-client/thrift/collecter_constants.rb +15 -0
- data/lib/stat-count-client/thrift/collecter_types.rb +209 -0
- data/lib/stat-count-client/thrift/remote_simple_count_collecter.rb +1766 -0
- data/lib/stat-count-client/thrift_client.rb +263 -0
- data/lib/stat-count-client/version.rb +1 -1
- data/test/stat_ccount_client_test.rb +76 -87
- data/test/stat_count_client_test.rb +181 -0
- data/test/thrift_count_client_test.rb +181 -0
- metadata +39 -15
- data/Gemfile.lock +0 -14
- data/stat-count-client.gemspec +0 -21
@@ -0,0 +1,263 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
|
3
|
+
require "thrift_client"
|
4
|
+
require "stat-count-client/thrift/collecter_types"
|
5
|
+
require "stat-count-client/thrift/remote_simple_count_collecter"
|
6
|
+
require "stat-count-client/stat_count_data"
|
7
|
+
require "stat-count-client/logger_factory"
|
8
|
+
require "singleton"
|
9
|
+
|
10
|
+
module Stat
|
11
|
+
module Count
|
12
|
+
module Client
|
13
|
+
class ThriftStatCountClient
|
14
|
+
include ConfigLoader
|
15
|
+
include Stat::Count::Thrift
|
16
|
+
@@logger = LoggerFactory.getLogger("StatCountThriftClient")
|
17
|
+
|
18
|
+
def initialize(servers=nil, config=nil)
|
19
|
+
servers ||= ENV['stat.count.domain'] || ConfigLoader::CONFIG['thrift.domain'] || "localhost:9090"
|
20
|
+
config ||= ConfigLoader::CONFIG['thrift.config']
|
21
|
+
if config.nil?
|
22
|
+
config[:client_class] = RemoteSimpleCountCollecter::Client
|
23
|
+
config[:application_exception_classes] = DataCollectionException
|
24
|
+
else
|
25
|
+
client_class = config['client_class'] || "RemoteSimpleCountCollecter::Client"
|
26
|
+
config[:client_class] = eval(client_class)
|
27
|
+
application_exception_classes_strs = config['application_exception_classes'] || ["DataCollectionException"]
|
28
|
+
application_exception_classe=application_exception_classes_strs.collect { |class_str|
|
29
|
+
eval(class_str)
|
30
|
+
}
|
31
|
+
config[:application_exception_classes] = application_exception_classe
|
32
|
+
init(servers, config)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def incrByCountWithDate(date_count)
|
38
|
+
thrift_date_count = to_date_count(date_count)
|
39
|
+
@client.incrByCountWithDate(thrift_date_count)
|
40
|
+
end
|
41
|
+
|
42
|
+
def incrByCount(count)
|
43
|
+
thrift_count = to_count(count)
|
44
|
+
count_result_hash = @client.incrByCount(thrift_count).countResults
|
45
|
+
count_result_hash = {}.tap{|hash|hash['countResults'] = count_result_hash}
|
46
|
+
Stat::Count::Data::CountResult.new(count_result_hash)
|
47
|
+
end
|
48
|
+
|
49
|
+
def incr(name, id, count=1, date=nil)
|
50
|
+
if(date.nil?)
|
51
|
+
count_result_hash = @client.incrBy(name,id, count)
|
52
|
+
else
|
53
|
+
@client.incrByWithDate(name, id, count, date)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def decr(name, id, count=1, date=nil)
|
58
|
+
if(date.nil?)
|
59
|
+
@client.decrBy(name, id, count)
|
60
|
+
else
|
61
|
+
@client.decrByWithDate(name, id, count, date)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def decrByCount(count)
|
66
|
+
thrift_count = to_count(count)
|
67
|
+
count_result_hash = @client.decrByCount(thrift_count).countResults
|
68
|
+
count_result_hash = {}.tap{|hash|hash['countResults'] = count_result_hash}
|
69
|
+
Stat::Count::Data::CountResult.new(count_result_hash)
|
70
|
+
end
|
71
|
+
|
72
|
+
def decrByCountWithDate(dateCount)
|
73
|
+
thrift_date_count = to_date_count(dateCount)
|
74
|
+
count_result_hash = @client.decrByCountWithDate(thrift_date_count).countResults
|
75
|
+
count_result_hash = {}.tap{|hash|hash['countResults'] = count_result_hash}
|
76
|
+
Stat::Count::Data::CountResult.new(count_result_hash)
|
77
|
+
end
|
78
|
+
|
79
|
+
def setByCountWithDate(dateCount)
|
80
|
+
thrift_date_count = to_date_count(dateCount)
|
81
|
+
@client.setByCountWithDate(thrift_date_count)
|
82
|
+
end
|
83
|
+
|
84
|
+
def setByCount(count)
|
85
|
+
thrift_count = to_count(count)
|
86
|
+
@client.setByCount(thrift_count)
|
87
|
+
end
|
88
|
+
|
89
|
+
def set(name,id, value, date=nil)
|
90
|
+
if(date.nil?)
|
91
|
+
@client.setValue(name, id, value)
|
92
|
+
else
|
93
|
+
@client.setWithDate(name,id, value,date)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def reset(name, id, limit=1)
|
98
|
+
@client.resetByLimit(name, id, limit)
|
99
|
+
end
|
100
|
+
|
101
|
+
def get(name, id, limit=1)
|
102
|
+
@client.getByLimit(name, id, limit)
|
103
|
+
end
|
104
|
+
|
105
|
+
def getByNames(name, id, limit=1)
|
106
|
+
@client.getByNamesAndLimit(name, id, limit)
|
107
|
+
end
|
108
|
+
|
109
|
+
def getByIds(name, ids, limit=1)
|
110
|
+
@client.getByIdsAndLimit(name, ids, limit)
|
111
|
+
end
|
112
|
+
|
113
|
+
def getByQuery(query)
|
114
|
+
thrift_query = to_query(query)
|
115
|
+
count_result_hash = @client.getByQuery(thrift_query).countResults
|
116
|
+
count_result_hash = {}.tap{|hash|hash['countResults'] = count_result_hash}
|
117
|
+
Stat::Count::Data::CountResult.new(count_result_hash)
|
118
|
+
end
|
119
|
+
|
120
|
+
def getByDateQuery(dateQuery)
|
121
|
+
thrift_query = to_date_query(query)
|
122
|
+
count_result_hash = @client.getByDateQuery(thrift_query).countResults
|
123
|
+
count_result_hash = {}.tap{|hash|hash['countResults'] = count_result_hash}
|
124
|
+
Stat::Count::Data::CountResult.new(count_result_hash)
|
125
|
+
end
|
126
|
+
|
127
|
+
def delByQuery(query)
|
128
|
+
thrift_query = to_query(query)
|
129
|
+
@client.delByQuery(thrift_query)
|
130
|
+
end
|
131
|
+
|
132
|
+
def delByDateQuery(dateQuery)
|
133
|
+
thrift_query = to_query(query)
|
134
|
+
@client.delByDateQuery(thrift_query)
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
private
|
139
|
+
def init(servers, config)
|
140
|
+
@@logger.info("Init Stat count client connect to thrift url: #{servers}, config: #{config}")
|
141
|
+
puts servers
|
142
|
+
puts config
|
143
|
+
begin
|
144
|
+
@client = ThriftClient.new(servers, config)
|
145
|
+
|
146
|
+
@client.add_callback(:on_exception) { |method_name, e|
|
147
|
+
@@logger.error("call #{method_name} fails! cause by: #{e.message}, " + "\n" + e.backtrace.join("\n"))
|
148
|
+
raise e
|
149
|
+
}
|
150
|
+
rescue => e
|
151
|
+
@@logger.error("init thrift client fails! cause by: #{e.message}, " + "\n" + e.backtrace.join("\n"))
|
152
|
+
raise e
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def to_date_count(date_count)
|
157
|
+
if date_count.nil?
|
158
|
+
raise ArgumentError,"DateCount is nil"
|
159
|
+
end
|
160
|
+
thrift_counts = {}
|
161
|
+
counts = date_count.counts
|
162
|
+
counts.each_pair do |key, value|
|
163
|
+
name = key
|
164
|
+
count_unit_list = value
|
165
|
+
thrift_unit_list = count_unit_list.map do |count_unit|
|
166
|
+
thrift_count_unit = DateCountUnit.new
|
167
|
+
thrift_count_unit.id = count_unit.id
|
168
|
+
thrift_count_unit.count = count_unit.count
|
169
|
+
thrift_count_unit.timeMills = count_unit.date.to_f*1000
|
170
|
+
thrift_count_unit
|
171
|
+
end
|
172
|
+
thrift_counts[name] = thrift_unit_list
|
173
|
+
end
|
174
|
+
thrift_count = DateCount.new
|
175
|
+
thrift_count.counts = thrift_counts
|
176
|
+
thrift_count
|
177
|
+
end
|
178
|
+
|
179
|
+
def to_count(count)
|
180
|
+
if count.nil?
|
181
|
+
raise ArgumentError,"Count is nil"
|
182
|
+
end
|
183
|
+
thrift_counts = {}
|
184
|
+
counts = count.counts
|
185
|
+
counts.each_pair do |key, value|
|
186
|
+
name = key
|
187
|
+
count_unit_list = value
|
188
|
+
thrift_unit_list = count_unit_list.map do |count_unit|
|
189
|
+
thrift_count_unit = CountUnit.new
|
190
|
+
thrift_count_unit.id = count_unit.id
|
191
|
+
thrift_count_unit.count = count_unit.count
|
192
|
+
thrift_count_unit
|
193
|
+
end
|
194
|
+
thrift_counts[name] = thrift_unit_list
|
195
|
+
end
|
196
|
+
thrift_count = SimpleCount.new
|
197
|
+
thrift_count.counts = thrift_counts
|
198
|
+
thrift_count
|
199
|
+
end
|
200
|
+
|
201
|
+
def to_date_query(date_query)
|
202
|
+
if date_query.nil?
|
203
|
+
raise ArgumentError,"DateQuery is nil"
|
204
|
+
end
|
205
|
+
thrift_queries = {}
|
206
|
+
queries = date_query.queries
|
207
|
+
queries.each_pair do |key, value|
|
208
|
+
name = key
|
209
|
+
query_unit_list = value
|
210
|
+
thrift_unit_list = query_unit_list.collect do |query_unit|
|
211
|
+
thrift_query_unit = QueryDateUnit.new
|
212
|
+
thrift_query_unit.id = query_unit.id
|
213
|
+
thrift_count_unit.limit = query_unit.limit
|
214
|
+
fromDate = query_unit.fromDate
|
215
|
+
toDate = query_unit.toDate
|
216
|
+
if(toDate.nil?)
|
217
|
+
#not set fromDate and toDate, keep it -1,
|
218
|
+
#and it will transfered to null at stat count server side
|
219
|
+
thrift_count_unit.fromDate = -1
|
220
|
+
thrift_count_unit.toDate = -1
|
221
|
+
else
|
222
|
+
if(fromDate.nil?)
|
223
|
+
thrift_count_unit.fromDate = 0
|
224
|
+
elsif(toDate >= fromDate)
|
225
|
+
thrift_count_unit.fromDate = fromDate.to_f * 1000
|
226
|
+
thrift_count_unit.toDate = toDate.to_f * 1000
|
227
|
+
else
|
228
|
+
raise ArgumentError, "fromDate is less than toDate"
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
thrift_queries[name] = thrift_unit_list
|
233
|
+
end
|
234
|
+
thrift_query = DateCountQuery.new
|
235
|
+
thrift_query.queries = thrift_queries
|
236
|
+
thrift_query
|
237
|
+
end
|
238
|
+
|
239
|
+
def to_query(query)
|
240
|
+
if query.nil?
|
241
|
+
raise ArgumentError,"CountQuery is nil"
|
242
|
+
end
|
243
|
+
thrift_queries = {}
|
244
|
+
queries = query.queries
|
245
|
+
queries.each_pair do |key, value|
|
246
|
+
name = key
|
247
|
+
query_unit_list = value
|
248
|
+
thrift_unit_list = query_unit_list.map do |query_unit|
|
249
|
+
thrift_query_unit = QueryUnit.new
|
250
|
+
thrift_query_unit.id = query_unit.id
|
251
|
+
thrift_query_unit.limit = query_unit.limit
|
252
|
+
thrift_query_unit
|
253
|
+
end
|
254
|
+
thrift_queries[name] = thrift_unit_list
|
255
|
+
end
|
256
|
+
thrift_query = SimpleCountQuery.new
|
257
|
+
thrift_query.queries = thrift_queries
|
258
|
+
thrift_query
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
@@ -14,8 +14,7 @@ class TC_StatCountClientTest < Test::Unit::TestCase
|
|
14
14
|
# Called before every test method runs. Can be used
|
15
15
|
# to set up fixture information.
|
16
16
|
def setup
|
17
|
-
@client = StatCountClient.new(
|
18
|
-
puts @client
|
17
|
+
@client = StatCountClient.new();
|
19
18
|
end
|
20
19
|
|
21
20
|
# Called after every test method runs. Can be used to tear
|
@@ -26,95 +25,85 @@ class TC_StatCountClientTest < Test::Unit::TestCase
|
|
26
25
|
end
|
27
26
|
|
28
27
|
# Fake test
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
28
|
+
def test_incr
|
29
|
+
@client.set("testDay", "1", 1)
|
30
|
+
value = @client.incr("testDay", "1", 2)
|
31
|
+
assert_equal(3, value)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_incrByCount
|
35
|
+
reset()
|
36
|
+
count = CountMother.createIncrCount
|
37
|
+
countResult = @client.incrByCount(count)
|
38
|
+
puts countResult.getResult()
|
39
|
+
assertCorrect(countResult)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_incrByCountWithDate
|
43
|
+
resetWithDate()
|
44
|
+
dateCount = CountMother.createIncrCountWithDate
|
45
|
+
@client.incrByCountWithDate(dateCount)
|
46
|
+
dateQuery = CountMother.createCountQueryWithDate
|
47
|
+
countResult = @client.getByQuery(dateQuery)
|
48
|
+
assertIncrCorrectWithDate(countResult)
|
49
|
+
end
|
51
50
|
|
52
51
|
def testDecr
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
52
|
+
@client.set("test", "1", 10)
|
53
|
+
val = @client.decr("test", "1", 7)
|
54
|
+
assert_equal(3,val)
|
55
|
+
end
|
56
|
+
|
57
|
+
def testDecrByCount
|
58
|
+
count = CountMother.initCount
|
59
|
+
@client.setByCount(count)
|
60
|
+
count = CountMother.createDecrCount
|
61
|
+
countResult = @client.decrByCount(count)
|
62
|
+
assertDecrCorrect(countResult)
|
63
|
+
reset()
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_set
|
67
|
+
@client.reset("test", "1")
|
68
|
+
@client.set("test", "1", 100000000000000000)
|
69
|
+
val = @client.get("test", "1");
|
70
|
+
assert_equal(100000000000000000, val)
|
66
71
|
end
|
67
72
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
#private
|
103
|
-
#def resetWithDate
|
104
|
-
# 1.upto(5) do |i|
|
105
|
-
# @client.reset("testHour", i.to_s, 10)
|
106
|
-
# end
|
107
|
-
#
|
108
|
-
# 1.upto(5) do |i|
|
109
|
-
# @client.reset "testDay", i.to_s, 10
|
110
|
-
# end
|
111
|
-
#end
|
112
|
-
#
|
113
|
-
#def reset
|
114
|
-
# @client.reset("test", "1")
|
115
|
-
# @client.reset("testHour", "2")
|
116
|
-
# @client.reset("testDay", "3")
|
117
|
-
#end
|
73
|
+
def test_setByCount
|
74
|
+
reset()
|
75
|
+
count = CountMother.initCount
|
76
|
+
@client.setByCount(count)
|
77
|
+
query = CountMother.createCountQuery();
|
78
|
+
countResult = @client.getByQuery(query)
|
79
|
+
assertInitCorrect(countResult)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_del
|
83
|
+
count = CountMother.initCount
|
84
|
+
@client.setByCount(count)
|
85
|
+
query = CountMother.createCountQuery()
|
86
|
+
@client.delByQuery(query)
|
87
|
+
countResult = @client.getByQuery(query)
|
88
|
+
assertDel(countResult)
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
def resetWithDate
|
93
|
+
1.upto(5) do |i|
|
94
|
+
@client.reset("testHour", i.to_s, 10)
|
95
|
+
end
|
96
|
+
|
97
|
+
1.upto(5) do |i|
|
98
|
+
@client.reset "testDay", i.to_s, 10
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def reset
|
103
|
+
@client.reset("test", "1")
|
104
|
+
@client.reset("testHour", "2")
|
105
|
+
@client.reset("testDay", "3")
|
106
|
+
end
|
118
107
|
|
119
108
|
def assertCorrect(countResult)
|
120
109
|
count = countResult.getResult("test", "1")
|