diff options
Diffstat (limited to 'kcontrol/samba/kcmsambastatistics.cpp')
-rw-r--r-- | kcontrol/samba/kcmsambastatistics.cpp | 289 |
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..3b77dbc9f --- /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 <tqlayout.h> +#include <tqlistview.h> +#include <tqlabel.h> +#include <tqlineedit.h> +#include <tqcheckbox.h> +#include <tqcombobox.h> +#include <tqpushbutton.h> +#include <tqregexp.h> + +#include <tdeglobal.h> +#include <tdelocale.h> +#include <kdebug.h> +#include <kdialog.h> + +StatisticsView::StatisticsView(TQWidget *parent,TDEConfig *config, const char *name) + :TQWidget (parent, name) + ,configFile(config) + ,dataList(0) + ,connectionsCount(0) + ,filesCount(0) + ,calcCount(0) +{ + viewStatistics = new TQListView( this ); + connectionsL = new TQLabel( i18n( "Connections: 0" ), this ); + filesL = new TQLabel( i18n( "File accesses: 0" ), this ); + eventCb = new TQComboBox( false, this ); + eventL = new TQLabel( eventCb, i18n( "Event: " ), this ); + serviceLe = new TQLineEdit( this ); + serviceL = new TQLabel( serviceLe, i18n( "Service/File:" ), this ); + hostLe = new TQLineEdit( this ); + hostL = new TQLabel( hostLe, i18n( "Host/User:" ), this ); + calcButton = new TQPushButton( i18n( "&Search" ), this ); + clearButton = new TQPushButton( i18n( "Clear Results" ), this ); + expandedInfoCb = new TQCheckBox( i18n( "Show expanded service info" ), this ); + expandedUserCb = new TQCheckBox( i18n( "Show expanded host info" ), this ); + + viewStatistics->setAllColumnsShowFocus(TRUE); + viewStatistics->setFocusPolicy(TQ_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()); + + TQVBoxLayout *topLayout=new TQVBoxLayout(this, KDialog::marginHint(), + KDialog::spacingHint()); + topLayout->addWidget(viewStatistics,1); + TQGridLayout *subLayout=new TQGridLayout(topLayout,4,3); + subLayout->setColStretch(1,1); + subLayout->setColStretch(2,1); + + TQHBoxLayout *twoButtonsLayout=new TQHBoxLayout; + 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,TQT_SIGNAL(clicked()),this,TQT_SLOT(clearStatistics())); + connect(calcButton,TQT_SIGNAL(clicked()),this,TQT_SLOT(calculate())); + setListInfo(0,0,0); +} + +void StatisticsView::setListInfo(TQListView *list, int nrOfFiles, int nrOfConnections) +{ + dataList=list; + filesCount=nrOfFiles; + connectionsCount=nrOfConnections; + connectionsL->setText(i18n("Connections: %1").arg(TDEGlobal::locale()->formatNumber(connectionsCount, 0))); + filesL->setText(i18n("File accesses: %1").arg(TDEGlobal::locale()->formatNumber(filesCount, 0))); + clearStatistics(); +} + +void StatisticsView::calculate() +{ + if (dataList==0) return; + TQApplication::setOverrideCursor(tqwaitCursor); + int connCount(0); + if (eventCb->currentText()==i18n("Connection")) + connCount=1; + //something has to be counted exactly + if ((expandedInfoCb->isChecked()) || (expandedUserCb->isChecked())) + { + SambaLog sLog; + TQRegExp rService(serviceLe->text(),FALSE,TRUE); + TQRegExp rHost(hostLe->text(),FALSE,TRUE); + TQString item2, item3; + TQListViewItem* item=dataList->firstChild(); + while (item!=0) + { + if (connCount) + { + if ((TQString(item->text(1)).contains(i18n("CONNECTION OPENED"))) + && (TQString(item->text(2)).contains(rService)) && (TQString(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 ((TQString(item->text(1)).contains(i18n("FILE OPENED"))) + && (TQString(item->text(2)).contains(rService)) && (TQString(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++; + TQString number(""); + number.sprintf("%6d",calcCount); + TQString hits(""); + hits.sprintf("%7d",tmpStr->count); + new TQListViewItem(viewStatistics,number,eventCb->currentText(),tmpItem->name,tmpStr->name,hits); + }; + }; + } + //no expanded info needed + else + { + calcCount++; + int count(0); + TQRegExp rService(serviceLe->text(),FALSE,TRUE); + TQRegExp rHost(hostLe->text(),FALSE,TRUE); + TQListViewItem* item=dataList->firstChild(); + while (item!=0) + { + if (connCount) + { + if ((TQString(item->text(1)).contains(i18n("CONNECTION OPENED"))) + && (TQString(item->text(2)).contains(rService)) && (TQString(item->text(3)).contains(rHost))) + count++; + } + else + { + if ((TQString(item->text(1)).contains(i18n("FILE OPENED"))) + && (TQString(item->text(2)).contains(rService)) && (TQString(item->text(3)).contains(rHost))) + count++; + }; + item=item->nextSibling(); + }; + TQString number(""); + number.sprintf("%6d",calcCount); + TQString hits(""); + hits.sprintf("%7d",count); + new TQListViewItem(viewStatistics,number,eventCb->currentText(),serviceLe->text(),hostLe->text(),hits); + }; + TQApplication::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(TQString 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(TQString share, TQString 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(TQString 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 (TQString host) +{ + SmallLogItem* tmp(itemInList(host)); + if (tmp!=0) + tmp->count++; + else + accessed.append(new SmallLogItem(host)); +} |