Fixed force poll on DCI with custom schedule Fixes #1293
authorzev <zev@radensolutions.com>
Mon, 13 Jun 2016 14:30:07 +0000 (17:30 +0300)
committerzev <zev@radensolutions.com>
Mon, 13 Jun 2016 14:30:17 +0000 (17:30 +0300)
src/server/core/dcobject.cpp
src/server/core/session.cpp
src/server/include/nms_dcoll.h

index 86ef0b4..99eedf8 100644 (file)
@@ -64,6 +64,7 @@ DCObject::DCObject()
    m_transformationScriptSource = NULL;
    m_transformationScript = NULL;
    m_comments = NULL;
+   m_forcePoll = false;
 }
 
 /**
@@ -95,6 +96,7 @@ DCObject::DCObject(const DCObject *pSrc)
        m_pszPerfTabSettings = (pSrc->m_pszPerfTabSettings != NULL) ? _tcsdup(pSrc->m_pszPerfTabSettings) : NULL;
        m_snmpPort = pSrc->m_snmpPort;
        m_comments = (pSrc->m_comments != NULL) ? _tcsdup(pSrc->m_comments) : NULL;
+   m_forcePoll = false;
 
    m_transformationScriptSource = NULL;
    m_transformationScript = NULL;
@@ -140,6 +142,7 @@ DCObject::DCObject(UINT32 dwId, const TCHAR *szName, int iSource,
    m_transformationScriptSource = NULL;
    m_transformationScript = NULL;
    m_comments = NULL;
+   m_forcePoll = false;
 }
 
 /**
@@ -178,6 +181,7 @@ DCObject::DCObject(ConfigEntry *config, Template *owner)
        m_transformationScriptSource = NULL;
        m_transformationScript = NULL;
        m_comments = NULL;
+   m_forcePoll = false;
        setTransformationScript(config->getSubEntryValue(_T("transformation")));
 
    // for compatibility with old format
@@ -526,6 +530,12 @@ bool DCObject::isReadyForPolling(time_t currTime)
    bool result;
 
    lock();
+   if(m_forcePoll)
+   {
+      m_forcePoll = false;
+      unlock();
+      return true;
+   }
    if ((m_status != ITEM_STATUS_DISABLED) && (!m_busy) &&
        isCacheLoaded() && (m_source != DS_PUSH_AGENT) &&
        matchClusterResource() && hasValue() && (getAgentCacheMode() == AGENT_CACHE_OFF))
index dce6c0e..f5a4ea0 100644 (file)
@@ -3815,7 +3815,7 @@ void ClientSession::forceDCIPoll(NXCPMessage *request)
             DCObject *dci = ((Template *)object)->getDCObjectById(dwItemId);
                                if (dci != NULL)
                                {
-               dci->setLastPollTime(0);
+                                  dci->setForcePoll(true);
                                        msg.setField(VID_RCC, RCC_SUCCESS);
                                        debugPrintf(4, _T("ForceDCIPoll: DCI %d at node %d"), dwItemId, object->getId());
                                }
index 6e947b9..87fc128 100644 (file)
@@ -209,6 +209,7 @@ protected:
    TCHAR *m_transformationScriptSource;   // Transformation script (source code)
    NXSL_Program *m_transformationScript;  // Compiled transformation script
        TCHAR *m_comments;
+       bool m_forcePoll;
 
    void lock() { MutexLock(m_hMutex); }
    void unlock() { MutexUnlock(m_hMutex); }
@@ -305,6 +306,7 @@ public:
        void setAdvScheduleFlag(BOOL bFlag) { if (bFlag) m_flags |= DCF_ADVANCED_SCHEDULE; else m_flags &= ~DCF_ADVANCED_SCHEDULE; }
        void addSchedule(const TCHAR *pszSchedule);
    void setTransformationScript(const TCHAR *source);
+   void setForcePoll(bool poll) { m_forcePoll = poll; }
 
        bool prepareForDeletion();