Blame view

digger.py 4.23 KB
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
Imanol-Mikel Barba Sabariego authored
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
63
64
65
66
67
68
69
70
71
72
73
74
75
        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)

    exit(0)

def showContinueDialog(d,msg):
    ans = d.yesno(msg + "\n\nDo you want to continue execution without the module?")
    return ans == d.OK

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")
Imanol-Mikel Barba Sabariego authored
76
    if code == d.OK:
77
78
79
80
81
82
83
84
85
        tomb._MACHINE_NAME= value
        logger.logSystems.append(ConsoleLogger())
        logger.logSystems.append(FileLogger(tomb.getPath() + "log.txt"))
        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 = []
Imanol-Mikel Barba Sabariego authored
86
87
            if "all" in tags:
                for module in moduleList:
88
89
90
91
92
93
94
95
96
                    try:
                        mod = prepareModule(module[0])
                        runlist.append(mod)
                    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)
                        if(not showContinueDialog(d,msg)):
                            showFinishDialog(False)
Imanol-Mikel Barba Sabariego authored
97
98
            else:
                for tag in tags:
99
100
101
102
103
104
105
106
107
                    try:
                        mod = prepareModule(tag)
                        runlist.append(mod)
                    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)
                        if(not showContinueDialog(d,msg)):
                            showFinishDialog(False)
108
Imanol-Mikel Barba Sabariego authored
109
110
            sp.call('clear', shell=True)
            for module in runlist:
111
                logger.msgLog("Running " + module.name + "...", "digger", logger.TYPE_INFO)
Imanol-Mikel Barba Sabariego authored
112
113
114
                try:
                    module.run()
                except Exception as e:
115
116
                    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)
117
Imanol-Mikel Barba Sabariego authored
118
119
            showFinishDialog(True)
120
121