Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 0 additions & 53 deletions ChronoVisor/src/VisorClientPortal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -392,59 +392,6 @@ int chronolog::VisorClientPortal::ShowStories(chl::ClientId const& client_id,
}


/*
/////////////////
int chronolog::VisorClientPortal::LocalDestroyStory(std::string const& chronicle_name, std::string const&story_name)
{ int return_code = chronolog::CL_SUCCESS;

return return_code;
}


/////////////////
AcquireStoryResponseMsg const& chronolog::VisorClientPortal::LocalAcquireStory(
chronolog::ClientId const&client_id
, std::string const&chronicle_name,
std::string const&story_name,
const std::unordered_map<std::string, std::string> &attrs,
int &flags)
{
int return_code = chronolog::CL_SUCCESS;

return return_code;
}


/////////////////
int chronolog::VisorClientPortal::LocalReleaseStory( chronolog::ClientId const&client_id
, std::string const&chronicle_name, std::string const&story_name)
{
int return_code = chronolog::CL_SUCCESS;

return return_code;
}


/////////////////
int chronolog::VisorClientPortal::LocalGetChronicleAttr( chronolog::ClientId const& client_id
, std::string const&name, const std::string &key, std::string &value)
{
int return_code = chronolog::CL_SUCCESS;

return return_code;
}

/////////////////
int chronolog::VisorClientPortal::LocalEditChronicleAttr( chronolog::ClientId const& client_id
, std::string const&name, const std::string &key, const std::string &value)
{
int return_code = chronolog::CL_SUCCESS;

return return_code;
}


*/
/////////////////

bool chronolog::VisorClientPortal::is_client_authenticated(uint32_t client_account) { return true; }
Expand Down
31 changes: 31 additions & 0 deletions Client/python/py_chronolog_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,37 @@ void BindChronologClient(pybind11::module& m)
.def("AcquireStory", &Client::AcquireStory, pybind11::return_value_policy::reference)
.def("ReleaseStory", &Client::ReleaseStory, pybind11::arg("chronicle_name"), pybind11::arg("story_name"))
.def("DestroyStory", &Client::DestroyStory, pybind11::arg("chronicle_name"), pybind11::arg("story_name"))
.def(
"GetChronicleAttr",
[](Client& self, std::string const& chronicle_name, std::string const& key)
{
std::string value;
int rc = self.GetChronicleAttr(chronicle_name, key, value);
return std::make_pair(rc, value);
},
pybind11::arg("chronicle_name"),
pybind11::arg("key"))
.def("EditChronicleAttr",
&Client::EditChronicleAttr,
pybind11::arg("chronicle_name"),
pybind11::arg("key"),
pybind11::arg("value"))
.def("ShowChronicles",
[](Client& self)
{
std::vector<std::string> chronicles;
int rc = self.ShowChronicles(chronicles);
return std::make_pair(rc, chronicles);
})
.def(
"ShowStories",
[](Client& self, std::string const& chronicle_name)
{
std::vector<std::string> stories;
int rc = self.ShowStories(chronicle_name, stories);
return std::make_pair(rc, stories);
},
pybind11::arg("chronicle_name"))
.def("ReplayStory", &Client::ReplayStory);
};

Expand Down
104 changes: 103 additions & 1 deletion tools/cli/client_cli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,88 @@ static void interactive_destroy_story(std::vector<std::string>& tokens, chronolo
}
}

static void interactive_show_chronicles(std::vector<std::string>& tokens, chronolog::Client& client)
{
if(tokens.size() != 2)
{
std::cerr << "Usage: -l -c" << std::endl;
return;
}
std::vector<std::string> chronicles;
int ret_i = client.ShowChronicles(chronicles);
if(ret_i != chronolog::CL_SUCCESS)
{
std::cout << "Failed to list chronicles, return code: " << chronolog::to_string_client(ret_i) << std::endl;
return;
}
std::cout << "Chronicles (" << chronicles.size() << "):" << std::endl;
for(auto const& name: chronicles) std::cout << " " << name << std::endl;
}

