0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

簡易的なウォッチドッグタイマーをRubyで表現できるのか

Last updated at Posted at 2019-11-02

ryoです。好きなアーティストは「神様、僕は気づいてしまった」です。略称 神僕
神僕の曲で、「ウォッチドッグス」が特に好きです。
そこで今日はウォッチドッグタイマーについてRubyで表現できるか挑戦しようと思います。

自分の読解力に自信がなくて、ウォッチドッグタイマーの解釈を間違えているかもしれません。
間違えていたらご指摘いただけたらありがたいです。

この記事を読んで身につくこと

  • ウォッチドッグタイマーが何かがわかる。
  • Rubyでウォッチドッグタイマーを表現できるようになる

目次

  • ウォッチドッグタイマーとは何か
  • 作る内容
  • 事前準備
  • 完成コード
  • 各コードの解説
  • 終わりに

##ウォッチドッグタイマーとは

システムを定期的に監視して、異常があった場合リセットするためのタイマーのことです。
ウォッチドッグ(watchdog)は番犬という意味だそうです。

ここで大まかなイメージを説明しています。wikiとかもありますが、リンクは俺の好みで選びました。

作る内容

1.秒数を数える
2.3秒ごとに異常がないか確認する。
3.ランダム(4分の1)で寝ている。
4.寝ていた場合、1秒からやり直す
5.15秒まで起き続けられたら処理終了

事前準備

定期実行のプログラムを作成したいので
gemのTimersをインストールします。

ターミナル
gem install timers

完成コード

watchdog.rb
require 'timers'

def watchdog
  random = rand(4) + 1
  if random == 1
    @sleep = true 
  end
end

@time = 1
timers = Timers::Group.new
puts @time
timers.every(1) {
  @time += 1
  puts @time
}

timers.every(3) { 
  @sleep = false
  watchdog
  if @sleep == true
    puts "zzzz"
    @time = 0
  else
    puts "ワンワン!"
  end

  if @time == 15
    exit
  end
}

loop { timers.wait }  

出力結果

ターミナル
1
2
3
ワンワン!
4
5
6
zzzz
1
2
3
ワンワン!
4
5
6
ワンワン!
7
8
9
ワンワン!
10
11
12
ワンワン!
13
14
15
ワンワン!

各コードの解説

事前準備でインストールしたtimersを呼び出せるようにします。

watchdog.rb
require 'timers'

1秒経つごとに秒数を出力していきます。

watchdog.rb
@time = 1
timers = Timers::Group.new
puts @time
timers.every(1) {
  @time += 1
  puts @time
}

3秒ごとに
・起きているか確認。起きていたらワンワンと出力
・寝ていたらzzzzと出力し、タイマーを1からリスタート

watchdog.rb
timers.every(3) { 
  @sleep = false
  watchdog
  if @sleep == true
    puts "zzzz"
    @time = 0
  else
    puts "ワンワン!"
  end

起きてるかどうか確認(4分の1寝ている)

watchdog.rb
def watchdog
  random = rand(4) + 1
  if random == 1
    @sleep = true 
  end
end

15秒起き続けてたら処理終了

watchdog.rb
  if @time == 15
    exit
  end

処理終了するまで繰り返しをする記述

watchdog.rb
loop { timers.wait }  

終わりに

コードを打っているうちに、本当にこれでいいのか不安になってます。。違うってはっきりわかったら作り直すかもしれません。
後、猫派なんですが、番犬じゃなくて番猫とかいないんですかね。
ウォッチキャットタイマー。ちゃんと監視してくれなさそう。
お疲れ様でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?