super-test 1.0.9

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.
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
+