Динамически получить общее время вверх / вниз из файла журнала - PullRequest
0 голосов
/ 17 октября 2018

Допустим, у меня есть следующий файл журнала, который непрерывно регистрирует время простоя / работы сервера:

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 голосов
/ 17 октября 2018

Я предполагаю, что ваш файл содержит ровно одну строку в секунду.Затем количество секунд, в течение которых ваша служба была недоступна, можно оценить, как вы уже использовали в своем подходе:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...