[Why] old logical: lkp-tests/stats/srcipt < script_log > tmpfile lkp-tests/sbin/dump-stat < tmpfile > $script.json this flow will escape special characters
[How] use return of function to keep original characters
lkp-tests/stats/srcipt.rb func(read(script_log)) --> hash compass-ci/lib/dump-stats.rb hash --> dump_stats() --> $script.json
Signed-off-by: Lu Weitao luweitaobe@163.com --- lib/stats.rb | 19 ++++++++++++++----- lib/stats_wrapper.rb | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/lib/stats.rb b/lib/stats.rb index c01d38d..94e370a 100644 --- a/lib/stats.rb +++ b/lib/stats.rb @@ -14,11 +14,16 @@ end
def available_stats vailable_stats = [] + available_stats_func = [] Dir.open(LKP_SRC + '/stats').each do |file| - vailable_stats << file unless file.start_with?('.') + if file.end_with?('.rb') + available_stats_func << file.chomp('.rb') + else + vailable_stats << file unless file.start_with?('.') + end end
- vailable_stats + [vailable_stats, available_stats_func] end
def assign_default_stats(stats_list) @@ -32,13 +37,17 @@ class Stats def initialize(result_root) @result_root = result_root @job = load_yaml(File.join(result_root, 'job.yaml')) - @available_stats = available_stats + @available_stats, @available_stats_func = available_stats end
def extract_stats stats_list = assign_stats_list stats_list.each do |stat| - StatsWrapper.wrapper(*stat) + if @available_stats_func.include?(stat) + StatsWrapper.wrapper_func(*stat) + else + StatsWrapper.wrapper(*stat) + end end end
@@ -48,7 +57,7 @@ class Stats stats_list << ['time', @job['suite'] + '.time'] stats_list << 'stderr' @job.each_key do |k| - if @available_stats.include?(k) + if @available_stats.include?(k) || @available_stats_func.include?(k) stats_list << k end end diff --git a/lib/stats_wrapper.rb b/lib/stats_wrapper.rb index 8a6d6a9..09662be 100644 --- a/lib/stats_wrapper.rb +++ b/lib/stats_wrapper.rb @@ -6,6 +6,11 @@ LKP_SRC ||= ENV['LKP_SRC'] || '/c/lkp-tests' require "#{LKP_SRC}/lib/log.rb" require 'tempfile' require 'English' +require_relative './dump_stat' + +Dir[File.expand_path("#{LKP_SRC}/stats/*.rb")].uniq.each do |file| + require file +end
PROGRAM_DIR = "#{LKP_SRC}/stats"
@@ -35,6 +40,26 @@ module StatsWrapper delete_log_package end
+ def self.wrapper_func(program, program_time = nil) + @program = program + @stats_group = program_time || program + @log = "#{RESULT_ROOT}/#{@stats_group}" + + return unless File.exist?("#{@log}.yaml") || pretreatment + + if File.exist?("#{@log}.yaml") + stat_result = YAML.safe_load("#{@log}.yaml") + else + log_lines = read_log(@log) + call_func_cmd = "#{@program.gsub('-', '_')}(log_lines)" # eg: proc_vmstats(log_lines) + stat_result = eval(call_func_cmd) + end + return unless DumpStat.dump_stat(@stats_group, stat_result) + + check_empty_json + delete_log_package + end + def self.pretreatment return unless available_program? return unless unzip_log @@ -261,3 +286,11 @@ module StatsWrapper File.delete(@tmpfile) if File.exist?(@tmpfile) end end + +# read line of log +# return Array(String) +def read_log(log_path) + return nil unless File.exist?(log_path) + + File.readlines(log_path) +end
On Wed, Mar 03, 2021 at 05:15:56PM +0800, Lu Weitao wrote:
[Why] old logical: lkp-tests/stats/srcipt < script_log > tmpfile lkp-tests/sbin/dump-stat < tmpfile > $script.json this flow will escape special characters
[How] use return of function to keep original characters
lkp-tests/stats/srcipt.rb func(read(script_log)) --> hash compass-ci/lib/dump-stats.rb hash --> dump_stats() --> $script.json
Can you write the rules of how to write new lkp-tests/stats/$srcipt.rb here? And the meaning of .log, .message.
Thanks, Jiaxin
Signed-off-by: Lu Weitao luweitaobe@163.com
lib/stats.rb | 19 ++++++++++++++----- lib/stats_wrapper.rb | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/lib/stats.rb b/lib/stats.rb index c01d38d..94e370a 100644 --- a/lib/stats.rb +++ b/lib/stats.rb @@ -14,11 +14,16 @@ end
def available_stats vailable_stats = []
- available_stats_func = [] Dir.open(LKP_SRC + '/stats').each do |file|
- vailable_stats << file unless file.start_with?('.')
- if file.end_with?('.rb')
available_stats_func << file.chomp('.rb')
- else
vailable_stats << file unless file.start_with?('.')
- end end
- vailable_stats
- [vailable_stats, available_stats_func]
end
def assign_default_stats(stats_list) @@ -32,13 +37,17 @@ class Stats def initialize(result_root) @result_root = result_root @job = load_yaml(File.join(result_root, 'job.yaml'))
- @available_stats = available_stats
@available_stats, @available_stats_func = available_stats end
def extract_stats stats_list = assign_stats_list stats_list.each do |stat|
StatsWrapper.wrapper(*stat)
if @available_stats_func.include?(stat)
StatsWrapper.wrapper_func(*stat)
else
StatsWrapper.wrapper(*stat)
end endend
@@ -48,7 +57,7 @@ class Stats stats_list << ['time', @job['suite'] + '.time'] stats_list << 'stderr' @job.each_key do |k|
if @available_stats.include?(k)
endif @available_stats.include?(k) || @available_stats_func.include?(k) stats_list << k end
diff --git a/lib/stats_wrapper.rb b/lib/stats_wrapper.rb index 8a6d6a9..09662be 100644 --- a/lib/stats_wrapper.rb +++ b/lib/stats_wrapper.rb @@ -6,6 +6,11 @@ LKP_SRC ||= ENV['LKP_SRC'] || '/c/lkp-tests' require "#{LKP_SRC}/lib/log.rb" require 'tempfile' require 'English' +require_relative './dump_stat'
+Dir[File.expand_path("#{LKP_SRC}/stats/*.rb")].uniq.each do |file|
- require file
+end
PROGRAM_DIR = "#{LKP_SRC}/stats"
@@ -35,6 +40,26 @@ module StatsWrapper delete_log_package end
- def self.wrapper_func(program, program_time = nil)
- @program = program
- @stats_group = program_time || program
- @log = "#{RESULT_ROOT}/#{@stats_group}"
- return unless File.exist?("#{@log}.yaml") || pretreatment
- if File.exist?("#{@log}.yaml")
stat_result = YAML.safe_load("#{@log}.yaml")
- else
log_lines = read_log(@log)
call_func_cmd = "#{@program.gsub('-', '_')}(log_lines)" # eg: proc_vmstats(log_lines)
stat_result = eval(call_func_cmd)
- end
- return unless DumpStat.dump_stat(@stats_group, stat_result)
- check_empty_json
- delete_log_package
- end
- def self.pretreatment return unless available_program? return unless unzip_log
@@ -261,3 +286,11 @@ module StatsWrapper File.delete(@tmpfile) if File.exist?(@tmpfile) end end
+# read line of log +# return Array(String) +def read_log(log_path)
- return nil unless File.exist?(log_path)
- File.readlines(log_path)
+end
2.23.0
On Thu, Mar 04, 2021 at 05:37:47PM +0800, Lin Jiaxin wrote:
On Wed, Mar 03, 2021 at 05:15:56PM +0800, Lu Weitao wrote:
[Why] old logical: lkp-tests/stats/srcipt < script_log > tmpfile lkp-tests/sbin/dump-stat < tmpfile > $script.json this flow will escape special characters
[How] use return of function to keep original characters
lkp-tests/stats/srcipt.rb func(read(script_log)) --> hash compass-ci/lib/dump-stats.rb hash --> dump_stats() --> $script.json
Can you write the rules of how to write new lkp-tests/stats/$srcipt.rb here?
ok
And the meaning of .log, .message.
we'd better add a comment for information
Thanks, Weitao