bool NodeToVnfmEvent:: unknown(NodeData & a_rNodeData, DashBoard & a_board) { gLog->WARNING("unknown"); gLog->WARNING("%-24s| unknown - [%d] [%s]", "NodeToVnfmEvent", a_rNodeData.GetCommand(), a_rNodeData.GetBody().c_str()); return true; }
bool NodeToVnfmEvent:: perfTps(NodeData & a_rNodeData, DashBoard & a_board) { m_sHttpData.Clear(); gLog->DEBUG("%-24s| perf tps", "NodeToVnfmEvent"); // vector 로 전달 된다고 합시다. // timestamp, Tps_Title, Tps_Cnt // Tps_Name 으로 된 값에 Sum 을 해서 보내야 하나요?? // 받아서 Board 에 Sum 만 하면 되요.. std::string timestamp; std::string tpsTitle; int cnt; std::string & apiMsg = a_rNodeData.GetBody(); size_t first = 0; size_t end = apiMsg.find('\0', first); try { timestamp = apiMsg.substr(first).c_str(); first = end + 1; end = apiMsg.find('\0', first); tpsTitle= apiMsg.substr(first).c_str(); first = end + 1; end = apiMsg.find('\0', first); cnt = atoi(apiMsg.substr(first).c_str()); } catch(std::exception & e) { gLog->WARNING("%-24s| perfTps - pasing fail", "NodeToVnfmEvent"); return false; } a_board.SetTPS(timestamp, tpsTitle, cnt); gLog->DEBUG("---- TPS : [%s] [%d]", tpsTitle.c_str(), cnt); return true; }
bool NodeToVnfmEvent:: perf(NodeData & a_rNodeData, DashBoard & a_board) { m_sHttpData.Clear(); gLog->DEBUG("%-24s| perf", "NodeToVnfmEvent"); std::string & body = a_rNodeData.GetBody(); if(body.size() <= 0) { gLog->WARNING("%-24s| perf - no body", "NodeToVnfmEvent"); return false; } gLog->DEBUG("%-24s| perf - [%s]", "NodeToVnfmEvent", body.c_str()); try { rabbit::document doc; doc.parse(body); // 1) CPU rabbit::array cpu_list = doc["BODY"]["RSC_GRP_04"]["LIST"]; std::string key = (cpu_list.at(0)).as_string(); std::string cpu_usage = doc["BODY"]["RSC_GRP_04"][key.c_str()]["usage"].as_string(); a_board.SetCPU(cpu_usage); // 2) MEM rabbit::array mem_list = doc["BODY"]["RSC_GRP_02"]["LIST"]; key = (mem_list.at(0)).as_string(); std::string mem_usage = doc["BODY"]["RSC_GRP_02"][key.c_str()]["usage"].as_string(); a_board.SetMEM(mem_usage); // 4) NET std::string net_rx; std::string net_tx; rabbit::array net_list = doc["BODY"]["RSC_GRP_11"]["LIST"]; for(auto nLoop = 0u; nLoop < net_list.size(); ++nLoop) { key = net_list.at(nLoop).as_string(); net_rx = doc["BODY"]["RSC_GRP_11"][key.c_str()]["RX"].as_string(); net_tx = doc["BODY"]["RSC_GRP_11"][key.c_str()]["TX"].as_string(); a_board.SetNET(key, net_rx, net_tx); } // 5) TIME std::string timestamp = doc["BODY"]["time"].as_string(); std::string dst_yn = doc["BODY"]["dst_yn"].as_string(); a_board.SetTIME(timestamp, dst_yn); // 3) DISK unsigned long long disk_total = 0; unsigned long long disk_used = 0; rabbit::array disk_list = doc["BODY"]["RSC_GRP_05"]["LIST"]; for(auto nLoop = 0u; nLoop < disk_list.size(); ++nLoop) { key = disk_list.at(nLoop).as_string(); disk_total += atoll(doc["BODY"]["RSC_GRP_05"][key.c_str()]["total"].as_string().c_str()); disk_used += atoll(doc["BODY"]["RSC_GRP_05"][key.c_str()]["used"].as_string().c_str()); } unsigned long long disk_used_percent = 0; if(disk_total == 0) disk_used_percent = 0; else disk_used_percent = (disk_used / disk_total) * 100; key = "total"; std::string disk_usage = std::to_string(disk_used_percent); a_board.SetDISK(key, disk_usage); } catch(rabbit::type_mismatch & e) { gLog->WARNING("%-24s| perf - type mismatch [%s]", "NodeToVnfmEvent", body.c_str()); return false; } catch(rabbit::parse_error & e) { gLog->WARNING("%-24s| perf - parse error [%s]", "NodeToVnfmEvent", body.c_str()); return false; } catch(...) { gLog->WARNING("%-24s| perf - [%s]", "NodeToVnfmEvent", body.c_str()); return false; } return true; }
bool NodeToVnfmEvent:: event(NodeData & a_rNodeData, DashBoard & a_board) { gLog->DEBUG("%-24s| event", "NodeToVnfmEvent"); m_sHttpData.Clear(); std::string event_type; std::string timestamp; std::string code; std::string severity; std::string probable_cause; std::string additional_text; int coresponse_action_cnt = 0; std::string coresponse_action; try { rabbit::document doc; doc.parse(a_rNodeData.GetBody()); rabbit::object root = doc["BODY"]; event_type = root["event_type"].as_string(); timestamp = root["prc_date"].as_string(); code = root["code"].as_string(); severity = root["perceived_severity"].as_string(); probable_cause = root["probable_cause"].as_string(); additional_text = root["additional_text"].as_string(); if(root["coresponse_action"].is_null() == false) { coresponse_action_cnt = root["coresponse_action_cnt"].as_int(); coresponse_action = root["coresponse_action"].as_string(); } } catch(rabbit::type_mismatch & e) { gLog->WARNING("%-24s| event - type mismatch [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } catch(rabbit::parse_error & e) { gLog->WARNING("%-24s| event - parse error [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } catch(...) { gLog->WARNING("%-24s| event - [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } rabbit::object oRoot; rabbit::object oBody = oRoot["event"]; oBody["server-uuid"] = a_board.GetUUID(); oBody["event_type"] = event_type; oBody["timestamp"] = timestamp; oBody["perceived_severity"] = severity; oBody["additional_text"] = additional_text; oBody["alarm_code"] = code; if(coresponse_action.size() > 0) { if(coresponse_action_cnt == 0) oBody["coresponse_action_cnt"] = 1; else oBody["coresponse_action_cnt"] = coresponse_action_cnt; oBody["coresponse_action"] = coresponse_action; } std::string body = oRoot.str(); char uriBuf[URI_MAX_SIZE]; sprintf(uriBuf, "%s/vnf/event", a_board.GetVnfmServiceURL()); m_sHttpData.AddLine("POST", uriBuf, "HTTP/1.1"); m_sHttpData.AddHeader("Content-Type", "application/json"); m_sHttpData.AddBody(body.c_str(), body.size()); return true; }
bool NodeToVnfmEvent:: subscriber(NodeData & a_rNodeData, DashBoard & a_board) { gLog->DEBUG("%-24s| subscriber", "NodeToVnfmEvent"); m_sHttpData.Clear(); std::string prc_date; std::string dst_yn; try { rabbit::document doc; doc.parse(a_rNodeData.GetBody()); rabbit::object root = doc["BODY"]; prc_date= root["prc_date"].as_string(); dst_yn = root["dst_yn"].as_string(); } catch(rabbit::type_mismatch & e) { gLog->WARNING("%-24s| stopped - type mismatch [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } catch(rabbit::parse_error & e) { gLog->WARNING("%-24s| stopped - parse error [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } catch(...) { gLog->WARNING("%-24s| stopped - [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } // Encoding char callbackUri[URI_MAX_SIZE]; sprintf(callbackUri, "%s/vnf/notification/lifecycle", a_board.GetMyURL()); rabbit::object oRoot; rabbit::object oBody = oRoot["subscriber"]; oBody["server-uuid"] = a_board.GetUUID(); oBody["name"] = "VNF"; oBody["notification_type"] = "VNF Lifecycle Change"; oBody["callback_uri"] = callbackUri; std::string body = oRoot.str(); char uriBuf[URI_MAX_SIZE]; sprintf(uriBuf, "%s/vnf/subscriber", a_board.GetVnfmServiceURL()); m_sHttpData.AddLine("POST", uriBuf, "HTTP/1.1"); m_sHttpData.AddHeader("Content-Type", "application/json"); m_sHttpData.AddBody(body.c_str(), body.size()); return true; }
bool NodeToVnfmEvent:: stopped(NodeData & a_rNodeData, DashBoard & a_board) { gLog->INFO("%-24s| stopped", "NodeToVnfmEvent"); m_sHttpData.Clear(); std::string result; std::string reason; std::string prc_date; std::string dst_yn; try { rabbit::document doc; doc.parse(a_rNodeData.GetBody()); rabbit::object root = doc["BODY"]; result = root["result"].as_string(); reason = root["reason"].as_string(); prc_date= root["prc_date"].as_string(); dst_yn = root["dst_yn"].as_string(); } catch(rabbit::type_mismatch & e) { gLog->WARNING("%-24s| stopped - type mismatch [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } catch(rabbit::parse_error & e) { gLog->WARNING("%-24s| stopped - parse error [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } catch(...) { gLog->WARNING("%-24s| stopped - [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } if(result.compare("OK") != 0) { gLog->WARNING("%-24s| stopped - recevied response, but is not success [%s]", "NodeToVnfmEvent", a_rNodeData.GetBody().c_str()); return false; } // Encoding rabbit::object oRoot; rabbit::object oBody = oRoot["stopped"]; oBody["server-uuid"] = a_board.GetUUID(); oBody["timestamp"] = prc_date; std::string body = oRoot.str(); char uriBuf[256]; sprintf(uriBuf, "%s/vnf/status/stopped", a_board.GetVnfmServiceURL()); m_sHttpData.AddLine("POST", uriBuf, "HTTP/1.1"); m_sHttpData.AddHeader("Content-Type", "application/json"); m_sHttpData.AddBody(body.c_str(), body.size()); return true; }