static uint16_t seqNo = 0;
+#define MAX_TIME_STR 35
+
/*******************************************************************
*
* @brief provide next sequence number of VES event
case VesEventType::PM_NOTIFICATION:
str = "pmNotification";
break;
+ case VesEventType::PM_SLICE:
+ str = "measurement";
+ break;
case VesEventType::HEARTBEAT:
str = "heartbeat";
break;
{
/*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)
{
evntId = getSourceName() + "_" + MODEL_NUMBER_007_DEV;
break;
case VesEventType::HEARTBEAT:
- evntId = getEventTypeToStr() + "_" + getCurrentTime();
+ evntId = getEventTypeToStr() + "_" + formatTime(getCurrentTime());
break;
+ case VesEventType::PM_SLICE:
+ evntId = "_" + stringEpochTime + "_" + "PM1min";
+ break;
+ case VesEventType::FAULT_NOTIFICATION:
+ evntId = getSourceName() + "_" + MODEL_NUMBER_007_DEV;
+ break;
default:
O1_LOG("\nO1 VesCommonHeader : this VES msg Type support in getEventId is \
not available");
break;
}
return evntId;
-
}
/*******************************************************************
evntType = EVENT_TYPE_5G;
break;
case VesEventType::HEARTBEAT:
- evntType = EVENT_TYPE_ORAN_COMPONENET;
+ evntType = EVENT_TYPE_ORAN_COMPONENT;
+ break;
+ case VesEventType::PM_SLICE:
+ evntType = EVENT_TYPE_ORAN_COMPONENT_PM;
break;
+ case VesEventType::FAULT_NOTIFICATION:
+ evntType = EVENT_TYPE_5G;
+ break;
default:
O1_LOG("\nO1 VesCommonHeader : this VES msg Type support in getEvenType is \
not available");
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");
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:
+ evntName = getEventTypeToStr() + "_" + EVENT_TYPE_ORAN_COMPONENT_PM;
break;
+ case VesEventType::FAULT_NOTIFICATION:
+ evntName = getEventTypeToStr() + "_" + EVENT_TYPE_5G;
+ break;
default:
O1_LOG("\nO1 VesCommonHeader : This VES msg Type support in getEventName is \
-not available");
+ not available");
break;
}
return evntName;
string VesCommonHeader::getReportingEntityName()
{
- /*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 = getSourceName();
break;
+ case VesEventType::PM_SLICE:
+ evntName = PM_REPORTING_ENTITY;
+ break;
+ case VesEventType::FAULT_NOTIFICATION:
+ evntName = getSourceName();
+ break;
default:
O1_LOG("\nO1 VesCommonHeader : This VES msg Type support in \
-getReportingEntityName is not available");
+ getReportingEntityName is not available");
break;
}
return evntName;
string VesCommonHeader::getSourceName()
{
- /*Currently PNF_REGISTRATION only supported. This function need to be updated
- in later releases*/
return ODU_HIGH;
}
string VesCommonHeader::getNamingCode()
{
- /*Currently PNF_REGISTRATION only supported. This function need to be updated
- in later releases*/
return NAMING_CODE_ODU;
}
/*******************************************************************
*
- * @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();
}
/*******************************************************************
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*/
+ uint64_t 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", \
{
ret = false;
}
- else if(JsonHelper::addNodeToObject(commonHeader, "sequence", \
+
+ 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;
+ }
+ else if(JsonHelper::addNodeToObject(commonHeader, "nfcNamingCode", \
+ "") == 0)
+ {
+ ret = false;
+ }
+ else if(JsonHelper::addNodeToObject(commonHeader, "stndDefinedNamespace", \
+ "") == 0)
+ {
+ ret = false;
+ }
+ }
+
+ if (mEventType == VesEventType::PNF_REGISTRATION)
+ {
+
+ }
+
+ if(JsonHelper::addNodeToObject(commonHeader, "sequence", \
getSequenceNo()) == 0)
{
ret = false;
{
ret = false;
}
- else if(JsonHelper::addNodeToObject(commonHeader, "sourceId", \
+ else if(JsonHelper::addNodeToObject(commonHeader, "sourceId", \
"") == 0)
{
ret = false;
{
ret = false;
}
- else if(JsonHelper::addNodeToObject(commonHeader, "startEpochMicrosec", \
- (double) getEpochTime()) == 0)
+ else if(JsonHelper::addNodeToObject(commonHeader, "startEpochMicrosec", \
+ (double)startEpochTime) == 0)
{
ret = false;
}
else if(JsonHelper::addNodeToObject(commonHeader, "lastEpochMicrosec", \
- (double) getEpochTime()) == 0)
+ (double)mLastEpochTime) == 0)
{
ret = false;
}
else if(JsonHelper::addNodeToObject(commonHeader, "nfNamingCode", \
- getNamingCode().c_str()) == 0)
+ (type==VesEventType::PNF_REGISTRATION) ? \
+ getNamingCode().c_str() : "") == 0)
{
ret = false;
}
{
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)
+
+ if (mEventType == VesEventType::PM_SLICE)
{
- ret = false;
+ if(JsonHelper::addNodeToObject(commonHeader, "version", \
+ VERSION_4_1) == 0)
+ {
+ ret = false;
+ }
+ }
+ else
+ {
+ if(JsonHelper::addNodeToObject(commonHeader, "version", \
+ VERSION_4_0_1) == 0)
+ {
+ ret = false;
+ }
}
- else if(JsonHelper::addNodeToObject(commonHeader, "vesEventListenerVersion", \
+
+ if(JsonHelper::addNodeToObject(commonHeader, "vesEventListenerVersion", \
VES_EVENT_LISTENER_7_2_1) == 0)
{
ret = false;
O1_LOG("\nO1 VesCommonHeader : VES common Header prepared");
}
return ret;
-
}
/**********************************************************************