]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/qt-console/status/clientstat.cpp
This is the application of a patch from Ricardo. Includes a great qty of translation...
[bacula/bacula] / bacula / src / qt-console / status / clientstat.cpp
1 /*
2    Bacula® - The Network Backup Solution
3
4    Copyright (C) 2007-2008 Free Software Foundation Europe e.V.
5
6    The main author of Bacula is Kern Sibbald, with contributions from
7    many others, a complete list can be found in the file AUTHORS.
8    This program is Free Software; you can redistribute it and/or
9    modify it under the terms of version two of the GNU General Public
10    License as published by the Free Software Foundation and included
11    in the file LICENSE.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.
22
23    Bacula® is a registered trademark of John Walker.
24    The licensor of Bacula is the Free Software Foundation Europe
25    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
26    Switzerland, email:ftf@fsfeurope.org.
27 */
28 /*
29  *   Version $Id: clientstat.cpp 5880 2007-11-09 01:20:40Z bartleyd2 $
30  *
31  *   Dirk Bartley, March 2007
32  */
33  
34 #include <QAbstractEventDispatcher>
35 #include <QTableWidgetItem>
36 #include "bat.h"
37 #include "clientstat.h"
38
39 /*
40  * Constructor for the class
41  */
42 ClientStat::ClientStat(QString &client, QTreeWidgetItem *parentTreeWidgetItem)
43 {
44    m_client = client;
45    setupUi(this);
46    m_name = tr("Client Status %1").arg(m_client);
47    m_closeable = true;
48    pgInitialize(parentTreeWidgetItem);
49    QTreeWidgetItem* thisitem = mainWin->getFromHash(this);
50    thisitem->setIcon(0,QIcon(QString::fromUtf8(":images/status.png")));
51    m_cursor = new QTextCursor(textEditHeader->document());
52
53    readSettings();
54    dockPage();
55    m_timer = new QTimer(this);
56    QWidget::connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTriggered()));
57    m_timer->start(mainWin->m_refreshStatusDirInterval*1000);
58
59    createConnections();
60    setCurrent();
61 }
62
63 void ClientStat::getFont()
64 {
65    QFont font = textEditHeader->font();
66
67    QString dirname;
68    m_console->getDirResName(dirname);
69    QSettings settings(dirname, "bat");
70    settings.beginGroup("Console");
71    font.setFamily(settings.value("consoleFont", "Courier").value<QString>());
72    font.setPointSize(settings.value("consolePointSize", 10).toInt());
73    font.setFixedPitch(settings.value("consoleFixedPitch", true).toBool());
74    settings.endGroup();
75    textEditHeader->setFont(font);
76 }
77
78 /*
79  * Write the m_splitter settings in the destructor
80  */
81 ClientStat::~ClientStat()
82 {
83    writeSettings();
84 }
85
86 /*
87  * Populate all tables and header widgets
88  */
89 void ClientStat::populateAll()
90 {
91    if (!m_console->preventInUseConnect())
92        return;
93    populateHeader();
94    populateTerminated();
95    populateRunning();
96 }
97
98 /*
99  *  Timer is triggered, see if is current and repopulate.
100  */
101 void ClientStat::timerTriggered()
102 {
103    bool iscurrent = mainWin->stackedWidget->currentIndex() == mainWin->stackedWidget->indexOf(this);
104    if (((isDocked() && iscurrent) || (!isDocked())) && mainWin->m_refreshStatusDir) {
105       if (m_console->is_ready())
106          populateAll();
107    }
108 }
109
110 /*
111  * Populate header text widget
112  */
113 void ClientStat::populateHeader()
114 {
115    QString command = QString(".status client=\"" + m_client + "\" header");
116    if (mainWin->m_commandDebug)
117       Pmsg1(000, "sending command : %s\n",command.toUtf8().data());
118    QStringList results;
119    textEditHeader->clear();
120
121    if (m_console->dir_cmd(command, results)) {
122       foreach (QString line, results) {
123          line += "\n";
124          textEditHeader->insertPlainText(line);
125       }
126    }
127 }
128
129 /*
130  * Populate teminated table
131  */
132 void ClientStat::populateTerminated()
133 {
134    QString command = QString(".status client=\"" + m_client + "\" terminated");
135    if (mainWin->m_commandDebug)
136       Pmsg1(000, "sending command : %s\n",command.toUtf8().data());
137    QStringList results;
138    QBrush blackBrush(Qt::black);
139
140    terminatedTable->clear();
141    QStringList headerlist = (QStringList()
142       << tr("Job Id") << tr("Job Level") << tr("Job Files")
143       << tr("Job Bytes") << tr("Job Status") << tr("Job Time")
144       << tr("Job Name"));
145    QStringList flaglist = (QStringList()
146       << "R" << "L" << "R" << "R" << "LC"
147       << "L" << "L");
148
149    terminatedTable->setColumnCount(headerlist.size());
150    terminatedTable->setHorizontalHeaderLabels(headerlist);
151
152    if (m_console->dir_cmd(command, results)) {
153       int row = 0;
154       QTableWidgetItem* p_tableitem;
155       terminatedTable->setRowCount(results.size());
156       foreach (QString line, results) {
157          /* Iterate through the record returned from the query */
158          QStringList fieldlist = line.split("\t");
159          int column = 0;
160          QString statusCode("");
161          /* Iterate through fields in the record */
162          foreach (QString field, fieldlist) {
163             field = field.trimmed();  /* strip leading & trailing spaces */
164             p_tableitem = new QTableWidgetItem(field, 1);
165             p_tableitem->setForeground(blackBrush);
166             p_tableitem->setFlags(0);
167             if (flaglist[column].contains("R"))
168                p_tableitem->setTextAlignment(Qt::AlignRight);
169             if (flaglist[column].contains("C"))
170                if (field == "OK")
171                   p_tableitem->setBackground(Qt::green);
172                else
173                   p_tableitem->setBackground(Qt::red);
174             terminatedTable->setItem(results.size() - row - 1, column, p_tableitem);
175             column += 1;
176          }
177          row += 1;
178       }
179    }
180    terminatedTable->resizeColumnsToContents();
181    terminatedTable->resizeRowsToContents();
182    terminatedTable->verticalHeader()->hide();
183 }
184
185 /*
186  * Populate running text
187  */
188 void ClientStat::populateRunning()
189 {
190    QString command = QString(".status client=\"" + m_client + "\" running");
191    if (mainWin->m_commandDebug)
192       Pmsg1(000, "sending command : %s\n",command.toUtf8().data());
193    QStringList results;
194    textEditRunning->clear();
195
196    if (m_console->dir_cmd(command, results)) {
197       foreach (QString line, results) {
198          line += "\n";
199          textEditRunning->insertPlainText(line);
200       }
201    }
202 }
203
204 /*
205  * When the treeWidgetItem in the page selector tree is singleclicked, Make sure
206  * The tree has been populated.
207  */
208 void ClientStat::PgSeltreeWidgetClicked()
209 {
210    if (!m_populated) {
211       populateAll();
212       m_populated=true;
213    }
214 }
215
216 /*
217  *  Virtual function override of pages function which is called when this page
218  *  is visible on the stack
219  */
220 void ClientStat::currentStackItem()
221 {
222    populateAll();
223    if (!m_populated) {
224       m_populated=true;
225    }
226 }
227
228 /*
229  * Function to create connections for context sensitive menu for this and
230  * the page selector
231  */
232 void ClientStat::createConnections()
233 {
234    connect(actionRefresh, SIGNAL(triggered()), this,
235                    SLOT(populateAll()));
236 }
237
238 /*
239  * Save user settings associated with this page
240  */
241 void ClientStat::writeSettings()
242 {
243    QSettings settings(m_console->m_dir->name(), "bat");
244    settings.beginGroup(m_groupText);
245    settings.setValue(m_splitText, splitter->saveState());
246    settings.endGroup();
247 }
248
249 /*
250  * Read and restore user settings associated with this page
251  */
252 void ClientStat::readSettings()
253 {
254    m_groupText = "ClientStatPage";
255    m_splitText = "splitterSizes_1";
256    QSettings settings(m_console->m_dir->name(), "bat");
257    settings.beginGroup(m_groupText);
258    splitter->restoreState(settings.value(m_splitText).toByteArray());
259    settings.endGroup();
260 }