首页 > 解决方案 > 从日志文件中动态获取总启动/停机时间

问题描述

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

状态日志

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"

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

标签: rubyloggingscripting

解决方案


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

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"

推荐阅读