kanamei-keystone 0.0.19 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/disk_size_check.rb +52 -0
- data/lib/keystone.rb +1 -1
- data/lib/keystone/mail/message.rb +84 -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/test/test_core_ext.rb +15 -0
- metadata +7 -1
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'keystone'
|
5
|
+
require 'pit'
|
6
|
+
require 'pp'
|
7
|
+
|
8
|
+
include Keystone::Batch::Base
|
9
|
+
|
10
|
+
config = Pit.get("disk_size_check")
|
11
|
+
|
12
|
+
SMTP_SERVER = config["smtp"]
|
13
|
+
MAIL_TO = [config["mailto"]]
|
14
|
+
ERROR_MAIL_TO = MAIL_TO
|
15
|
+
MAIL_FROM = config["mailfrom"]
|
16
|
+
|
17
|
+
@os = Keystone::Os.get()
|
18
|
+
pp @os
|
19
|
+
|
20
|
+
def send_alert_mail(additional_body = "")
|
21
|
+
title = 'disk size alert'
|
22
|
+
body = <<-BODY
|
23
|
+
disk size alert at #{@os.hostname}(#{@os.ip_address.join(" , ")})
|
24
|
+
#{@df_result}
|
25
|
+
#{additional_body}
|
26
|
+
BODY
|
27
|
+
|
28
|
+
Keystone::Mail::Send.send(
|
29
|
+
MAIL_FROM,
|
30
|
+
MAIL_TO,
|
31
|
+
title,
|
32
|
+
body,
|
33
|
+
{:retry_cnt=>3}
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
execute() do
|
38
|
+
info "start batch"
|
39
|
+
limit = 80
|
40
|
+
limit = Integer(ARGV[0]) if ARGV.size > 0
|
41
|
+
|
42
|
+
@df_result = @os.disk
|
43
|
+
@df_result.gsub(/(\d+)%/){|s|
|
44
|
+
if $1.to_i >= limit
|
45
|
+
warn 'log size alert'
|
46
|
+
send_alert_mail
|
47
|
+
break
|
48
|
+
end
|
49
|
+
}
|
50
|
+
info "finish batch"
|
51
|
+
end
|
52
|
+
|
data/lib/keystone.rb
CHANGED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'kconv'
|
2
|
+
|
3
|
+
module Keystone
|
4
|
+
module Mail
|
5
|
+
class Message
|
6
|
+
attr_accessor :subject, :body, :mail_to, :mail_from, :mail_from_text
|
7
|
+
|
8
|
+
#
|
9
|
+
# 普通なことをしたいならTMailを使いましょう
|
10
|
+
#
|
11
|
+
def initialize(opt={})
|
12
|
+
@subject, @body, @mail_from_text = "", "", nil
|
13
|
+
set_option(opt)
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_src
|
17
|
+
header = ""
|
18
|
+
header += create_mailfrom_header
|
19
|
+
header += create_mailto_header
|
20
|
+
header += create_subject_header
|
21
|
+
header += "\n"
|
22
|
+
header += encode_body
|
23
|
+
return header
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_option(opt)
|
27
|
+
@subject = opt[:subject] if opt.key?(:subject)
|
28
|
+
@body = opt[:body] if opt.key?(:body)
|
29
|
+
@body = opt[:mail_to] if opt.key?(:mail_to)
|
30
|
+
@body = opt[:mail_from] if opt.key?(:mail_from)
|
31
|
+
@mail_from_text = opt[:mail_from_text] if opt.key?(:mail_from_text)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def create_mailfrom_header
|
37
|
+
if @mail_from_text.blank?
|
38
|
+
return "From: #{@mail_from}\n"
|
39
|
+
else
|
40
|
+
return to_mail_header("From", @mail_from_text).chomp + "<#{@mail_from}>\n"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def create_subject_header
|
45
|
+
to_mail_header("Subject",@subject)
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_mailto_header
|
49
|
+
if @mail_to.kind_of?(Array)
|
50
|
+
return "To: #{@mail_to.join(',')}\n"
|
51
|
+
else
|
52
|
+
return "To: #{@mail_to.to_s}\n"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def encode_mime
|
57
|
+
raise "mime_encode must be implemented!!"
|
58
|
+
end
|
59
|
+
|
60
|
+
def encode_body
|
61
|
+
raise "encoded_body must be implemented!!"
|
62
|
+
end
|
63
|
+
|
64
|
+
def mime_header_string
|
65
|
+
raise "mime_header_string must be implemented!!"
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def to_mail_header(header_name, plain_text)
|
71
|
+
ret = ""
|
72
|
+
str = plain_text.clone
|
73
|
+
str.gsub!(/(\r|\n)/,"")
|
74
|
+
str.split(//).split_by(10).each do |ar|
|
75
|
+
st = encode_mime(ar.join(''))
|
76
|
+
st = st.split(//,1).pack('m')
|
77
|
+
st = st.chomp
|
78
|
+
ret += " #{mime_header_string}#{st}?=\n"
|
79
|
+
end
|
80
|
+
return "#{header_name}:"+ret
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Keystone
|
2
|
+
module Mail
|
3
|
+
class MessageFactory
|
4
|
+
def self.create(opt)
|
5
|
+
message = MessageIso2022jp.new(opt)
|
6
|
+
if opt.key?(:encoding)
|
7
|
+
case opt[:encoding]
|
8
|
+
when :sjis
|
9
|
+
message = MessageSjis.new(opt)
|
10
|
+
else
|
11
|
+
raise "encoding '#{opt[:encoding]}' is not supported"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
return message
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'kconv'
|
2
|
+
|
3
|
+
module Keystone
|
4
|
+
module Mail
|
5
|
+
#
|
6
|
+
# encoding 未実装
|
7
|
+
#
|
8
|
+
#
|
9
|
+
class MessageIso2022jp < Keystone::Mail::Message
|
10
|
+
def encode_mime(st)
|
11
|
+
Kconv.tojis(st)
|
12
|
+
end
|
13
|
+
|
14
|
+
def mime_header_string
|
15
|
+
"=?ISO-2022-JP?B?"
|
16
|
+
end
|
17
|
+
|
18
|
+
def encode_body
|
19
|
+
Kconv.tojis(@body)
|
20
|
+
end
|
21
|
+
|
22
|
+
# #
|
23
|
+
# # 普通なことをしたいならTMailを使いましょう
|
24
|
+
# # class Send
|
25
|
+
# def initialize(opt={})
|
26
|
+
# @smtp_addr, @smtp_port = "127.0.0.1", 25
|
27
|
+
# @subject, @mail_from_text = "" ,nil
|
28
|
+
# @retry_cnt, @encoding = 0, :iso2022jp
|
29
|
+
# set_option(opt)
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# #
|
33
|
+
# # from could be String or Array
|
34
|
+
# # opt
|
35
|
+
# # :smtp_addr
|
36
|
+
# # :smtp_port
|
37
|
+
# # :retry
|
38
|
+
# # :mail_from_text
|
39
|
+
# # :encoding
|
40
|
+
# #
|
41
|
+
# def self.send(from, to, subject, body, opt={})
|
42
|
+
# queue = self.new(opt)
|
43
|
+
# queue.mail_to = to
|
44
|
+
# queue.mail_from = from
|
45
|
+
# queue.subject = subject
|
46
|
+
# queue.body = body
|
47
|
+
# queue.send
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# def send
|
51
|
+
# raise "mail_to must not be blank!" if @mail_to.blank?
|
52
|
+
# raise "mail_from must not be blank!" if @mail_from.blank?
|
53
|
+
# header = ""
|
54
|
+
# header += create_mailfrom_header(@mail_from,@mail_from_text)
|
55
|
+
# header += create_mailto_header(@mail_to)
|
56
|
+
# header += create_subject_header(@subject)
|
57
|
+
#
|
58
|
+
# case @encoding
|
59
|
+
# when :iso2022jp
|
60
|
+
# body_encoded = Kconv.tojis(@body)
|
61
|
+
# else
|
62
|
+
# raise "encoding #{encoding.to_s} can not use"
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
# src = header + "\n" + body_encoded
|
66
|
+
# debug src
|
67
|
+
# try_cnt = 0
|
68
|
+
# begin
|
69
|
+
# m = Net::SMTPSession.new(smtp_addr, smtp_port)
|
70
|
+
# m.start()
|
71
|
+
# m.sendmail(src ,@mail_from ,@mail_to)
|
72
|
+
# m.finish
|
73
|
+
# rescue => e
|
74
|
+
# debug "try_cnt:#{try_cnt}"
|
75
|
+
# try_cnt += 1
|
76
|
+
# sleep 1
|
77
|
+
# retry if @retry_cnt >= try_cnt
|
78
|
+
# raise e
|
79
|
+
# end
|
80
|
+
# end
|
81
|
+
#
|
82
|
+
# def set_option(opt)
|
83
|
+
# @smtp_addr = opt[:smtp_addr] if opt.key?(:smtp_addr)
|
84
|
+
# @smtp_port = opt[:smtp_port] if opt.key?(:smtp_port)
|
85
|
+
# @retry_cnt = Integer(opt[:retry_cnt]) if opt.key?(:retry_cnt)
|
86
|
+
# @mail_from_text = opt[:mail_from_text] if opt.key?(:mail_from_text)
|
87
|
+
# @encoding = opt[:encoding] if opt.key?(:encoding)
|
88
|
+
# end
|
89
|
+
#
|
90
|
+
# private
|
91
|
+
#
|
92
|
+
# def to_mail_header(header_name, plain_text)
|
93
|
+
# ret = ""
|
94
|
+
# str = plain_text.clone
|
95
|
+
# str.gsub!(/(\r|\n)/,"")
|
96
|
+
# str.split(//).split_by(10).each do |ar|
|
97
|
+
# st = ar.join('')
|
98
|
+
# st = Kconv.tojis(st)
|
99
|
+
# st = st.split(//,1).pack('m'); st = st.chomp
|
100
|
+
# ret += " =?ISO-2022-JP?B?#{st}?=\n"
|
101
|
+
# end
|
102
|
+
# return "#{header_name}:"+ret
|
103
|
+
# end
|
104
|
+
#
|
105
|
+
# def create_mailfrom_header(from, from_text)
|
106
|
+
# if from_text.blank?
|
107
|
+
# return "From: #{from}\n"
|
108
|
+
# else
|
109
|
+
# return to_mail_header("From", from_text).chomp + "<#{from}>\n"
|
110
|
+
# end
|
111
|
+
# end
|
112
|
+
#
|
113
|
+
# def create_subject_header(subject)
|
114
|
+
# to_mail_header("Subject",subject)
|
115
|
+
# end
|
116
|
+
#
|
117
|
+
# def create_mailto_header(to)
|
118
|
+
# if to.class.to_s == 'Array'
|
119
|
+
# return "To: #{to.join(',')}\n"
|
120
|
+
# else
|
121
|
+
# return "To: #{to.to_s}\n"
|
122
|
+
# end
|
123
|
+
# end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'kconv'
|
2
|
+
|
3
|
+
module Keystone
|
4
|
+
module Mail
|
5
|
+
#
|
6
|
+
# encoding 未実装
|
7
|
+
#
|
8
|
+
#
|
9
|
+
class MessageSjis < Keystone::Mail::Message
|
10
|
+
def encode_mime(st)
|
11
|
+
Kconv.tosjis(st)
|
12
|
+
end
|
13
|
+
|
14
|
+
def mime_header_string
|
15
|
+
"=?ShiftJIS?B?"
|
16
|
+
end
|
17
|
+
|
18
|
+
def encode_body
|
19
|
+
Kconv.tosjis(@body)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
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
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kanamei-keystone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kanamei
|
@@ -22,9 +22,11 @@ extensions: []
|
|
22
22
|
extra_rdoc_files: []
|
23
23
|
|
24
24
|
files:
|
25
|
+
- bin/disk_size_check.rb
|
25
26
|
- example/batch_sample.rb
|
26
27
|
- example/os.rb
|
27
28
|
- example/string_util.rb
|
29
|
+
- test/test_core_ext.rb
|
28
30
|
- test/test_string_util.rb
|
29
31
|
- lib/keystone
|
30
32
|
- lib/keystone/base.rb
|
@@ -40,6 +42,10 @@ files:
|
|
40
42
|
- lib/keystone/core_ext/uri.rb
|
41
43
|
- lib/keystone/core_ext.rb
|
42
44
|
- lib/keystone/mail
|
45
|
+
- lib/keystone/mail/message.rb
|
46
|
+
- lib/keystone/mail/message_factory.rb
|
47
|
+
- lib/keystone/mail/message_iso2022jp.rb
|
48
|
+
- lib/keystone/mail/message_sjis.rb
|
43
49
|
- lib/keystone/mail/send.rb
|
44
50
|
- lib/keystone/mail.rb
|
45
51
|
- lib/keystone/os
|