aboutsummaryrefslogtreecommitdiff
path: root/zen/cmds/projectstore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zen/cmds/projectstore.cpp')
-rw-r--r--zen/cmds/projectstore.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/zen/cmds/projectstore.cpp b/zen/cmds/projectstore.cpp
index b57277c6b..fe0dd713e 100644
--- a/zen/cmds/projectstore.cpp
+++ b/zen/cmds/projectstore.cpp
@@ -781,3 +781,150 @@ ImportOplogCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** arg
ZEN_CONSOLE("{}", FormatHttpResponse(Response));
return MapHttpToCommandReturnCode(Response);
}
+
+ProjectStatsCommand::ProjectStatsCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+}
+
+ProjectStatsCommand::~ProjectStatsCommand() = default;
+
+int
+ProjectStatsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
+{
+ ZEN_UNUSED(GlobalOptions);
+
+ if (!ParseOptions(argc, argv))
+ {
+ return 0;
+ }
+
+ cpr::Session Session;
+ Session.SetUrl({fmt::format("{}/stats/prj", m_HostName)});
+ Session.SetHeader(cpr::Header{{"Accept", "application/json"}});
+
+ cpr::Response Result = Session.Get();
+
+ if (zen::IsHttpSuccessCode(Result.status_code))
+ {
+ ZEN_CONSOLE("{}", Result.text);
+
+ return 0;
+ }
+
+ if (Result.status_code)
+ {
+ ZEN_ERROR("Info failed: {}: {} ({})", Result.status_code, Result.reason, Result.text);
+ }
+ else
+ {
+ ZEN_ERROR("Info failed: {}", Result.error.message);
+ }
+
+ return 1;
+}
+
+ProjectDetailsCommand::ProjectDetailsCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+ m_Options.add_option("", "c", "csv", "Output in CSV format (default is JSon)", cxxopts::value(m_CSV), "<csv>");
+ m_Options.add_option("", "d", "details", "Detailed info on opslog", cxxopts::value(m_Details), "<details>");
+ m_Options.add_option("", "o", "opdetails", "Details info on oplog body", cxxopts::value(m_OpDetails), "<opdetails>");
+ m_Options.add_option("", "p", "project", "Project name to get info from", cxxopts::value(m_ProjectName), "<projectid>");
+ m_Options.add_option("", "l", "oplog", "Oplog name to get info from", cxxopts::value(m_OplogName), "<oplogid>");
+ m_Options.add_option("", "i", "opid", "Oid of a specific op info for", cxxopts::value(m_OpId), "<opid>");
+ m_Options.add_option("",
+ "a",
+ "attachmentdetails",
+ "Get detailed information about attachments",
+ cxxopts::value(m_AttachmentDetails),
+ "<attachmentdetails>");
+}
+
+ProjectDetailsCommand::~ProjectDetailsCommand() = default;
+
+int
+ProjectDetailsCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
+{
+ ZEN_UNUSED(GlobalOptions);
+
+ if (!ParseOptions(argc, argv))
+ {
+ return 0;
+ }
+
+ cpr::Session Session;
+ cpr::Parameters Parameters;
+ if (m_OpDetails)
+ {
+ Parameters.Add({"opdetails", "true"});
+ }
+ if (m_Details)
+ {
+ Parameters.Add({"details", "true"});
+ }
+ if (m_AttachmentDetails)
+ {
+ Parameters.Add({"attachmentdetails", "true"});
+ }
+ if (m_CSV)
+ {
+ Parameters.Add({"csv", "true"});
+ }
+ else
+ {
+ Session.SetHeader(cpr::Header{{"Accept", "application/json"}});
+ }
+
+ if (!m_OpId.empty())
+ {
+ if (m_ProjectName.empty() || m_OplogName.empty())
+ {
+ ZEN_ERROR("Provide project and oplog name");
+ ZEN_CONSOLE("{}", m_Options.help({""}).c_str());
+ return 1;
+ }
+ Session.SetUrl({fmt::format("{}/prj/details$/{}/{}/{}", m_HostName, m_ProjectName, m_OplogName, m_OpId)});
+ }
+ else if (!m_OplogName.empty())
+ {
+ if (m_ProjectName.empty())
+ {
+ ZEN_ERROR("Provide project name");
+ ZEN_CONSOLE("{}", m_Options.help({""}).c_str());
+ return 1;
+ }
+ Session.SetUrl({fmt::format("{}/prj/details$/{}/{}", m_HostName, m_ProjectName, m_OplogName)});
+ }
+ else if (!m_ProjectName.empty())
+ {
+ Session.SetUrl({fmt::format("{}/prj/details$/{}", m_HostName, m_ProjectName)});
+ }
+ else
+ {
+ Session.SetUrl({fmt::format("{}/prj/details$", m_HostName)});
+ }
+ Session.SetParameters(Parameters);
+
+ cpr::Response Result = Session.Get();
+
+ if (zen::IsHttpSuccessCode(Result.status_code))
+ {
+ ZEN_CONSOLE("{}", Result.text);
+
+ return 0;
+ }
+
+ if (Result.status_code)
+ {
+ ZEN_ERROR("Info failed: {}: {} ({})", Result.status_code, Result.reason, Result.text);
+ }
+ else
+ {
+ ZEN_ERROR("Info failed: {}", Result.error.message);
+ }
+
+ return 1;
+}