X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fo1%2Fves%2FVesCommonHeader.cpp;h=23e274f200add30744d05024d02f337123ebe668;hb=0c4403cc2355cc38d01c6645b1dad36dd4c1daa7;hp=864ea84ca97c05722f358ff940627f041755546b;hpb=6fe137e5c6f9470f4f48448f5651573c42bd8aed;p=o-du%2Fl2.git diff --git a/src/o1/ves/VesCommonHeader.cpp b/src/o1/ves/VesCommonHeader.cpp index 864ea84ca..23e274f20 100644 --- a/src/o1/ves/VesCommonHeader.cpp +++ b/src/o1/ves/VesCommonHeader.cpp @@ -27,8 +27,11 @@ #include #include "JsonHelper.hpp" #include "VesCommonHeader.hpp" +#include "VesUtils.hpp" -static uint16_t seqNo = 0; +static double seqNo = 0; + +#define MAX_TIME_STR 35 /******************************************************************* * @@ -46,7 +49,7 @@ static uint16_t seqNo = 0; * * ****************************************************************/ -uint16_t VesCommonHeader::nextSequenceNo() +double VesCommonHeader::nextSequenceNo() { return seqNo++; } @@ -67,7 +70,7 @@ uint16_t VesCommonHeader::nextSequenceNo() * * ****************************************************************/ -uint16_t VesCommonHeader::getSequenceNo() +double VesCommonHeader::getSequenceNo() { return seqNo; } @@ -98,11 +101,22 @@ string VesCommonHeader::getEventTypeToStr() str = "pnfRegistration"; break; case VesEventType::FAULT_NOTIFICATION: - str = "faultNotification"; + #ifdef StdDef + str = "stndDefined"; + #else + str = "fault"; + #endif break; case VesEventType::PM_NOTIFICATION: str = "pmNotification"; break; + case VesEventType::PM_SLICE: + #ifdef StdDef + str = "stndDefined"; + #else + str = "measurement"; + #endif + break; case VesEventType::HEARTBEAT: str = "heartbeat"; break; @@ -134,6 +148,9 @@ string VesCommonHeader::getEventId() { /*Currently PNF_REGISTRATION only supported. This function must be updated in later releases*/ + std::ostringstream oss; + oss << mLastEpochTime; + string stringEpochTime = oss.str().substr(0, 10); string evntId = ""; switch(mEventType) { @@ -141,27 +158,40 @@ string VesCommonHeader::getEventId() evntId = getSourceName() + "_" + MODEL_NUMBER_007_DEV; break; case VesEventType::HEARTBEAT: - evntId = getEventTypeToStr() + "_" + getCurrentTime(); + evntId = getEventTypeToStr() + "_" + formatTime(getCurrentTime()); break; + case VesEventType::PM_SLICE: + #ifdef StdDef + evntId = SLICE_EVENTID; + #else + evntId = "_" + stringEpochTime + "_" + "PM1min"; + #endif + break; + case VesEventType::FAULT_NOTIFICATION: + #ifdef StdDef + evntId = FAULT_EVENTID; + #else + evntId ="O_RAN_COMPONENT_Alarms-61"; + #endif + break; default: O1_LOG("\nO1 VesCommonHeader : this VES msg Type support in getEventId is \ not available"); break; } return evntId; - } /******************************************************************* * - * @brief create Ves Event Type + * @brief create Ves Event Type from Ves Event type * * @details * * Function : getEventType * * Functionality: - * - create Ves Event Type + * - create Ves Event Type from Ves Event type * * @params[in] IN - void * @return value of string - success @@ -181,8 +211,18 @@ string VesCommonHeader::getEventType() evntType = EVENT_TYPE_5G; break; case VesEventType::HEARTBEAT: - evntType = EVENT_TYPE_ORAN_COMPONENET; + evntType = EVENT_TYPE_ORAN_COMPONENT; + break; + case VesEventType::PM_SLICE: + #ifdef StdDef + evntType = PM_SLICE_EVENT_TYPE; + #else + evntType = EVENT_TYPE_ORAN_COMPONENT_PM; + #endif break; + case VesEventType::FAULT_NOTIFICATION: + evntType = FAULT_TYPE; + break; default: O1_LOG("\nO1 VesCommonHeader : this VES msg Type support in getEvenType is \ not available"); @@ -222,6 +262,12 @@ string VesCommonHeader::getPriority() case VesEventType::HEARTBEAT: evntId = PRIORITY_LOW; break; + case VesEventType::PM_SLICE: + evntId = PRIORITY_LOW ; + break; + case VesEventType::FAULT_NOTIFICATION: + evntId = PRIORITY_LOW ; + break; default: O1_LOG("\nO1 VesCommonHeader : This VES msg Type support in getPriority is \ not available"); @@ -260,11 +306,25 @@ string VesCommonHeader::getEventName() evntName = getEventTypeToStr() + "_" + EVENT_TYPE_5G; break; case VesEventType::HEARTBEAT: - evntName = getEventTypeToStr() + "_" + EVENT_TYPE_ORAN_COMPONENET; + evntName = getEventTypeToStr() + "_" + EVENT_TYPE_ORAN_COMPONENT; break; + case VesEventType::PM_SLICE: + #ifdef StdDef + evntName = PM_SLICE_EVENT_NAME; + #else + evntName = getEventTypeToStr() + "_" + EVENT_TYPE_ORAN_COMPONENT_PM; + #endif + break; + case VesEventType::FAULT_NOTIFICATION: + #ifdef StdDef + evntName = FAULT_EVENT_NAME; + #else + evntName ="O_RAN_COMPONENT_Alarms"; + #endif + break; default: O1_LOG("\nO1 VesCommonHeader : This VES msg Type support in getEventName is \ -not available"); + not available"); break; } return evntName; @@ -276,7 +336,7 @@ not available"); * * @details * - * Function : getReportingEntityName + * Function : getReportingEntityId * * Functionality: * - create Ves Event Name from Ves Event type @@ -286,20 +346,62 @@ not available"); * empty string - failure * ****************************************************************/ -string VesCommonHeader::getReportingEntityName() +string VesCommonHeader::getReportingEntityId() { - /*Currently PNF_REGISTRATION only supported. This function must be updated - in later releases*/ + /*Currently PNF_REGISTRATION and PM_SLICE are only supported. + This function must be updated in later releases*/ + string evntName = ""; + switch(mEventType) + { + case VesEventType::PNF_REGISTRATION: + evntName = ODU_HIGH; + break; + case VesEventType::PM_SLICE: + evntName = ODU_HIGH; + break; + case VesEventType::FAULT_NOTIFICATION: + evntName = ODU_HIGH; + break; + default: + break; + } + return evntName; +} + +/******************************************************************* + * + * @brief create Reporting Entity Name from Ves Event type + * + * @details + * + * Function : getReportingEntityName + * + * Functionality: + * - create Reporting Entity Name from Ves Event type + * + * @params[in] IN - void + * @return value of string - success + * empty string - failure + * ****************************************************************/ + +string VesCommonHeader::getReportingEntityName() +{ string evntName = ""; switch(mEventType) { case VesEventType::PNF_REGISTRATION: evntName = getSourceName(); break; + case VesEventType::PM_SLICE: + evntName = PM_REPORTING_ENTITY; + break; + case VesEventType::FAULT_NOTIFICATION: + evntName = ODU_HIGH; + break; default: O1_LOG("\nO1 VesCommonHeader : This VES msg Type support in \ -getReportingEntityName is not available"); + getReportingEntityName is not available"); break; } return evntName; @@ -307,14 +409,14 @@ getReportingEntityName is not available"); /******************************************************************* * - * @brief create Ves Event Name from Ves Event type + * @brief create Source Name from Ves Event type * * @details * - * Function : getReportingEntityName + * Function : getSourceName * * Functionality: - * - create Ves Event Name from Ves Event type + * - create Source Name from Ves Event type * * @params[in] IN - void * @return value of string - success @@ -323,9 +425,84 @@ getReportingEntityName is not available"); string VesCommonHeader::getSourceName() { - /*Currently PNF_REGISTRATION only supported. This function need to be updated - in later releases*/ - return ODU_HIGH; + string sourceName = ""; + switch(mEventType) + + { + case VesEventType::PNF_REGISTRATION: + sourceName = ODU_HIGH; + break; + case VesEventType::PM_SLICE: + sourceName = ODU_HIGH; + break; + case VesEventType::FAULT_NOTIFICATION: + sourceName = ODU_HIGH; + break; + default: + break; + } + return sourceName; +} + +/******************************************************************* + * + * @brief create Ves Event SourceId from Ves Event type + * + * @details + * + * Function : getSourceId + * + * Functionality: + * - create Ves Event SourceId from Ves Event type + * + * @params[in] IN - void + * @return value of string - success + * empty string - failure + * ****************************************************************/ +string VesCommonHeader::getSourceId() +{ + string sourceId = ""; + switch(mEventType) + { + case VesEventType::FAULT_NOTIFICATION: + sourceId = SOURCE_ID; + break; + default: + break; + } + return sourceId; +} + +/******************************************************************* + * + * @brief create Ves Event Name from Ves Event type + * + * @details + * + * Function : getnfcNamingCode + * + * Functionality: create Ves Event nfc naming code + * + * @params[in] IN - void + * @return value of string - success + * empty string - failure + * ****************************************************************/ + +string VesCommonHeader::getnfcNamingCode() +{ + string name = ""; + switch(mEventType) + { + case VesEventType::PM_SLICE: + name = NFC_NAMING_CODE; + break; + case VesEventType::FAULT_NOTIFICATION: + name = NFC_NAMING_CODE; + break; + default: + break; + } + return name; } /******************************************************************* @@ -347,9 +524,25 @@ string VesCommonHeader::getSourceName() string VesCommonHeader::getNamingCode() { - /*Currently PNF_REGISTRATION only supported. This function need to be updated - in later releases*/ - return NAMING_CODE_ODU; + + string nammingcdoe = ""; + switch(mEventType) + { + case VesEventType::PNF_REGISTRATION: + nammingcdoe = NAMING_CODE_ODU; + break; + case VesEventType::PM_SLICE: + nammingcdoe = NAMING_CODE_ODU; + break; + case VesEventType::FAULT_NOTIFICATION: + nammingcdoe = NAMING_CODE_ODU; + break; + default: + O1_LOG("\nO1 VesCommonHeader : This VES msg Type support in \ + getReportingEntityName is not available"); + break; + } + return nammingcdoe; } @@ -370,9 +563,9 @@ string VesCommonHeader::getNamingCode() * * ****************************************************************/ -uint64_t VesCommonHeader::getEpochTime() +double VesCommonHeader::getEpochTime() { - uint64_t epochTimeInMicrosec = std::chrono::duration_cast \ + double epochTimeInMicrosec = std::chrono::duration_cast \ \ (std::chrono::system_clock::now().time_since_epoch()).count(); return epochTimeInMicrosec; @@ -380,47 +573,104 @@ uint64_t VesCommonHeader::getEpochTime() /******************************************************************* * - * @brief get current date-time + * @brief get current time * * @details * * Function : getCurrentTime * * Functionality: - * - get current date-time + * - get current time * * @params[in] void - * @return time-date - success + * @return time - success * * ****************************************************************/ -string VesCommonHeader::getCurrentTime() +time_t VesCommonHeader::getCurrentTime() { - time_t t = time(0); + time_t t; + time(&t); + return t; +} + +/******************************************************************* + * + * @brief formats the current time like: + * "Thu, 14 Oct 2021 03:15:00 +0000" + * + * @details + * + * Function : formatTime + * + * Functionality: + * - formats current time + * + * @params[in] void + * @return formatted time - success + * + * ****************************************************************/ + +std::string VesCommonHeader::formatTime(time_t t) { std::ostringstream oss; - char *dateStr; - strftime(dateStr, MAX_TIME_STR, "%F", localtime(&t)); - oss << dateStr; - return oss.str(); + char dateStr[MAX_TIME_STR]; + strftime(dateStr, sizeof(dateStr), "%a, %d %b %Y %T %z", gmtime(&t)); + oss << dateStr; + return oss.str(); } + /******************************************************************* * - * @brief create Ves Event Name from Ves Event type + * @brief create Ves stndDefinedNamespace from Ves Event type * * @details * - * Function : getEventName + * Function : getstndDefinedNamespace + * + * Functionality: create Ves tndDefinedNamespace + * + * @params[in] IN - void + * @return value of string - success + * empty string - failure + * ****************************************************************/ + +string VesCommonHeader::getstndDefinedNamespace() +{ + string stndDefinedNamespace=""; + switch(mEventType) + { + case VesEventType::PM_SLICE: + stndDefinedNamespace = PM_SLICE_STND_DEFINED_NAMESPACE; + break; + case VesEventType::FAULT_NOTIFICATION: + stndDefinedNamespace = FAULT_STND_DEFINED_NAMESPACE; + break; + default: + break; + } + return stndDefinedNamespace; + +} + +/******************************************************************* + * + * @brief Prepare VES Message + * + * @details + * + * Function : prepare * * Functionality: - * - create Ves Event Name from Ves Event type + * - prepare VES event * - * @params[in] IN - VesEventType , OUT - Ves Event Name - * @return ture - success + * @params[in] void + * @return true - success * false - failure * * ****************************************************************/ + bool VesCommonHeader::prepare(cJSON *commonHeader, \ VesEventType type) { @@ -431,8 +681,14 @@ bool VesCommonHeader::prepare(cJSON *commonHeader, \ mEventType = type; seqNo=0; nextSequenceNo(); //update the sequence number for next message + //local utility variables: + time_t intervalStartTime = getCurrentTime(); + time_t intervalEndTime = intervalStartTime+60; /*adding 1 min to system time*/ + double startEpochTime = getEpochTime(); + mLastEpochTime = startEpochTime+60*100000; /*adding 1 min to epoch time*/ + if(JsonHelper::addNodeToObject(commonHeader, "domain", \ - getEventTypeToStr().c_str()) == 0) { + getEventTypeToStr().c_str()) == 0) { ret=false; } else if ( JsonHelper::addNodeToObject(commonHeader, "eventId", \ @@ -450,7 +706,35 @@ bool VesCommonHeader::prepare(cJSON *commonHeader, \ { ret = false; } - else if(JsonHelper::addNodeToObject(commonHeader, "sequence", \ + + #ifdef StdDef + #else + if (mEventType == VesEventType::PM_SLICE) + { + cJSON *internalHeaderFields = JsonHelper::createNode(); + if(internalHeaderFields == 0) + { + ret = false; + } + else if(JsonHelper::addJsonNodeToObject(commonHeader, "internalHeaderFields", \ + internalHeaderFields) == 0) + { + ret = false; + } + else if(JsonHelper::addNodeToObject(internalHeaderFields, "intervalEndTime", \ + formatTime(intervalEndTime).c_str()) == 0) + { + ret = false; + } + else if(JsonHelper::addNodeToObject(internalHeaderFields, "intervalStartTime", \ + formatTime(intervalStartTime).c_str()) == 0) + { + ret = false; + } + } + #endif + + if(JsonHelper::addNodeToObject(commonHeader, "sequence", \ getSequenceNo()) == 0) { ret = false; @@ -461,7 +745,7 @@ bool VesCommonHeader::prepare(cJSON *commonHeader, \ ret = false; } else if(JsonHelper::addNodeToObject(commonHeader, "reportingEntityId", \ - "") == 0) + getReportingEntityId().c_str() ) == 0) { ret = false; } @@ -470,8 +754,8 @@ bool VesCommonHeader::prepare(cJSON *commonHeader, \ { ret = false; } - else if(JsonHelper::addNodeToObject(commonHeader, "sourceId", \ - "") == 0) + else if(JsonHelper::addNodeToObject(commonHeader, "sourceId", \ + getSourceId().c_str() ) == 0) { ret = false; } @@ -480,38 +764,49 @@ bool VesCommonHeader::prepare(cJSON *commonHeader, \ { ret = false; } - else if(JsonHelper::addNodeToObject(commonHeader, "startEpochMicrosec", \ - (double) getEpochTime()) == 0) + else if(JsonHelper::addNodeToObject(commonHeader, "startEpochMicrosec", \ + startEpochTime) == 0) { ret = false; } else if(JsonHelper::addNodeToObject(commonHeader, "lastEpochMicrosec", \ - (double) getEpochTime()) == 0) + mLastEpochTime) == 0) { ret = false; } else if(JsonHelper::addNodeToObject(commonHeader, "nfNamingCode", \ - getNamingCode().c_str()) == 0) + getNamingCode().c_str() ) == 0) { ret = false; } else if(JsonHelper::addNodeToObject(commonHeader, "nfVendorName", \ - "") == 0) + "POC") == 0) + { + ret = false; + } + else if(JsonHelper::addNodeToObject(commonHeader, "nfcNamingCode", \ + getnfcNamingCode().c_str() ) == 0) { ret = false; } - else if(JsonHelper::addNodeToObject(commonHeader, "timeZoneOffset", \ + else if(JsonHelper::addNodeToObject(commonHeader, "timeZoneOffset", \ TIME_ZONE_00_00) == 0) { ret = false; } + else if(JsonHelper::addNodeToObject(commonHeader, "version", \ - VERSION_4_0_1) == 0) + COMMON_HEADER_VERSION) == 0) + { + ret = false; + } + else if(JsonHelper::addNodeToObject(commonHeader, "stndDefinedNamespace", \ + getstndDefinedNamespace().c_str())== 0) { ret = false; } else if(JsonHelper::addNodeToObject(commonHeader, "vesEventListenerVersion", \ - VES_EVENT_LISTENER_7_2_1) == 0) + VES_EVENT_LISNERT_VERSION) == 0) { ret = false; } @@ -520,7 +815,6 @@ bool VesCommonHeader::prepare(cJSON *commonHeader, \ O1_LOG("\nO1 VesCommonHeader : VES common Header prepared"); } return ret; - } /**********************************************************************