diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /src/pmchart/searchdialog.cpp | |
download | pcp-debian/3.9.10.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'src/pmchart/searchdialog.cpp')
-rw-r--r-- | src/pmchart/searchdialog.cpp | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/src/pmchart/searchdialog.cpp b/src/pmchart/searchdialog.cpp new file mode 100644 index 0000000..668d61a --- /dev/null +++ b/src/pmchart/searchdialog.cpp @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2007, Aconex. All Rights Reserved. + * + * 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. + */ +#include "searchdialog.h" +#include <QMessageBox> +#include "main.h" + +SearchDialog::SearchDialog(QWidget* parent) : QDialog(parent) +{ + setupUi(this); + my.count = 0; +} + +void SearchDialog::languageChange() +{ + retranslateUi(this); +} + +void SearchDialog::reset(QTreeWidget *pmns) +{ + my.pmns = pmns; + buttonOk->setEnabled(false); + if (matchList->count() > 0) + buttonAll->setEnabled(true); + else + buttonAll->setEnabled(false); + changed(); + listchanged(); +} + +void SearchDialog::clear() +{ + this->hostPattern->clear(); + this->metricPattern->clear(); + this->instancePattern->clear(); + this->resultStatus->setText(""); + matchList->clear(); + my.pmnsList.clear(); + buttonSearch->setEnabled(false); + buttonOk->setEnabled(false); + buttonAll->setEnabled(false); +} + +void SearchDialog::changed() +{ + bool hostEnabled = (hostPattern->text() != QString::null); + bool metricEnabled = (metricPattern->text() != QString::null); + bool instanceEnabled = (instancePattern->text() != QString::null); + buttonSearch->setEnabled(hostEnabled || metricEnabled || instanceEnabled); +} + +void SearchDialog::selectall() +{ + matchList->selectAll(); +} + +void SearchDialog::listchanged() +{ + QList<QListWidgetItem *> check = matchList->selectedItems(); + if (check.size() == 0) { + buttonOk->setEnabled(false); + } + else { + buttonOk->setEnabled(true); + } +} + +void SearchDialog::search() +{ + QString res; + QTreeWidgetItemIterator iterator(my.pmns, QTreeWidgetItemIterator::All); + int h_match = 0; + int m_match = 0; + int i_match; + int count; + QRegExp h_rx; + QRegExp m_rx; + QRegExp i_rx; + + console->post(PmChart::DebugUi, + "SearchDialog::search host=\"%s\" metric=\"%s\" instance=\"%s\"", + (const char *)hostPattern->text().toAscii(), + (const char *)metricPattern->text().toAscii(), + (const char *)instancePattern->text().toAscii()); + + if (hostPattern->text() == QString::null && + metricPattern->text() == QString::null && + instancePattern->text() == QString::null) { + // got here via pressing Enter from one of the pattern input fields, + // and all the fields are empty ... do nothing + return; + } + + if (hostPattern->text() != QString::null) + h_rx.setPattern(hostPattern->text()); + + if (metricPattern->text() != QString::null) + m_rx.setPattern(metricPattern->text()); + + if (instancePattern->text() != QString::null) + i_rx.setPattern(instancePattern->text()); + + matchList->clear(); + my.pmnsList.clear(); + count = 0; + for (; (*iterator); ++iterator) { + NameSpace *item = (NameSpace *)(*iterator); + if (item->isRoot()) { + // host name + if (hostPattern->text() != QString::null) + h_match = h_rx.indexIn(item->sourceName()); + else + h_match = 0; + if (h_match >= 0) { + console->post(PmChart::DebugUi, "SearchDialog::search " + "host=\"%s\" h_match=%d", + (const char *)item->sourceName().toAscii(), h_match); + } + item->setExpanded(true, false); + m_match = -2; + } + else if (h_match >= 0 && item->isMetric()) { + // metric name + count++; + if (metricPattern->text() != QString::null) + m_match = m_rx.indexIn(item->metricName()); + else + m_match = 0; + if (m_match >= 0) { + if (item->isLeaf() && + instancePattern->text() == QString::null) { + QString fqn = item->sourceName().append(":"); + fqn.append(item->metricName()); + matchList->addItem(fqn); + my.pmnsList.append(item); + m_match = -2; + + console->post(PmChart::DebugUi, "SearchDialog::search " + "host=%s h_match=%d metric=%s m_match=%d", + (const char *)item->sourceName().toAscii(), h_match, + (const char *)item->metricName().toAscii(), m_match); + } + if (item->isLeaf() == false) { + // has instance domain + item->setExpanded(true, false); + count--; + } + } + } + else if (h_match >= 0 && m_match >= 0 && item->isInst()) { + // matched last metric, now related instance name ... + count++; + if (instancePattern->text() != QString::null) + i_match = i_rx.indexIn(item->metricInstance()); + else + i_match = 0; + if (i_match >= 0) { + QString fqn = item->sourceName().append(":"); + fqn.append(item->metricName()); + fqn.append("[").append(item->metricInstance()).append("]"); + matchList->addItem(fqn); + my.pmnsList.append(item); + + console->post(PmChart::DebugUi, "SearchDialog::search " + "host=%s h_match=%d metric=%s m_match=%d inst=%s i_match=%d", + (const char *)item->sourceName().toAscii(), h_match, + (const char *)item->metricName().toAscii(), m_match, + (const char *)item->metricInstance().toAscii(), i_match); + } + } + else if (item->isNonLeaf()) { + item->setExpanded(true, false); + m_match = -2; + } + else + m_match = -2; + } + + if (matchList->count() > 0) { + buttonAll->setEnabled(true); + } + + QTextStream(&res) << "Matched " << matchList->count() << " of " << count << " possibilities"; + this->resultStatus->setText(res); +} + +void SearchDialog::ok() +{ + QList<QListWidgetItem *> selected = matchList->selectedItems(); + int i; + int row; + NameSpace *parent; + + for (i = 0; i < selected.size(); i++) { + row = matchList->row(selected[i]); +#if DESPERATE + fprintf(stderr, "[%d] %s:%s[%s]\n", + row, (const char *)my.pmnsList[row]->sourceName().toAscii(), + (const char *)my.pmnsList[row]->metricName().toAscii(), + (const char *)my.pmnsList[row]->metricInstance().toAscii()); +#endif + my.pmnsList[row]->setSelected(true); + parent = (NameSpace *)my.pmnsList[row]->parent(); + while (parent->isRoot() == false) { +#if DESPERATE + fprintf(stderr, "SearchDialog::ok expand: %s\n", + (const char *)parent->metricName().toAscii()); +#endif + parent->QTreeWidgetItem::setExpanded(true); + parent = (NameSpace *)parent->parent(); + } + } + + accept(); +} |