changes in cluster API
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 25 Aug 2016 12:38:44 +0000 (15:38 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 25 Aug 2016 12:38:44 +0000 (15:38 +0300)
include/nms_util.h
include/nxcc.h
src/libnetxms/config.cpp
src/libnxcc/ceh.cpp
src/libnxcc/comm.cpp
src/libnxcc/libnxcc.h

index 56ff1dc..91818eb 100644 (file)
@@ -124,6 +124,8 @@ void LIBNETXMS_EXPORTABLE __bswap_wstr(UCS2CHAR *pStr);
 #define CT_IGNORE       6
 #define CT_MB_STRING    7
 #define CT_BOOLEAN64    8
+#define CT_SIZE_BYTES   9   /* 64 bit integer, automatically converts K, M, G, T suffixes using 1024 as base) */
+#define CT_SIZE_UNITS   10  /* 64 bit integer, automatically converts K, M, G, T suffixes using 1000 as base) */
 
 /**
  * Uninitialized value for override indicator
index d8ddca3..276432f 100644 (file)
 #define NXCC_RCC_INVALID_REQUEST 5
 
 /**
+ * Base value for custom notifications
+ */
+#define NXCC_CUSTOM_NOTIFICATION_BASE  1000
+
+/**
  * Cluster node states
  */
 enum ClusterNodeState
@@ -64,6 +69,7 @@ public:
    virtual void onSplitBrain();
    
    virtual ClusterMessageProcessingResult onMessage(NXCPMessage *msg, UINT32 sourceNodeId);
+   virtual void onNotification(int code, UINT32 sourceNodeId);
 };
 
 /**
index d8f953c..7190649 100644 (file)
@@ -705,6 +705,24 @@ void Config::error(const TCHAR *format, ...)
 }
 
 /**
+ * Parse size specification (with K, M, G, or T suffixes)
+ */
+static UINT64 ParseSize(const TCHAR *s, UINT64 multiplier)
+{
+   TCHAR *eptr;
+   UINT64 value = _tcstoull(s, &eptr, 0);
+   if (*eptr == 'K')
+      return value * multiplier;
+   if (*eptr == 'M')
+      return value * multiplier * multiplier;
+   if (*eptr == 'G')
+      return value * multiplier * multiplier * multiplier;
+   if (*eptr == 'T')
+      return value * multiplier * multiplier * multiplier * multiplier;
+   return value;
+}
+
+/**
  * Parse configuration template (emulation of old NxLoadConfig() API)
  */
 bool Config::parseTemplate(const TCHAR *section, NX_CFG_TEMPLATE *cfgTemplate)
@@ -805,6 +823,12 @@ bool Config::parseTemplate(const TCHAR *section, NX_CFG_TEMPLATE *cfgTemplate)
                }
                *curr = 0;
                break;
+            case CT_SIZE_BYTES:
+               *((UINT64 *)cfgTemplate[i].buffer) = ParseSize(value, 1024);
+               break;
+            case CT_SIZE_UNITS:
+               *((UINT64 *)cfgTemplate[i].buffer) = ParseSize(value, 1000);
+               break;
             case CT_IGNORE:
                break;
             default:
index d6e0936..360d5ae 100644 (file)
@@ -82,3 +82,10 @@ ClusterMessageProcessingResult ClusterEventHandler::onMessage(NXCPMessage *msg,
 {
    return CLUSTER_MSG_IGNORED;
 }
+
+/**
+ * Incoming notification handler
+ */
+void ClusterEventHandler::onNotification(int code, UINT32 sourceNodeId)
+{
+}
index c901aea..63be9d2 100644 (file)
@@ -61,7 +61,7 @@ void SetJoinCondition()
 /**
  * Process cluster notification
  */
-static void ProcessClusterNotification(ClusterNodeInfo *node, ClusterNotificationCode code)
+static void ProcessClusterNotification(ClusterNodeInfo *node, int code)
 {
    ClusterDebug(4, _T("ProcessClusterNotification: code %d from node %d [%s]"), code, node->m_id, (const TCHAR *)node->m_addr->toString());
    switch(code)
@@ -75,6 +75,12 @@ static void ProcessClusterNotification(ClusterNodeInfo *node, ClusterNotificatio
       case CN_NODE_RUNNING:
          ChangeClusterNodeState(node, CLUSTER_NODE_UP);
          break;
+      default:
+         if (code >= CN_CUSTOM)
+         {
+            g_nxccEventHandler->onNotification(code, node->m_id);
+         }
+         break;
    }
 }
 
@@ -140,7 +146,7 @@ static THREAD_RESULT THREAD_CALL ClusterReceiverThread(void *arg)
          switch(msg->getCode())
          {
             case CMD_CLUSTER_NOTIFY:
-               ProcessClusterNotification(node, (ClusterNotificationCode)msg->getFieldAsInt16(VID_NOTIFICATION_CODE));
+               ProcessClusterNotification(node, msg->getFieldAsInt16(VID_NOTIFICATION_CODE));
                delete msg;
                break;
             case CMD_JOIN_CLUSTER:
index 75f1ef6..dbeab5c 100644 (file)
@@ -69,7 +69,8 @@ enum ClusterJoinResponse
 enum ClusterNotificationCode
 {
    CN_NEW_MASTER = 1,
-   CN_NODE_RUNNING = 2
+   CN_NODE_RUNNING = 2,
+   CN_CUSTOM = NXCC_CUSTOM_NOTIFICATION_BASE
 };
 
 #define ClusterDebug nxlog_debug