super-test 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGE.txt +9 -0
  3. data/README.txt +13 -0
  4. data/bin/idb +19 -0
  5. data/bin/ii +113 -0
  6. data/bin/istart_mock +36 -0
  7. data/bin/istop_mock +16 -0
  8. data/bin/kk +181 -0
  9. data/bin/rubyatp +42 -0
  10. data/bin/start_mock +36 -0
  11. data/bin/stop_mock +16 -0
  12. data/bin/xgo +45 -0
  13. data/conf/conf.rb +11 -0
  14. data/conf/db03.yml +31 -0
  15. data/conf/db13.yml +37 -0
  16. data/conf/db19.yml +33 -0
  17. data/conf/online.yml +32 -0
  18. data/conf/super_test.yml +40 -0
  19. data/conf/system.yml +26 -0
  20. data/conf/sz00.yml +31 -0
  21. data/conf/sz06.yml +34 -0
  22. data/conf/wise00.yml +11 -0
  23. data/data/case.house +0 -0
  24. data/data/char.house +0 -0
  25. data/data/images/Bluehills.jpg +0 -0
  26. data/data/images/Sunset.jpg +0 -0
  27. data/data/images/Waterlilies.jpg +0 -0
  28. data/data/images/Winter.jpg +0 -0
  29. data/data/query.house +18595 -0
  30. data/data/user.house +8 -0
  31. data/lib/action/module/check_action.rb +58 -0
  32. data/lib/action/module/cnnt_action.rb +161 -0
  33. data/lib/action/module/datacenter_action.rb +48 -0
  34. data/lib/action/module/http_pack_helper.rb +163 -0
  35. data/lib/action/module/httpserver_action.rb +297 -0
  36. data/lib/action/module/inc.rb +21 -0
  37. data/lib/action/module/mcpack_action.rb +57 -0
  38. data/lib/action/module/sql_action.rb +84 -0
  39. data/lib/action/module/ssh_action.rb +37 -0
  40. data/lib/action/system/user_action.rb +180 -0
  41. data/lib/common/appium_helper.rb +217 -0
  42. data/lib/common/atp_helper.rb +74 -0
  43. data/lib/common/atp_report.rb +344 -0
  44. data/lib/common/data_house.rb +405 -0
  45. data/lib/common/data_model.rb +87 -0
  46. data/lib/common/http/assert_helper.rb +343 -0
  47. data/lib/common/http/fix_hpricot.rb +118 -0
  48. data/lib/common/http/html_helper.rb +362 -0
  49. data/lib/common/http/http_helper.rb +469 -0
  50. data/lib/common/http/multipart.rb +81 -0
  51. data/lib/common/isandbox_helper.rb +195 -0
  52. data/lib/common/json_helper.rb +43 -0
  53. data/lib/common/mock_helper.rb +168 -0
  54. data/lib/common/mtop_helper.rb +141 -0
  55. data/lib/common/myconf_helper.rb +49 -0
  56. data/lib/common/mylog_helper.rb +77 -0
  57. data/lib/common/pairwise.rb +121 -0
  58. data/lib/common/query_house.rb +89 -0
  59. data/lib/common/report_helper.rb +97 -0
  60. data/lib/common/robot_helper.rb +85 -0
  61. data/lib/common/socket/check.rb +325 -0
  62. data/lib/common/socket/conf_modifier.rb +149 -0
  63. data/lib/common/socket/context.rb +55 -0
  64. data/lib/common/socket/data.rb +392 -0
  65. data/lib/common/socket/data_helper.rb +41 -0
  66. data/lib/common/socket/env.rb +317 -0
  67. data/lib/common/socket/inc.rb +24 -0
  68. data/lib/common/socket/log.rb +213 -0
  69. data/lib/common/socket/log4s.rb +58 -0
  70. data/lib/common/socket/log_helper.rb +332 -0
  71. data/lib/common/socket/my_sql.rb +77 -0
  72. data/lib/common/socket/net.rb +74 -0
  73. data/lib/common/socket/network.rb +115 -0
  74. data/lib/common/socket/rlib/conf_modifier.rb +130 -0
  75. data/lib/common/socket/rlib/data_helper.rb +33 -0
  76. data/lib/common/socket/rlib/log_helper.rb +303 -0
  77. data/lib/common/socket/rlib/process_helper.rb +91 -0
  78. data/lib/common/socket/stub.rb +276 -0
  79. data/lib/common/socket/util.rb +266 -0
  80. data/lib/patterns/inc.rb +10 -0
  81. data/lib/patterns/mc_base_pattern.rb +474 -0
  82. data/lib/patterns/some_pattern.rb +145 -0
  83. data/lib/super_test.rb +114 -0
  84. data/log/super_test.log +0 -0
  85. data/log/super_test.log.wf +0 -0
  86. data/test/cover_me.rb +6 -0
  87. data/tool/jenny +0 -0
  88. data/tool/mcsend/mcsend2 +0 -0
  89. data/tool/mcsend/mcsend2_shead +0 -0
  90. data/tool/mcserver/conf/mcserver.conf +77 -0
  91. data/tool/mcserver/conf/mcserverauthip +17 -0
  92. data/tool/mcserver/mcserver +0 -0
  93. data/tool/mcserver/mcserver_trans +0 -0
  94. data/tool/mysql +0 -0
  95. data/tool/net/mcsend/mcsend +0 -0
  96. data/tool/net/mcsend/mcsend_trans +0 -0
  97. data/tool/net/mcsend/nshead.data +7 -0
  98. data/tool/net/mcsend/res_nshead.data +7 -0
  99. data/tool/net/my_client/my_client +0 -0
  100. data/tool/net/tsclient/client.tcl +205 -0
  101. data/tool/others/kk +190 -0
  102. data/tool/others/rubyatp +42 -0
  103. data/tool/others/supertest_install.sh +34 -0
  104. data/tool/trip/idb +0 -0
  105. data/tool/ts-agent/nshead.bft +12 -0
  106. data/tool/ts-agent/server.conf +10 -0
  107. data/tool/ts-agent/server.tcl +376 -0
  108. metadata +275 -0
