ruby - 从日志文件中动态获取总启动/停机时间
问题描述
假设我有以下日志文件,它连续记录服务器的停机/启动时间:
状态日志
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"
从逻辑上讲,我如何才能以分钟和秒为单位获得每个文件/天的总停机时间,但不能作为总数。
解决方案
我假设您的文件每秒只包含一行。然后可以像您在方法中所做的那样评估您的服务关闭的秒数:
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"
推荐阅读
- c# - Roslyn 错误“不支持添加文档”
- javascript - 如何在 JavaScript 中使用来自 Github 的模块?
- html - Bootstrap Navbar切换图标按钮在点击时不显示导航项目?
- delphi - FMX TMemo 和 BeginUpdate
- python-3.x - 无法在另一台计算机上从其字节码重新创建 .pdf 文件
- microsoft-teams - Microsoft Teams HttpPost Action 打印 http 返回状态
- connected-components - 如何以直接或间接的方式按公共元素对连接的数组进行分组
- javascript - 识别导致“拒绝执行脚本的脚本,因为它的哈希、随机数或‘不安全内联’...... f 内容安全策略
- reactjs - FullCalendar:每次事件更改时渲染 dayHeaderContent 道具
- flutter - Dart - 嵌套然后永远不会完成