Class: LogAnalyzerJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
app/jobs/log_analyzer_job.rb

Instance Method Summary collapse

Instance Method Details

#performObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/jobs/log_analyzer_job.rb', line 4

def perform

  Delayed::Worker.logger.debug('стартуем')
  CONFIG[:logs].each do |name, path|
    Delayed::Worker.logger.debug(path)
    if File.exist?("#{Rails.root}#{path}")
      log = File.read("#{Rails.root}#{path}")
      log.scan(/(^I,[^\n]+\n(F,[^\n]+\n)+)/m).each do |error|
        Delayed::Worker.logger.debug('получение времени ошибки')
        datetime = (DateTime.parse error[0].match(/\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}/)[0]).to_s(:db)
        Delayed::Worker.logger.debug(datetime)
        Delayed::Worker.logger.debug('получение инфы ошибки')
        e = error[0].gsub(/F,.+FATAL -- :\n/, '').gsub(/[FI],.+(FATAL|INFO) -- :\s/, '')
        Delayed::Worker.logger.debug(e)
        Delayed::Worker.logger.debug("занесение ошибки в #{name}")
        Delayed::Worker.logger.debug(LogErrorType.find_by(value: name))
        LogErrorType.find_by(value: name).log_errors.create(value: e, date: datetime)
      end

      # puma
      # log.scan(/(Started.{20,3000}(Completed 400|Completed 500|RoutingError).+?)(Started|\Z)/m).each do |error|
      #   LogErrorType.find_by(value: name).log_errors.create(value: error[0], date: (DateTime.parse error[0].match(/\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/)[0]).to_s(:db))
      # end
      # dj
      # log.scan(/^E.+$/).each do |error|
      #   LogErrorType.find_by(value: name).log_errors.create(value: error, date: (DateTime.parse error.match(/\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}/)[0]).to_s(:db))
      # end
      # и подчищаем )
      # if File.size("#{Rails.root}#{path}").to_i > 5538210
      File.truncate("#{Rails.root}#{path}", 0)
      # end
    end

  end

  # и подчищаем также DJ.log когда он уже велик
  dj_log_path = "#{Rails.root}/log/dj.log"
  if File.size(dj_log_path).to_i > 1538210
    File.truncate(dj_log_path, 0)
  end

  Delayed::Backend::ActiveRecord::Job.where(queue: :log_analyzer).destroy_all
  LogAnalyzerJob.set(wait_until: DateTime.now + CONFIG[:log_analyzer_timeout].minute).perform_later

end