@@ -0,0 +1,41 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '../')
2
+ #!/usr/bin/env ruby
3
+ # coding: utf-8
4
+
5
+ #require 'log4s'
6
+
7
+ class DataHelper
8
+ # === 功能:
9
+ # 验证文件是否存在
10
+ # === Example:
11
+ # DataHelper.file_exist? file_path
12
+ def self.file_exist? file_path
13
+ return File.exists? file_path
14
+ end
15
+
16
+ # === 功能:
17
+ # 获取文件的大小
18
+ # === Example:
19
+ # DataHelper.file_size? file_path
20
+ def self.file_size? file_path
21
+ return File.size? file_path
22
+ end
23
+
24
+ end
25
+
26
+ if __FILE__ == $0
27
+ if ARGV.length > 0 then
28
+ case ARGV[0]
29
+ when 'file_exist?'
30
+ file_path = ARGV[1]
31
+ puts DataHelper.file_exist? file_path
32
+
33
+ when 'file_size?'
34
+ file_path = ARGV[1]
35
+ puts DataHelper.file_size? file_path
36
+
37
+ # else
38
+ # puts 'DataHelper: bad method name? #{ARGV[0]}'
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,317 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), './rlib/')
2
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '.')
3
+ #!/usr/bin/env ruby
4
+ # coding: utf-8
5
+
6
+ require 'conf_modifier'
7
+ require 'process_helper'
8
+ require 'util'
9
+ require 'net/ssh'
10
+ require 'net/scp'
11
+
12
+ #============================================================
13
+ # This class supply enviroment related local/remote operation
14
+ # e.g. modify configration, operate process...
15
+ # Author:: chenjie
16
+ # Data:: 2009-4-30
17
+ #============================================================
18
+
19
+ module Env
20
+ #=====================================#
21
+ # CONF RELATED
22
+ #=====================================#
23
+
24
+ # ===功能
25
+ # 修改配置文件
26
+ # ===参数
27
+ # - host host ip(example: 127.0.0.1 stands for localhost)
28
+ # - conf_path 配置文件路径
29
+ # - key 欲修改的key
30
+ # - new_value 新的value值
31
+ # ===example
32
+ # modify_conf_single "name", newname
33
+ def modify_conf_single host=HOST, user=USERNAME, password=PASSWORD, conf_path=CONFPATH, key, new_value
34
+ if Util.is_localhost? host
35
+ cm = ConfModifier.new conf_path
36
+ cm.modify key, new_value
37
+ cm.writeconf
38
+ else
39
+ #lib_path = Util.get_lib_path host
40
+ #cmd_str = "cd #{lib_path} && ruby conf_modifier.rb modify_conf_single #{conf_path} #{key} #{new_value.to_s}"
41
+ #Util.exe_ssh_cmd! host, cmd_str, user, password
42
+ Util.change_in_local(host, conf_path, user, password) { | local_path |
43
+ cm = ConfModifier.new local_path
44
+ cm.modify key, new_value
45
+ cm.writeconf
46
+ }
47
+ end
48
+ end
49
+
50
+ # ===功能
51
+ # 修改配置文件
52
+ # ===参数
53
+ # - host
54
+ # - conf_path
55
+ # - hash 欲修改的配置hash
56
+ # ===example
57
+ # hh = {"name"=>newname, "path"=>newpath}
58
+ # modify_conf hh
59
+ def modify_conf host=HOST, user=USERNAME, password=PASSWORD, conf_path=CONFPATH, hash
60
+ if Util.is_localhost? host
61
+ cm = ConfModifier.new conf_path
62
+ cm.modifyall hash
63
+ cm.writeconf
64
+ else
65
+ hash.each{|k,v|
66
+ Env.modify_conf_single host, user, password, conf_path, k, v
67
+ }
68
+ end
69
+ end
70
+
71
+
72
+ # ===功能
73
+ # 获取配置文件的value
74
+ # ===参数
75
+ # - host
76
+ # - conf_path
77
+ # - key
78
+ # return if key existed, return conf value string; if not, return empty string ""
79
+ #
80
+ # === Example:
81
+ # get_conf "name"
82
+ #
83
+ # === 检查的方法:
84
+ # assert_body pattern
85
+ def get_conf host=HOST, user=USERNAME, password=PASSWORD, conf_path=CONFPATH, key
86
+ if Util.is_localhost? host
87
+ cm = ConfModifier.new conf_path
88
+ ret = cm.get_conf key
89
+ Context.set("IOBODY", ret)
90
+ return ret
91
+ else
92
+ #lib_path = Util.get_lib_path host
93
+ #cmd_str = "cd #{lib_path} && ruby conf_modifier.rb get_conf #{conf_path} #{key}"
94
+ #value = Util.exe_ssh_cmd! host, cmd_str, user, password
95
+ #Context.set("IOBODY", value)
96
+ #return value
97
+ Util.change_in_local(host, conf_path, user, password) { | local_path |
98
+ cm = ConfModifier.new local_path
99
+ ret = cm.get_conf key
100
+ Context.set("IOBODY", ret)
101
+ }
102
+ return ret
103
+ end
104
+ end
105
+
106
+ # === 功能
107
+ # 备份配置
108
+ # === 参数
109
+ # @param host
110
+ # @param conf_path
111
+ # @param conf_name
112
+ # @param context_key the value of context_key is the bak name for conf
113
+ # @author tangweimin
114
+ # === Example:
115
+ # bak_conf "conf1"
116
+ def bak_conf host=HOST, user=USERNAME, password=PASSWORD, conf_path=CONFPATH, context_key
117
+ conf_dir=`dirname #{conf_path}`
118
+ conf_name=`basename #{conf_path}`
119
+ conf_dir.chop!
120
+ conf_name.chop!
121
+ now = Time.now.to_datetime
122
+ bak_cmd = "cd #{conf_dir} && cp #{conf_name} #{conf_name}.#{now}"
123
+ if Util.is_localhost? host
124
+ system "#{bak_cmd}"
125
+ else
126
+ Util.exe_ssh_cmd! host, bak_cmd, user, password
127
+ end
128
+ Context.set "#{context_key}", "#{conf_name}.#{now}"
129
+ $log.debug "bak conf which context key is #{context_key}"
130
+ end
131
+
132
+ # === 功能:
133
+ # 恢复配置
134
+ # === 参数
135
+ # @param host
136
+ # @param conf_path
137
+ # @param conf_name
138
+ # @param context_key the value of context_key is the bak name for conf
139
+ # @author tangweimin
140
+ # === Example:
141
+ # recover_conf "conf1"
142
+ def recover_conf host=HOST, user=USERNAME, password=PASSWORD, conf_path=CONFPATH, context_key
143
+ conf_dir=`dirname #{conf_path}`
144
+ conf_name=`basename #{conf_path}`
145
+ conf_dir.chop!
146
+ conf_name.chop!
147
+ bak_conf = Context.get "#{context_key}"
148
+ recover_cmd = "cd #{conf_dir} && mv #{bak_conf} #{conf_name}"
149
+ if Util.is_localhost?(host) then
150
+ system "#{recover_cmd}"
151
+ else
152
+ Util.exe_ssh_cmd! host, recover_cmd, user, password
153
+ end
154
+ Context.delete "#{context_key}"
155
+ $log.debug "Recover conf which context key is #{context_key}."
156
+ end
157
+
158
+ # === 功能:
159
+ # 拷贝配置
160
+ # ===参数
161
+ # @param host
162
+ # @param source_conf
163
+ # @param target_conf
164
+ # @author tangweimin
165
+ # === Example:
166
+ # copy_conf "/home/space/space/conf/conf1", "/home/space/space/conf/conf2"
167
+ def copy_conf host=HOST, user=USERNAME, password=PASSWORD, source_conf, target_conf
168
+ copy_cmd = "cp #{source_conf} #{target_conf}"
169
+ if Util.is_localhost?(host) then
170
+ system "#{copy_cmd}"
171
+ else
172
+ Util.exe_ssh_cmd! host, copy_cmd, user, password
173
+ end
174
+ $log.debug "Copy conf from #{source_conf} to #{target_conf}."
175
+ end
176
+
177
+
178
+ #=====================================#
179
+ #PROCESS RELATED
180
+ #=====================================#
181
+
182
+ # ===功能
183
+ # 启动模块进程, 运用脚本
184
+ # ===参数
185
+ # - host
186
+ # - module_name module name, e.g.: appui
187
+ # - script_path default "/home/space/space"
188
+ # - script_name default "loadspace.sh"
189
+ # return true/false
190
+ #
191
+ # === Example
192
+ #
193
+ # start_process '10.241.14.56', 'mlstar', '/home/space/mlstar/'
194
+ def start_process host, module_name, super_path="/home/space/space/", child_path="./bin/", user=USERNAME, password=PASSWORD
195
+
196
+ if Util.is_localhost? host
197
+ `killall -9 #{module_name}`
198
+ `cd #{super_path}; nohup #{child_path}#{module_name} >/dev/null 2>&1 &`
199
+ else
200
+ cmd_str = "killall -9 #{module_name};cd #{super_path}; nohup #{child_path}#{module_name} >/dev/null 2>&1 &"
201
+ Util.exe_ssh_cmd! host, cmd_str, user, password
202
+ end
203
+
204
+ sleep 2
205
+ value = is_process_running? host, module_name, user, password
206
+ return value
207
+ end
208
+
209
+ # ===功能
210
+ # kill模块进程
211
+ # execute killall to kill a process, if the process is supervised, then it will restart
212
+ # ===参数
213
+ # - host
214
+ # - module_name
215
+ # ===example
216
+ # kill_process host, "friend"
217
+ def kill_process host, module_name, user=USERNAME, password=PASSWORD
218
+ if Util.is_localhost?(host) then
219
+ `killall -9 #{module_name}`
220
+ else
221
+ cmd_str = "killall -9 #{module_name}"
222
+ Util.exe_ssh_cmd! host, cmd_str, user, password
223
+ end
224
+ sleep 1
225
+ end
226
+
227
+ # === 功能
228
+ # 检查模块是否启动
229
+ # return true/false
230
+ # === example
231
+ # is_process_running? host, "friend"
232
+ def is_process_running? host, module_name, user=USERNAME, password=PASSWORD
233
+ if Util.is_localhost?(host) then
234
+ value = `pstree | grep #{module_name} | wc -l`
235
+ if value.to_i > 0 then
236
+ return true
237
+ else
238
+ return false
239
+ end
240
+ else
241
+ cmd_str = "pstree | grep #{module_name} | wc -l"
242
+ value = Util.exe_ssh_cmd! host, cmd_str, user, password
243
+ if value.to_i > 0 then
244
+ return true
245
+ else
246
+ return false
247
+ end
248
+ end
249
+ end
250
+
251
+ # ===功能
252
+ # 获取模块进程线程数
253
+ # ===参数
254
+ # - host
255
+ # - module_name
256
+ # return thead number or 0(process not running)
257
+ # ===example
258
+ # get_thread_num host, "friend"
259
+ def get_thread_num host, module_name, user=USERNAME, password=PASSWORD
260
+ if Util.is_localhost? host
261
+ str = `pstree | grep #{module_name}`
262
+ mdata = str.scan /.*---(\d+).*/
263
+ if mdata.size > 0 then
264
+ return mdata[0][0].to_i
265
+ else
266
+ return 0
267
+ end
268
+ else
269
+ cmd_str = "pstree | grep #{module_name}"
270
+ str = Util.exe_ssh_cmd! host, cmd_str, user, password
271
+ mdata = str.scan /.*---(\d+).*/
272
+ if mdata.size > 0 then
273
+ return mdata[0][0].to_i
274
+ else
275
+ return 0
276
+ end
277
+ end
278
+ end
279
+
280
+ end
281
+
282
+
283
+
284
+ if __FILE__ == $0
285
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '.')
286
+ require 'test/unit'
287
+ require 'env'
288
+ class EnvTest < Test::Unit::TestCase
289
+ include Env
290
+ def no_test_start_process_remote
291
+ start_process '10.81.14.45', 'mlcommitui', '/home/space/mlcommitui/'
292
+ end
293
+
294
+ def no_test_get_local_ip
295
+ puts Util.get_local_ip
296
+ end
297
+
298
+ def no_test_modify_conf_single
299
+ value1 = get_conf '10.81.11.32', "#{TEST_ROOT}env/simple.conf", 'a'
300
+ puts value1
301
+ modify_conf_single '10.81.11.32', "#{TEST_ROOT}env/simple.conf", 'a', "#{value1}1"
302
+ value2 = get_conf '10.81.11.32', "#{TEST_ROOT}env/simple.conf", 'a'
303
+ puts value2
304
+ end
305
+
306
+ def no_test_get_thread_num
307
+ num = get_thread_num '10.81.14.45', 'mlstar'
308
+ puts num
309
+ end
310
+
311
+ def no_test_kill_process
312
+ kill_process '10.81.14.45', 'mlstar'
313
+ puts is_process_running? '10.81.14.45', 'mlstar'
314
+ puts start_process '10.81.14.45', 'mlstar', '/home/space/mlstar/'
315
+ end
316
+ end
317
+ end
@@ -0,0 +1,24 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '../../conf/')
2
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '.')
3
+ #!/usr/bin/env ruby
4
+ #coding: utf-8
5
+
6
+ #require 'dbi'
7
+ require 'conf'
8
+ require 'env'
9
+ require 'network'
10
+ require 'data'
11
+ require 'my_sql'
12
+ require 'stub'
13
+ require 'log'
14
+ require 'context'
15
+ require 'check'
16
+ require 'test/unit'
17
+
18
+ include Env
19
+ include Network
20
+ include DATA
21
+ include Log
22
+ include Check
23
+ include MY_SQL
24
+ include Stub
@@ -0,0 +1,213 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), './rlib/')
2
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '.')
3
+ #!/usr/bin/env ruby
4
+ # coding: utf-8
5
+ require 'log_helper'
6
+ require 'util'
7
+ require 'context'
8
+ #============================================================
9
+ # 这个类是日志相关服务的顶层接口,提供本机/远程数据相服务
10
+ # e.g. monitor log, get match times, get match values...
11
+ # Author:: chenjie
12
+ # Data:: 2009-4-30
13
+ #============================================================
14
+ module Log
15
+ include DATA
16
+
17
+ # ===功能
18
+ # 在使用以下所有函数前使用
19
+ # 注意:一次只能monitor一个日志文件.
20
+ # monitor the log file and record the lines into context
21
+ # ===参数
22
+ # - host the remote host ip, nil means the log is on localhost
23
+ # - log_path
24
+ # - log_name
25
+ # return the lines of the log; -1 if the log not exist
26
+ # ===example
27
+ # monitor_log host, logpath, "log1"
28
+ def monitor_log host, log_path, log_name, user=USERNAME, password=PASSWORD
29
+ lines=0
30
+ log_pathname = "#{log_path}/#{log_name}"
31
+ # 为了解决日志文件过大导致的性能问题,首先将日志清空
32
+ if Util.is_localhost? host
33
+ `> #{log_pathname}`
34
+ lines = LogHelper.get_lines log_path, log_name
35
+ else
36
+ #lib_path = Util.get_lib_path host
37
+ #cmd_str = "cd #{lib_path} && ruby log_helper.rb get_lines #{log_path} #{log_name}"
38
+ #lines = Util.exe_ssh_cmd!(host, cmd_str).to_i
39
+ cmd_str = "> #{log_pathname}"
40
+ Util.exe_ssh_cmd!(host, cmd_str, user, password)
41
+ Util.change_in_local(host, "#{log_pathname}", user, password){ | local_path |
42
+ lines = LogHelper.get_lines File.dirname(local_path), File.basename(local_path)
43
+ }
44
+ end
45
+
46
+ #record in context
47
+ Context.set("#{host}:#{log_path}:#{log_name}", lines)
48
+ end
49
+
50
+ # ===功能
51
+ # 监控被测模块日志
52
+ # 简化版方法,减少参数传递
53
+ # 约束: helper中必须定义 IP, PORT, LOG_PATH, LOG, WFLOG等变量
54
+ # ===example
55
+ # _monitor_log
56
+ def _monitor_log
57
+ monitor_log IP, LOG_PATH, LOG, USERNAME, PASSWORD
58
+ end
59
+
60
+ # === 功能
61
+ # 监控被测模块异常日志
62
+ # 简化版方法,减少参数传递
63
+ # 约束: helper中必须定义 IP, PORT, LOG_PATH, LOG, WFLOG等变量
64
+ # ===example
65
+ # _monitor_wflog
66
+ def _monitor_wflog
67
+ monitor_log IP, LOG_PATH, WFLOG, USERNAME, PASSWORD
68
+ end
69
+
70
+ # === 功能:
71
+ # 是否有新的log日志产生
72
+ # === Example:
73
+ # has_new_log? "127.0.0.1", "/home/space/space/log/", "log1"
74
+ def has_new_log? host, log_path, log_name, user=USERNAME, password=PASSWORD
75
+ log_pathname = "#{log_path}/#{log_name}"
76
+ last_lines = Context.get "#{host}:#{log_path}:#{log_name}"
77
+
78
+ lines = 0
79
+ if Util.is_localhost? host
80
+ lines = LogHelper.get_lines log_path, log_name
81
+ else
82
+ #lib_path = Util.get_lib_path host
83
+ #cmd_str = "cd #{lib_path} && ruby log_helper.rb get_lines #{log_path} #{log_name}"
84
+ #lines = Util.exe_ssh_cmd!(host, cmd_str).to_i
85
+ Util.change_in_local(host, "#{log_pathname}", user, password){ | local_path |
86
+ lines = LogHelper.get_lines File.dirname(local_path), File.basename(local_path)
87
+ }
88
+ end
89
+
90
+ if lines == last_lines then
91
+ return false
92
+ elsif lines > last_lines then
93
+ return true
94
+ else
95
+ raise "params error: lines is more than last lines"
96
+ end
97
+ end
98
+
99
+ # ===功能
100
+ # get the match times with the giving log level and regex pattern
101
+ # ===参数
102
+ # - host the remote host ip, nil means the log is on localhost
103
+ # - log_path
104
+ # - log_name
105
+ # - log_level an array whoes value from ["DEBUG", "NOTICE", "WARNING", "FATAL"]; nil for all levels
106
+ # - pattern a string or a regex pattern
107
+ #
108
+ # return int, the match times with the giving log level and regex pattern
109
+ # ===example
110
+ # get_match_times host, logpath, "log1", ["DEBUG"], "time"
111
+ def get_match_times host, log_path, log_name, log_level, pattern, user=USERNAME, password=PASSWORD
112
+ log_pathname = "#{log_path}/#{log_name}"
113
+ start_lines = Context.get("#{host}:#{log_path}:#{log_name}") + 1
114
+ lines = 0
115
+ if Util.is_localhost? host
116
+ return LogHelper.get_match_times log_path, log_name, start_lines, log_level, pattern
117
+ else
118
+ #level_code = LogHelper.level_encode log_level
119
+ #lib_path = Util.get_lib_path host
120
+ #cmd_str = "cd #{lib_path} && ruby log_helper.rb get_match_times #{log_path} #{log_name} #{start_lines} #{level_code} #{pattern}"
121
+ #times = Util.exe_ssh_cmd! host, cmd_str
122
+ #return times.to_i
123
+ Util.change_in_local(host, "#{log_pathname}", user, password){ | local_path |
124
+ lines = LogHelper.get_match_times File.dirname(local_path), File.basename(local_path), start_lines, log_level, pattern
125
+ }
126
+ return lines
127
+ end
128
+ end
129
+
130
+ # === 功能:
131
+ # get the match lines with the giving log level and regex pattern
132
+ # === Example:
133
+ # get_match_lines host, "/home/space/space/log/", "log1",
134
+ def get_match_lines host, log_path, log_name, log_level, pattern, user=USERNAME, password=PASSWORD
135
+ log_pathname = "#{log_path}/#{log_name}"
136
+ start_lines = Context.get("#{host}:#{log_path}:#{log_name}") + 1
137
+ lines = []
138
+ if Util.is_localhost? host
139
+ return LogHelper.get_match_lines log_path, log_name, start_lines, log_level, pattern
140
+ else
141
+ #level_code = LogHelper.level_encode log_level
142
+ #lib_path = Util.get_lib_path host
143
+ #cmd_str = "cd #{lib_path} && ruby log_helper.rb get_match_lines #{log_path} #{log_name} #{start_lines} #{level_code} #{pattern}"
144
+ #lines = Util.exe_ssh_cmd! host, cmd_str
145
+ #return lines
146
+ Util.change_in_local(host, "#{log_pathname}", user, password){ | local_path |
147
+ lines = LogHelper.get_match_lines File.dirname(local_path), File.basename(local_path), start_lines, log_level, pattern
148
+ }
149
+ return lines
150
+ end
151
+ end
152
+
153
+ # ===功能
154
+ # get the match values with the giving log level and regex pattern
155
+ # ===参数
156
+ # - log_path
157
+ # - log_name
158
+ # - last_lines the lines read from tail to head
159
+ # - log_level an array whoes value from ["DEBUG", "NOTICE", "WARNING", "FATAL"]; nil for all levels
160
+ # - pattern a string or a regex pattern
161
+ # - return an array contains the match values with the giving log level and regex pattern
162
+ # ===example
163
+ # get_match_values host, logpath, "log1", ["DEBUG", "WARNING"], "time"
164
+ def get_match_values host, log_path, log_name, log_level, pattern, user=USERNAME, password=PASSWORD
165
+ log_pathname = "#{log_path}/#{log_name}"
166
+ start_lines = Context.get("#{host}:#{log_path}:#{log_name}") + 1
167
+ lines = []
168
+ if Util.is_localhost? host
169
+ return LogHelper.get_match_values log_path, log_name, start_lines, log_level, pattern
170
+ else
171
+ #level_code = LogHelper.level_encode log_level
172
+ #lib_path = Util.get_lib_path host
173
+ #cmd_str = "cd #{lib_path} && ruby log_helper.rb get_match_values #{log_path} #{log_name} #{start_lines} #{level_code} #{pattern}"
174
+ #values = Util.exe_ssh_cmd! host, cmd_str
175
+ #return values
176
+ Util.change_in_local(host, "#{log_pathname}", user, password){ | local_path |
177
+ lines = LogHelper.get_match_values File.dirname(local_path), File.basename(local_path), start_lines, log_level, pattern
178
+ }
179
+ return lines
180
+ end
181
+ end
182
+
183
+ # ===功能
184
+ # get the first match value, nil if no match found
185
+ # ===参数
186
+ # - log_path
187
+ # - log_name
188
+ # - last_lines the lines read from tail to head
189
+ # - log_level an array whoes value from ["DEBUG", "NOTICE", "WARNING", "FATAL"]; nil for all levels
190
+ # - pattern a string or a regex pattern
191
+ # return a string firstly matches the pattern
192
+ # ===example
193
+ # get_match_value host, logpath, "log1", ["DEBUG"], "time"
194
+ def get_match_value host, log_path, log_name, log_level, pattern, user=USERNAME, password=PASSWORD
195
+ log_pathname = "#{log_path}/#{log_name}"
196
+ start_lines = Context.get("#{host}:#{log_path}:#{log_name}") + 1
197
+ lines = nil
198
+ if Util.is_localhost? host
199
+ return LogHelper.get_match_value log_path, log_name, start_lines, log_level, pattern
200
+ else
201
+ #level_code = LogHelper.level_encode log_level
202
+ #lib_path = Util.get_lib_path host
203
+ #cmd_str = "cd #{lib_path} && ruby log_helper.rb get_match_value #{log_path} #{log_name} #{start_lines} #{level_code} #{pattern}"
204
+ #value = Util.exe_ssh_cmd! host, cmd_str
205
+ #return value
206
+ Util.change_in_local(host, "#{log_pathname}", user, password){ | local_path |
207
+ lines = LogHelper.get_match_value File.dirname(local_path), File.basename(local_path), start_lines, log_level, pattern
208
+ }
209
+ end
210
+ end
211
+
212
+ end
213
+