从日志文件动态获取总的上/下时间

时间:2018-10-17 08:51:39

标签: ruby logging scripting

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

status.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 个答案:

答案 0 :(得分:1)

我假设您的文件每秒仅包含一行。然后可以像评估方法一样评估服务中断的秒数:

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"