summaryrefslogtreecommitdiffstats
path: root/kcontrol/samba/kcmsambastatistics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/samba/kcmsambastatistics.cpp')
-rw-r--r--kcontrol/samba/kcmsambastatistics.cpp289
1 files changed, 289 insertions, 0 deletions
diff --git a/kcontrol/samba/kcmsambastatistics.cpp b/kcontrol/samba/kcmsambastatistics.cpp
new file mode 100644
index 000000000..ebdd1c092
--- /dev/null
+++ b/kcontrol/samba/kcmsambastatistics.cpp
@@ -0,0 +1,289 @@
+/*
+ * kcmsambastatistics.cpp
+ *
+ * Copyright (c) 2000 Alexander Neundorf <alexander.neundorf@rz.tu-ilmenau.de>
+ *
+ * Requires the Qt widget libraries, available at no cost at
+ * http://www.troll.no/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+#include "kcmsambastatistics.h"
+#include "kcmsambastatistics.moc"
+
+#include <qlayout.h>
+#include <qlistview.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qpushbutton.h>
+#include <qregexp.h>
+
+#include <kglobal.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kdialog.h>
+
+StatisticsView::StatisticsView(QWidget *parent,KConfig *config, const char *name)
+ :QWidget (parent, name)
+ ,configFile(config)
+ ,dataList(0)
+ ,connectionsCount(0)
+ ,filesCount(0)
+ ,calcCount(0)
+{
+ viewStatistics = new QListView( this );
+ connectionsL = new QLabel( i18n( "Connections: 0" ), this );
+ filesL = new QLabel( i18n( "File accesses: 0" ), this );
+ eventCb = new QComboBox( false, this );
+ eventL = new QLabel( eventCb, i18n( "Event: " ), this );
+ serviceLe = new QLineEdit( this );
+ serviceL = new QLabel( serviceLe, i18n( "Service/File:" ), this );
+ hostLe = new QLineEdit( this );
+ hostL = new QLabel( hostLe, i18n( "Host/User:" ), this );
+ calcButton = new QPushButton( i18n( "&Search" ), this );
+ clearButton = new QPushButton( i18n( "Clear Results" ), this );
+ expandedInfoCb = new QCheckBox( i18n( "Show expanded service info" ), this );
+ expandedUserCb = new QCheckBox( i18n( "Show expanded host info" ), this );
+
+ viewStatistics->setAllColumnsShowFocus(TRUE);
+ viewStatistics->setFocusPolicy(QWidget::ClickFocus);
+ viewStatistics->setShowSortIndicator(true);
+
+ viewStatistics->addColumn(i18n("Nr"),30);
+ viewStatistics->addColumn(i18n("Event"),130);
+ viewStatistics->addColumn(i18n("Service/File"),200);
+ viewStatistics->addColumn(i18n("Host/User"),90);
+ viewStatistics->addColumn(i18n("Hits"),50);
+ //viewStatistics->addColumn(i18n("Percentage"),100);
+
+ eventCb->insertItem(i18n("Connection"));
+ eventCb->insertItem(i18n("File Access"));
+
+ expandedInfoCb->setChecked(FALSE);
+ expandedUserCb->setChecked(FALSE);
+ clearStatistics();
+ serviceLe->setText("*");
+ hostLe->setText("*");
+
+ viewStatistics->setMinimumSize(375,200);
+ connectionsL->setMinimumSize(connectionsL->sizeHint());
+ filesL->setMinimumSize(filesL->sizeHint());
+ eventL->setMinimumSize(eventL->sizeHint());
+ eventCb->setMinimumSize(eventCb->sizeHint());
+ hostL->setMinimumSize(hostL->sizeHint());
+ hostLe->setMinimumSize(120,hostLe->sizeHint().height());
+ serviceL->setMinimumSize(serviceL->sizeHint());
+ serviceLe->setMinimumSize(120,serviceLe->sizeHint().height());
+ calcButton->setMinimumSize(calcButton->sizeHint());
+ clearButton->setMinimumSize(clearButton->sizeHint());
+ expandedInfoCb->setMinimumSize(expandedInfoCb->sizeHint());
+ expandedUserCb->setMinimumSize(expandedUserCb->sizeHint());
+
+ QVBoxLayout *topLayout=new QVBoxLayout(this, KDialog::marginHint(),
+ KDialog::spacingHint());
+ topLayout->addWidget(viewStatistics,1);
+ QGridLayout *subLayout=new QGridLayout(topLayout,4,3);
+ subLayout->setColStretch(1,1);
+ subLayout->setColStretch(2,1);
+
+ QHBoxLayout *twoButtonsLayout=new QHBoxLayout;
+ twoButtonsLayout->addWidget(calcButton,1);
+ twoButtonsLayout->addWidget(clearButton,1);
+
+ subLayout->addWidget(connectionsL,0,0);
+ subLayout->addWidget(filesL,0,1);
+ subLayout->addWidget(eventL,1,0);
+ subLayout->addWidget(serviceL,1,1);
+ subLayout->addWidget(hostL,1,2);
+ subLayout->addWidget(eventCb,2,0);
+ subLayout->addWidget(serviceLe,2,1);
+ subLayout->addWidget(hostLe,2,2);
+ subLayout->addLayout(twoButtonsLayout,3,0);
+ subLayout->addWidget(expandedInfoCb,3,1);
+ subLayout->addWidget(expandedUserCb,3,2);
+
+ connect(clearButton,SIGNAL(clicked()),this,SLOT(clearStatistics()));
+ connect(calcButton,SIGNAL(clicked()),this,SLOT(calculate()));
+ setListInfo(0,0,0);
+}
+
+void StatisticsView::setListInfo(QListView *list, int nrOfFiles, int nrOfConnections)
+{
+ dataList=list;
+ filesCount=nrOfFiles;
+ connectionsCount=nrOfConnections;
+ connectionsL->setText(i18n("Connections: %1").arg(KGlobal::locale()->formatNumber(connectionsCount, 0)));
+ filesL->setText(i18n("File accesses: %1").arg(KGlobal::locale()->formatNumber(filesCount, 0)));
+ clearStatistics();
+}
+
+void StatisticsView::calculate()
+{
+ if (dataList==0) return;
+ QApplication::setOverrideCursor(waitCursor);
+ int connCount(0);
+ if (eventCb->currentText()==i18n("Connection"))
+ connCount=1;
+ //something has to be counted exactly
+ if ((expandedInfoCb->isChecked()) || (expandedUserCb->isChecked()))
+ {
+ SambaLog sLog;
+ QRegExp rService(serviceLe->text(),FALSE,TRUE);
+ QRegExp rHost(hostLe->text(),FALSE,TRUE);
+ QString item2, item3;
+ QListViewItem* item=dataList->firstChild();
+ while (item!=0)
+ {
+ if (connCount)
+ {
+ if ((QString(item->text(1)).contains(i18n("CONNECTION OPENED")))
+ && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost)))
+ {
+ if (expandedInfoCb->isChecked()) item2=item->text(2);
+ else item2=serviceLe->text();
+ if (expandedUserCb->isChecked()) item3=item->text(3);
+ else item3=hostLe->text();
+ sLog.addItem(item2,item3);
+ //count++;
+ };
+ }
+ else
+ {
+ if ((QString(item->text(1)).contains(i18n("FILE OPENED")))
+ && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost)))
+ {
+ if (expandedInfoCb->isChecked()) item2=item->text(2);
+ else item2=serviceLe->text();
+ if (expandedUserCb->isChecked()) item3=item->text(3);
+ else item3=hostLe->text();
+ sLog.addItem(item2,item3);
+
+ };
+ };
+ item=item->nextSibling();
+ };
+ for (LogItem* tmpItem=sLog.items.first();tmpItem!=0;tmpItem=sLog.items.next())
+ {
+ for (SmallLogItem *tmpStr=tmpItem->accessed.first();tmpStr!=0;tmpStr=tmpItem->accessed.next())
+ {
+ calcCount++;
+ QString number("");
+ number.sprintf("%6d",calcCount);
+ QString hits("");
+ hits.sprintf("%7d",tmpStr->count);
+ new QListViewItem(viewStatistics,number,eventCb->currentText(),tmpItem->name,tmpStr->name,hits);
+ };
+ };
+ }
+ //no expanded info needed
+ else
+ {
+ calcCount++;
+ int count(0);
+ QRegExp rService(serviceLe->text(),FALSE,TRUE);
+ QRegExp rHost(hostLe->text(),FALSE,TRUE);
+ QListViewItem* item=dataList->firstChild();
+ while (item!=0)
+ {
+ if (connCount)
+ {
+ if ((QString(item->text(1)).contains(i18n("CONNECTION OPENED")))
+ && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost)))
+ count++;
+ }
+ else
+ {
+ if ((QString(item->text(1)).contains(i18n("FILE OPENED")))
+ && (QString(item->text(2)).contains(rService)) && (QString(item->text(3)).contains(rHost)))
+ count++;
+ };
+ item=item->nextSibling();
+ };
+ QString number("");
+ number.sprintf("%6d",calcCount);
+ QString hits("");
+ hits.sprintf("%7d",count);
+ new QListViewItem(viewStatistics,number,eventCb->currentText(),serviceLe->text(),hostLe->text(),hits);
+ };
+ QApplication::restoreOverrideCursor();
+}
+
+void StatisticsView::clearStatistics()
+{
+ viewStatistics->clear();
+ calcCount=0;
+}
+
+void SambaLog::printItems()
+{
+ kdDebug() << "****** printing items: ******" << endl;
+ for (LogItem* tmpItem=items.first();tmpItem!=0;tmpItem=items.next())
+ {
+ kdDebug() << "SERVICE: " << tmpItem->name << endl;
+ for (SmallLogItem* tmpLog=tmpItem->accessed.first();tmpLog!=0;tmpLog=tmpItem->accessed.next())
+ kdDebug() << " accessed by: " << tmpLog->name << " " << tmpLog->count << endl;
+ };
+ kdDebug() << "------ end of printing ------" << endl << endl;
+}
+
+LogItem* SambaLog::itemInList(QString name)
+{
+ LogItem* tmpItem(items.first());
+ LogItem* foundItem(0);
+ while ((tmpItem!=0) && (foundItem==0))
+ {
+ if (tmpItem->name==name) foundItem=tmpItem;
+ tmpItem=items.next();
+ };
+ return foundItem;
+}
+
+void SambaLog::addItem(QString share, QString user)
+{
+ //cout<<" adding connection: -"<<share<<"- -"<<user<<"-"<<endl;
+ LogItem* tmp(itemInList(share));
+ if (tmp!=0)
+ {
+ tmp->count++;
+ tmp->addItem(user);
+ }
+ else
+ {
+ items.append(new LogItem(share,user));
+ };
+}
+
+SmallLogItem* LogItem::itemInList(QString name)
+{
+ SmallLogItem* tmpItem(accessed.first());
+ SmallLogItem* foundItem(0);
+ while ((tmpItem!=0) && (foundItem==0))
+ {
+ if (tmpItem->name==name) foundItem=tmpItem;
+ tmpItem=accessed.next();
+ };
+ return foundItem;
+}
+
+void LogItem::addItem (QString host)
+{
+ SmallLogItem* tmp(itemInList(host));
+ if (tmp!=0)
+ tmp->count++;
+ else
+ accessed.append(new SmallLogItem(host));
+}