diff OrthancServer/ServerIndex.cpp @ 3174:8ea7c4546c3a

primitives to collect metrics in Orthanc
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 29 Jan 2019 15:15:48 +0100
parents 2e1711f80f74
children 4bbadcd03966
line wrap: on
line diff
--- a/OrthancServer/ServerIndex.cpp	Tue Jan 29 10:34:00 2019 +0100
+++ b/OrthancServer/ServerIndex.cpp	Tue Jan 29 15:15:48 2019 +0100
@@ -972,24 +972,21 @@
   }
 
 
-  void ServerIndex::ComputeStatistics(Json::Value& target)
+  void ServerIndex::GetGlobalStatistics(/* out */ uint64_t& diskSize,
+                                        /* out */ uint64_t& uncompressedSize,
+                                        /* out */ uint64_t& countPatients, 
+                                        /* out */ uint64_t& countStudies, 
+                                        /* out */ uint64_t& countSeries, 
+                                        /* out */ uint64_t& countInstances)
   {
     boost::mutex::scoped_lock lock(mutex_);
-    target = Json::objectValue;
-
-    uint64_t cs = db_.GetTotalCompressedSize();
-    uint64_t us = db_.GetTotalUncompressedSize();
-    target["TotalDiskSize"] = boost::lexical_cast<std::string>(cs);
-    target["TotalUncompressedSize"] = boost::lexical_cast<std::string>(us);
-    target["TotalDiskSizeMB"] = static_cast<unsigned int>(cs / MEGA_BYTES);
-    target["TotalUncompressedSizeMB"] = static_cast<unsigned int>(us / MEGA_BYTES);
-
-    target["CountPatients"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Patient));
-    target["CountStudies"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Study));
-    target["CountSeries"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Series));
-    target["CountInstances"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Instance));
-  }          
-
+    diskSize = db_.GetTotalCompressedSize();
+    uncompressedSize = db_.GetTotalUncompressedSize();
+    countPatients = db_.GetResourceCount(ResourceType_Patient);
+    countStudies = db_.GetResourceCount(ResourceType_Study);
+    countSeries = db_.GetResourceCount(ResourceType_Series);
+    countInstances = db_.GetResourceCount(ResourceType_Instance);
+  }
 
   
   SeriesStatus ServerIndex::GetSeriesStatus(int64_t id,
@@ -1931,18 +1928,26 @@
   }
 
 
-  void ServerIndex::GetStatisticsInternal(/* out */ uint64_t& diskSize, 
+  void ServerIndex::GetResourceStatistics(/* out */ ResourceType& type,
+                                          /* out */ uint64_t& diskSize, 
                                           /* out */ uint64_t& uncompressedSize, 
                                           /* out */ unsigned int& countStudies, 
                                           /* out */ unsigned int& countSeries, 
                                           /* out */ unsigned int& countInstances, 
                                           /* out */ uint64_t& dicomDiskSize, 
                                           /* out */ uint64_t& dicomUncompressedSize, 
-                                          /* in  */ int64_t id,
-                                          /* in  */ ResourceType type)
+                                          const std::string& publicId)
   {
+    boost::mutex::scoped_lock lock(mutex_);
+
+    int64_t top;
+    if (!db_.LookupResource(top, type, publicId))
+    {
+      throw OrthancException(ErrorCode_UnknownResource);
+    }
+
     std::stack<int64_t> toExplore;
-    toExplore.push(id);
+    toExplore.push(top);
 
     countInstances = 0;
     countSeries = 0;
@@ -2023,83 +2028,6 @@
   }
 
 
-
-  void ServerIndex::GetStatistics(Json::Value& target,
-                                  const std::string& publicId)
-  {
-    boost::mutex::scoped_lock lock(mutex_);
-
-    ResourceType type;
-    int64_t top;
-    if (!db_.LookupResource(top, type, publicId))
-    {
-      throw OrthancException(ErrorCode_UnknownResource);
-    }
-
-    uint64_t uncompressedSize;
-    uint64_t diskSize;
-    uint64_t dicomUncompressedSize;
-    uint64_t dicomDiskSize;
-    unsigned int countStudies;
-    unsigned int countSeries;
-    unsigned int countInstances;
-    GetStatisticsInternal(diskSize, uncompressedSize, countStudies, 
-                          countSeries, countInstances, dicomDiskSize, dicomUncompressedSize, top, type);
-
-    target = Json::objectValue;
-    target["DiskSize"] = boost::lexical_cast<std::string>(diskSize);
-    target["DiskSizeMB"] = static_cast<unsigned int>(diskSize / MEGA_BYTES);
-    target["UncompressedSize"] = boost::lexical_cast<std::string>(uncompressedSize);
-    target["UncompressedSizeMB"] = static_cast<unsigned int>(uncompressedSize / MEGA_BYTES);
-
-    target["DicomDiskSize"] = boost::lexical_cast<std::string>(dicomDiskSize);
-    target["DicomDiskSizeMB"] = static_cast<unsigned int>(dicomDiskSize / MEGA_BYTES);
-    target["DicomUncompressedSize"] = boost::lexical_cast<std::string>(dicomUncompressedSize);
-    target["DicomUncompressedSizeMB"] = static_cast<unsigned int>(dicomUncompressedSize / MEGA_BYTES);
-
-    switch (type)
-    {
-      // Do NOT add "break" below this point!
-      case ResourceType_Patient:
-        target["CountStudies"] = countStudies;
-
-      case ResourceType_Study:
-        target["CountSeries"] = countSeries;
-
-      case ResourceType_Series:
-        target["CountInstances"] = countInstances;
-
-      case ResourceType_Instance:
-      default:
-        break;
-    }
-  }
-
-
-  void ServerIndex::GetStatistics(/* out */ uint64_t& diskSize, 
-                                  /* out */ uint64_t& uncompressedSize, 
-                                  /* out */ unsigned int& countStudies, 
-                                  /* out */ unsigned int& countSeries, 
-                                  /* out */ unsigned int& countInstances, 
-                                  /* out */ uint64_t& dicomDiskSize, 
-                                  /* out */ uint64_t& dicomUncompressedSize, 
-                                  const std::string& publicId)
-  {
-    boost::mutex::scoped_lock lock(mutex_);
-
-    ResourceType type;
-    int64_t top;
-    if (!db_.LookupResource(top, type, publicId))
-    {
-      throw OrthancException(ErrorCode_UnknownResource);
-    }
-
-    GetStatisticsInternal(diskSize, uncompressedSize, countStudies, 
-                          countSeries, countInstances, dicomDiskSize,
-                          dicomUncompressedSize, top, type);    
-  }
-
-
   void ServerIndex::UnstableResourcesMonitorThread(ServerIndex* that,
                                                    unsigned int threadSleep)
   {