]> granicus.if.org Git - icinga2/commitdiff
InfluxdbWriter: Ensure to flush buffers after emptying the metrics queue on Pause...
authorMichael Friedrich <michael.friedrich@icinga.com>
Wed, 20 Feb 2019 14:21:24 +0000 (15:21 +0100)
committerMichael Friedrich <michael.friedrich@icinga.com>
Wed, 20 Feb 2019 15:30:13 +0000 (16:30 +0100)
Patch taken from @al2klimov but moved into Pause()

lib/perfdata/influxdbwriter.cpp

index 91fb1be10ae8f6d432a21dbcaed9ddd04a7bd85a..13b15d30b50b6f54b74c30721244219443fc8a1e 100644 (file)
@@ -130,13 +130,30 @@ void InfluxdbWriter::Resume()
        Checkable::OnNewCheckResult.connect(std::bind(&InfluxdbWriter::CheckResultHandler, this, _1, _2));
 }
 
+/* Pause is equivalent to Stop, but with HA capabilities to resume at runtime. */
 void InfluxdbWriter::Pause()
 {
-       Log(LogInformation, "InfluxdbWriter")
-               << "'" << GetName() << "' paused.";
+       /* Force a flush. */
+       Log(LogDebug, "InfluxdbWriter")
+               << "Flushing pending data buffers.";
+
+       Flush();
+
+       /* Work on the missing tasks. TODO: Find a way to cache them on disk. */
+       Log(LogDebug, "InfluxdbWriter")
+               << "Joining existing WQ tasks.";
 
        m_WorkQueue.Join();
 
+       /* Flush again after the WQ tasks have filled the data buffer. */
+       Log(LogDebug, "InfluxdbWriter")
+               << "Flushing data buffers from WQ tasks.";
+
+       Flush();
+
+       Log(LogInformation, "InfluxdbWriter")
+               << "'" << GetName() << "' paused.";
+
        ObjectImpl<InfluxdbWriter>::Pause();
 }
 
@@ -428,6 +445,9 @@ void InfluxdbWriter::FlushTimeoutWQ()
 
 void InfluxdbWriter::Flush()
 {
+       Log(LogDebug, "InfluxdbWriter")
+               << "Flushing data buffer to InfluxDB.";
+
        String body = boost::algorithm::join(m_DataBuffer, "\n");
        m_DataBuffer.clear();