tools: implement 'nfdc cs info' command

refs #4219

Change-Id: I4252878943c3f6c88f306f83f5023fffc82326b0
This commit is contained in:
Junxiao Shi
2018-01-09 21:25:15 +00:00
parent 3257af2823
commit 3160a3f820
10 changed files with 254 additions and 6 deletions
+1
View File
@@ -246,6 +246,7 @@ man_pages = [
('manpages/nfdc-status', 'nfdc-status', u'show NFD status', None, 1),
('manpages/nfdc-face', 'nfdc-face', u'show and manipulate NFD faces', None, 1),
('manpages/nfdc-route', 'nfdc-route', u'show and manipulate NFD routes', None, 1),
('manpages/nfdc-cs', 'nfdc-cs', u'show and manipulate NFD Content Store', None, 1),
('manpages/nfdc-strategy', 'nfdc-strategy', u'show and manipulate NFD strategy choices', None, 1),
('manpages/nfd-status', 'nfd-status', u'comprehensive report of NFD status', None, 1),
('manpages/nfd-status-http-server', 'nfd-status-http-server',
+14
View File
@@ -0,0 +1,14 @@
nfdc-cs
===========
SYNOPSIS
--------
| nfdc cs info
DESCRIPTION
-----------
The **nfdc cs info** command shows CS statistics information.
SEE ALSO
--------
nfd(1), nfdc(1)
+1
View File
@@ -18,6 +18,7 @@ The **nfdc status report** command prints a comprehensive report of NFD status,
- list of faces (individually available from **nfdc face list**)
- list of FIB entries (individually available from **nfdc fib list**)
- list of RIB entries (individually available from **nfdc route list**)
- CS statistics information (individually available from **nfdc cs info**)
- list of strategy choices (individually available from **nfdc strategy list**)
OPTIONS
+1 -1
View File
@@ -45,4 +45,4 @@ Show how to use ``nfdc face create`` command:
SEE ALSO
--------
nfdc-status(1), nfdc-face(1), nfdc-route(1), nfdc-strategy(1)
nfdc-status(1), nfdc-face(1), nfdc-route(1), nfdc-cs(1), nfdc-strategy(1)
+71
View File
@@ -0,0 +1,71 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
* Washington University in St. Louis,
* Beijing Institute of Technology,
* The University of Memphis.
*
* This file is part of NFD (Named Data Networking Forwarding Daemon).
* See AUTHORS.md for complete list of NFD authors and contributors.
*
* NFD 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 3 of the License, or (at your option) any later version.
*
* NFD 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
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
*/
#include "nfdc/cs-module.hpp"
#include "status-fixture.hpp"
#include <ndn-cxx/security/signing-helpers.hpp>
namespace nfd {
namespace tools {
namespace nfdc {
namespace tests {
BOOST_AUTO_TEST_SUITE(Nfdc)
BOOST_FIXTURE_TEST_SUITE(TestCsModule, StatusFixture<CsModule>)
const std::string STATUS_XML = stripXmlSpaces(R"XML(
<cs>
<nHits>14363</nHits>
<nMisses>27462</nMisses>
</cs>
)XML");
const std::string STATUS_TEXT = std::string(R"TEXT(
CS information:
nHits=14363 nMisses=27462
)TEXT").substr(1);
BOOST_AUTO_TEST_CASE(Status)
{
this->fetchStatus();
CsInfo payload;
payload.setNHits(14363)
.setNMisses(27462);
this->sendDataset("/localhost/nfd/cs/info", payload);
this->prepareStatusOutput();
BOOST_CHECK(statusXml.is_equal(STATUS_XML));
BOOST_CHECK(statusText.is_equal(STATUS_TEXT));
}
BOOST_AUTO_TEST_SUITE_END() // TestCsModule
BOOST_AUTO_TEST_SUITE_END() // Nfdc
} // namespace tests
} // namespace nfdc
} // namespace tools
} // namespace nfd
@@ -336,6 +336,24 @@ xmlns:nfd="ndn:/localhost/nfd/status/1">
</table>
</xsl:template>
<xsl:template match="nfd:cs">
<h2>CS Information</h2>
<table class="item-list">
<thead>
<tr>
<th>Hits</th>
<th>Misses</th>
</tr>
</thead>
<tbody>
<tr class="center">
<td><xsl:value-of select="nfd:nHits"/></td>
<td><xsl:value-of select="nfd:nMisses"/></td>
</tr>
</tbody>
</table>
</xsl:template>
<xsl:template match="nfd:strategyChoices">
<h2>Strategy Choices</h2>
<table class="item-list">
+69
View File
@@ -0,0 +1,69 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
* Washington University in St. Louis,
* Beijing Institute of Technology,
* The University of Memphis.
*
* This file is part of NFD (Named Data Networking Forwarding Daemon).
* See AUTHORS.md for complete list of NFD authors and contributors.
*
* NFD 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 3 of the License, or (at your option) any later version.
*
* NFD 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
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
*/
#include "cs-module.hpp"
#include "format-helpers.hpp"
namespace nfd {
namespace tools {
namespace nfdc {
void
CsModule::fetchStatus(Controller& controller,
const function<void()>& onSuccess,
const Controller::DatasetFailCallback& onFailure,
const CommandOptions& options)
{
controller.fetch<ndn::nfd::CsInfoDataset>(
[this, onSuccess] (const CsInfo& result) {
m_status = result;
onSuccess();
},
onFailure, options);
}
void
CsModule::formatStatusXml(std::ostream& os) const
{
os << "<cs>";
os << "<nHits>" << m_status.getNHits() << "</nHits>";
os << "<nMisses>" << m_status.getNMisses() << "</nMisses>";
os << "</cs>";
}
void
CsModule::formatStatusText(std::ostream& os) const
{
os << "CS information:\n ";
text::ItemAttributes ia;
os << ia("nHits") << m_status.getNHits()
<< ia("nMisses") << m_status.getNMisses()
<< ia.end();
os << '\n';
}
} // namespace nfdc
} // namespace tools
} // namespace nfd
+63
View File
@@ -0,0 +1,63 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
* Washington University in St. Louis,
* Beijing Institute of Technology,
* The University of Memphis.
*
* This file is part of NFD (Named Data Networking Forwarding Daemon).
* See AUTHORS.md for complete list of NFD authors and contributors.
*
* NFD 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 3 of the License, or (at your option) any later version.
*
* NFD 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
* NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef NFD_TOOLS_NFDC_CS_MODULE_HPP
#define NFD_TOOLS_NFDC_CS_MODULE_HPP
#include "module.hpp"
namespace nfd {
namespace tools {
namespace nfdc {
using ndn::nfd::CsInfo;
/** \brief provides access to NFD CS management
* \sa https://redmine.named-data.net/projects/nfd/wiki/CsMgmt
*/
class CsModule : public Module, noncopyable
{
public:
void
fetchStatus(Controller& controller,
const function<void()>& onSuccess,
const Controller::DatasetFailCallback& onFailure,
const CommandOptions& options) override;
void
formatStatusXml(std::ostream& os) const override;
void
formatStatusText(std::ostream& os) const override;
private:
CsInfo m_status;
};
} // namespace nfdc
} // namespace tools
} // namespace nfd
#endif // NFD_TOOLS_NFDC_CS_MODULE_HPP
+13 -3
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2014-2017, Regents of the University of California,
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -29,6 +29,7 @@
#include "face-module.hpp"
#include "fib-module.hpp"
#include "rib-module.hpp"
#include "cs-module.hpp"
#include "strategy-choice-module.hpp"
#include <ndn-cxx/security/validator-null.hpp>
@@ -62,6 +63,10 @@ reportStatus(ExecuteContext& ctx, const StatusReportOptions& options)
report.sections.push_back(make_unique<RibModule>());
}
if (options.wantCs) {
report.sections.push_back(make_unique<CsModule>());
}
if (options.wantStrategyChoice) {
report.sections.push_back(make_unique<StrategyChoiceModule>());
}
@@ -106,8 +111,8 @@ reportStatusComprehensive(ExecuteContext& ctx)
{
StatusReportOptions options;
options.output = ctx.args.get<ReportFormat>("format", ReportFormat::TEXT);
options.wantForwarderGeneral = options.wantChannels = options.wantFaces =
options.wantFib = options.wantRib = options.wantStrategyChoice = true;
options.wantForwarderGeneral = options.wantChannels = options.wantFaces = options.wantFib =
options.wantRib = options.wantCs = options.wantStrategyChoice = true;
reportStatus(ctx, options);
}
@@ -135,6 +140,11 @@ registerStatusCommands(CommandParser& parser)
defFibList
.setTitle("print FIB entries");
parser.addCommand(defFibList, bind(&reportStatusSingleSection, _1, &StatusReportOptions::wantFib));
CommandDefinition defCsInfo("cs", "info");
defCsInfo
.setTitle("print CS information");
parser.addCommand(defCsInfo, bind(&reportStatusSingleSection, _1, &StatusReportOptions::wantCs));
}
} // namespace nfdc
+3 -2
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
* Copyright (c) 2014-2017, Regents of the University of California,
/*
* Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -41,6 +41,7 @@ struct StatusReportOptions
bool wantFaces = false;
bool wantFib = false;
bool wantRib = false;
bool wantCs = false;
bool wantStrategyChoice = false;
};