Mercurial > hg > orthanc
comparison 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 |
comparison
equal
deleted
inserted
replaced
3173:096f4a29f223 | 3174:8ea7c4546c3a |
---|---|
970 | 970 |
971 return StoreStatus_Failure; | 971 return StoreStatus_Failure; |
972 } | 972 } |
973 | 973 |
974 | 974 |
975 void ServerIndex::ComputeStatistics(Json::Value& target) | 975 void ServerIndex::GetGlobalStatistics(/* out */ uint64_t& diskSize, |
976 { | 976 /* out */ uint64_t& uncompressedSize, |
977 boost::mutex::scoped_lock lock(mutex_); | 977 /* out */ uint64_t& countPatients, |
978 target = Json::objectValue; | 978 /* out */ uint64_t& countStudies, |
979 | 979 /* out */ uint64_t& countSeries, |
980 uint64_t cs = db_.GetTotalCompressedSize(); | 980 /* out */ uint64_t& countInstances) |
981 uint64_t us = db_.GetTotalUncompressedSize(); | 981 { |
982 target["TotalDiskSize"] = boost::lexical_cast<std::string>(cs); | 982 boost::mutex::scoped_lock lock(mutex_); |
983 target["TotalUncompressedSize"] = boost::lexical_cast<std::string>(us); | 983 diskSize = db_.GetTotalCompressedSize(); |
984 target["TotalDiskSizeMB"] = static_cast<unsigned int>(cs / MEGA_BYTES); | 984 uncompressedSize = db_.GetTotalUncompressedSize(); |
985 target["TotalUncompressedSizeMB"] = static_cast<unsigned int>(us / MEGA_BYTES); | 985 countPatients = db_.GetResourceCount(ResourceType_Patient); |
986 | 986 countStudies = db_.GetResourceCount(ResourceType_Study); |
987 target["CountPatients"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Patient)); | 987 countSeries = db_.GetResourceCount(ResourceType_Series); |
988 target["CountStudies"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Study)); | 988 countInstances = db_.GetResourceCount(ResourceType_Instance); |
989 target["CountSeries"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Series)); | 989 } |
990 target["CountInstances"] = static_cast<unsigned int>(db_.GetResourceCount(ResourceType_Instance)); | |
991 } | |
992 | |
993 | 990 |
994 | 991 |
995 SeriesStatus ServerIndex::GetSeriesStatus(int64_t id, | 992 SeriesStatus ServerIndex::GetSeriesStatus(int64_t id, |
996 int64_t expectedNumberOfInstances) | 993 int64_t expectedNumberOfInstances) |
997 { | 994 { |
1929 boost::mutex::scoped_lock lock(mutex_); | 1926 boost::mutex::scoped_lock lock(mutex_); |
1930 db_.ClearExportedResources(); | 1927 db_.ClearExportedResources(); |
1931 } | 1928 } |
1932 | 1929 |
1933 | 1930 |
1934 void ServerIndex::GetStatisticsInternal(/* out */ uint64_t& diskSize, | 1931 void ServerIndex::GetResourceStatistics(/* out */ ResourceType& type, |
1932 /* out */ uint64_t& diskSize, | |
1935 /* out */ uint64_t& uncompressedSize, | 1933 /* out */ uint64_t& uncompressedSize, |
1936 /* out */ unsigned int& countStudies, | 1934 /* out */ unsigned int& countStudies, |
1937 /* out */ unsigned int& countSeries, | 1935 /* out */ unsigned int& countSeries, |
1938 /* out */ unsigned int& countInstances, | 1936 /* out */ unsigned int& countInstances, |
1939 /* out */ uint64_t& dicomDiskSize, | 1937 /* out */ uint64_t& dicomDiskSize, |
1940 /* out */ uint64_t& dicomUncompressedSize, | 1938 /* out */ uint64_t& dicomUncompressedSize, |
1941 /* in */ int64_t id, | 1939 const std::string& publicId) |
1942 /* in */ ResourceType type) | 1940 { |
1943 { | 1941 boost::mutex::scoped_lock lock(mutex_); |
1942 | |
1943 int64_t top; | |
1944 if (!db_.LookupResource(top, type, publicId)) | |
1945 { | |
1946 throw OrthancException(ErrorCode_UnknownResource); | |
1947 } | |
1948 | |
1944 std::stack<int64_t> toExplore; | 1949 std::stack<int64_t> toExplore; |
1945 toExplore.push(id); | 1950 toExplore.push(top); |
1946 | 1951 |
1947 countInstances = 0; | 1952 countInstances = 0; |
1948 countSeries = 0; | 1953 countSeries = 0; |
1949 countStudies = 0; | 1954 countStudies = 0; |
1950 diskSize = 0; | 1955 diskSize = 0; |
2018 | 2023 |
2019 if (countSeries == 0) | 2024 if (countSeries == 0) |
2020 { | 2025 { |
2021 countSeries = 1; | 2026 countSeries = 1; |
2022 } | 2027 } |
2023 } | |
2024 | |
2025 | |
2026 | |
2027 void ServerIndex::GetStatistics(Json::Value& target, | |
2028 const std::string& publicId) | |
2029 { | |
2030 boost::mutex::scoped_lock lock(mutex_); | |
2031 | |
2032 ResourceType type; | |
2033 int64_t top; | |
2034 if (!db_.LookupResource(top, type, publicId)) | |
2035 { | |
2036 throw OrthancException(ErrorCode_UnknownResource); | |
2037 } | |
2038 | |
2039 uint64_t uncompressedSize; | |
2040 uint64_t diskSize; | |
2041 uint64_t dicomUncompressedSize; | |
2042 uint64_t dicomDiskSize; | |
2043 unsigned int countStudies; | |
2044 unsigned int countSeries; | |
2045 unsigned int countInstances; | |
2046 GetStatisticsInternal(diskSize, uncompressedSize, countStudies, | |
2047 countSeries, countInstances, dicomDiskSize, dicomUncompressedSize, top, type); | |
2048 | |
2049 target = Json::objectValue; | |
2050 target["DiskSize"] = boost::lexical_cast<std::string>(diskSize); | |
2051 target["DiskSizeMB"] = static_cast<unsigned int>(diskSize / MEGA_BYTES); | |
2052 target["UncompressedSize"] = boost::lexical_cast<std::string>(uncompressedSize); | |
2053 target["UncompressedSizeMB"] = static_cast<unsigned int>(uncompressedSize / MEGA_BYTES); | |
2054 | |
2055 target["DicomDiskSize"] = boost::lexical_cast<std::string>(dicomDiskSize); | |
2056 target["DicomDiskSizeMB"] = static_cast<unsigned int>(dicomDiskSize / MEGA_BYTES); | |
2057 target["DicomUncompressedSize"] = boost::lexical_cast<std::string>(dicomUncompressedSize); | |
2058 target["DicomUncompressedSizeMB"] = static_cast<unsigned int>(dicomUncompressedSize / MEGA_BYTES); | |
2059 | |
2060 switch (type) | |
2061 { | |
2062 // Do NOT add "break" below this point! | |
2063 case ResourceType_Patient: | |
2064 target["CountStudies"] = countStudies; | |
2065 | |
2066 case ResourceType_Study: | |
2067 target["CountSeries"] = countSeries; | |
2068 | |
2069 case ResourceType_Series: | |
2070 target["CountInstances"] = countInstances; | |
2071 | |
2072 case ResourceType_Instance: | |
2073 default: | |
2074 break; | |
2075 } | |
2076 } | |
2077 | |
2078 | |
2079 void ServerIndex::GetStatistics(/* out */ uint64_t& diskSize, | |
2080 /* out */ uint64_t& uncompressedSize, | |
2081 /* out */ unsigned int& countStudies, | |
2082 /* out */ unsigned int& countSeries, | |
2083 /* out */ unsigned int& countInstances, | |
2084 /* out */ uint64_t& dicomDiskSize, | |
2085 /* out */ uint64_t& dicomUncompressedSize, | |
2086 const std::string& publicId) | |
2087 { | |
2088 boost::mutex::scoped_lock lock(mutex_); | |
2089 | |
2090 ResourceType type; | |
2091 int64_t top; | |
2092 if (!db_.LookupResource(top, type, publicId)) | |
2093 { | |
2094 throw OrthancException(ErrorCode_UnknownResource); | |
2095 } | |
2096 | |
2097 GetStatisticsInternal(diskSize, uncompressedSize, countStudies, | |
2098 countSeries, countInstances, dicomDiskSize, | |
2099 dicomUncompressedSize, top, type); | |
2100 } | 2028 } |
2101 | 2029 |
2102 | 2030 |
2103 void ServerIndex::UnstableResourcesMonitorThread(ServerIndex* that, | 2031 void ServerIndex::UnstableResourcesMonitorThread(ServerIndex* that, |
2104 unsigned int threadSleep) | 2032 unsigned int threadSleep) |