mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralgw.git
synced 2025-11-03 04:07:50 +00:00
Adding processing for system commands to support OS information.
This commit is contained in:
@@ -2173,9 +2173,7 @@ paths:
|
||||
name: command
|
||||
schema:
|
||||
type: string
|
||||
enum:
|
||||
- version
|
||||
- times
|
||||
description: A list made up of the words - version, times, host
|
||||
required: true
|
||||
|
||||
responses:
|
||||
|
||||
@@ -93,14 +93,11 @@ namespace OpenWifi {
|
||||
std::lock_guard G(Mutex_);
|
||||
CommandTagIndex TI{.Id=Id,.SerialNumber=SerialNumber};
|
||||
auto Hint=OutStandingRequests_.find(TI);
|
||||
if(Hint!=OutStandingRequests_.end()) {
|
||||
if(Hint->second.Completed) {
|
||||
T = Hint->second;
|
||||
OutStandingRequests_.erase(Hint);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
if(Hint==OutStandingRequests_.end() || Hint->second.Completed==0)
|
||||
return false;
|
||||
T = Hint->second;
|
||||
OutStandingRequests_.erase(Hint);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CommandManager::SendCommand( const std::string &SerialNumber,
|
||||
@@ -110,25 +107,24 @@ namespace OpenWifi {
|
||||
uint64_t & Id) {
|
||||
|
||||
std::stringstream ToSend;
|
||||
{
|
||||
std::lock_guard G(Mutex_);
|
||||
Id = ++Id_;
|
||||
Poco::JSON::Object CompleteRPC;
|
||||
CompleteRPC.set(uCentralProtocol::JSONRPC, uCentralProtocol::JSONRPC_VERSION);
|
||||
CompleteRPC.set(uCentralProtocol::ID, Id);
|
||||
CompleteRPC.set(uCentralProtocol::METHOD, Method);
|
||||
CompleteRPC.set(uCentralProtocol::PARAMS, Params);
|
||||
Poco::JSON::Stringifier::stringify(CompleteRPC, ToSend);
|
||||
Logger_.information(
|
||||
Poco::format("(%s): Sending command '%s', ID: %lu", SerialNumber, Method, Id));
|
||||
CommandTagIndex Idx{.Id = Id, .SerialNumber = SerialNumber};
|
||||
CommandTag Tag;
|
||||
Tag.UUID = UUID;
|
||||
Tag.Submitted = std::time(nullptr);
|
||||
Tag.Completed = 0;
|
||||
Tag.Result = Poco::makeShared<Poco::JSON::Object>();
|
||||
OutStandingRequests_[Idx] = Tag;
|
||||
}
|
||||
std::unique_lock G(Mutex_);
|
||||
Id = ++Id_;
|
||||
Poco::JSON::Object CompleteRPC;
|
||||
CompleteRPC.set(uCentralProtocol::JSONRPC, uCentralProtocol::JSONRPC_VERSION);
|
||||
CompleteRPC.set(uCentralProtocol::ID, Id);
|
||||
CompleteRPC.set(uCentralProtocol::METHOD, Method);
|
||||
CompleteRPC.set(uCentralProtocol::PARAMS, Params);
|
||||
Poco::JSON::Stringifier::stringify(CompleteRPC, ToSend);
|
||||
Logger_.information(
|
||||
Poco::format("(%s): Sending command '%s', ID: %lu", SerialNumber, Method, Id));
|
||||
CommandTagIndex Idx{.Id = Id, .SerialNumber = SerialNumber};
|
||||
CommandTag Tag;
|
||||
Tag.UUID = UUID;
|
||||
Tag.Submitted = std::time(nullptr);
|
||||
Tag.Completed = 0;
|
||||
Tag.Result = Poco::makeShared<Poco::JSON::Object>();
|
||||
OutStandingRequests_[Idx] = Tag;
|
||||
G.unlock();
|
||||
return DeviceRegistry()->SendFrame(SerialNumber, ToSend.str());
|
||||
}
|
||||
|
||||
@@ -142,7 +138,7 @@ namespace OpenWifi {
|
||||
uint64_t ID = Obj->get(uCentralProtocol::ID);
|
||||
if(ID<2)
|
||||
return;
|
||||
std::lock_guard G(Mutex_);
|
||||
std::unique_lock G(Mutex_);
|
||||
auto Idx = CommandTagIndex{.Id = ID, .SerialNumber = SerialNumber};
|
||||
auto RPC = OutStandingRequests_.find(Idx);
|
||||
if (RPC == OutStandingRequests_.end()) {
|
||||
@@ -152,6 +148,7 @@ namespace OpenWifi {
|
||||
RPC->second.Completed = std::time(nullptr);
|
||||
RPC->second.Result = Obj;
|
||||
Logger_.information(Poco::format("(%s): Received RPC answer %lu", SerialNumber, ID));
|
||||
G.unlock();
|
||||
Storage()->CommandCompleted(RPC->second.UUID, Obj, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ namespace OpenWifi::RESTAPI::Protocol {
|
||||
static const char * COMMANDUUID = "commandUUID";
|
||||
static const char * FIRMWARES = "firmwares";
|
||||
static const char * TOPIC = "topic";
|
||||
static const char * HOST = "host";
|
||||
static const char * REASON = "reason";
|
||||
static const char * FILEUUID = "uuid";
|
||||
static const char * USERID = "userId";
|
||||
|
||||
@@ -80,28 +80,31 @@ namespace OpenWifi {
|
||||
|
||||
void RESTAPI_system_command::DoGet() {
|
||||
auto Command = GetParameter(RESTAPI::Protocol::COMMAND, "");
|
||||
if (!Poco::icompare(Command, RESTAPI::Protocol::VERSION)) {
|
||||
Poco::JSON::Object Answer;
|
||||
Answer.set(RESTAPI::Protocol::TAG, RESTAPI::Protocol::VERSION);
|
||||
Answer.set(RESTAPI::Protocol::VALUE, Daemon()->Version());
|
||||
ReturnObject(Answer);
|
||||
return;
|
||||
Poco::StringTokenizer Tokens(Command,",");
|
||||
|
||||
Poco::JSON::Object Answer;
|
||||
|
||||
for(const auto &i:Tokens) {
|
||||
if (!Poco::icompare(i, RESTAPI::Protocol::VERSION)) {
|
||||
Answer.set(RESTAPI::Protocol::TAG, RESTAPI::Protocol::VERSION);
|
||||
Answer.set(RESTAPI::Protocol::VALUE, Daemon()->Version());
|
||||
} else if (!Poco::icompare(i, RESTAPI::Protocol::TIMES)) {
|
||||
Poco::JSON::Array Array;
|
||||
Poco::JSON::Object UpTimeObj;
|
||||
UpTimeObj.set(RESTAPI::Protocol::TAG, RESTAPI::Protocol::UPTIME);
|
||||
UpTimeObj.set(RESTAPI::Protocol::VALUE, Daemon()->uptime().totalSeconds());
|
||||
Poco::JSON::Object StartObj;
|
||||
StartObj.set(RESTAPI::Protocol::TAG, RESTAPI::Protocol::START);
|
||||
StartObj.set(RESTAPI::Protocol::VALUE, Daemon()->startTime().epochTime());
|
||||
Array.add(UpTimeObj);
|
||||
Array.add(StartObj);
|
||||
Answer.set(RESTAPI::Protocol::TIMES, Array);
|
||||
} else if (!Poco::icompare(i, RESTAPI::Protocol::HOST)) {
|
||||
Answer.set("os", Poco::Environment::osName());
|
||||
Answer.set("processors", Poco::Environment::processorCount());
|
||||
Answer.set("hostname",Poco::Environment::nodeName());
|
||||
}
|
||||
}
|
||||
if (!Poco::icompare(Command, RESTAPI::Protocol::TIMES)) {
|
||||
Poco::JSON::Array Array;
|
||||
Poco::JSON::Object Answer;
|
||||
Poco::JSON::Object UpTimeObj;
|
||||
UpTimeObj.set(RESTAPI::Protocol::TAG,RESTAPI::Protocol::UPTIME);
|
||||
UpTimeObj.set(RESTAPI::Protocol::VALUE, Daemon()->uptime().totalSeconds());
|
||||
Poco::JSON::Object StartObj;
|
||||
StartObj.set(RESTAPI::Protocol::TAG,RESTAPI::Protocol::START);
|
||||
StartObj.set(RESTAPI::Protocol::VALUE, Daemon()->startTime().epochTime());
|
||||
Array.add(UpTimeObj);
|
||||
Array.add(StartObj);
|
||||
Answer.set(RESTAPI::Protocol::TIMES, Array);
|
||||
ReturnObject(Answer);
|
||||
return;
|
||||
}
|
||||
BadRequest("Unsupported or missing parameters.");
|
||||
ReturnObject(Answer);
|
||||
}
|
||||
}
|
||||
@@ -115,7 +115,7 @@ namespace OpenWifi {
|
||||
bool CommandCompleted(std::string & UUID, const Poco::JSON::Object::Ptr & ReturnVars, bool FullCommand);
|
||||
bool AttachFileToCommand(std::string & UUID);
|
||||
bool CancelWaitFile( std::string & UUID, std::string & ErrorText );
|
||||
bool GetAttachedFile(std::string & UUID, std::string & SerialNumber, const std::string & FileName, std::string &Type);
|
||||
bool GetAttachedFile(std::string & UUID, const std::string & SerialNumber, const std::string & FileName, std::string &Type);
|
||||
bool RemoveAttachedFile(std::string & UUID);
|
||||
bool SetCommandResult(std::string & UUID, std::string & Result);
|
||||
bool GetNewestCommands(std::string &SerialNumber, uint64_t HowMany, std::vector<GWObjects::CommandDetails> & Commands);
|
||||
|
||||
@@ -38,6 +38,7 @@ namespace OpenWifi {
|
||||
uint64_t,
|
||||
uint64_t,
|
||||
std::string> CommandDetailsRecordTuple;
|
||||
typedef std::vector<CommandDetailsRecordTuple> CommandDetailsRecordList;
|
||||
|
||||
bool Storage::AddCommand(std::string &SerialNumber, GWObjects::CommandDetails &Command, CommandExecutionType Type) {
|
||||
try {
|
||||
@@ -239,7 +240,7 @@ namespace OpenWifi {
|
||||
return false;
|
||||
}
|
||||
|
||||
typedef std::vector<CommandDetailsRecordTuple> RecordList;
|
||||
// typedef std::vector<CommandDetailsRecordTuple> RecordList;
|
||||
|
||||
bool Storage::GetNonExecutedCommands(uint64_t Offset, uint64_t HowMany,
|
||||
std::vector<GWObjects::CommandDetails> &Commands) {
|
||||
@@ -266,7 +267,7 @@ namespace OpenWifi {
|
||||
*/
|
||||
|
||||
try {
|
||||
RecordList Records;
|
||||
CommandDetailsRecordList Records;
|
||||
|
||||
Poco::Data::Session Sess = Pool_->get();
|
||||
Poco::Data::Statement Select(Sess);
|
||||
@@ -466,7 +467,7 @@ namespace OpenWifi {
|
||||
|
||||
bool Storage::GetNewestCommands(std::string &SerialNumber, uint64_t HowMany, std::vector<GWObjects::CommandDetails> &Commands) {
|
||||
try {
|
||||
RecordList Records;
|
||||
CommandDetailsRecordList Records;
|
||||
|
||||
Poco::Data::Session Sess = Pool_->get();
|
||||
Poco::Data::Statement Select(Sess);
|
||||
@@ -728,7 +729,7 @@ namespace OpenWifi {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Storage::GetAttachedFile(std::string &UUID, std::string & SerialNumber, const std::string &FileName, std::string &Type) {
|
||||
bool Storage::GetAttachedFile(std::string &UUID, const std::string & SerialNumber, const std::string &FileName, std::string &Type) {
|
||||
try {
|
||||
Poco::Data::LOB<char> L;
|
||||
/*
|
||||
|
||||
@@ -513,7 +513,7 @@ dashboard() {
|
||||
}
|
||||
|
||||
gwversion() {
|
||||
curl ${FLAGS} -X GET "https://${OWGW}/api/v1/system?command=version" \
|
||||
curl ${FLAGS} -X GET "https://${OWGW}/api/v1/system?command=version,times,host" \
|
||||
-H "accept: application/json" \
|
||||
-H "Authorization: Bearer ${token}" > ${result_file}
|
||||
jq < ${result_file}
|
||||
|
||||
Reference in New Issue
Block a user