假设我有以下日志文件,该文件连续记录服务器的关闭/启动时间:
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"
从逻辑上讲,我如何才能获得每文件/天的总停机时间(以分钟和秒为单位),而不是总计数。
答案 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"