-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathirc_map
executable file
·81 lines (64 loc) · 1.61 KB
/
irc_map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/ruby
# ライブラリ読み込み
#Dir.chdir(File.dirname(__FILE__))
Dir.chdir('/home/server-admin/git/gitlab/munin-irc/ruby')
require 'bundler/setup'
require 'irc-socket'
require_relative 'config'
# 引数に config が指定されたとき
if ARGV[0] == 'config'
puts <<__EOT__
graph_category irc
graph_title ircd map
graph_order #{SERVER.values.join(' ')}
graph_args -l 0
__EOT__
SERVER.merge(USE_MAP ? MAP_ONLY : LUSERS_ONLY).each do |host, name|
puts("#{name}.label #{host}")
end
exit
end
# MAP コマンドで接続者数を調査する
def map
servers = SERVER.merge(MAP_ONLY)
@irc.write('MAP')
while line = @irc.read.split
case(line[1])
when '015'
line[3].slice!(/^:/) unless line[3] == ':'
mark = line.rindex('Users:')
host = line[mark - 3].slice(0..-6)
client = line[mark + 1]
puts("#{servers[host]}.value #{client}")
when '017'
break
end
end
end
# LUSERS コマンドで接続者数を調査する
def lusers
SERVER.merge(LUSERS_ONLY).each do |host, name|
@irc.write("LUSERS * #{host}")
while line = @irc.read.split
if line[1] == '265'
puts "#{name}.value #{line[3]}"
break
end
end
end
end
# 値の出力
@irc = IRCSocket.new(TARGET)
@irc.connect
if @irc.connected?
@irc.pass(PASS) if PASS != nil
@irc.nick('munin-node')
@irc.user('koi-chan', 0, '*', 'munin-node')
@irc.oper(OPER[:name], OPER[:pass]) if OPER[:user] != '' and OPER[:pass] != ''
# MOTD の出力を待機する
while line = @irc.read.split
break if line[1] == '376'
end
USE_MAP ? map : lusers
end
@irc.close