static void interactive_show_stories(std::vector<std::string>& tokens, chronolog::Client& client)
{
if(tokens.size() != 3)
{
std::cerr << "Usage: -l -s <chronicle_name>" << std::endl;
return;
}
const std::string& chronicle_name = tokens[2];
std::vector<std::string> stories;
int ret_i = client.ShowStories(chronicle_name, stories);
if(ret_i != chronolog::CL_SUCCESS)
{
std::cout << "Failed to list stories in Chronicle " << chronicle_name
<< ", return code: " << chronolog::to_string_client(ret_i) << std::endl;
return;
}
std::cout << "Stories in Chronicle " << chronicle_name << " (" << stories.size() << "):" << std::endl;
for(auto const& name: stories) std::cout << " " << name << std::endl;
}

static void interactive_get_chronicle_attr(std::vector<std::string>& tokens, chronolog::Client& client)
{
if(tokens.size() != 3)
{
std::cerr << "Usage: -g <chronicle_name> <key>" << std::endl;
return;
}
const std::string& chronicle_name = tokens[1];
const std::string& key = tokens[2];
std::string value;
int ret_i = client.GetChronicleAttr(chronicle_name, key, value);
if(ret_i == chronolog::CL_SUCCESS)
{
std::cout << chronicle_name << "[" << key << "] = " << value << std::endl;
}
else
{
std::cout << "Failed to get attribute " << key << " from Chronicle " << chronicle_name
<< ", return code: " << chronolog::to_string_client(ret_i) << std::endl;
}
}

static void interactive_edit_chronicle_attr(std::vector<std::string>& tokens, chronolog::Client& client)
{
if(tokens.size() != 4)
{
std::cerr << "Usage: -e <chronicle_name> <key> <value>" << std::endl;
return;
}
const std::string& chronicle_name = tokens[1];
const std::string& key = tokens[2];
const std::string& value = tokens[3];
int ret_i = client.EditChronicleAttr(chronicle_name, key, value);
if(ret_i == chronolog::CL_SUCCESS)
{
std::cout << "Set " << chronicle_name << "[" << key << "] = " << value << std::endl;
}
else
{
std::cout << "Failed to set attribute " << key << " on Chronicle " << chronicle_name
<< ", return code: " << chronolog::to_string_client(ret_i) << std::endl;
}
}

static void interactive_destroy_chronicle(std::vector<std::string>& tokens, chronolog::Client& client)
{
if(tokens.size() != 3)
Expand Down Expand Up @@ -517,6 +599,10 @@ int main(int argc, char** argv)
<< "\t-q -s <chronicle_name> <story_name>, release Story <story_name> in Chronicle <chronicle_name>\n"
<< "\t-d -s <chronicle_name> <story_name>, destroy Story <story_name> in Chronicle <chronicle_name>\n"
<< "\t-d -c <chronicle_name>, destroy Chronicle <chronicle_name>\n"
<< "\t-l -c, list all Chronicles\n"
<< "\t-l -s <chronicle_name>, list Stories in Chronicle <chronicle_name>\n"
<< "\t-g <chronicle_name> <key>, get attribute <key> on Chronicle <chronicle_name>\n"
<< "\t-e <chronicle_name> <key> <value>, set attribute <key>=<value> on Chronicle <chronicle_name>\n"
<< "\t-disconnect\n"
<< std::endl;

Expand Down Expand Up @@ -560,7 +646,23 @@ int main(int argc, char** argv)
{
interactive_destroy_story(command_subs, client);
}
}}};
}},
{"-l",
[&](std::vector<std::string>& command_subs)
{
if(command_subs[1] == "-c")
{
interactive_show_chronicles(command_subs, client);
}
else if(command_subs[1] == "-s")
{
interactive_show_stories(command_subs, client);
}
}},
{"-g",
[&](std::vector<std::string>& command_subs) { interactive_get_chronicle_attr(command_subs, client); }},
{"-e",
[&](std::vector<std::string>& command_subs) { interactive_edit_chronicle_attr(command_subs, client); }}};

std::string command_line;
while(true)
Expand Down
Loading