|
1
2
|
#! /usr/bin/env python3
|
|
3
4
5
6
7
8
|
import sys
sys.path.append('modules')
sys.path.append('vars')
sys.path.append('logger')
|
|
9
10
11
12
13
|
import locale
from dialog import Dialog
import glob
import os
import subprocess as sp
|
|
14
|
import tomb
|
|
15
|
import traceback
|
|
16
17
18
|
import logger
from consolelogger import ConsoleLogger
from filelogger import FileLogger
|
|
19
20
21
22
23
24
25
26
27
28
29
|
def getModules():
choiceList = []
modules = []
for filename in glob.glob('./modules/*.py'):
modules.append(os.path.splitext(os.path.basename(filename))[0])
modules.remove('__init__')
for modname in modules:
try:
module = __import__(modname)
|
|
30
|
instance = module.getInstance()
|
|
31
32
33
34
35
36
37
38
39
|
choiceList.append((instance.name,instance.description,False))
del instance
del module
sys.modules.pop(modname)
except Exception as e:
print("Exception raised while importing " + modname)
return choiceList
def prepareModule(moduleName):
|
|
40
41
42
43
44
|
try:
module = __import__(moduleName).getInstance()
module.getVars()
return module
except Exception as e:
|
|
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
raise
def showFinishDialog(allSuccessful):
msg = ""
if(allSuccessful):
msg = "All modules finished execution"
else:
msg = "Some or all modules failed execution. Please check the logs."
code, tag = d.menu(msg, choices=[("Poweroff", "Shutdown the computer"),
("Reboot", "Reboot the computer"),
("Restart", "Run Gravedigger again")])
if (code == d.OK):
if tag == "Poweroff":
sp.call("poweroff", shell=True)
elif tag == "Reboot":
sp.call("reboot", shell=True)
|
|
63
|
logger.msgLog("Finished excavation of tomb: " + tomb.getPath(),"digger",logger.TYPE_INFO)
|
|
64
65
66
|
exit(0)
def showContinueDialog(d,msg):
|
|
67
68
69
70
71
72
|
code, tag = d.menu(msg + "\n\nDo you want to retry module configuration or continue execution without the module?",
choices=[("retry", "Retry configuration"),
("continue", "Continue without module")])
if code != d.OK:
return "abort"
return tag
|
|
73
74
75
76
77
78
79
80
|
if __name__ == "__main__":
locale.setlocale(locale.LC_ALL, '')
d = Dialog(dialog="dialog",autowidgetsize=True)
d.set_background_title("Gravedigger")
moduleList = getModules()
code,value = d.inputbox("Input computer's name")
|
|
81
|
if code == d.OK:
|
|
82
83
84
|
tomb._MACHINE_NAME= value
logger.logSystems.append(ConsoleLogger())
logger.logSystems.append(FileLogger(tomb.getPath() + "log.txt"))
|
|
85
|
logger.msgLog("Beginning excavation of tomb: " + tomb.getPath(),"digger",logger.TYPE_INFO)
|
|
86
87
88
89
90
91
|
d.set_background_title("Gravedigger - " + value)
code, tags = d.checklist("Select modules to execute",
choices=moduleList + [("all","Execute all modules",False)],
title="Module selection")
if code == d.OK:
runlist = []
|
|
92
|
if "all" in tags:
|
|
93
|
logger.msgLog("Selected modules: " + repr(moduleList), "digger", logger.TYPE_INFO)
|
|
94
|
for module in moduleList:
|
|
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
while True:
try:
mod = prepareModule(module[0])
runlist.append(mod)
break
except Exception as e:
msg = "Exception raised while preparing module \"" + module[0] + "\": " + str(e)
logger.msgLog(msg, module[0], logger.TYPE_ERROR)
#logger.msgLog(traceback.format_exc(), module[0], logger.TYPE_ERROR)
ans = showContinueDialog(d,msg)
if ans == "abort":
showFinishDialog(False)
elif ans == "continue":
logger.msgLog("Skipping module " + module, "digger", logger.TYPE_INFO)
break
|
|
110
|
else:
|
|
111
|
logger.msgLog("Selected modules: " + repr(tags), "digger", logger.TYPE_INFO)
|
|
112
|
for tag in tags:
|
|
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
while True:
try:
mod = prepareModule(tag)
runlist.append(mod)
break
except Exception as e:
msg = "Exception raised while preparing module \"" + tag + "\": " + str(e)
logger.msgLog(msg,tag,logger.TYPE_ERROR)
#logger.msgLog(traceback.format_exc(), tag logger.TYPE_ERROR)
ans = showContinueDialog(d, msg)
if ans == "abort":
showFinishDialog(False)
elif ans == "continue":
logger.msgLog("Skipping module " + tag, "digger", logger.TYPE_INFO)
break
|
|
128
|
|
|
129
130
|
sp.call('clear', shell=True)
for module in runlist:
|
|
131
|
logger.msgLog("Running " + module.name + "...", "digger", logger.TYPE_INFO)
|
|
132
133
134
|
try:
module.run()
except Exception as e:
|
|
135
136
|
logger.msgLog("Exception raised while running \"" + module.name + "\": " + str(e), module.name, logger.TYPE_ERROR)
#logger.msgLog(traceback.format_exc(), module.name, logger.TYPE_ERROR)
|
|
137
|
|
|
138
|
|
|
139
|
showFinishDialog(True)
|