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)); +}  | 
