summaryrefslogtreecommitdiffstats
path: root/src/retrace/abrt-retrace-cleanup
blob: cbe1b81840c138575554dbd818edaad662415bcc (plain)
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
#!/usr/bin/python

import os
import sys
import time
from retrace import *

if __name__ == "__main__":
    now = int(time.time())

    logfile = "%s/cleanup.log" % CONFIG["LogDir"]

    try:
        log = open(logfile, "a")
    except IOError, ex:
        print "Error opening log file: %s" % ex
        sys.exit(1)

    log.write(time.strftime("[%Y-%m-%d %H:%M:%S] Running cleanup\n"))

    # kill tasks running > 1 hour
    ps_output = run_ps()
    running_tasks = get_running_tasks(ps_output)
    for pid, taskid, runtime in running_tasks:
        # ToDo: 5 = mm:ss, >5 = hh:mm:ss
        if len(runtime) > 5:
            log.write("Killing task %d running for %s\n" % (taskid, runtime))
            kill_process_and_childs(pid, ps_output)

    # kill orphaned tasks
    running_tasks = get_running_tasks()
    running_ids = []
    for pid, taskid, runtime in running_tasks:
        running_ids.append(taskid)

    for task in get_active_tasks():
        if not task in running_ids:
            log.write("Cleaning up orphaned task %d\n" % task)
            cleanup_task(task)

    # clean up old tasks
    try:
        files = os.listdir(CONFIG["SaveDir"])
    except OSError, ex:
        files = []
        log.write("Error listing task directory: %s\n" % ex)

    for filename in files:
        try:
            taskid = int(filename)
        except:
            continue

        dirpath = "%s/%s" % (CONFIG["SaveDir"], filename)
        if os.path.isdir(dirpath) and \
           (now - os.path.getatime(dirpath)) / 3600 >= CONFIG["DeleteTaskAfter"]:
            log.write("Deleting old task %s\n" % filename)
            call(["rm", "-rf", dirpath])

    log.close()