keystone 0.0.29
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/README +3 -0
- data/Rakefile +26 -0
- data/VERSION +1 -0
- data/doc/classes/Dir.html +139 -0
- data/doc/classes/Dir.src/M000003.html +25 -0
- data/doc/classes/FlagSetMaker.html +138 -0
- data/doc/classes/FlagSetMaker.src/M000018.html +18 -0
- data/doc/classes/FlagSetMaker/FlagSet.html +186 -0
- data/doc/classes/FlagSetMaker/FlagSet.src/M000019.html +24 -0
- data/doc/classes/FlagSetMaker/FlagSet.src/M000020.html +26 -0
- data/doc/classes/FlagSetMaker/FlagSet.src/M000021.html +18 -0
- data/doc/classes/FlagSetMaker/FlagSet.src/M000022.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.html +304 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000023.html +19 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000024.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000025.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000026.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000027.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000029.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000030.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000031.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000032.html +18 -0
- data/doc/classes/FlagSetMaker/Flags.src/M000033.html +18 -0
- data/doc/classes/Hoge.html +113 -0
- data/doc/classes/Keystone.html +174 -0
- data/doc/classes/Keystone/Base.html +191 -0
- data/doc/classes/Keystone/Base.src/M000054.html +22 -0
- data/doc/classes/Keystone/Base.src/M000055.html +18 -0
- data/doc/classes/Keystone/Base.src/M000056.html +25 -0
- data/doc/classes/Keystone/Base.src/M000057.html +18 -0
- data/doc/classes/Keystone/Base.src/M000058.html +20 -0
- data/doc/classes/Keystone/Batch.html +115 -0
- data/doc/classes/Keystone/Batch/Base.html +208 -0
- data/doc/classes/Keystone/Batch/Base.src/M000052.html +54 -0
- data/doc/classes/Keystone/Batch/Base.src/M000053.html +30 -0
- data/doc/classes/Keystone/CoreExt.html +105 -0
- data/doc/classes/Keystone/Mail.html +115 -0
- data/doc/classes/Keystone/Mail/Send.html +171 -0
- data/doc/classes/Keystone/Mail/Send.src/M000034.html +18 -0
- data/doc/classes/Keystone/Mail/Send.src/M000035.html +42 -0
- data/doc/classes/Keystone/Mail/Send.src/M000036.html +18 -0
- data/doc/classes/Keystone/Os.html +184 -0
- data/doc/classes/Keystone/Os.src/M000037.html +18 -0
- data/doc/classes/Keystone/Os.src/M000038.html +27 -0
- data/doc/classes/Keystone/Os/AbstractOs.html +227 -0
- data/doc/classes/Keystone/Os/AbstractOs.src/M000046.html +17 -0
- data/doc/classes/Keystone/Os/AbstractOs.src/M000047.html +17 -0
- data/doc/classes/Keystone/Os/AbstractOs.src/M000048.html +17 -0
- data/doc/classes/Keystone/Os/AbstractOs.src/M000049.html +17 -0
- data/doc/classes/Keystone/Os/AbstractOs.src/M000050.html +17 -0
- data/doc/classes/Keystone/Os/AbstractOs.src/M000051.html +25 -0
- data/doc/classes/Keystone/Os/Centos.html +113 -0
- data/doc/classes/Keystone/Os/Darwin.html +139 -0
- data/doc/classes/Keystone/Os/Darwin.src/M000039.html +18 -0
- data/doc/classes/Keystone/Os/Linux.html +139 -0
- data/doc/classes/Keystone/Os/Linux.src/M000045.html +26 -0
- data/doc/classes/Keystone/Os/Osx.html +113 -0
- data/doc/classes/Keystone/Os/Unix.html +199 -0
- data/doc/classes/Keystone/Os/Unix.src/M000040.html +27 -0
- data/doc/classes/Keystone/Os/Unix.src/M000041.html +18 -0
- data/doc/classes/Keystone/Os/Unix.src/M000042.html +18 -0
- data/doc/classes/Keystone/Os/Unix.src/M000043.html +18 -0
- data/doc/classes/Keystone/Os/Unix.src/M000044.html +18 -0
- data/doc/classes/Keystone/Rails.html +105 -0
- data/doc/classes/Keystone/StringUtil.html +226 -0
- data/doc/classes/Keystone/StringUtil.src/M000059.html +43 -0
- data/doc/classes/Keystone/StringUtil.src/M000060.html +25 -0
- data/doc/classes/Keystone/StringUtil.src/M000061.html +24 -0
- data/doc/classes/Keystone/StringUtil.src/M000062.html +18 -0
- data/doc/classes/Keystone/StringUtil.src/M000063.html +21 -0
- data/doc/classes/Object.html +240 -0
- data/doc/classes/Object.src/M000012.html +18 -0
- data/doc/classes/Object.src/M000013.html +20 -0
- data/doc/classes/Object.src/M000014.html +18 -0
- data/doc/classes/Object.src/M000015.html +18 -0
- data/doc/classes/Object.src/M000016.html +18 -0
- data/doc/classes/Object.src/M000017.html +19 -0
- data/doc/classes/Tempfile.html +139 -0
- data/doc/classes/Tempfile.src/M000011.html +25 -0
- data/doc/classes/TestCoreExt.html +152 -0
- data/doc/classes/TestCoreExt.src/M000009.html +17 -0
- data/doc/classes/TestCoreExt.src/M000010.html +21 -0
- data/doc/classes/TestStringUtilBase.html +197 -0
- data/doc/classes/TestStringUtilBase.src/M000004.html +17 -0
- data/doc/classes/TestStringUtilBase.src/M000005.html +23 -0
- data/doc/classes/TestStringUtilBase.src/M000006.html +22 -0
- data/doc/classes/TestStringUtilBase.src/M000007.html +25 -0
- data/doc/classes/TestStringUtilBase.src/M000008.html +34 -0
- data/doc/classes/Uri.html +158 -0
- data/doc/classes/Uri.src/M000001.html +18 -0
- data/doc/classes/Uri.src/M000002.html +18 -0
- data/doc/created.rid +1 -0
- data/doc/files/example/batch_sample_rb.html +134 -0
- data/doc/files/example/os_rb.html +109 -0
- data/doc/files/example/string_util_rb.html +109 -0
- data/doc/files/lib/keystone/base_rb.html +101 -0
- data/doc/files/lib/keystone/batch/base_rb.html +108 -0
- data/doc/files/lib/keystone/batch_rb.html +101 -0
- data/doc/files/lib/keystone/core_ext/array_rb.html +101 -0
- data/doc/files/lib/keystone/core_ext/blank_rb.html +101 -0
- data/doc/files/lib/keystone/core_ext/dir_rb.html +101 -0
- data/doc/files/lib/keystone/core_ext/object_rb.html +101 -0
- data/doc/files/lib/keystone/core_ext/tempfile_rb.html +108 -0
- data/doc/files/lib/keystone/core_ext/uri_rb.html +101 -0
- data/doc/files/lib/keystone/core_ext_rb.html +113 -0
- data/doc/files/lib/keystone/mail/send_rb.html +115 -0
- data/doc/files/lib/keystone/mail_rb.html +101 -0
- data/doc/files/lib/keystone/os/abstract_os_rb.html +101 -0
- data/doc/files/lib/keystone/os/centos_rb.html +101 -0
- data/doc/files/lib/keystone/os/darwin_rb.html +101 -0
- data/doc/files/lib/keystone/os/linux_rb.html +101 -0
- data/doc/files/lib/keystone/os/osx_rb.html +101 -0
- data/doc/files/lib/keystone/os/unix_rb.html +101 -0
- data/doc/files/lib/keystone/os_rb.html +108 -0
- data/doc/files/lib/keystone/string_util_rb.html +101 -0
- data/doc/files/lib/keystone_rb.html +116 -0
- data/doc/files/test/test_core_ext_rb.html +110 -0
- data/doc/files/test/test_string_util_rb.html +112 -0
- data/doc/files/vendor/flag_set_maker_rb.html +108 -0
- data/doc/files/vendor/moji_rb.html +118 -0
- data/doc/fr_class_index.html +52 -0
- data/doc/fr_file_index.html +54 -0
- data/doc/fr_method_index.html +89 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/example/batch_sample.rb +24 -0
- data/example/os.rb +4 -0
- data/example/sendmail.rb +21 -0
- data/example/string_util.rb +15 -0
- data/keystone.gemspec +209 -0
- data/lib/keystone.rb +25 -0
- data/lib/keystone/base.rb +75 -0
- data/lib/keystone/batch.rb +5 -0
- data/lib/keystone/batch/base.rb +217 -0
- data/lib/keystone/core_ext.rb +18 -0
- data/lib/keystone/core_ext/array.rb +29 -0
- data/lib/keystone/core_ext/blank.rb +44 -0
- data/lib/keystone/core_ext/dir.rb +16 -0
- data/lib/keystone/core_ext/ipaddr.rb +18 -0
- data/lib/keystone/core_ext/object.rb +34 -0
- data/lib/keystone/core_ext/tempfile.rb +14 -0
- data/lib/keystone/core_ext/uri.rb +14 -0
- data/lib/keystone/mail.rb +8 -0
- data/lib/keystone/mail/address.rb +92 -0
- data/lib/keystone/mail/content_type.rb +60 -0
- data/lib/keystone/mail/message.rb +102 -0
- data/lib/keystone/mail/message_factory.rb +18 -0
- data/lib/keystone/mail/message_iso2022jp.rb +126 -0
- data/lib/keystone/mail/message_sjis.rb +23 -0
- data/lib/keystone/mail/receive.rb +320 -0
- data/lib/keystone/mail/send.rb +83 -0
- data/lib/keystone/os.rb +26 -0
- data/lib/keystone/os/abstract_os.rb +36 -0
- data/lib/keystone/os/centos.rb +6 -0
- data/lib/keystone/os/darwin.rb +9 -0
- data/lib/keystone/os/linux.rb +15 -0
- data/lib/keystone/os/osx.rb +18 -0
- data/lib/keystone/os/unix.rb +43 -0
- data/lib/keystone/string_util.rb +85 -0
- data/test/test_core_ext.rb +15 -0
- data/test/test_string_util.rb +60 -0
- data/util/README +1 -0
- data/util/bin/command_broadcast.rb +137 -0
- data/util/bin/disk_size_check.rb +54 -0
- data/util/bin/notice +93 -0
- data/util/bin/ve2tar.rb +80 -0
- data/vendor/flag_set_maker.rb +121 -0
- data/vendor/moji.rb +502 -0
- metadata +236 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'net/smtp'
|
2
|
+
|
3
|
+
if __FILE__ ==$0
|
4
|
+
$: << '../..'
|
5
|
+
require 'keystone'
|
6
|
+
end
|
7
|
+
|
8
|
+
module Keystone
|
9
|
+
module Mail
|
10
|
+
class Send
|
11
|
+
attr_accessor :message, :smtp_addr, :smtp_port, :retry_cnt
|
12
|
+
|
13
|
+
#
|
14
|
+
# 普通なことをしたいならTMailを使いましょう
|
15
|
+
# class Send
|
16
|
+
def initialize(message=nil,opt={})
|
17
|
+
@smtp_addr, @smtp_port, @retry_cnt = "127.0.0.1", 25, 0
|
18
|
+
@message = message
|
19
|
+
@message = Keystone::Mail::MessageFactory.create(opt) if @message == nil
|
20
|
+
debug "@message=#{@message}"
|
21
|
+
set_option(opt)
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# from could be String or Array
|
26
|
+
# opt
|
27
|
+
# :smtp_addr
|
28
|
+
# :smtp_port
|
29
|
+
# :retry
|
30
|
+
# :mail_from_text
|
31
|
+
# :encoding
|
32
|
+
#
|
33
|
+
def self.send(from, to, subject, body, opt={})
|
34
|
+
queue = self.new(nil,opt)
|
35
|
+
queue.message.mail_to = to
|
36
|
+
queue.message.mail_from = from
|
37
|
+
queue.message.subject = subject
|
38
|
+
queue.message.body = body
|
39
|
+
queue.send
|
40
|
+
end
|
41
|
+
|
42
|
+
def send
|
43
|
+
src = @message.to_src
|
44
|
+
debug src
|
45
|
+
try_cnt = 0
|
46
|
+
begin
|
47
|
+
m = Net::SMTPSession.new(@smtp_addr, @smtp_port)
|
48
|
+
m.start()
|
49
|
+
m.sendmail(src ,@message.mail_from ,@message.mail_to)
|
50
|
+
m.finish
|
51
|
+
rescue => e
|
52
|
+
debug "try_cnt:#{try_cnt}"
|
53
|
+
try_cnt += 1
|
54
|
+
sleep 1
|
55
|
+
retry if @retry_cnt >= try_cnt
|
56
|
+
raise e
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def set_option(opt)
|
61
|
+
@smtp_addr = opt[:smtp_addr] if opt.key?(:smtp_addr)
|
62
|
+
@smtp_port = opt[:smtp_port] if opt.key?(:smtp_port)
|
63
|
+
@retry_cnt = Integer(opt[:retry_cnt]) if opt.key?(:retry_cnt)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
if __FILE__ ==$0
|
70
|
+
require 'rubygems'
|
71
|
+
require 'pit'
|
72
|
+
|
73
|
+
config = Pit.get("keystone_test")
|
74
|
+
|
75
|
+
Keystone::Mail::Send.send(
|
76
|
+
config["mailfrom01"],
|
77
|
+
config["mailto01"],
|
78
|
+
"件名かんさいーーーーでんきほーーーあんky−−−かいいい−−かいいい−−かいいいいいいいい終わり",
|
79
|
+
"body日本語",
|
80
|
+
{:mail_from_text=>"メール送信者名ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー終わり",:retry_cnt=>3,:encoding=>:sjis}
|
81
|
+
)
|
82
|
+
end
|
83
|
+
|
data/lib/keystone/os.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'keystone/os/abstract_os'
|
2
|
+
|
3
|
+
module Keystone::Os
|
4
|
+
autoload :Centos, 'keystone/os/centos'
|
5
|
+
autoload :Linux, 'keystone/os/linux'
|
6
|
+
autoload :Darwin, 'keystone/os/darwin'
|
7
|
+
autoload :Osx, 'keystone/os/osx'
|
8
|
+
autoload :Unix, 'keystone/os/unix'
|
9
|
+
# autoload :Windows, 'keystone/env/windows.rb' # fu*k windows
|
10
|
+
def self.oses
|
11
|
+
@oses ||= constants
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.get
|
15
|
+
case RUBY_PLATFORM
|
16
|
+
when /linux/
|
17
|
+
# TODO only centos impremented
|
18
|
+
Keystone::Os::Linux.get()
|
19
|
+
when /darwin/
|
20
|
+
# TODO only osx impremented
|
21
|
+
Keystone::Os::Osx.new
|
22
|
+
else
|
23
|
+
# TODO
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Keystone
|
2
|
+
module Os
|
3
|
+
class AbstractOs
|
4
|
+
|
5
|
+
attr_accessor :version
|
6
|
+
|
7
|
+
def ip_address
|
8
|
+
end
|
9
|
+
|
10
|
+
def hostname
|
11
|
+
end
|
12
|
+
|
13
|
+
def disk
|
14
|
+
end
|
15
|
+
|
16
|
+
def process_list
|
17
|
+
end
|
18
|
+
|
19
|
+
def netstat
|
20
|
+
end
|
21
|
+
|
22
|
+
def dump
|
23
|
+
self_methods = self.methods - Class.methods
|
24
|
+
self_methods.delete("version=")
|
25
|
+
self_methods.delete("dump")
|
26
|
+
self_methods.delete("bin_or_usrbin")
|
27
|
+
st = ""
|
28
|
+
self_methods.each do |method|
|
29
|
+
p method
|
30
|
+
st << "== #{method} ==\n #{self.__send__(method).to_s.split("\n").join("\n ")}\n"
|
31
|
+
end
|
32
|
+
return st
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Keystone::Os
|
2
|
+
class Linux < Unix
|
3
|
+
def self.get
|
4
|
+
Dir.glob("/etc/*{-release,_version}").each do |file|
|
5
|
+
content = File.open(file).read
|
6
|
+
if content =~ /CentOS release (\d*)/
|
7
|
+
os = Centos.new
|
8
|
+
os.version = $1.to_i
|
9
|
+
return os
|
10
|
+
end
|
11
|
+
end
|
12
|
+
return Linux.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Keystone
|
2
|
+
module Os
|
3
|
+
class Osx < Darwin
|
4
|
+
def ip_address
|
5
|
+
ifconfig = `/sbin/ifconfig`
|
6
|
+
ips = []
|
7
|
+
|
8
|
+
# TODO mac
|
9
|
+
ifconfig.gsub(/inet (\d+\.\d+\.\d+\.\d+) netmask/){|ip|
|
10
|
+
if $1 != '127.0.0.1'
|
11
|
+
ips << $1
|
12
|
+
end
|
13
|
+
}
|
14
|
+
return ips
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Keystone
|
2
|
+
module Os
|
3
|
+
class Unix < AbstractOs
|
4
|
+
def ip_address
|
5
|
+
ifconfig = `/sbin/ifconfig`
|
6
|
+
ips = []
|
7
|
+
|
8
|
+
# TODO mac
|
9
|
+
ifconfig.gsub(/inet addr:(\d+\.\d+\.\d+\.\d+)/){|ip|
|
10
|
+
if $1 != '127.0.0.1'
|
11
|
+
ips << $1
|
12
|
+
end
|
13
|
+
}
|
14
|
+
return ips
|
15
|
+
end
|
16
|
+
|
17
|
+
def bin_or_usrbin(cmd,option="")
|
18
|
+
cmd_option = "#{cmd} #{option}"
|
19
|
+
begin;return `/bin/#{cmd_option}` if File.exists?("/bin/#{cmd}");rescue;end
|
20
|
+
begin;return `/usr/bin/#{cmd_option}` if File.exists?("/usr/bin/#{cmd}");rescue;end
|
21
|
+
begin;return `/sbin/#{cmd_option}` if File.exists?("/sbin/#{cmd}");rescue;end
|
22
|
+
begin;return `/usr/sbin/#{cmd_option}`.chomp;rescue;end
|
23
|
+
end
|
24
|
+
|
25
|
+
def hostname
|
26
|
+
bin_or_usrbin("hostname")
|
27
|
+
end
|
28
|
+
|
29
|
+
def disk
|
30
|
+
bin_or_usrbin("df","-h")
|
31
|
+
end
|
32
|
+
|
33
|
+
def process_list
|
34
|
+
bin_or_usrbin("ps","-aux")
|
35
|
+
end
|
36
|
+
|
37
|
+
def netstat
|
38
|
+
bin_or_usrbin("netstat","-an")
|
39
|
+
`/usr/sbin/netstat -an`.chomp
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Keystone
|
2
|
+
class StringUtil
|
3
|
+
def self.int_to_splitted_path(i_value,value_length,base_folder,suffix="")
|
4
|
+
file_name = Integer(i_value).to_s
|
5
|
+
raise RangeError,"value_length must bigger than 0" if value_length < 1
|
6
|
+
raise RangeError, 'i_value length is bigger than value_length' if file_name.size > value_length
|
7
|
+
file_name = file_name.rjust(value_length, '0')
|
8
|
+
new_path = base_folder.dup
|
9
|
+
group_regex = ""
|
10
|
+
i = value_length
|
11
|
+
group_cnt = 0
|
12
|
+
loop do
|
13
|
+
group_cnt += 1
|
14
|
+
if i > 2
|
15
|
+
group_regex << "(\\d\\d\\d)"
|
16
|
+
i -= 3
|
17
|
+
break if i < 1
|
18
|
+
else
|
19
|
+
group_regex = "(#{"\\d"*i})" + group_regex
|
20
|
+
break
|
21
|
+
end
|
22
|
+
end
|
23
|
+
file_name.gsub(/#{group_regex}/) do |hit|
|
24
|
+
1.upto(group_cnt) do |i|
|
25
|
+
new_path << "/#{Regexp.last_match[i]}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
new_path << suffix if suffix != ""
|
29
|
+
return new_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.reverse_mail_address(mail)
|
33
|
+
if mail.index('@') == nil
|
34
|
+
return mail
|
35
|
+
end
|
36
|
+
user,dom = mail.split('@')
|
37
|
+
if dom == nil
|
38
|
+
return "@#{user}"
|
39
|
+
end
|
40
|
+
return dom.split('.').reverse.join(".") + "@" + user
|
41
|
+
end
|
42
|
+
|
43
|
+
MULTIBYTE_SPACE = [0x3000].pack("U")
|
44
|
+
PRESERVED_QUERY_WORDS_RE = /(AND|OR|ANDNOT)/
|
45
|
+
#
|
46
|
+
# adviced by Mr.morohashi
|
47
|
+
#
|
48
|
+
def self.serach_string_to_array(query)
|
49
|
+
tokens = query.scan(/'([^']*)'|"([^"]*)"|([^\s#{MULTIBYTE_SPACE}]*)/).flatten.reject{|i| i == nil || i == "" }
|
50
|
+
tokens.map do |token|
|
51
|
+
next unless token
|
52
|
+
#token.gsub!(PRESERVED_QUERY_WORDS_RE, $1.downcase) if token =~ PRESERVED_QUERY_WORDS_RE
|
53
|
+
token.gsub!(/\A['"]|['"]\z/, '') # strip quatos
|
54
|
+
token
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
#
|
60
|
+
# TODO
|
61
|
+
def self.downcase_roma_number(st)
|
62
|
+
st.tr("ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ", "ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ")
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# making search text for indexing
|
67
|
+
#
|
68
|
+
def self.to_searchtext(str)
|
69
|
+
self.downcase_roma_number(Moji.han_to_zen(
|
70
|
+
#Moji.zen_to_han(str,Moji::ZEN_ALNUM | Moji::ZEN_SYMBOL).downcase,Moji::HAN_KATA | Moji::HAN_JSYMBOL).tr("ー~/","ー~/")
|
71
|
+
Moji.zen_to_han(str,Moji::ZEN_ALNUM | Moji::ZEN_SYMBOL).downcase,Moji::HAN_KATA | Moji::HAN_JSYMBOL)
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
#
|
77
|
+
# 指定された文字列より[A-z0-9-_.]以外を取り除く
|
78
|
+
#
|
79
|
+
#
|
80
|
+
#
|
81
|
+
def to_fileable_st(st)
|
82
|
+
st.gsub(/[^\w\-_\.]/,"")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'redgreen'
|
3
|
+
require 'lib/keystone/core_ext'
|
4
|
+
|
5
|
+
class TestCoreExt < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_array_split_by
|
10
|
+
assert_equal([1,2,3,4,5,6,7,8,9].split_by(3),[[1, 2, 3], [4, 5, 6], [7, 8, 9]])
|
11
|
+
assert_equal([1,2,3,4,5,6,7,8,9,10].split_by(2),[[1,2],[3,4],[5,6],[7,8],[9,10]])
|
12
|
+
assert_equal([].split_by(3),[])
|
13
|
+
assert_equal([[1,2,3,4],[1,23],[2,33],[[4]]].split_by(3),[[[1, 2, 3, 4], [1, 23], [2, 33]], [[[4]]]])
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'redgreen'
|
3
|
+
require 'vendor/flag_set_maker'
|
4
|
+
require 'vendor/moji'
|
5
|
+
require 'lib/keystone/string_util'
|
6
|
+
|
7
|
+
$KCODE='u'
|
8
|
+
|
9
|
+
class TestStringUtilBase < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_reverse_mail
|
14
|
+
assert_equal(Keystone::StringUtil::reverse_mail_address("testuser@softbank.ne.jp"),"jp.ne.softbank@testuser")
|
15
|
+
assert_equal(Keystone::StringUtil::reverse_mail_address("test.user@somedomain.com"),"com.somedomain@test.user")
|
16
|
+
assert_equal(Keystone::StringUtil::reverse_mail_address("a.b@c.d"),"d.c@a.b")
|
17
|
+
assert_equal(Keystone::StringUtil::reverse_mail_address("a.b@"),"@a.b")
|
18
|
+
assert_equal(Keystone::StringUtil::reverse_mail_address("@c.d"),"d.c@")
|
19
|
+
assert_equal(Keystone::StringUtil::reverse_mail_address("a.b"),"a.b")
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_int_to_splitted_path
|
23
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(113355,12,"/tmp",".jpg"),"/tmp/000/000/113/355.jpg")
|
24
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(1234567890,10,"/temp",".png"),"/temp/1/234/567/890.png")
|
25
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(1234567890,11,"/temp",".png"),"/temp/01/234/567/890.png")
|
26
|
+
assert_raise(RangeError){Keystone::StringUtil.int_to_splitted_path(12345678901,10,"/tmp")}
|
27
|
+
assert_equal(Keystone::StringUtil.int_to_splitted_path(00000000000000001,11,"/tmp",".gif"),"/tmp/00/000/000/001.gif")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_serach_string_to_array
|
31
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|test test2 test3|),%w|test test2 test3|)
|
32
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|test "test2" test3|),%w|test test2 test3|)
|
33
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|test "test 2" test3|),["test","test 2","test3"])
|
34
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|"test 1" "test 2" test3|),["test 1","test 2","test3"])
|
35
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|"日本語 1" "test 2" test3|),["日本語 1","test 2","test3"])
|
36
|
+
assert_equal(Keystone::StringUtil.serach_string_to_array(%|"日本語 1" "test 2" ハンカク|),["日本語 1","test 2","ハンカク"])
|
37
|
+
# TODO
|
38
|
+
# assert_equal(Keystone::StringUtil.serach_string_to_array(%|"日本語 1" "tes\"t 2" ハンカク|),["日本語 1","test 2","ハンカク"])
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_to_searchtext
|
42
|
+
assert_equal(Keystone::StringUtil.to_searchtext("日本語"),"日本語")
|
43
|
+
assert_equal(Keystone::StringUtil.to_searchtext("カタカナ"),"カタカナ")
|
44
|
+
assert_equal(Keystone::StringUtil.to_searchtext("ハンカク"),"ハンカク")
|
45
|
+
assert_equal(Keystone::StringUtil.to_searchtext("A"),"a")
|
46
|
+
assert_equal(Keystone::StringUtil.to_searchtext("1"),"1")
|
47
|
+
assert_equal(Keystone::StringUtil.to_searchtext("abCD1234"),"abcd1234")
|
48
|
+
assert_equal(Keystone::StringUtil.to_searchtext("スープ"),"スープ")
|
49
|
+
assert_equal(Keystone::StringUtil.to_searchtext("スープ"),"スープ") # ハンカク半濁点
|
50
|
+
assert_equal(Keystone::StringUtil.to_searchtext("コズミックラナウェイ"),"コズミックラナウェイ") # ハンカク濁点
|
51
|
+
assert_equal(Keystone::StringUtil.to_searchtext("ー―-‐"),"ー―-‐") # ハンカク濁点
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
# TODO
|
56
|
+
assert_equal(Keystone::StringUtil.to_searchtext("!”$%&¥’()*+,-./:;<=>?@[¥]^_‘{|}~#"),"!\"$%&\\'()*+,-./:;<=>?@[\\]^_`{|}~#") # 半角全角変換可能記号
|
57
|
+
assert_equal(Keystone::StringUtil.to_searchtext("。「」、ー゙゚・"),"。「」、ー゛゜・")
|
58
|
+
assert_equal(Keystone::StringUtil.to_searchtext("ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ"),"ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ")
|
59
|
+
end
|
60
|
+
end
|
data/util/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
このフォルダ以下は実際は別プロジェクトにすべきなんでしょうが、、、、まぁめんどくさいのでまずはここにおいておきます
|
@@ -0,0 +1,137 @@
|
|
1
|
+
|
2
|
+
# TODO
|
3
|
+
# みしあげでおま
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'keystone'
|
7
|
+
require 'ipaddr'
|
8
|
+
require 'net/telnet'
|
9
|
+
require 'net/ssh'
|
10
|
+
require 'pp'
|
11
|
+
|
12
|
+
open("/tmp/command_broadcast.log.#{Time.now.usec}","w") do |f|
|
13
|
+
f.puts "test"
|
14
|
+
end
|
15
|
+
|
16
|
+
LOGINID = "someuser"
|
17
|
+
LOGINPASS = "somepassword"
|
18
|
+
|
19
|
+
INPUT_MESSAGE_CMD = "input command you broadcast:"
|
20
|
+
INPUT_MESSAGE_IP = %|input ipaddress you broadcast(ex"192.168.1.13","192.168.1.0/24"):|
|
21
|
+
|
22
|
+
# TODO lvm 絡みも入れるべきかも
|
23
|
+
# ホワイトリストにすべき?
|
24
|
+
CANCEL_CMDS = %w|rm mv cp iptables fdisk dd|
|
25
|
+
|
26
|
+
def ppp(message)
|
27
|
+
print message
|
28
|
+
STDOUT.flush
|
29
|
+
end
|
30
|
+
ppp INPUT_MESSAGE_IP
|
31
|
+
ipaddr = nil
|
32
|
+
STDIN.each_line do |line|
|
33
|
+
line.strip!
|
34
|
+
begin
|
35
|
+
ipaddr = IPAddr.new line
|
36
|
+
break
|
37
|
+
rescue
|
38
|
+
ppp INPUT_MESSAGE_IP
|
39
|
+
next
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
ppp INPUT_MESSAGE_CMD
|
44
|
+
cmd = nil
|
45
|
+
STDIN.each_line do |line|
|
46
|
+
line.strip!
|
47
|
+
if line.blank?
|
48
|
+
ppp INPUT_MESSAGE_CMD
|
49
|
+
next
|
50
|
+
end
|
51
|
+
cmd = line
|
52
|
+
break
|
53
|
+
end
|
54
|
+
|
55
|
+
CANCEL_CMDS.each do |cancel_cmd|
|
56
|
+
if cmd =~ /\A#{cancel_cmd}/
|
57
|
+
puts "we can not run this command!!"
|
58
|
+
exit
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
puts "!! command you want to execute is below !!"
|
63
|
+
puts "#{cmd}"
|
64
|
+
ppp "?? are you sure to execute this??(y/N):"
|
65
|
+
STDIN.each_line do |line|
|
66
|
+
line.chomp!
|
67
|
+
break if line.downcase == 'y'
|
68
|
+
puts "exit"
|
69
|
+
exit
|
70
|
+
end
|
71
|
+
|
72
|
+
alive_servers = []
|
73
|
+
ipaddr.to_a.each do |ip|
|
74
|
+
ping = "ping -c 1 -t 2 #{ip.to_s}"
|
75
|
+
ret = `#{ping}`
|
76
|
+
if ret =~ /100% packet loss/
|
77
|
+
puts "#{ip.to_s} does not exits"
|
78
|
+
else
|
79
|
+
# OK な場合
|
80
|
+
puts "#{ip.to_s} exits"
|
81
|
+
alive_servers << ip
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
results = []
|
86
|
+
|
87
|
+
alive_servers.each do |server|
|
88
|
+
ret = ""
|
89
|
+
begin
|
90
|
+
ip = server.to_s
|
91
|
+
pp ip
|
92
|
+
puts "++ telnet ++"
|
93
|
+
telnet = Net::Telnet.new("Host" => ip) {|c|} #print c}
|
94
|
+
telnet.login(LOGINID, LOGINPASS) {|c|} #print c}
|
95
|
+
telnet.cmd(cmd) {|c| ret = c}
|
96
|
+
STDOUT.flush # <- これがないとここまで処理が来てることがわかりにくい
|
97
|
+
# ログインセッションの終了
|
98
|
+
telnet.cmd("exit") {|c|} #print c}
|
99
|
+
telnet.close
|
100
|
+
telnet_ok = true
|
101
|
+
# rescue TimeoutError => e
|
102
|
+
rescue TimeoutError => e
|
103
|
+
puts e.message
|
104
|
+
rescue Errno::ECONNREFUSED => e
|
105
|
+
puts e.message
|
106
|
+
rescue Errno::ENETUNREACH => e
|
107
|
+
puts e.message
|
108
|
+
rescue Errno::EACCES => e
|
109
|
+
puts e.message
|
110
|
+
end
|
111
|
+
|
112
|
+
unless telnet_ok
|
113
|
+
begin
|
114
|
+
puts "++ ssh ++"
|
115
|
+
Net::SSH.start(ip, LOGINID, :password => LOGINPASS) do |ssh|
|
116
|
+
ret = (ssh.exec!(cmd))
|
117
|
+
end
|
118
|
+
rescue Exception => e
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
results << [ip,ret]
|
123
|
+
puts ret
|
124
|
+
sleep 1
|
125
|
+
end
|
126
|
+
|
127
|
+
pp results
|
128
|
+
|
129
|
+
open("/tmp/command_broadcast.log.#{Time.now.usec}","w") do |f|
|
130
|
+
f.puts results.inspect
|
131
|
+
end
|
132
|
+
|
133
|
+
__END__
|
134
|
+
find /etc/lognotify/ -name "lognotify*.conf" -type f -exec cat {} \;
|
135
|
+
|
136
|
+
|
137
|
+
|