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

Ruby 从日志文件动态获取总的启动/关闭时间,ruby,logging,scripting,Ruby,Logging,Scripting,假设我有以下日志文件,它连续记录服务器的关闭/启动时间: 状态日志 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 - "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"
每天都以相同的文件名记录在单独的文件夹中

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


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

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

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/ }
把它转换成几分钟和几秒钟

并输出如下结果:

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

我想你误解了。我读到,作为家庭作业的帮助问题是离题的,除非它们包括到目前为止你所做工作的总结和你正在解决的困难的描述。什么是有意义的,因为我们不想解决你的家庭作业,但我们喜欢在你面临问题时帮助你;这是我们提问指南中分享你的研究部分。这样人们可以更好地将他们的帮助集中在您的具体情况上。请注意,不需要对投票(向上或向下)进行评论,主持人也不能对个人投票做任何事情。感谢您的演示。以秒为单位计数行是有意义的,这样我可以将其更改为分钟,并以小时-分钟为例进行输出。谢谢
minutes, seconds = number_of_seconds_downtime.divmod(60)
puts "#{minutes}:#{seconds} downtime"