Skip to content
Snippets Groups Projects
Commit 42e933be authored by Michael Davis's avatar Michael Davis
Browse files

[cta_admin] Parses subcommand name

parent 3d4af315
No related branches found
No related tags found
No related merge requests found
......@@ -23,7 +23,7 @@
#include "CtaAdminCmdParse.hpp"
#include "CtaAdminCmd.hpp"
#include "XrdSsiPbException.hpp"
#include "XrdSsiPbDebug.hpp"
......@@ -33,6 +33,8 @@ namespace admin {
CtaAdminCmd::CtaAdminCmd(int argc, const char *const *const argv) :
m_execname(argv[0])
{
auto &admincmd = *(m_request.mutable_admincmd());
// Strip path from execname
size_t p = m_execname.find_last_of('/');
......@@ -57,6 +59,22 @@ CtaAdminCmd::CtaAdminCmd(int argc, const char *const *const argv) :
}
}
admincmd.set_cmd(cmd_it->second.cmd);
// Parse the subcommand
int nextarg = 2;
if(cmd_it->second.sub_cmd.size() > 0)
{
if(argc < 3) throwUsage();
auto sub_it = cmd_it->second.sub_cmd.find(argv[nextarg++]);
if(sub_it == cmd_it->second.sub_cmd.end()) throwUsage();
admincmd.set_subcmd(subCmd.at(*sub_it));
}
#if 0
// Tokenize the command
......@@ -95,6 +113,13 @@ void CtaAdminCmd::throwUsage()
throw std::runtime_error(help.str());
}
void CtaAdminCmd::send()
{
XrdSsiPb::OutputJsonString(std::cout, &m_request.admincmd());
}
}} // namespace cta::admin
......@@ -112,8 +137,11 @@ int main(int argc, const char **argv)
try {
// Tokenize and parse the command line arguments
CtaAdminCmd cmd(argc, argv);
// Send the protocol buffer
cmd.send();
return 0;
} catch (XrdSsiPb::PbException &ex) {
std::cerr << "Error in Google Protocol Buffers: " << ex.what() << std::endl;
......
......@@ -29,9 +29,14 @@ class CtaAdminCmd
public:
CtaAdminCmd(int argc, const char *const *const argv);
/*!
* Send the protocol buffer across the XRootD SSI transport
*/
void send();
private:
/*!
* Throw an exception with generic usage help
* Throw an exception with usage help
*/
void throwUsage();
......@@ -40,6 +45,7 @@ private:
*/
std::string m_execname; //!< Executable name of this program
std::vector<std::string> m_requestTokens; //!< The command line parameters represented as a vector of strings
cta::xrd::Request m_request; //!< Protocol Buffer for the command and parameters
};
}} // namespace cta::admin
......
......@@ -76,5 +76,18 @@ const std::map<std::string, SubCommand> shortCmd = {
{ "ve", { AdminCmd::CMD_VERIFY, { "add", "rm", "ls", "err" }} }
};
}} // namespace cta::admin
const std::map<std::string, AdminCmd::SubCmd> subCmd = {
{ "add", AdminCmd::SUBCMD_ADD },
{ "ch", AdminCmd::SUBCMD_CH },
{ "err", AdminCmd::SUBCMD_ERR },
{ "label", AdminCmd::SUBCMD_LABEL },
{ "ls", AdminCmd::SUBCMD_LS },
{ "reclaim", AdminCmd::SUBCMD_RECLAIM },
{ "rm", AdminCmd::SUBCMD_RM },
{ "up", AdminCmd::SUBCMD_UP },
{ "down", AdminCmd::SUBCMD_DOWN },
{ "read", AdminCmd::SUBCMD_READ },
{ "write", AdminCmd::SUBCMD_WRITE }
};
}} // namespace cta::admin
......@@ -93,39 +93,40 @@ message OptionString {
message AdminCmd {
enum Cmd {
CMD_ADMIN = 0;
CMD_ADMINHOST = 1;
CMD_ARCHIVEFILE = 2;
CMD_ARCHIVEROUTE = 3;
CMD_DRIVE = 4;
CMD_GROUPMOUNTRULE = 5;
CMD_LISTPENDINGARCHIVES = 6;
CMD_LISTPENDINGRETRIEVES = 7;
CMD_LOGICALLIBRARY = 8;
CMD_MOUNTPOLICY = 9;
CMD_REPACK = 10;
CMD_REQUESTERMOUNTRULE = 11;
CMD_SHOWQUEUES = 12;
CMD_SHRINK = 13;
CMD_STORAGECLASS = 14;
CMD_TAPE = 15;
CMD_TAPEPOOL = 16;
CMD_TEST = 17;
CMD_VERIFY = 18;
CMD_NONE = 0;
CMD_ADMIN = 1;
CMD_ADMINHOST = 2;
CMD_ARCHIVEFILE = 3;
CMD_ARCHIVEROUTE = 4;
CMD_DRIVE = 5;
CMD_GROUPMOUNTRULE = 6;
CMD_LISTPENDINGARCHIVES = 7;
CMD_LISTPENDINGRETRIEVES = 8;
CMD_LOGICALLIBRARY = 9;
CMD_MOUNTPOLICY = 10;
CMD_REPACK = 11;
CMD_REQUESTERMOUNTRULE = 12;
CMD_SHOWQUEUES = 13;
CMD_SHRINK = 14;
CMD_STORAGECLASS = 15;
CMD_TAPE = 16;
CMD_TAPEPOOL = 17;
CMD_TEST = 18;
CMD_VERIFY = 19;
}
enum SubCmd {
CMD_NONE = 0;
CMD_ADD = 1;
CMD_CH = 2;
CMD_ERR = 3;
CMD_LABEL = 4;
CMD_LS = 5;
CMD_RECLAIM = 6;
CMD_RM = 7;
CMD_UP = 8;
CMD_DOWN = 9;
CMD_READ = 10;
CMD_WRITE = 11;
SUBCMD_NONE = 0;
SUBCMD_ADD = 1;
SUBCMD_CH = 2;
SUBCMD_ERR = 3;
SUBCMD_LABEL = 4;
SUBCMD_LS = 5;
SUBCMD_RECLAIM = 6;
SUBCMD_RM = 7;
SUBCMD_UP = 8;
SUBCMD_DOWN = 9;
SUBCMD_READ = 10;
SUBCMD_WRITE = 11;
}
Cmd cmd = 1; //< The primary command
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment