message statistics added
Signed-off-by: eantwuh <antal.wu-hen-chang@ericsson.com>
diff --git a/src/EPTF_MQTT_LGen_Definitions.ttcn b/src/EPTF_MQTT_LGen_Definitions.ttcn
index f452981..735e042 100644
--- a/src/EPTF_MQTT_LGen_Definitions.ttcn
+++ b/src/EPTF_MQTT_LGen_Definitions.ttcn
@@ -1048,8 +1048,108 @@
///////////////////////////////////////////////////////////
type function fcb_EPTF_MQTT_messageReceived(in EPTF_MQTT_PDU pl_message) runs on self;
+ /*****************************************************************
+ @startuml EPTF_MQTT_LGen_Definitions.EPTF_MQTT_LGen_Statistics.jpg
+ class EPTF_MQTT_LGen_Statistics {
+ integer noPublishTimeouts
+ integer noSubscribeTimeouts
+ integer noPublishSuccess
+ EPTF_MQTT_Message_Statistics incoming
+ EPTF_MQTT_Message_Statistics outgoing
+ }
+ @enduml
+ ******************************************************************/
+ ///////////////////////////////////////////////////////////
+ // Type: EPTF_MQTT_LGen_Statistics
+ //
+ // Purpose:
+ // Storing counters for load generator related statistics
+ //
+ // Class:
+ // (see EPTF_MQTT_LGen_Definitions.EPTF_MQTT_LGen_Statistics.jpg)
+ //
+ // Elements:
+ // noPublishTimeouts - *integer* - number of publish transaction timeouts
+ // noSubscribeTimeouts - *integer* - number of subscribe transaction timeouts
+ // noPublishSuccess - *integer* - number of succesful publish transactions
+ // incoming - <EPTF_MQTT_Message_Statistics> - statistics of incoming messages
+ // outgoing - <EPTF_MQTT_Message_Statistics> - statistics of outgoing messages
+ ///////////////////////////////////////////////////////////
+ type record EPTF_MQTT_LGen_Statistics
+ {
+ integer noPublishTimeouts,
+ integer noSubscribeTimeouts,
+ integer noPublishSuccess,
+ EPTF_MQTT_Message_Statistics incoming,
+ EPTF_MQTT_Message_Statistics outgoing
+ }
+
+ const EPTF_MQTT_LGen_Statistics c_EPTF_MQTT_LGen_Statistics_empty :=
+ {
+ noPublishTimeouts := 0,
+ noSubscribeTimeouts := 0,
+ noPublishSuccess := 0,
+ incoming := c_EPTF_MQTT_Message_Statistics_empty,
+ outgoing := c_EPTF_MQTT_Message_Statistics_empty
+ }
-
+ ///////////////////////////////////////////////////////////
+ // Type: EPTF_MQTT_Message_Statistics
+ //
+ // Purpose:
+ // Storing counters for message related statistics
+ //
+ // Elements:
+ // noCONNECT - *integer* - number of CONNECT messages
+ // noCONNACK - *integer* number of CONNACK messages
+ // noPUBLISH - *integer* number of PUBLISH messages
+ // noPUBACK - *integer* number of PUBACK messages
+ // noPUBREC - *integer* number of PUBREC messages
+ // noPUBREL - *integer* number of PUBREL messages
+ // noPUBCOMP - *integer* number of PUBCOMP messages
+ // noSUBSCRIBE - *integer* number of SUBSCRIBE messages
+ // noSUBACK - *integer* number of SUBACK messages
+ // noUNSUBSCRIBE - *integer* number of UNSUBSCRIBE messages
+ // noUNSUBACK - *integer* number of UNSUBACK messages
+ // noPINGREQ - *integer* number of PINGREQ messages
+ // noPINGRESP - *integer* number of PINGRESP messages
+ // noDISCONNECT - *integer* number of DISCONNECT messages
+ ///////////////////////////////////////////////////////////
+ type record EPTF_MQTT_Message_Statistics
+ {
+ integer noCONNECT,
+ integer noCONNACK,
+ integer noPUBLISH,
+ integer noPUBACK,
+ integer noPUBREC,
+ integer noPUBREL,
+ integer noPUBCOMP,
+ integer noSUBSCRIBE,
+ integer noSUBACK,
+ integer noUNSUBSCRIBE,
+ integer noUNSUBACK,
+ integer noPINGREQ,
+ integer noPINGRESP,
+ integer noDISCONNECT
+ }
+
+ const EPTF_MQTT_Message_Statistics c_EPTF_MQTT_Message_Statistics_empty :=
+ {
+ noCONNECT := 0,
+ noCONNACK := 0,
+ noPUBLISH := 0,
+ noPUBACK := 0,
+ noPUBREC := 0,
+ noPUBREL := 0,
+ noPUBCOMP := 0,
+ noSUBSCRIBE := 0,
+ noSUBACK := 0,
+ noUNSUBSCRIBE := 0,
+ noUNSUBACK := 0,
+ noPINGREQ := 0,
+ noPINGRESP := 0,
+ noDISCONNECT := 0
+ }
/*****************************************************************
@startuml EPTF_MQTT_LGen_Definitions.EPTF_MQTT_LGen_CT.jpg
@@ -1124,6 +1224,7 @@
//
// v_MQTT_msgToProcess - <EPTF_MQTT_PDU> - message to process
// v_MQTT_msgToSend - <EPTF_MQTT_PDU> - message to send
+ // v_MQTT_stats - <EPTF_MQTT_LGen_Statistics> - MQTT message statistics
//
//
// vf_MQTT_msgReceived - <fcb_EPTF_MQTT_messageReceived> - Function hook for reporting received messages
@@ -1169,7 +1270,7 @@
var MQTT_Template_DB v_MQTT_templateDB;
var MQTT_Session_DB v_MQTT_sessionDB;
var MQTT_Subscription_DB v_MQTT_subscriptionDB;
- var MQTT_Publish_DB v_MQTT_publishDB;
+ var MQTT_Publish_DB v_MQTT_publishDB;
var MQTT_StepCtx v_MQTT_ctx := c_MQTT_StepCtx_empty;
var MQTT_Session v_MQTT_session := c_MQTT_Session_init;
@@ -1178,6 +1279,8 @@
var EPTF_MQTT_PDU v_MQTT_msgToProcess;
var EPTF_MQTT_PDU v_MQTT_msgToSend;
+
+ var EPTF_MQTT_LGen_Statistics v_MQTT_stats := c_EPTF_MQTT_LGen_Statistics_empty;
var fcb_EPTF_MQTT_messageReceived vf_MQTT_msgReceived := null;
}
diff --git a/src/EPTF_MQTT_LGen_Functions.ttcn b/src/EPTF_MQTT_LGen_Functions.ttcn
index 1c06cfd..699e602 100644
--- a/src/EPTF_MQTT_LGen_Functions.ttcn
+++ b/src/EPTF_MQTT_LGen_Functions.ttcn
@@ -321,6 +321,8 @@
f_EPTF_MQTT_Logging_VERBOSE(log2str(%definitionId, " ", pl_message));
v_MQTT_msgToProcess := pl_message;
+
+ f_EPTF_MQTT_updateMessageStatistics(v_MQTT_stats.incoming, pl_message);
f_EPTF_MQTT_stack_fromEnv(v_MQTT_msgToProcess);
@@ -419,6 +421,8 @@
function f_EPTF_MQTT_LGen_send(inout EPTF_MQTT_PDU p_msg)
runs on EPTF_MQTT_LGen_CT
{
+ f_EPTF_MQTT_updateMessageStatistics(v_MQTT_stats.outgoing, p_msg);
+
vf_EPTF_MQTT_Transport_send.apply(p_msg);
}
@@ -3305,6 +3309,8 @@
{
var integer vl_pIdx := pl_action.actionId[0];
v_MQTT_subscriptionDB.data[vl_pIdx].watchdogTimer := -1;
+
+ v_MQTT_stats.noSubscribeTimeouts := v_MQTT_stats.noSubscribeTimeouts + 1;
f_EPTF_MQTT_dispatchEvent(
c_MQTT_eventIdx_SUBSCRIBE_Timeout,
@@ -3579,6 +3585,7 @@
f_EPTF_MQTT_publish_setState(p_pubIdx, { qos1:=ACKNOWLEDGED });
// remove publish transaction
+ v_MQTT_stats.noPublishSuccess := v_MQTT_stats.noPublishSuccess + 1;
f_EPTF_MQTT_publish_remove(p_pubIdx);
}
else { f_EPTF_MQTT_Logging_WARNING(log2str(%definitionId, " Message not handled. Ignoring:", p_msg)); }
@@ -3646,6 +3653,7 @@
}
// remove publish transaction
+ v_MQTT_stats.noPublishSuccess := v_MQTT_stats.noPublishSuccess + 1;
f_EPTF_MQTT_publish_remove(p_pubIdx);
}
else { f_EPTF_MQTT_Logging_WARNING(log2str(%definitionId, " Message not handled. Ignoring:", p_msg)); }
@@ -3707,6 +3715,7 @@
f_EPTF_MQTT_publish_setState(p_pubIdx, { qos2:=COMPLETE });
// remove publish transaction
+ v_MQTT_stats.noPublishSuccess := v_MQTT_stats.noPublishSuccess + 1;
f_EPTF_MQTT_publish_remove(p_pubIdx);
}
else { f_EPTF_MQTT_Logging_WARNING(log2str(%definitionId, " Message not handled. Ignoring:", p_msg)); }
@@ -3741,6 +3750,8 @@
{
var integer vl_pIdx := pl_action.actionId[0];
v_MQTT_publishDB.data[vl_pIdx].watchdogTimer := -1;
+
+ v_MQTT_stats.noPublishTimeouts := v_MQTT_stats.noPublishTimeouts + 1;
f_EPTF_MQTT_dispatchEvent(
c_MQTT_eventIdx_PUBLISH_Timeout,
@@ -4217,6 +4228,23 @@
}
}
+ function f_EPTF_MQTT_updateMessageStatistics(inout EPTF_MQTT_Message_Statistics p_stats, in EPTF_MQTT_PDU p_pdu)
+ {
+ if (ischosen(p_pdu.pdu.connect_msg)) { p_stats.noCONNECT := p_stats.noCONNECT + 1; }
+ else if (ischosen(p_pdu.pdu.publish)) { p_stats.noPUBLISH := p_stats.noPUBLISH + 1; }
+ else if (ischosen(p_pdu.pdu.puback)) { p_stats.noPUBACK := p_stats.noPUBACK + 1; }
+ else if (ischosen(p_pdu.pdu.pubrec)) { p_stats.noPUBREC := p_stats.noPUBREC + 1; }
+ else if (ischosen(p_pdu.pdu.pubrel)) { p_stats.noPUBREL := p_stats.noPUBREL + 1; }
+ else if (ischosen(p_pdu.pdu.pubcomp)) { p_stats.noPUBCOMP := p_stats.noPUBCOMP + 1; }
+ else if (ischosen(p_pdu.pdu.subscribe)) { p_stats.noSUBSCRIBE := p_stats.noSUBSCRIBE + 1; }
+ else if (ischosen(p_pdu.pdu.suback)) { p_stats.noSUBACK := p_stats.noSUBACK + 1; }
+ else if (ischosen(p_pdu.pdu.unsubscribe)) { p_stats.noUNSUBSCRIBE := p_stats.noUNSUBSCRIBE + 1; }
+ else if (ischosen(p_pdu.pdu.unsuback)) { p_stats.noUNSUBACK := p_stats.noUNSUBACK + 1; }
+ else if (ischosen(p_pdu.pdu.pingreq)) { p_stats.noPINGREQ := p_stats.noPINGREQ + 1; }
+ else if (ischosen(p_pdu.pdu.pingresp)) { p_stats.noPINGRESP := p_stats.noPINGRESP + 1; }
+ else if (ischosen(p_pdu.pdu.disconnect_msg)) { p_stats.noDISCONNECT := p_stats.noDISCONNECT + 1; }
+ }
+
template MQTT_v3_1_1_ReqResp t_EPTF_MQTT_pingReq :=
{
pingreq := {