提交 e5921d9c authored 作者: blu's avatar blu

cloud cmd api for platform client

上级 10e31318
......@@ -525,6 +525,58 @@ private:
return ret;
}
// eventToSlicer["type"] = "event";
// eventTOSlicer["extraInfo"] = json(); //array
// eventToSlicer["start"]
// eventToSlicer["end"]
// eventToSlicer["sender"] = selfId;
json sendEdgeMsg(json &body) {
json ret;
ret["code"] = 0;
ret["msg"] = "ok";
string msg;
try{
auto target = body["target"].get<string>();
auto v = strutils::split(target, ':');
if(v.size() == 1 || v.size() == 3) {
json meta;
meta["type"] = body["type"];
body["sender"] = devSn;
int i= z_send(pRouter, v[0], devSn, meta, body.dump());
if(i < 0) {
msg = fmt::format("evcloudsvc failed to z_zend msg: {} :{}",zmq_strerror(zmq_errno()) ,body.dump());
throw StrException(msg);
}
}else{
msg = fmt::format("evcloudsvc invliad target field({}) in body: {}", target, body.dump());
throw StrException(msg);
}
}catch(exception &e) {
ret["msg"] = e.what();
spdlog::error(e.what());
ret["code"] = -1;
}
return ret;
}
json handleCmd(json &body){
json ret;
ret["code"] = -1;
ret["msg"] = "unkown msg";
spdlog::info("handle cmd");
if(body.count("target") != 0 && body["target"].is_string() && body.count("type") !=0 && body["type"].is_string() &&
body.count("data") != 0 && body["data"].is_object()) {
// it's msg to edge.
return sendEdgeMsg(body);
}else{
return ret;
}
}
protected:
public:
void run()
......@@ -646,6 +698,26 @@ public:
});
svr.Post("/cmd", [this](const Request& req, Response& res) {
json ret;
string msg;
ret["code"] = 0;
ret["msg"] = "ok";
try{
auto body = json::parse(req.body);
ret = this->handleCmd(body);
}catch(exception &e) {
ret["code"] = -1;
msg = fmt::format("evcloudsvc Post /cmd Exception: {}", e.what());
spdlog::error(msg);
ret["msg"] = msg;
}
res.set_content(ret.dump(), "text/json");
});
svr.Get("/keys", [](const Request& req, Response& res) {
string fileName = req.get_param_value("filename");
auto v = LVDB::getKeys(fileName);
......
......@@ -324,7 +324,7 @@ private:
return ret;
}
void sendCmd2Peer(string peerId, string cmdVal, string msg)
int sendCmd2Peer(string peerId, string cmdVal, string msg)
{
json meta;
meta["type"] = EV_MSG_META_TYPE_CMD;
......@@ -336,6 +336,7 @@ private:
else {
spdlog::info("evdaemon {} successfully send msg to peer {}: {} - {}", devSn, peerId, meta.dump(), msg);
}
return ret;
}
int handleEdgeMsg(vector<vector<uint8_t> > &body)
......@@ -485,16 +486,16 @@ private:
int handleCloudMsg(vector<vector<uint8_t> > &v)
{
int ret = 0;
zmq_msg_t msg;
string msg;
// ID_SENDER, meta ,MSG
string peerId, meta;
if(v.size() != 3) {
string msg;
for(auto &s:v) {
msg += body2str(s) + ";";
}
spdlog::error("evdaemon {} received invalid msg from cloud {}", devSn, msg);
}
else {
try {
string meta = json::parse(v[1])["type"];
......@@ -537,6 +538,34 @@ private:
spdlog::info("evdaemon {} skip startup subsystems since BOOTSTRAP is set to false", devSn);
}
}
}else if(meta == EV_MSG_META_TYPE_CMD){
spdlog::info("evdaemon {} received cmd from cloud: {}", devSn, msg);
if(data.count("target") != 0 && data["target"].is_string() && data.count("type") !=0 && data["type"].is_string() &&
data.count("data") != 0 && data["data"].is_object()) {
string target = data["target"];
auto v = strutils::split(target, ':');
if(v.size() == 1) {
spdlog::info("evdaemon {} received msg {} from cloud to itself. TODO: functionality extending points such as debug tunnel", devSn, data.dump());
}else if(v.size() == 3){
if(this->peerData["status"].count(target) == 0 || this->peerData["status"][target] == 0 || this->peerData["status"] == -1) {
spdlog::error("evdaemon {} received {} msg from cloud to {}: {}, but its offline", devSn, meta, target, data.dump());
}else{
ret = sendCmd2Peer(target, "", data.dump());
if(ret < 0) {
spdlog::error("evdaemon {} failed to send msg to peer {}: {}", devSn, data.dump(), zmq_strerror(zmq_errno()));
}else{
spdlog::error("evdaemon {} successfully relayed {} msg from cloud to {}: {}", devSn, meta, target, data.dump());
}
}
}else{
spdlog::info("well");
}
}else{
spdlog::info("done");
}
}else{
spdlog::info("evdaemon {} received msg from cloud that having no handler implemented: {}", devSn, msg);
}
}
else {
......
......@@ -615,10 +615,12 @@ protected:
zmq_msg_t msg;
AVPacket packet;
json eventToSlicer;
// eventToSlicer["type"] = "event";
// eventTOSlicer["extraInfo"] = json(); //array
// eventToSlicer["start"]
// eventToSlicer["end"]
eventToSlicer["sender"] = selfId;
//event relay thread: motion to slicer and sn:evdaemon:0
thEvent = thread([&,this]() {
......
......@@ -156,8 +156,9 @@ private:
metaValue = meta["value"];
}
// msg from cluster mgr
string daemonId = this->devSn + ":evdaemon:0";
// msg from cluster mgr
if(peerId == daemonId) {
if(metaValue == EV_MSG_META_VALUE_CMD_STOP || metaValue == EV_MSG_META_VALUE_CMD_RESTART) {
spdlog::info("evslicer {} received {} cmd from cluster mgr {}", selfId, metaValue, daemonId);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论