]> granicus.if.org Git - icinga2/commitdiff
JsonRpcConnection: re-add num_json_rpc_work_queue_item_rate
authorAlexander A. Klimov <alexander.klimov@icinga.com>
Wed, 20 Feb 2019 13:24:09 +0000 (14:24 +0100)
committerAlexander A. Klimov <alexander.klimov@icinga.com>
Mon, 1 Apr 2019 11:31:16 +0000 (13:31 +0200)
lib/remote/apilistener.cpp
lib/remote/jsonrpcconnection.cpp
lib/remote/jsonrpcconnection.hpp

index dccb8867fecf6c563defd44fb512dc149127785b..ebe18358b1cfd3e13a93011b05c4041f537e58b8 100644 (file)
@@ -1466,6 +1466,7 @@ std::pair<Dictionary::Ptr, Dictionary::Ptr> ApiListener::GetStatus()
        size_t httpClients = GetHttpClients().size();
        size_t syncQueueItems = m_SyncQueue.GetLength();
        size_t relayQueueItems = m_RelayQueue.GetLength();
+       double workQueueItemRate = JsonRpcConnection::GetWorkQueueRate();
        double syncQueueItemRate = m_SyncQueue.GetTaskCount(60) / 60.0;
        double relayQueueItemRate = m_RelayQueue.GetTaskCount(60) / 60.0;
 
@@ -1483,6 +1484,7 @@ std::pair<Dictionary::Ptr, Dictionary::Ptr> ApiListener::GetStatus()
                        { "anonymous_clients", jsonRpcAnonymousClients },
                        { "sync_queue_items", syncQueueItems },
                        { "relay_queue_items", relayQueueItems },
+                       { "work_queue_item_rate", workQueueItemRate },
                        { "sync_queue_item_rate", syncQueueItemRate },
                        { "relay_queue_item_rate", relayQueueItemRate }
                }) },
@@ -1502,6 +1504,7 @@ std::pair<Dictionary::Ptr, Dictionary::Ptr> ApiListener::GetStatus()
        perfdata->Set("num_json_rpc_sync_queue_items", syncQueueItems);
        perfdata->Set("num_json_rpc_relay_queue_items", relayQueueItems);
 
+       perfdata->Set("num_json_rpc_work_queue_item_rate", workQueueItemRate);
        perfdata->Set("num_json_rpc_sync_queue_item_rate", syncQueueItemRate);
        perfdata->Set("num_json_rpc_relay_queue_item_rate", relayQueueItemRate);
 
index 73fcc6398bb33c18080d25701d9f0c15841ec6e3..d529427f0b6ac0545a2b26b278dd134c03777208 100644 (file)
@@ -25,6 +25,8 @@ using namespace icinga;
 static Value SetLogPositionHandler(const MessageOrigin::Ptr& origin, const Dictionary::Ptr& params);
 REGISTER_APIFUNCTION(SetLogPosition, log, &SetLogPositionHandler);
 
+static RingBuffer l_TaskStats (15 * 60);
+
 JsonRpcConnection::JsonRpcConnection(const String& identity, bool authenticated,
        const std::shared_ptr<AsioTlsStream>& stream, ConnectionRole role)
        : m_Identity(identity), m_Authenticated(authenticated), m_Stream(stream),
@@ -84,6 +86,8 @@ void JsonRpcConnection::HandleIncomingMessages(boost::asio::yield_context yc)
 
                        break;
                }
+
+               l_TaskStats.InsertValue(Utility::GetTime(), 1);
        }
 }
 
@@ -319,3 +323,8 @@ void JsonRpcConnection::CheckLiveness(boost::asio::yield_context yc)
                }
        }
 }
+
+double JsonRpcConnection::GetWorkQueueRate()
+{
+       return l_TaskStats.UpdateAndGetValues(Utility::GetTime(), 60) / 60.0;
+}
index 13ee5f62dea1fd80b7836c73798fb1c32264ddf8..bc5fa398d6012d13a6c5e0bdcaec9e9d248a09e3 100644 (file)
@@ -58,6 +58,8 @@ public:
 
        static Value HeartbeatAPIHandler(const intrusive_ptr<MessageOrigin>& origin, const Dictionary::Ptr& params);
 
+       static double GetWorkQueueRate();
+
        static void SendCertificateRequest(const JsonRpcConnection::Ptr& aclient, const intrusive_ptr<MessageOrigin>& origin, const String& path);
 
 private: