keystone 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. data/.gitignore +3 -0
  2. data/README +3 -0
  3. data/Rakefile +26 -0
  4. data/VERSION +1 -0
  5. data/doc/classes/Dir.html +139 -0
  6. data/doc/classes/Dir.src/M000003.html +25 -0
  7. data/doc/classes/FlagSetMaker.html +138 -0
  8. data/doc/classes/FlagSetMaker.src/M000018.html +18 -0
  9. data/doc/classes/FlagSetMaker/FlagSet.html +186 -0
  10. data/doc/classes/FlagSetMaker/FlagSet.src/M000019.html +24 -0
  11. data/doc/classes/FlagSetMaker/FlagSet.src/M000020.html +26 -0
  12. data/doc/classes/FlagSetMaker/FlagSet.src/M000021.html +18 -0
  13. data/doc/classes/FlagSetMaker/FlagSet.src/M000022.html +18 -0
  14. data/doc/classes/FlagSetMaker/Flags.html +304 -0
  15. data/doc/classes/FlagSetMaker/Flags.src/M000023.html +19 -0
  16. data/doc/classes/FlagSetMaker/Flags.src/M000024.html +18 -0
  17. data/doc/classes/FlagSetMaker/Flags.src/M000025.html +18 -0
  18. data/doc/classes/FlagSetMaker/Flags.src/M000026.html +18 -0
  19. data/doc/classes/FlagSetMaker/Flags.src/M000027.html +18 -0
  20. data/doc/classes/FlagSetMaker/Flags.src/M000029.html +18 -0
  21. data/doc/classes/FlagSetMaker/Flags.src/M000030.html +18 -0
  22. data/doc/classes/FlagSetMaker/Flags.src/M000031.html +18 -0
  23. data/doc/classes/FlagSetMaker/Flags.src/M000032.html +18 -0
  24. data/doc/classes/FlagSetMaker/Flags.src/M000033.html +18 -0
  25. data/doc/classes/Hoge.html +113 -0
  26. data/doc/classes/Keystone.html +174 -0
  27. data/doc/classes/Keystone/Base.html +191 -0
  28. data/doc/classes/Keystone/Base.src/M000054.html +22 -0
  29. data/doc/classes/Keystone/Base.src/M000055.html +18 -0
  30. data/doc/classes/Keystone/Base.src/M000056.html +25 -0
  31. data/doc/classes/Keystone/Base.src/M000057.html +18 -0
  32. data/doc/classes/Keystone/Base.src/M000058.html +20 -0
  33. data/doc/classes/Keystone/Batch.html +115 -0
  34. data/doc/classes/Keystone/Batch/Base.html +208 -0
  35. data/doc/classes/Keystone/Batch/Base.src/M000052.html +54 -0
  36. data/doc/classes/Keystone/Batch/Base.src/M000053.html +30 -0
  37. data/doc/classes/Keystone/CoreExt.html +105 -0
  38. data/doc/classes/Keystone/Mail.html +115 -0
  39. data/doc/classes/Keystone/Mail/Send.html +171 -0
  40. data/doc/classes/Keystone/Mail/Send.src/M000034.html +18 -0
  41. data/doc/classes/Keystone/Mail/Send.src/M000035.html +42 -0
  42. data/doc/classes/Keystone/Mail/Send.src/M000036.html +18 -0
  43. data/doc/classes/Keystone/Os.html +184 -0
  44. data/doc/classes/Keystone/Os.src/M000037.html +18 -0
  45. data/doc/classes/Keystone/Os.src/M000038.html +27 -0
  46. data/doc/classes/Keystone/Os/AbstractOs.html +227 -0
  47. data/doc/classes/Keystone/Os/AbstractOs.src/M000046.html +17 -0
  48. data/doc/classes/Keystone/Os/AbstractOs.src/M000047.html +17 -0
  49. data/doc/classes/Keystone/Os/AbstractOs.src/M000048.html +17 -0
  50. data/doc/classes/Keystone/Os/AbstractOs.src/M000049.html +17 -0
  51. data/doc/classes/Keystone/Os/AbstractOs.src/M000050.html +17 -0
  52. data/doc/classes/Keystone/Os/AbstractOs.src/M000051.html +25 -0
  53. data/doc/classes/Keystone/Os/Centos.html +113 -0
  54. data/doc/classes/Keystone/Os/Darwin.html +139 -0
  55. data/doc/classes/Keystone/Os/Darwin.src/M000039.html +18 -0
  56. data/doc/classes/Keystone/Os/Linux.html +139 -0
  57. data/doc/classes/Keystone/Os/Linux.src/M000045.html +26 -0
  58. data/doc/classes/Keystone/Os/Osx.html +113 -0
  59. data/doc/classes/Keystone/Os/Unix.html +199 -0
  60. data/doc/classes/Keystone/Os/Unix.src/M000040.html +27 -0
  61. data/doc/classes/Keystone/Os/Unix.src/M000041.html +18 -0
  62. data/doc/classes/Keystone/Os/Unix.src/M000042.html +18 -0
  63. data/doc/classes/Keystone/Os/Unix.src/M000043.html +18 -0
  64. data/doc/classes/Keystone/Os/Unix.src/M000044.html +18 -0
  65. data/doc/classes/Keystone/Rails.html +105 -0
  66. data/doc/classes/Keystone/StringUtil.html +226 -0
  67. data/doc/classes/Keystone/StringUtil.src/M000059.html +43 -0
  68. data/doc/classes/Keystone/StringUtil.src/M000060.html +25 -0
  69. data/doc/classes/Keystone/StringUtil.src/M000061.html +24 -0
  70. data/doc/classes/Keystone/StringUtil.src/M000062.html +18 -0
  71. data/doc/classes/Keystone/StringUtil.src/M000063.html +21 -0
  72. data/doc/classes/Object.html +240 -0
  73. data/doc/classes/Object.src/M000012.html +18 -0
  74. data/doc/classes/Object.src/M000013.html +20 -0
  75. data/doc/classes/Object.src/M000014.html +18 -0
  76. data/doc/classes/Object.src/M000015.html +18 -0
  77. data/doc/classes/Object.src/M000016.html +18 -0
  78. data/doc/classes/Object.src/M000017.html +19 -0
  79. data/doc/classes/Tempfile.html +139 -0
  80. data/doc/classes/Tempfile.src/M000011.html +25 -0
  81. data/doc/classes/TestCoreExt.html +152 -0
  82. data/doc/classes/TestCoreExt.src/M000009.html +17 -0
  83. data/doc/classes/TestCoreExt.src/M000010.html +21 -0
  84. data/doc/classes/TestStringUtilBase.html +197 -0
  85. data/doc/classes/TestStringUtilBase.src/M000004.html +17 -0
  86. data/doc/classes/TestStringUtilBase.src/M000005.html +23 -0
  87. data/doc/classes/TestStringUtilBase.src/M000006.html +22 -0
  88. data/doc/classes/TestStringUtilBase.src/M000007.html +25 -0
  89. data/doc/classes/TestStringUtilBase.src/M000008.html +34 -0
  90. data/doc/classes/Uri.html +158 -0
  91. data/doc/classes/Uri.src/M000001.html +18 -0
  92. data/doc/classes/Uri.src/M000002.html +18 -0
  93. data/doc/created.rid +1 -0
  94. data/doc/files/example/batch_sample_rb.html +134 -0
  95. data/doc/files/example/os_rb.html +109 -0
  96. data/doc/files/example/string_util_rb.html +109 -0
  97. data/doc/files/lib/keystone/base_rb.html +101 -0
  98. data/doc/files/lib/keystone/batch/base_rb.html +108 -0
  99. data/doc/files/lib/keystone/batch_rb.html +101 -0
  100. data/doc/files/lib/keystone/core_ext/array_rb.html +101 -0
  101. data/doc/files/lib/keystone/core_ext/blank_rb.html +101 -0
  102. data/doc/files/lib/keystone/core_ext/dir_rb.html +101 -0
  103. data/doc/files/lib/keystone/core_ext/object_rb.html +101 -0
  104. data/doc/files/lib/keystone/core_ext/tempfile_rb.html +108 -0
  105. data/doc/files/lib/keystone/core_ext/uri_rb.html +101 -0
  106. data/doc/files/lib/keystone/core_ext_rb.html +113 -0
  107. data/doc/files/lib/keystone/mail/send_rb.html +115 -0
  108. data/doc/files/lib/keystone/mail_rb.html +101 -0
  109. data/doc/files/lib/keystone/os/abstract_os_rb.html +101 -0
  110. data/doc/files/lib/keystone/os/centos_rb.html +101 -0
  111. data/doc/files/lib/keystone/os/darwin_rb.html +101 -0
  112. data/doc/files/lib/keystone/os/linux_rb.html +101 -0
  113. data/doc/files/lib/keystone/os/osx_rb.html +101 -0
  114. data/doc/files/lib/keystone/os/unix_rb.html +101 -0
  115. data/doc/files/lib/keystone/os_rb.html +108 -0
  116. data/doc/files/lib/keystone/string_util_rb.html +101 -0
  117. data/doc/files/lib/keystone_rb.html +116 -0
  118. data/doc/files/test/test_core_ext_rb.html +110 -0
  119. data/doc/files/test/test_string_util_rb.html +112 -0
  120. data/doc/files/vendor/flag_set_maker_rb.html +108 -0
  121. data/doc/files/vendor/moji_rb.html +118 -0
  122. data/doc/fr_class_index.html +52 -0
  123. data/doc/fr_file_index.html +54 -0
  124. data/doc/fr_method_index.html +89 -0
  125. data/doc/index.html +24 -0
  126. data/doc/rdoc-style.css +208 -0
  127. data/example/batch_sample.rb +24 -0
  128. data/example/os.rb +4 -0
  129. data/example/sendmail.rb +21 -0
  130. data/example/string_util.rb +15 -0
  131. data/keystone.gemspec +209 -0
  132. data/lib/keystone.rb +25 -0
  133. data/lib/keystone/base.rb +75 -0
  134. data/lib/keystone/batch.rb +5 -0
  135. data/lib/keystone/batch/base.rb +217 -0
  136. data/lib/keystone/core_ext.rb +18 -0
  137. data/lib/keystone/core_ext/array.rb +29 -0
  138. data/lib/keystone/core_ext/blank.rb +44 -0
  139. data/lib/keystone/core_ext/dir.rb +16 -0
  140. data/lib/keystone/core_ext/ipaddr.rb +18 -0
  141. data/lib/keystone/core_ext/object.rb +34 -0
  142. data/lib/keystone/core_ext/tempfile.rb +14 -0
  143. data/lib/keystone/core_ext/uri.rb +14 -0
  144. data/lib/keystone/mail.rb +8 -0
  145. data/lib/keystone/mail/address.rb +92 -0
  146. data/lib/keystone/mail/content_type.rb +60 -0
  147. data/lib/keystone/mail/message.rb +102 -0
  148. data/lib/keystone/mail/message_factory.rb +18 -0
  149. data/lib/keystone/mail/message_iso2022jp.rb +126 -0
  150. data/lib/keystone/mail/message_sjis.rb +23 -0
  151. data/lib/keystone/mail/receive.rb +320 -0
  152. data/lib/keystone/mail/send.rb +83 -0
  153. data/lib/keystone/os.rb +26 -0
  154. data/lib/keystone/os/abstract_os.rb +36 -0
  155. data/lib/keystone/os/centos.rb +6 -0
  156. data/lib/keystone/os/darwin.rb +9 -0
  157. data/lib/keystone/os/linux.rb +15 -0
  158. data/lib/keystone/os/osx.rb +18 -0
  159. data/lib/keystone/os/unix.rb +43 -0
  160. data/lib/keystone/string_util.rb +85 -0
  161. data/test/test_core_ext.rb +15 -0
  162. data/test/test_string_util.rb +60 -0
  163. data/util/README +1 -0
  164. data/util/bin/command_broadcast.rb +137 -0
  165. data/util/bin/disk_size_check.rb +54 -0
  166. data/util/bin/notice +93 -0
  167. data/util/bin/ve2tar.rb +80 -0
  168. data/vendor/flag_set_maker.rb +121 -0
  169. data/vendor/moji.rb +502 -0
  170. 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
+
@@ -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,6 @@
1
+ module Keystone
2
+ module Os
3
+ class Centos < Linux
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ module Keystone
2
+ module Os
3
+ class Darwin < Unix
4
+ def process_list
5
+ `/bin/ps -aux`.chomp
6
+ end
7
+ end
8
+ end
9
+ 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
+