module SystemLogHelper
    class SystemLog
      class << self
        # 分页（支持多关键字查询）
        def logo_data(page,per,search)
          logs = find_all_logs

          # 根据search参数来决定是否需要查询
          keywords = search
          if keywords && !keywords.strip.blank?
            # 把keywords转化成正则表达式数组
            keywords = keywords.strip.split(/\s+/).collect! {|w| Regexp.new(w, 'i')}
            # 一条记录应该匹配每个关键字
            logs = logs.find_all do |log|
              keywords.all? { |r| log =~ r }
            end
            logs = Kaminari.paginate_array(logs).page(page).per(per).collect! {|log| parse(log)}
            logs.collect! do |log|
              keywords.each { |r| log.gsub!(r, '<span class="search_results">\0</span>')}
              log
            end
          else
            logs = Kaminari.paginate_array(logs).page(page).per(per).collect! {|log| parse(log)}
          end
          logs
        end

        #清除日誌
        def clear
          File.open(logfile_path, 'w') do |f|
            f.print ''
          end
        end

        #讀取日誌
        private
        def find_all_logs
          File.open(logfile_path) do |f|
            #打开文件，并按照正则表达式切分，逆序，最新一个记录可以扔掉（因为最新的记录永远都是访问System_log)
            f.read.split("Processing").reverse[1..-1]
          end
        end

        # 日志文件的路径，一般在Rails.root/log下，根据环境配置
        # 依次记录到product.log development.log test.log中
        def logfile_path
          File.join(Rails.root, "log", "#{Rails.env}.log")
        end

        #替換換行符
        def parse(log)
          ERB::Util.html_escape(log.gsub(/\e\[[\d;m]+/, '')).gsub("\n", "<br/>")
        end
      end
    end
  end

