From 3160a3f8201478da265c24070588ce45ee13fefb Mon Sep 17 00:00:00 2001 From: Junxiao Shi Date: Tue, 9 Jan 2018 21:25:15 +0000 Subject: [PATCH] tools: implement 'nfdc cs info' command refs #4219 Change-Id: I4252878943c3f6c88f306f83f5023fffc82326b0 --- docs/conf.py | 1 + docs/manpages/nfdc-cs.rst | 14 ++++ docs/manpages/nfdc-status.rst | 1 + docs/manpages/nfdc.rst | 2 +- tests/tools/nfdc/cs-module.t.cpp | 71 +++++++++++++++++++ .../nfd-status.xsl | 18 +++++ tools/nfdc/cs-module.cpp | 69 ++++++++++++++++++ tools/nfdc/cs-module.hpp | 63 ++++++++++++++++ tools/nfdc/status.cpp | 16 ++++- tools/nfdc/status.hpp | 5 +- 10 files changed, 254 insertions(+), 6 deletions(-) create mode 100644 docs/manpages/nfdc-cs.rst create mode 100644 tests/tools/nfdc/cs-module.t.cpp create mode 100644 tools/nfdc/cs-module.cpp create mode 100644 tools/nfdc/cs-module.hpp diff --git a/docs/conf.py b/docs/conf.py index f3fec93a..4b0e9e1b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -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', diff --git a/docs/manpages/nfdc-cs.rst b/docs/manpages/nfdc-cs.rst new file mode 100644 index 00000000..cef31b82 --- /dev/null +++ b/docs/manpages/nfdc-cs.rst @@ -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) diff --git a/docs/manpages/nfdc-status.rst b/docs/manpages/nfdc-status.rst index cfbdec44..3a1959b8 100644 --- a/docs/manpages/nfdc-status.rst +++ b/docs/manpages/nfdc-status.rst @@ -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 diff --git a/docs/manpages/nfdc.rst b/docs/manpages/nfdc.rst index 406bf356..79140d6c 100644 --- a/docs/manpages/nfdc.rst +++ b/docs/manpages/nfdc.rst @@ -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) diff --git a/tests/tools/nfdc/cs-module.t.cpp b/tests/tools/nfdc/cs-module.t.cpp new file mode 100644 index 00000000..29a444b6 --- /dev/null +++ b/tests/tools/nfdc/cs-module.t.cpp @@ -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 . + */ + +#include "nfdc/cs-module.hpp" + +#include "status-fixture.hpp" + +#include + +namespace nfd { +namespace tools { +namespace nfdc { +namespace tests { + +BOOST_AUTO_TEST_SUITE(Nfdc) +BOOST_FIXTURE_TEST_SUITE(TestCsModule, StatusFixture) + +const std::string STATUS_XML = stripXmlSpaces(R"XML( + + 14363 + 27462 + +)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 diff --git a/tools/nfd-status-http-server-files/nfd-status.xsl b/tools/nfd-status-http-server-files/nfd-status.xsl index 843e4f27..d9b8885b 100644 --- a/tools/nfd-status-http-server-files/nfd-status.xsl +++ b/tools/nfd-status-http-server-files/nfd-status.xsl @@ -336,6 +336,24 @@ xmlns:nfd="ndn:/localhost/nfd/status/1"> + +

CS Information

+ + + + + + + + + + + + + +
HitsMisses
+
+

Strategy Choices

diff --git a/tools/nfdc/cs-module.cpp b/tools/nfdc/cs-module.cpp new file mode 100644 index 00000000..975fd99e --- /dev/null +++ b/tools/nfdc/cs-module.cpp @@ -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 . + */ + +#include "cs-module.hpp" +#include "format-helpers.hpp" + +namespace nfd { +namespace tools { +namespace nfdc { + +void +CsModule::fetchStatus(Controller& controller, + const function& onSuccess, + const Controller::DatasetFailCallback& onFailure, + const CommandOptions& options) +{ + controller.fetch( + [this, onSuccess] (const CsInfo& result) { + m_status = result; + onSuccess(); + }, + onFailure, options); +} + +void +CsModule::formatStatusXml(std::ostream& os) const +{ + os << ""; + os << "" << m_status.getNHits() << ""; + os << "" << m_status.getNMisses() << ""; + os << ""; +} + +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 diff --git a/tools/nfdc/cs-module.hpp b/tools/nfdc/cs-module.hpp new file mode 100644 index 00000000..143b3e47 --- /dev/null +++ b/tools/nfdc/cs-module.hpp @@ -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 . + */ + +#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& 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 diff --git a/tools/nfdc/status.cpp b/tools/nfdc/status.cpp index 01222c8b..495a21ea 100644 --- a/tools/nfdc/status.cpp +++ b/tools/nfdc/status.cpp @@ -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 @@ -62,6 +63,10 @@ reportStatus(ExecuteContext& ctx, const StatusReportOptions& options) report.sections.push_back(make_unique()); } + if (options.wantCs) { + report.sections.push_back(make_unique()); + } + if (options.wantStrategyChoice) { report.sections.push_back(make_unique()); } @@ -106,8 +111,8 @@ reportStatusComprehensive(ExecuteContext& ctx) { StatusReportOptions options; options.output = ctx.args.get("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 diff --git a/tools/nfdc/status.hpp b/tools/nfdc/status.hpp index 57dac50a..b5d2e943 100644 --- a/tools/nfdc/status.hpp +++ b/tools/nfdc/status.hpp @@ -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; };