diff --git a/app/helpers/system_log_helper.rb b/app/helpers/system_log_helper.rb
index 53cf2038b..918d6a608 100644
--- a/app/helpers/system_log_helper.rb
+++ b/app/helpers/system_log_helper.rb
@@ -1,62 +1,73 @@
+# Time 2015-01-26 17:30:16
+# Author lizanle
+# Description 日志帮助类
module SystemLogHelper
- class SystemLog
- class << self
- # 分页(支持多关键字查询)
- def logo_data(page,per,search,day)
- logs = find_all_logs day
- if logs.empty? #如果返回的是空數組,就說明日誌文件不存在
- return logs
+ class SystemLog
+ class << self
+ # Time 2015-01-26 17:29:17
+ # Author lizanle
+ # Description 分页(支持多关键字查询)
+ def logo_data(page, per, search, day)
+ logs = find_all_logs day
+ if logs.empty? #如果返回的是空數組,就說明日誌文件不存在
+ return logs
+ end
+ # 根据search参数来决定是否需要查询
+ keywords = search
+ if keywords && !keywords.strip.blank?
+ # 把keywords转化成正则表达式数组
+ keywords = keywords.strip.split(/\s+/).collect! { |w| Regexp.new(w, 'i') }
+ # 一条记录应该匹配每个关键字 log =~ r 是对log记录进行判断是否符合r的正则表达式
+ logs = logs.find_all do |log|
+ keywords.all? { |r| log =~ r }
end
- # 根据search参数来决定是否需要查询
- keywords = search
- if keywords && !keywords.strip.blank?
- # 把keywords转化成正则表达式数组
- keywords = keywords.strip.split(/\s+/).collect! {|w| Regexp.new(w, 'i')}
- # 一条记录应该匹配每个关键字 log =~ r 是对log记录进行判断是否符合r的正则表达式
- logs = logs.find_all do |log|
- keywords.all? { |r| log =~ r }
- end
- #用Kaminari分页
- logs = Kaminari.paginate_array(logs).page(page).per(per).collect! {|log| parse(log)}
- #将分页后的记录的搜索结果添加样式,样式中的\0是给给r占位置的。
- logs.collect! do |log|
- keywords.each { |r| log.gsub!(r, '\0')}
- log
- end
- else
- logs = Kaminari.paginate_array(logs).page(page).per(per).collect! {|log| parse(log)}
+ #用Kaminari分页
+ logs = Kaminari.paginate_array(logs).page(page).per(per).collect! { |log| parse(log) }
+ #将分页后的记录的搜索结果添加样式,样式中的\0是给给r占位置的。
+ logs.collect! do |log|
+ keywords.each { |r| log.gsub!(r, '\0') }
+ log
end
- logs
+ else
+ logs = Kaminari.paginate_array(logs).page(page).per(per).collect! { |log| parse(log) }
end
+ logs
+ end
- #清除日誌
- def clear day
- if File::exists?(logfile_path day)
- File.open(logfile_path(day), 'w') do |f|
- f.print ''
- end
- else
+ # Time 2015-01-26 17:28:57
+ # Author lizanle
+ # Description 清除日誌
+ def clear day
+ if File::exists?(logfile_path day)
+ File.open(logfile_path(day), 'w') do |f|
+ f.print ''
end
+ else
end
+ end
- #讀取日誌
- private
- def find_all_logs day
- if File::exists?(logfile_path day)
- File.open(logfile_path day) do |f|
- #打开文件,并按照正则表达式切分,逆序,最新一个记录可以扔掉(因为最新的记录永远都是访问System_log)
- f.read.split("Processing").reverse[1..-1]
- end
- else
- []
+ # Time 2015-01-26 17:28:49
+ # Author lizanle
+ # Description 讀取日誌
+ private
+ def find_all_logs day
+ if File::exists?(logfile_path day)
+ File.open(logfile_path day) do |f|
+ #打开文件,并按照正则表达式切分,逆序,最新一个记录可以扔掉(因为最新的记录永远都是访问System_log)
+ f.read.split("Processing").reverse[1..-1]
end
+ else
+ []
end
+ end
- # 日志文件的路径,一般在Rails.root/log下,根据环境配置
- # 依次记录到product.log development.log test.log中
- def logfile_path day
- #将日期处理成2015-01-01的形式
- unless day.nil?
+ # Time 2015-01-26 17:28:34
+ # Author lizanle
+ # Description 日志文件的路径,一般在Rails.root/log下,根据环境配置
+ # 依次记录到product.log development.log test.log中
+ def logfile_path day
+ #将日期处理成2015-01-01的形式
+ unless day.nil?
dayArr = day.split('-')
if dayArr[1].length == 1
dayArr[1] = "0" + dayArr[1]
@@ -65,93 +76,105 @@ module SystemLogHelper
dayArr[2] = "0" + dayArr[2]
end
day = dayArr.join('-')
- end
- #如果不是當天,則需要加後綴
- if !day.nil? && !day.strip.blank? && day != Time.now.strftime("%Y-%m-%d")
- File.join(Rails.root, "log", "#{Rails.env}.log.#{day.gsub('-','')}")
- else
- File.join(Rails.root, "log", "#{Rails.env}.log")
- end
end
-
- #替換換行符
- def parse(log)
- ERB::Util.html_escape(log.gsub(/\e\[[\d;m]+/, '')).gsub("\n", "
")
+ #如果不是當天,則需要加後綴
+ if !day.nil? && !day.strip.blank? && day != Time.now.strftime("%Y-%m-%d")
+ File.join(Rails.root, "log", "#{Rails.env}.log.#{day.gsub('-', '')}")
+ else
+ File.join(Rails.root, "log", "#{Rails.env}.log")
end
+ end
- #定义响应正则表达式 2015-01-20 11:31:13 INFO -- Completed 200 OK in 125ms (Views: 81.0ms | ActiveRecord: 2.0ms)
- def response_regex
- 'Completed \d+ \w+ in (\d+)ms \(Views: (\d+\.\d+)?ms \| ActiveRecord: (\d+\.\d+)?ms\)'
- end
+ # Time 2015-01-26 17:28:22
+ # Author lizanle
+ # Description 替換換行符
+ def parse(log)
+ ERB::Util.html_escape(log.gsub(/\e\[[\d;m]+/, '')).gsub("\n", "
")
+ end
- #将一条记录中的地址主机等都分析出来
- def get_status(paragraph)
- request_regex = 'Started GET \"(\/.*)\" for ([\d]+\.[\d]+\.[\d]+\.[\d]+) at [\d]*-([\d]*-[\d]* [\d]*:[\d]*:[\d]*)'
- controller_regex = 'Processing by ([\w]+#[\w]+)'
- page_time_regex = 'Views: \d+(\.\d+)?ms'
- activeRecord_time_regex = 'ActiveRecord: \d+(\.\d+)?ms'
+ # Time 2015-01-26 17:28:07
+ # Author lizanle
+ # Description 定义响应正则表达式 2015-01-20 11:31:13 INFO -- Completed 200 OK in 125ms (Views: 81.0ms | ActiveRecord: 2.0ms)
+ def response_regex
+ 'Completed \d+ \w+ in (\d+)ms \(Views: (\d+\.\d+)?ms \| ActiveRecord: (\d+\.\d+)?ms\)'
+ end
- if paragraph.match(request_regex) != nil
- request_url = paragraph.match(request_regex)[1] #正则表达式中的括号能够截取成数组
- request_host = paragraph.match(request_regex)[2]
- request_at = paragraph.match(request_regex)[3]
- end
+ # Time 2015-01-26 17:27:51
+ # Author lizanle
+ # Description 将一条记录中的地址主机等都分析出来
+ def get_status(paragraph)
+ request_regex = 'Started GET \"(\/.*)\" for ([\d]+\.[\d]+\.[\d]+\.[\d]+) at [\d]*-([\d]*-[\d]* [\d]*:[\d]*:[\d]*)'
+ controller_regex = 'Processing by ([\w]+#[\w]+)'
+ page_time_regex = 'Views: \d+(\.\d+)?ms'
+ activeRecord_time_regex = 'ActiveRecord: \d+(\.\d+)?ms'
- if paragraph.match(controller_regex) != nil
- controller_name = paragraph.match(controller_regex)[1]
- end
+ #解析请求中的正则,主机,时间
+ if paragraph.match(request_regex) != nil
+ request_url = paragraph.match(request_regex)[1] #正则表达式中的括号能够截取成数组
+ request_host = paragraph.match(request_regex)[2]
+ request_at = paragraph.match(request_regex)[3]
+ end
- if paragraph.match(response_regex) != nil
- #print(paragraph.match(response_regex))
- total_time = paragraph.match(response_regex)[1]
- page_time = paragraph.match(response_regex)[2]
- activeRecord_time = paragraph.match(response_regex)[3]
- page_time_percent = page_time.to_f/(total_time.to_f)
- activeRecord_time_percent = activeRecord_time.to_f/(total_time.to_f)
- else
- end
- request_status = [request_url, request_host, request_at,
- controller_name, total_time,page_time,page_time_percent,activeRecord_time,activeRecord_time_percent]
- request_status
+ #解析控制器
+ if paragraph.match(controller_regex) != nil
+ controller_name = paragraph.match(controller_regex)[1]
end
- #分析日志
- public
- def analysis day
- csv = Array.new
- #如果文件不存在,则直接返回空数组
- if File::exists?(logfile_path day)
- File.open(logfile_path(day), "r:utf-8") do |file|
- paragraph = ""
- begin_flag = false
- # 对每一行进行判断
- file.each do |line|
- # 以"Started GET "开头为一个paragraph
- #print(line.match('[\d]*-([\d]*-[\d]* [\d]*:[\d]*:[\d]*) INFO -- Started GET ') == nil)
- if (line.match('[\d]*-([\d]*-[\d]* [\d]*:[\d]*:[\d]*) \w+ -- Started GET ') != nil)
- if !begin_flag
- begin_flag = true
- paragraph.concat(line)
- else
- # 另一个paragraph的开头
- if (paragraph.match(response_regex) != nil)
- csv << get_status(paragraph)
- end
- begin_flag = true
- paragraph = line
- end
+ #解析响应时间以及计算百分比
+ if paragraph.match(response_regex) != nil
+ #print(paragraph.match(response_regex))
+ total_time = paragraph.match(response_regex)[1]
+ page_time = paragraph.match(response_regex)[2]
+ activeRecord_time = paragraph.match(response_regex)[3]
+ page_time_percent = page_time.to_f/(total_time.to_f)
+ activeRecord_time_percent = activeRecord_time.to_f/(total_time.to_f)
+ else
+ end
+ #将解析结果当做一条记录数组返回
+ request_status = [request_url, request_host, request_at,
+ controller_name, total_time, page_time, page_time_percent, activeRecord_time, activeRecord_time_percent]
+ request_status
+ end
+
+ # Time 2015-01-26 16:41:51
+ # Author lizanle
+ # Description 分析日志
+ public
+ def analysis day
+ csv = Array.new
+ #如果文件不存在,则直接返回空数组
+ if File::exists?(logfile_path day)
+ File.open(logfile_path(day), "r:utf-8") do |file|
+ paragraph = ""
+ begin_flag = false
+ # 对每一行进行判断
+ file.each do |line|
+ # 以"Started GET "开头为一个paragraph
+ #print(line.match('[\d]*-([\d]*-[\d]* [\d]*:[\d]*:[\d]*) INFO -- Started GET ') == nil)
+ if (line.match('[\d]*-([\d]*-[\d]* [\d]*:[\d]*:[\d]*) \w+ -- Started GET ') != nil)
+ if !begin_flag
+ begin_flag = true
+ paragraph.concat(line)
else
- if begin_flag
- paragraph.concat(line)
- else
+ # 另一个paragraph的开头
+ if (paragraph.match(response_regex) != nil)
+ csv << get_status(paragraph)
end
+ begin_flag = true
+ paragraph = line
+ end
+ else
+ if begin_flag
+ paragraph.concat(line)
+ else
end
end
- end
+ end
end
- csv
end
+ csv
end
end
end
+end