@@ -684,16 +684,24 @@ smpServer started cfg@ServerConfig {transports, transportConfig = tCfg, startOpt
684684 let threadsCount = 0
685685#endif
686686 clientsCount <- IM. size <$> getServerClients srv
687+ deliveredSubs <- getDeliveredMetrics
687688 smpSubs <- getSubscribersMetrics subscribers
688689 ntfSubs <- getSubscribersMetrics ntfSubscribers
689690 loadedCounts <- loadedQueueCounts $ fromMsgStore ms
690- pure RealTimeMetrics {socketStats, threadsCount, clientsCount, smpSubs, ntfSubs, loadedCounts}
691+ pure RealTimeMetrics {socketStats, threadsCount, clientsCount, deliveredSubs, smpSubs, ntfSubs, loadedCounts}
691692 where
692693 getSubscribersMetrics ServerSubscribers {queueSubscribers, serviceSubscribers, subClients} = do
693694 subsCount <- M. size <$> getSubscribedClients queueSubscribers
694695 subClientsCount <- IS. size <$> readTVarIO subClients
695696 subServicesCount <- M. size <$> getSubscribedClients serviceSubscribers
696697 pure RTSubscriberMetrics {subsCount, subClientsCount, subServicesCount}
698+ getDeliveredMetrics = foldM countClnt (RTSubscriberMetrics 0 0 0 ) =<< getServerClients srv
699+ countClnt metrics Client {subscriptions} = do
700+ cnt <- foldM countSubs 0 =<< readTVarIO subscriptions
701+ pure $ if cnt > 0
702+ then metrics {subsCount = subsCount metrics + cnt, subClientsCount = subClientsCount metrics + 1 }
703+ else metrics
704+ countSubs ! cnt Sub {delivered} = (\ empty -> if empty then cnt else cnt + 1 ) <$> atomically (isEmptyTMVar delivered)
697705
698706 runClient :: Transport c => X. CertificateChain -> C. APrivateSignKey -> TProxy c 'TServer -> c 'TServer -> M s ()
699707 runClient srvCert srvSignKey tp h = do
0 commit comments