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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#!/usr/bin/python
import sys
import getpass
import log_picker
import log_picker.argparser as argparser
from log_picker.argparser import ArgError
import log_picker.archiving as archiving
from log_picker.archiving import NoFilesArchivationError
import log_picker.sending as sending
from log_picker.sending import SenderError
import log_picker.logmining as logmining
class ApplicationScope(object):
"""Application configuration class."""
def __init__(self, parser_options):
self.bug_comment = parser_options.ensure_value('bug_comment', None)
self.bug_id = parser_options.ensure_value('bug_id', None)
self.login = parser_options.ensure_value('login', None)
self.password = None
self.smtp_server = parser_options.ensure_value('smtp_addr', None)
self.from_addr = parser_options.ensure_value('from_addr', None)
self.to_addr = []
if parser_options.ensure_value('to_addr', None):
self.to_addr = [parser_options.to_addr]
self.host = parser_options.ensure_value('host', None)
self.path = parser_options.ensure_value('path', None)
# sender
self.sender = parser_options.ensure_value('sender', None)
# miners
self.miners = logmining.ALL_MINERS
class Injector(object):
"""Main factory class."""
@staticmethod
def inject_main_helper(scope):
logpicker = Injector.inject_logpicker(scope)
return MainHelper(logpicker)
@staticmethod
def inject_logpicker(scope):
sender = Injector.inject_sender(scope)
archivator = Injector.inject_archivator(scope)
return log_picker.LogPicker(archive_obj=archivator, sender_obj=sender,
miners=scope.miners)
@staticmethod
def inject_sender(scope):
if scope.sender == sending.RHBZ:
sender = sending.RedHatBugzilla()
sender.set_bug(scope.bug_id)
sender.set_comment(scope.bug_comment)
sender.connect_and_login(scope.login, scope.password)
return sender
if scope.sender == sending.EMAIL:
sender = sending.EmailSender(scope.from_addr, scope.to_addr,
scope.smtp_server)
sender.set_comment(scope.bug_comment)
return sender
if scope.sender == sending.STRATA:
sender = sending.StrataSender()
sender.set_login(scope.login, scope.password)
sender.set_case_number(scope.bug_id)
return sender
if scope.sender == sending.SCP:
sender = sending.ScpSender()
sender.set_login(scope.login)
sender.set_path(scope.path)
sender.set_host(scope.host)
return sender
if scope.sender == sending.FTP:
sender = sending.FtpSender()
sender.set_login(scope.login, scope.password)
sender.set_host(scope.host)
return sender
if scope.sender == sending.LOCAL:
sender = sending.LocalSender()
sender.set_path(scope.path)
return sender
raise Exception("Unknown sender type.")
@staticmethod
def inject_archivator(scope):
return archiving.Bzip2Archive()
class MainHelper(object):
"""Main application class."""
def __init__(self, logpicker):
self.picker = logpicker
def run(self):
self.picker.getlogs()
self.picker.create_archive()
self.picker.send()
print "Successfully completed!"
if __name__ == "__main__":
# Argument parsing
try:
options = argparser.ArgParser().parse()
except (ArgError) as e:
sys.stderr.write("Argument error: %s\n" % e)
sys.exit(1)
# Application scope
scope = ApplicationScope(options)
if scope.sender == sending.RHBZ or scope.sender == sending.STRATA or \
(scope.sender == sending.FTP and scope.login):
scope.password = getpass.getpass("Password: ")
# Application
try:
app = Injector.inject_main_helper(scope)
app.run()
except (NoFilesArchivationError):
sys.stderr.write("Nothing to report.\n")
sys.exit(0)
except (SenderError) as e:
sys.stderr.write("Error: %s\n" % e)
sys.exit(1)
|