代码之家  ›  专栏  ›  技术社区  ›  Viktova

从日志文件动态获取总的启动/关闭时间

  •  -2
  • Viktova  · 技术社区  · 6 年前

    假设我有以下日志文件,它连续记录服务器的关闭/启动时间:

    状态.log

    UP - "18:00:00"
    ..
    ..
    DOWN - "19:00:03"
    ..
    ..
    DOWN - "22:00:47"
    ..
    ..
    UP - "23:59:48"
    UP - "23:59:49"
    UP - "23:59:50"
    DOWN - "23:59:51"
    DOWN - "23:59:52"
    UP - "23:59:53"
    UP - "23:59:54"
    UP - "23:59:56"
    UP - "23:59:57"
    UP - "23:59:59"
    

    每天都以相同的文件名记录在一个单独的文件夹中。

    不是我的实际代码,但这是一种更简单、更透明的方法:

    #!/bin/ruby
    downtime_log = File.readlines("path/to/log/file").select { |line| line =~ /DOWN/ }
    puts "#{downtime_log.count} Downtimes for today"
    

    从逻辑上讲,我怎样才能以分钟和秒为单位获得每个文件/天的总停机时间,而不是作为总计数。

    1 回复  |  直到 6 年前
        1
  •  1
  •   spickermann    6 年前

    我假设你的文件每秒只包含一行。然后,您的服务中断的秒数可以像您在方法中所做的那样进行评估:

    number_of_seconds_downtime = File.readlines('path/to/log/file')
                                     .select { |line| line =~ /DOWN/ }
                                     .count
    

    或简化:

    number_of_seconds_downtime = File.readlines('path/to/log/file')
                                     .count { |line| line =~ /DOWN/ }
    

    把它转换成几分钟和几秒钟 divmod

    minutes, seconds = number_of_seconds_downtime.divmod(60)
    

    puts "#{minutes}:#{seconds} downtime"