1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 __doc__="""
16 ZenDeleteHistory
17 """
18
19 from ZenScriptBase import ZenScriptBase
20
21
22 -class ZenDeleteHistory(ZenScriptBase):
23 """
24 Delete events from the history table
25 """
26
27 - def buildOptions(self):
28 """
29 Setup the command line options
30 """
31 self.parser.add_option('-n', '--numDays',
32 dest='numDays', default=None,
33 help='Number of days of history to keep')
34 self.parser.add_option('-d', '--device',
35 dest='device', default=None,
36 help='Devide id for which to delete events')
37 ZenScriptBase.buildOptions(self)
38
39
40 - def deleteHistory(self):
41 """
42 Delete historical events. If device is given then only delete
43 events for that device. If numDays is given then only delete
44 events that are older than that many days.
45 device and numDays are mutually exclusive. No real reason for this
46 other than there is no current need to use both in same call and I
47 don't want to test the combination.
48 """
49 if self.options.numDays:
50 try:
51 self.options.numDays = int(self.options.numDays)
52 except ValueError:
53 raise ValueError('numDays argument must be an integer')
54
55 self.connect()
56
57 if self.options.device:
58 statement = 'delete from history '
59 whereClause = 'where device = "%s"' % self.options.device
60 reason = 'Deleting events for device %s' % self.options.device
61 toLog = True
62 elif self.options.numDays > 0:
63 statement = ('delete h,j,d from history h '
64 'LEFT JOIN log j ON h.evid = j.evid '
65 'LEFT JOIN detail d ON h.evid = d.evid ')
66 whereClause = ('WHERE StateChange < DATE_SUB(NOW(), '
67 'INTERVAL %s day)' % self.options.numDays)
68 reason = ''
69 toLog = False
70 else:
71 return
72 print '%s%s' % (statement, whereClause)
73 self.dmd.ZenEventManager.updateEvents(statement, whereClause, reason,
74 toLog=toLog, table='history')
75
76 if __name__ == '__main__':
77 ZenDeleteHistory().deleteHistory()
78