resque-top

twitterのTL見てたら、
miyagawaさんがresque-topなるものを作ったというつぶやきが流れていたので
触ってみた。

こんな感じ

sleep 1でresque-webの内容を表示し続けるCLIツール。

resque-top

resque-web



メモ

どうやってんだろうとソースを見てみると自分なりに発見があったのでメモ。

Ctrl-Cでの抜け方

Interruptをrescueする。

    def run
      loop do
        display
        sleep 1
      end
    rescue Interrupt
    end
画面のclear
    def clear
      print "\033[2J"
    end
terminalのサイズ

これはhirbのソースから持ってきている。
stty size
あと、githubって#L61-71みたいに行指定できるんですね。

    # https://github.com/cldwalker/hirb/blob/master/lib/hirb/util.rb#L61-71
    def detect_terminal_size
      if (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
        [ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
      elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
        [`tput cols`.to_i, `tput lines`.to_i]
      elsif STDIN.tty? && command_exists?('stty')
        `stty size`.scan(/\d+/).map {  |s| s.to_i }.reverse
      else
        nil
      end
    rescue Exception => e
      nil
    end
gemspec

これでgem作れるんだ。

gem build resque-top.gemspec

あと

別件ですが、resque-webは、rails3からsubpathで利用できるようになりました。

#routes.rb
require 'resque/server'


mount Resque::Server.new, :at => "/resque"

redisのインストール

レプリケーション可でVM機能もあるおしゃれなKVS Redis をインストールしてみました。
rubyから使ってみるのは後ほど。

インストール

$ brew update
$ brew install redis

redis.confに設定書くらしい。
swapサイズなども指定可。default portは6379。

使い方

redis-serverでサービスがあげて、redis-cliでクライアント接続します。
以下、クライアントの使用例(参考URLから抜粋)。

基本(GET/SET/DEL)

SET mykey hello
GET mykey
DEL mykey

インクリメント・デクリメント(INCR/DECR)

INCR mynum
DECR mynum

増減量指定(INCRBY/DECRBY)

INCRBY mynum 100
DECRBY mynum 100

タイムアウト(EXPIRE)

SET mykey something
EXPIRE mykey

SET時にEXPIRE指定(SETEX)

SETEX mykey 10 something

複数コマンドの実行(MULTI/EXEC)

MULTI
GET counter
SET counter 0
EXEC
※上記例はGETSETでも可。
トランザクション処理としては使用不可。ロールバックしない。

キーの検索(KEYS)

KEYS hoge*