Adding paranoia protection
[multilist] / src / sqldialog.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 """
5 This file is part of Multilist.
6
7 Multilist is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 Multilist is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Multilist.  If not, see <http://www.gnu.org/licenses/>.
19
20 Copyright (C) 2008 Christoph Würstle
21 """
22
23 from __future__ import with_statement
24
25 import time
26 import logging
27
28 import gtk
29
30 import gtk_toolbox
31
32
33 try:
34         _
35 except NameError:
36         _ = lambda x: x
37
38
39 _moduleLogger = logging.getLogger(__name__)
40
41
42 class SqlDialog(gtk.Dialog):
43
44         def __init__(self, db):
45                 self.db = db
46
47                 _moduleLogger.info("sqldialog, init")
48
49                 gtk.Dialog.__init__(
50                         self,
51                         _("SQL History (the past two days):"),
52                         None,
53                         gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
54                         (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)
55                 )
56
57                 self.add_button(_("Export"), gtk.RESPONSE_OK)
58                 self.set_position(gtk.WIN_POS_CENTER)
59
60                 self.liststore = gtk.ListStore(str, str, str)
61
62                 # create the TreeView using liststore
63                 self.treeview = gtk.TreeView(self.liststore)
64
65                 # create a CellRenderers to render the data
66                 self.cell1 = gtk.CellRendererText()
67                 self.cell2 = gtk.CellRendererText()
68                 self.cell3 = gtk.CellRendererText()
69                 #self.cell1.set_property('markup', 1)
70
71                 # create the TreeViewColumns to display the data
72                 self.tvcolumn1 = gtk.TreeViewColumn(_('Date'))
73                 self.tvcolumn2 = gtk.TreeViewColumn(_('SQL'))
74                 self.tvcolumn3 = gtk.TreeViewColumn(_('Parameter'))
75
76                 # add columns to treeview
77                 self.treeview.append_column(self.tvcolumn1)
78                 self.treeview.append_column(self.tvcolumn2)
79                 self.treeview.append_column(self.tvcolumn3)
80
81                 self.tvcolumn1.pack_start(self.cell1, True)
82                 self.tvcolumn2.pack_start(self.cell2, True)
83                 self.tvcolumn3.pack_start(self.cell3, True)
84
85                 self.tvcolumn1.set_attributes(self.cell1, text = 0) #Spalten setzten hier!!!!
86                 self.tvcolumn2.set_attributes(self.cell2, text = 1)
87                 self.tvcolumn3.set_attributes(self.cell3, text = 2)
88
89                 # make treeview searchable
90                 #self.treeview.set_search_column(0)
91                 #self.tvcolumn.set_sort_column_id(0)
92
93                 # Allow NOT drag and drop reordering of rows
94                 self.treeview.set_reorderable(False)
95
96                 scrolled_window = gtk.ScrolledWindow()
97                 scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
98                 scrolled_window.add(self.treeview)
99                 #self.pack_start(scrolled_window, expand = True, fill = True, padding = 0)
100
101                 self.vbox.pack_start(scrolled_window, True, True, 0)
102
103                 self.vbox.show_all()
104
105                 msgstring = ""
106                 sql = "SELECT pcdatum, sql, param FROM logtable WHERE pcdatum>? ORDER BY pcdatum DESC"
107                 rows = db.ladeSQL(sql, (time.time()-3*24*3600, ))
108                 for i, row in enumerate(rows):
109                         if (i>50):
110                                 break
111
112                         pcdatum, sql, param = row
113                         datum = str(time.strftime("%d.%m.%y %H:%M:%S ", (time.localtime(pcdatum))))
114                         if 100 < len(param):
115                                 param = param[:20]+_(" (Reduced parameter) ")+param[20:]
116                         self.liststore.append([datum, sql, param])
117
118                 self.set_size_request(500, 400)
119
120         def exportSQL(self, filename):
121                 with open(filename, 'w') as f:
122                         msgstring = ""
123                         sql = "SELECT pcdatum, sql, param FROM logtable WHERE pcdatum>? ORDER BY pcdatum DESC"
124                         rows = self.db.ladeSQL(sql, (time.time()-2*24*3600, ))
125                         for row in rows:
126                                 pcdatum, sql, param = row
127                                 datum = str(time.strftime("%d.%m.%y %H:%M:%S ", (time.localtime(pcdatum))))
128                                 f.write( datum +"\t" + sql + "\t\t" + param+ "\n")