SystemdHealthMonitor: updated to new IPlugin interface
authorTimo Lotterbach <timo.lotterbach@bmw-carit.de>
Wed, 28 Nov 2012 10:55:07 +0000 (02:55 -0800)
committerTimo Lotterbach <timo.lotterbach@bmw-carit.de>
Mon, 14 Jan 2013 08:34:16 +0000 (00:34 -0800)
SystemdHealthMonitor is now based on the updated IPlugin interface
to support static linking.

Signed-off-by: Timo Lotterbach <timo.lotterbach@bmw-carit.de>
LayerManagerPlugins/HealthMonitor/SystemdHealthMonitor/CMakeLists.txt
LayerManagerPlugins/HealthMonitor/SystemdHealthMonitor/include/SystemdHealthMonitor.h
LayerManagerPlugins/HealthMonitor/SystemdHealthMonitor/src/SystemdHealthMonitor.cpp
LayerManagerService/include/IHealthMonitor.h

index 19299df..56ec590 100644 (file)
@@ -21,8 +21,6 @@ cmake_minimum_required (VERSION 2.6)
 
 project(SystemdHealthMonitor)
 
-find_package(Threads)
-
 include_directories(
     include
     ${CMAKE_SOURCE_DIR}/LayerManagerClient/ilmClient/include
@@ -34,20 +32,35 @@ set(LIBS
     ${LIBS}
     LayerManagerUtils
     systemd
+    rt
 )
 
-add_library(${PROJECT_NAME} SHARED
+set(SRC_FILES
     src/SystemdHealthMonitor.cpp
 )
 
+if (WITH_STATIC_PLUGINS)
+
+    add_library(${PROJECT_NAME} STATIC ${SRC_FILES})
+    set (STATICALLY_LINKED_PLUGINS ${STATICALLY_LINKED_PLUGINS}
+        ${PROJECT_NAME} CACHE INTERNAL "list of static plugins")
+
+else(WITH_STATIC_PLUGINS)
+
+    add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
+
+endif(WITH_STATIC_PLUGINS)
+
+
 target_link_libraries(${PROJECT_NAME}
     ${LIBS}
 )
 
 add_dependencies(${PROJECT_NAME}
-    LayerManagerService
     LayerManagerUtils
 )
 
 install (TARGETS ${PROJECT_NAME}
-         LIBRARY DESTINATION lib/layermanager/health)
+         LIBRARY DESTINATION lib/layermanager/health
+         ARCHIVE DESTINATION lib/layermanager/static
+)
index 58ad32d..2d36718 100644 (file)
 
 #include "IHealthMonitor.h"
 #include "ThreadBase.h"
+#include "PluginBase.h"
 
-class SystemdHealthMonitor : public IHealthMonitor, protected ThreadBase
+class SystemdHealthMonitor : public IHealthMonitor, protected ThreadBase, public PluginBase
 {
 public:
-    SystemdHealthMonitor(ICommandExecutor* executor);
+    SystemdHealthMonitor(ICommandExecutor& executor, Configuration& config);
 
-    // from IHealth
+    // from IHealthMonitor
     virtual t_ilm_bool start();
     virtual t_ilm_bool stop();
 
+    //from PluginBase
+    virtual t_ilm_const_string pluginGetName() const;
+
 private:
     void reportStartupComplete();
     void reportProcessId();
index 9b5176b..ca3b681 100644 (file)
@@ -27,8 +27,9 @@
 
 #include <systemd/sd-daemon.h>
 
-SystemdHealthMonitor::SystemdHealthMonitor(ICommandExecutor* executor)
-: IHealthMonitor(executor)
+SystemdHealthMonitor::SystemdHealthMonitor(ICommandExecutor& executor, Configuration& config)
+: IHealthMonitor(executor, config)
+, PluginBase(executor, config, HealthMonitor_Api_v1)
 , mIntervalInMs(-1)
 {
     char* envVar = getenv("WATCHDOG_USEC");
@@ -69,6 +70,11 @@ t_ilm_bool SystemdHealthMonitor::stop()
     return result;
 }
 
+t_ilm_const_string SystemdHealthMonitor::pluginGetName() const
+{
+    return "SystemdHealthMonitor";
+}
+
 void SystemdHealthMonitor::reportStartupComplete()
 {
     LOG_INFO("SystemdHealthMonitor", "reporting startup complete");
@@ -88,7 +94,7 @@ bool SystemdHealthMonitor::watchdogEnabled()
 
 t_ilm_bool SystemdHealthMonitor::threadMainLoop()
 {
-    if (watchdogEnabled() && mExecutor->getHealth())
+    if (watchdogEnabled() && PluginBase::mExecutor.getHealth())
     {
         signalWatchdog();
         usleep(mIntervalInMs * 1000);
@@ -96,12 +102,4 @@ t_ilm_bool SystemdHealthMonitor::threadMainLoop()
     return ILM_TRUE;
 }
 
-extern "C" IHealthMonitor* createSystemdHealthMonitor(ICommandExecutor* executor)
-{
-    return new SystemdHealthMonitor(executor);
-}
-
-extern "C" void destroyGenericCommunicator(SystemdHealthMonitor* p)
-{
-    delete p;
-}
+DECLARE_LAYERMANAGEMENT_PLUGIN(SystemdHealthMonitor)
\ No newline at end of file
index 1f1dde3..7ec1916 100644 (file)
@@ -28,20 +28,27 @@ class Configuration;
 class IHealthMonitor
 {
 public:
-    IHealthMonitor(ICommandExecutor* executor);
-    virtual ~IHealthMonitor() {};
+    IHealthMonitor(ICommandExecutor& executor, Configuration& config);
+    virtual ~IHealthMonitor();
 
     virtual t_ilm_bool start() = 0;
     virtual t_ilm_bool stop() = 0;
 
 protected:
-    ICommandExecutor* mExecutor;
+    ICommandExecutor& mExecutor;
+    Configuration& mConfiguration;
 };
 
 inline
-IHealthMonitor::IHealthMonitor(ICommandExecutor* executor)
+IHealthMonitor::IHealthMonitor(ICommandExecutor& executor, Configuration& config)
 : mExecutor(executor)
+, mConfiguration(config)
 {
 }
 
-#endif // __IHEALTH_H__
\ No newline at end of file
+inline
+IHealthMonitor::~IHealthMonitor()
+{
+}
+
+#endif // __IHEALTH_H__