NFD: Named Data Networking Forwarding Daemon 24.07-28-gdcc0e6e0
Loading...
Searching...
No Matches
status.cpp
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2014-2022, Regents of the University of California,
4 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis.
10 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 */
25
26#include "status.hpp"
28#include "channel-module.hpp"
29#include "face-module.hpp"
30#include "fib-module.hpp"
31#include "rib-module.hpp"
32#include "cs-module.hpp"
34
35#include <ndn-cxx/security/validator-null.hpp>
36
37namespace nfd::tools::nfdc {
38
39void
41{
42 StatusReport report;
43
44 if (options.wantForwarderGeneral) {
45 report.sections.push_back(make_unique<ForwarderGeneralModule>());
46 }
47
48 if (options.wantChannels) {
49 report.sections.push_back(make_unique<ChannelModule>());
50 }
51
52 if (options.wantFaces) {
53 report.sections.push_back(make_unique<FaceModule>());
54 }
55
56 if (options.wantFib) {
57 report.sections.push_back(make_unique<FibModule>());
58 }
59
60 if (options.wantRib) {
61 report.sections.push_back(make_unique<RibModule>());
62 }
63
64 if (options.wantCs) {
65 report.sections.push_back(make_unique<CsModule>());
66 }
67
68 if (options.wantStrategyChoice) {
69 report.sections.push_back(make_unique<StrategyChoiceModule>());
70 }
71
72 uint32_t code = report.collect(ctx.face, ctx.keyChain,
73 ndn::security::getAcceptAllValidator(),
74 CommandOptions());
75 if (code != 0) {
76 ctx.exitCode = 1;
77 // Give a simple error code for end user.
78 // Technical support personnel:
79 // 1. get the exact command from end user
80 // 2. code div 1000000 is zero-based section index
81 // 3. code mod 1000000 is a Controller.fetch error code
82 ctx.err << "Error while collecting status report (" << code << ").\n";
83 }
84
85 switch (options.output) {
87 report.formatXml(ctx.out);
88 break;
90 report.formatText(ctx.out);
91 break;
92 }
93}
94
97static void
99{
100 StatusReportOptions options;
101 options.*wantSection = true;
102 reportStatus(ctx, options);
103}
104
107static void
109{
110 StatusReportOptions options;
111 options.output = ctx.args.get<ReportFormat>("format", ReportFormat::TEXT);
112 options.wantForwarderGeneral = options.wantChannels = options.wantFaces = options.wantFib =
113 options.wantRib = options.wantCs = options.wantStrategyChoice = true;
114 reportStatus(ctx, options);
115}
116
117void
119{
120 CommandDefinition defStatusReport("status", "report");
121 defStatusReport
122 .setTitle("print full status report")
124 parser.addCommand(defStatusReport, &reportStatusComprehensive);
125
126 CommandDefinition defStatusShow("status", "show");
127 defStatusShow
128 .setTitle("print general status");
129 parser.addCommand(defStatusShow,
131 parser.addAlias("status", "show", "");
132
133 CommandDefinition defChannelList("channel", "list");
134 defChannelList
135 .setTitle("print channel list");
136 parser.addCommand(defChannelList,
138 parser.addAlias("channel", "list", "");
139
140 CommandDefinition defFibList("fib", "list");
141 defFibList
142 .setTitle("print FIB entries");
143 parser.addCommand(defFibList,
145 parser.addAlias("fib", "list", "");
146
147 CommandDefinition defCsInfo("cs", "info");
148 defCsInfo
149 .setTitle("print CS information");
150 parser.addCommand(defCsInfo,
152 parser.addAlias("cs", "info", "");
153}
154
155} // namespace nfd::tools::nfdc
T get(std::string_view key, const T &defaultValue=T()) const
CommandDefinition & setTitle(std::string_view title)
Set one-line description.
CommandDefinition & addArg(const std::string &name, ArgValueType valueType, Required isRequired=Required::NO, Positional allowPositional=Positional::NO, const std::string &metavar="")
Declare an argument.
CommandParser & addCommand(const CommandDefinition &def, const ExecuteCommand &execute, std::underlying_type_t< AvailableIn > modes=AVAILABLE_IN_ALL)
Add an available command.
CommandParser & addAlias(const std::string &noun, const std::string &verb, const std::string &verb2)
Add an alias "noun verb2" to existing command "noun verb".
Context for command execution.
std::ostream & out
output stream
const CommandArguments & args
std::ostream & err
error stream
Collects and prints NFD status report.
void formatText(std::ostream &os) const
Print a text report.
void formatXml(std::ostream &os) const
Print an XML report.
std::vector< unique_ptr< Module > > sections
Modules through which status is collected.
uint32_t collect(ndn::Face &face, ndn::KeyChain &keyChain, ndn::security::Validator &validator, const CommandOptions &options)
Collect status via chosen sections.
@ NO
argument is optional
static void reportStatusComprehensive(ExecuteContext &ctx)
The 'status report' command.
Definition status.cpp:108
void reportStatus(ExecuteContext &ctx, const StatusReportOptions &options)
Collect a status report and write to stdout.
Definition status.cpp:40
void registerStatusCommands(CommandParser &parser)
Registers status commands.
Definition status.cpp:118
@ YES
argument can be specified as positional
@ REPORT_FORMAT
Report format 'xml' or 'text'.
static void reportStatusSingleSection(ExecuteContext &ctx, bool StatusReportOptions::*wantSection)
Single-section status command.
Definition status.cpp:98