summaryrefslogtreecommitdiffstats
path: root/systemservice/system_manager/server/include/heartbeat
diff options
context:
space:
mode:
Diffstat (limited to 'systemservice/system_manager/server/include/heartbeat')
-rw-r--r--systemservice/system_manager/server/include/heartbeat/ss_hb_if.h67
-rw-r--r--systemservice/system_manager/server/include/heartbeat/ss_hb_session.h91
-rw-r--r--systemservice/system_manager/server/include/heartbeat/ss_hb_thread.h206
3 files changed, 364 insertions, 0 deletions
diff --git a/systemservice/system_manager/server/include/heartbeat/ss_hb_if.h b/systemservice/system_manager/server/include/heartbeat/ss_hb_if.h
new file mode 100644
index 00000000..8d6618ff
--- /dev/null
+++ b/systemservice/system_manager/server/include/heartbeat/ss_hb_if.h
@@ -0,0 +1,67 @@
+/*
+ * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+///////////////////////////////////////////////////////////////////////////////
+/// \ingroup tag_SystemManager
+/// \brief This file provides support for the application heartbeat system.
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef HEARTBEAT_INTERFACE_H_ // NOLINT
+#define HEARTBEAT_INTERFACE_H_
+
+#include <system_service/ss_system_manager_if.h>
+#include <system_service/ss_system_manager_if_local.h>
+
+/**
+ * Enumeration: message category
+ */
+typedef enum HB_STATUS {
+ HB_STATUS_INVALID
+ , HB_STATUS_REGISTERED
+ , HB_STATUS_GOOD
+ , HB_STATUS_FAILED
+ , HB_STATUS_TIMEOUT
+} EHBStatus;
+
+/*
+ * Structure: report message data
+ */
+typedef struct MODULE_INFO {
+#define SS_SM_HB_MAX_PROC_NAME_SIZE 16
+ EHBStatus ProcHBState;
+ UI_32 HeartBeatRetryCount;
+ // "ProcQueueName" is limited 16 bytes (included terminal-character NULL), so that the size of "THbReportData" will be lower than 4K Bytes.
+ CHAR ProcQueueName[SS_SM_HB_MAX_PROC_NAME_SIZE];
+} TSmModuleInfo;
+
+typedef struct HB_REPORT_DATA {
+ EHBStatus eEntireState; ///< entire state for a request.
+ ///< if all modules are success, it's success, otherwise failed.
+ UI_32 nNumOfModules; ///< number of modules
+ TSmModuleInfo tModuleList[SS_MAX_NUM_MODULES]; ///< module information list, which include module IDs and states
+} THbReportData;
+
+typedef struct HB_AVAIL_CHECK {
+ BOOL isOk;
+ CHAR serviceName[SS_SM_HB_MAX_PROC_NAME_SIZE];
+} THbAvailCheck;
+
+
+EFrameworkunifiedStatus HBThreadStart(HANDLE hThread);
+EFrameworkunifiedStatus HBThreadStop(HANDLE hThread);
+
+#endif // HEARTBEAT_INTERFACE_H_ // NOLINT
diff --git a/systemservice/system_manager/server/include/heartbeat/ss_hb_session.h b/systemservice/system_manager/server/include/heartbeat/ss_hb_session.h
new file mode 100644
index 00000000..5414f097
--- /dev/null
+++ b/systemservice/system_manager/server/include/heartbeat/ss_hb_session.h
@@ -0,0 +1,91 @@
+/*
+ * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+///////////////////////////////////////////////////////////////////////////////
+/// \ingroup tag_SystemManager
+/// \brief This file provides support for the application heartbeat system.
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef SS_HEARTBEAT_SESSION_H_ // NOLINT
+#define SS_HEARTBEAT_SESSION_H_
+
+#include <native_service/frameworkunified_types.h>
+#include <system_service/ss_heartbeat_service_protocol.h>
+#include <system_service/ss_system_manager_if.h>
+#include <system_service/ss_system_manager_if_local.h>
+#include <map>
+#include <string>
+
+#include "ss_hb_if.h"
+
+// The name of the module that is trying to open a session with Heart Beat
+typedef std::string SubscriberName;
+
+/*
+ *
+ */
+class CHeartBeatSessionHandler {
+ public:
+ CHeartBeatSessionHandler();
+ virtual ~CHeartBeatSessionHandler();
+
+ EFrameworkunifiedStatus HBProcessClientResponse(HANDLE hApp);
+
+ EFrameworkunifiedStatus HBEntrySubscriber(SubscriberName &f_Subscriber); // NOLINT
+ EFrameworkunifiedStatus HBSendRequest(HANDLE hApp, SI_32 f_HeartBeatIntervalRepeat, SI_32 f_ChkIndex);
+ EFrameworkunifiedStatus HBCheckResponses(THbReportData &f_tReportData, UI_32 f_MaxHeartBeatRetryCount, // NOLINT
+ SI_32 f_HeartBeatIntervalRepeat, SI_32 f_ChkIndex);
+
+ EFrameworkunifiedStatus HBDeleteRegisteredClientEntry(HANDLE f_hThread, PSTR pQueueName);
+ EFrameworkunifiedStatus HBAvailableCheck(THbAvailCheck &check); // NOLINT
+
+ VOID HBPrintConnection();
+ VOID HBPrintStack(UI_32 f_MaxHeartBeatRetryCount);
+
+ private:
+ class HbSessionInfo {
+ public:
+ std::string szName;
+ HANDLE hSession;
+ BOOL fRunning;
+ BOOL fHeartBeatRequestSent;
+ BOOL fHeartBeatResponseReceived;
+ UI_8 HeartBeatRetryCount;
+ BOOL fHeartBeatTimedOut;
+ BOOL fisAvailability;
+
+ // Copy constructor
+ HbSessionInfo(const HbSessionInfo &f_SessionInfo) {
+ szName = f_SessionInfo.szName;
+ hSession = f_SessionInfo.hSession;
+ fRunning = f_SessionInfo.fRunning;
+ fHeartBeatRequestSent = f_SessionInfo.fHeartBeatRequestSent;
+ fHeartBeatResponseReceived = f_SessionInfo.fHeartBeatResponseReceived;
+ HeartBeatRetryCount = f_SessionInfo.HeartBeatRetryCount;
+ fHeartBeatTimedOut = f_SessionInfo.fHeartBeatTimedOut;
+ fisAvailability = f_SessionInfo.fisAvailability;
+ }
+
+ explicit HbSessionInfo(SubscriberName f_Subscriber);
+ };
+
+ typedef std::map<SubscriberName, HbSessionInfo> HbSessionMap;
+ typedef HbSessionMap::iterator HbSessionIter;
+
+ HbSessionMap m_mapHbSessions;
+};
+#endif // SS_HEARTBEAT_SESSION_H_ // NOLINT
diff --git a/systemservice/system_manager/server/include/heartbeat/ss_hb_thread.h b/systemservice/system_manager/server/include/heartbeat/ss_hb_thread.h
new file mode 100644
index 00000000..7ca8e17d
--- /dev/null
+++ b/systemservice/system_manager/server/include/heartbeat/ss_hb_thread.h
@@ -0,0 +1,206 @@
+/*
+ * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+///////////////////////////////////////////////////////////////////////////////
+/// \ingroup tag_SystemManager
+/// \brief This file provides support for the application heartbeat system.
+///
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef HEARTBEAT_WORKER_H_ // NOLINT
+#define HEARTBEAT_WORKER_H_
+
+#include <native_service/frameworkunified_types.h>
+#include <native_service/frameworkunified_framework_if.h>
+#include <native_service/frameworkunified_multithreading.h>
+#include <system_service/ss_system_timer.h>
+
+#include "ss_hb_session.h"
+#include "ss_sm_config.h"
+
+
+class CHeartBeatThread {
+ public:
+ explicit CHeartBeatThread(HANDLE f_hThread);
+ virtual ~CHeartBeatThread();
+
+ ///////////////////////////
+ /// HBPublishAvailabilityStatus
+ /// At HeartBeat sends NTFY_Availability with availability
+ /// notification to alert client that HeartBeat is available/not available.
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBPublishAvailabilityStatus(HANDLE hThread, BOOL f_AvailabiltyStatus);
+
+ ///////////////////////////
+ /// HBOnStartThread
+ /// Creates and starts the HeartBeat timer
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnStartThread(HANDLE hThread);
+
+
+ ///////////////////////////
+ /// HBOnStopThread
+ /// Stops and deletes the HeartBeat timer
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnStopThread(HANDLE hThread);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ /// HBOnPrintConnections
+ /// Prints all active sessions connected to HeartBeat
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnPrintConnections(HANDLE hThread);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ /// HBOnPrintStack
+ /// Prints all sessions connected to HeartBeat
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnPrintStack(HANDLE hThread);
+
+ ///////////////////////////
+ /// HBOnTimerExpiry
+ /// When APP timer expires, this method sends the HeartBeat request to the client.
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnTimerExpiry(HANDLE hThread);
+
+ ///////////////////////////
+ /// HBOnClientResponse
+ /// When the response from a client is received, this method updates the map
+ /// containing client status to indicate the response.
+ ///
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnClientResponse(HANDLE hThread);
+
+ ///////////////////////////
+ /// HBOnPeriodicStatusRequest
+ /// Reply to Status request from System Manager
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnPeriodicStatusRequest(HANDLE hThread);
+
+
+ ///////////////////////////
+ /// HBOnAvailCheckRequest
+ /// Reply to service's availability condition request from System Manager
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnAvailCheckRequest(HANDLE hThread);
+
+ ///////////////////////////
+ /// HBOnRemoveModule
+ /// Upon receiving delete module notification from sysmgr, this method removes
+ /// a client from the client session map.
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnRemoveModule(HANDLE hApp);
+
+ ///////////////////////////
+ /// HBOnAppendModule
+ /// Upon receiving append module notification from sysmgr, this method append
+ /// a client from the client session map.
+ ///
+ /// \param [in] hThread
+ /// HANDLE - Handle of HeartBeat
+ ///
+ /// \return status
+ /// EFrameworkunifiedStatus - success or error
+ ///
+ ////////////////////////////////////////////////////////////////////////////////////////////
+ EFrameworkunifiedStatus HBOnAppendModule(HANDLE hApp);
+
+ // Service notification handlers
+ EFrameworkunifiedStatus HBSendRequest(HANDLE hApp);
+ EFrameworkunifiedStatus HBCheckHeartBeatResponses(HANDLE hThread);
+ EFrameworkunifiedStatus HBDeleteRegisteredClientEntry(PSTR pModuleName);
+
+ EFrameworkunifiedStatus HeartBeatTimerInit(HANDLE hThread);
+ EFrameworkunifiedStatus HeartBeatTimersDelete(void);
+
+ private:
+ CHeartBeatSessionHandler m_oSessionHandler;
+ TimerCtrl m_oTimerCtrl;
+ UI_32 m_HBTimerID;
+ HBConfigParameters m_HBConfigParams;
+ SI_32 m_NextChkIndex;
+ HANDLE m_hThread;
+};
+#endif // HEARTBEAT_WORKER_H_ // NOLINT