Mercurial > hg > orthanc
comparison Plugins/Engine/OrthancPlugins.cpp @ 3179:fca730c267d7
New primitives to set and refresh metrics
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 30 Jan 2019 17:12:15 +0100 |
parents | a323b75e5b08 |
children | 6c86d4d407da |
comparison
equal
deleted
inserted
replaced
3178:6d558598d713 | 3179:fca730c267d7 |
---|---|
42 # error The macro DCMTK_VERSION_NUMBER must be defined | 42 # error The macro DCMTK_VERSION_NUMBER must be defined |
43 #endif | 43 #endif |
44 | 44 |
45 | 45 |
46 #include "../../Core/ChunkedBuffer.h" | 46 #include "../../Core/ChunkedBuffer.h" |
47 #include "../../Core/Compression/GzipCompressor.h" | |
48 #include "../../Core/Compression/ZlibCompressor.h" | |
47 #include "../../Core/DicomFormat/DicomArray.h" | 49 #include "../../Core/DicomFormat/DicomArray.h" |
50 #include "../../Core/DicomParsing/FromDcmtkBridge.h" | |
51 #include "../../Core/DicomParsing/Internals/DicomImageDecoder.h" | |
52 #include "../../Core/DicomParsing/ToDcmtkBridge.h" | |
48 #include "../../Core/HttpServer/HttpToolbox.h" | 53 #include "../../Core/HttpServer/HttpToolbox.h" |
54 #include "../../Core/Images/Image.h" | |
55 #include "../../Core/Images/ImageProcessing.h" | |
56 #include "../../Core/Images/JpegReader.h" | |
57 #include "../../Core/Images/JpegWriter.h" | |
58 #include "../../Core/Images/PngReader.h" | |
59 #include "../../Core/Images/PngWriter.h" | |
49 #include "../../Core/Logging.h" | 60 #include "../../Core/Logging.h" |
61 #include "../../Core/MetricsRegistry.h" | |
50 #include "../../Core/OrthancException.h" | 62 #include "../../Core/OrthancException.h" |
51 #include "../../Core/SerializationToolbox.h" | 63 #include "../../Core/SerializationToolbox.h" |
52 #include "../../Core/Toolbox.h" | 64 #include "../../Core/Toolbox.h" |
53 #include "../../Core/DicomParsing/FromDcmtkBridge.h" | 65 #include "../../OrthancServer/DefaultDicomImageDecoder.h" |
54 #include "../../Core/DicomParsing/ToDcmtkBridge.h" | |
55 #include "../../OrthancServer/OrthancConfiguration.h" | 66 #include "../../OrthancServer/OrthancConfiguration.h" |
67 #include "../../OrthancServer/OrthancFindRequestHandler.h" | |
68 #include "../../OrthancServer/Search/HierarchicalMatcher.h" | |
56 #include "../../OrthancServer/ServerContext.h" | 69 #include "../../OrthancServer/ServerContext.h" |
57 #include "../../OrthancServer/ServerToolbox.h" | 70 #include "../../OrthancServer/ServerToolbox.h" |
58 #include "../../OrthancServer/Search/HierarchicalMatcher.h" | |
59 #include "../../Core/DicomParsing/Internals/DicomImageDecoder.h" | |
60 #include "../../Core/Compression/ZlibCompressor.h" | |
61 #include "../../Core/Compression/GzipCompressor.h" | |
62 #include "../../Core/Images/Image.h" | |
63 #include "../../Core/Images/PngReader.h" | |
64 #include "../../Core/Images/PngWriter.h" | |
65 #include "../../Core/Images/JpegReader.h" | |
66 #include "../../Core/Images/JpegWriter.h" | |
67 #include "../../Core/Images/ImageProcessing.h" | |
68 #include "../../OrthancServer/DefaultDicomImageDecoder.h" | |
69 #include "../../OrthancServer/OrthancFindRequestHandler.h" | |
70 #include "PluginsEnumerations.h" | 71 #include "PluginsEnumerations.h" |
71 #include "PluginsJob.h" | 72 #include "PluginsJob.h" |
72 | 73 |
73 #include <boost/regex.hpp> | 74 #include <boost/regex.hpp> |
74 #include <dcmtk/dcmdata/dcdict.h> | 75 #include <dcmtk/dcmdata/dcdict.h> |
460 typedef std::list<OrthancPluginOnChangeCallback> OnChangeCallbacks; | 461 typedef std::list<OrthancPluginOnChangeCallback> OnChangeCallbacks; |
461 typedef std::list<OrthancPluginIncomingHttpRequestFilter> IncomingHttpRequestFilters; | 462 typedef std::list<OrthancPluginIncomingHttpRequestFilter> IncomingHttpRequestFilters; |
462 typedef std::list<OrthancPluginIncomingHttpRequestFilter2> IncomingHttpRequestFilters2; | 463 typedef std::list<OrthancPluginIncomingHttpRequestFilter2> IncomingHttpRequestFilters2; |
463 typedef std::list<OrthancPluginDecodeImageCallback> DecodeImageCallbacks; | 464 typedef std::list<OrthancPluginDecodeImageCallback> DecodeImageCallbacks; |
464 typedef std::list<OrthancPluginJobsUnserializer> JobsUnserializers; | 465 typedef std::list<OrthancPluginJobsUnserializer> JobsUnserializers; |
466 typedef std::list<OrthancPluginRefreshMetricsCallback> RefreshMetricsCallbacks; | |
465 typedef std::map<Property, std::string> Properties; | 467 typedef std::map<Property, std::string> Properties; |
466 | 468 |
467 PluginsManager manager_; | 469 PluginsManager manager_; |
468 | 470 |
469 RestCallbacks restCallbacks_; | 471 RestCallbacks restCallbacks_; |
474 DecodeImageCallbacks decodeImageCallbacks_; | 476 DecodeImageCallbacks decodeImageCallbacks_; |
475 JobsUnserializers jobsUnserializers_; | 477 JobsUnserializers jobsUnserializers_; |
476 _OrthancPluginMoveCallback moveCallbacks_; | 478 _OrthancPluginMoveCallback moveCallbacks_; |
477 IncomingHttpRequestFilters incomingHttpRequestFilters_; | 479 IncomingHttpRequestFilters incomingHttpRequestFilters_; |
478 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; | 480 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; |
481 RefreshMetricsCallbacks refreshMetricsCallbacks_; | |
479 std::auto_ptr<StorageAreaFactory> storageArea_; | 482 std::auto_ptr<StorageAreaFactory> storageArea_; |
480 | 483 |
481 boost::recursive_mutex restCallbackMutex_; | 484 boost::recursive_mutex restCallbackMutex_; |
482 boost::recursive_mutex storedCallbackMutex_; | 485 boost::recursive_mutex storedCallbackMutex_; |
483 boost::recursive_mutex changeCallbackMutex_; | 486 boost::recursive_mutex changeCallbackMutex_; |
484 boost::mutex findCallbackMutex_; | 487 boost::mutex findCallbackMutex_; |
485 boost::mutex worklistCallbackMutex_; | 488 boost::mutex worklistCallbackMutex_; |
486 boost::mutex decodeImageCallbackMutex_; | 489 boost::mutex decodeImageCallbackMutex_; |
487 boost::mutex jobsUnserializersMutex_; | 490 boost::mutex jobsUnserializersMutex_; |
491 boost::mutex refreshMetricsMutex_; | |
488 boost::recursive_mutex invokeServiceMutex_; | 492 boost::recursive_mutex invokeServiceMutex_; |
489 | 493 |
490 Properties properties_; | 494 Properties properties_; |
491 int argc_; | 495 int argc_; |
492 char** argv_; | 496 char** argv_; |
1308 LOG(INFO) << "Plugin has registered a callback to filter incoming HTTP requests"; | 1312 LOG(INFO) << "Plugin has registered a callback to filter incoming HTTP requests"; |
1309 pimpl_->incomingHttpRequestFilters2_.push_back(p.callback); | 1313 pimpl_->incomingHttpRequestFilters2_.push_back(p.callback); |
1310 } | 1314 } |
1311 | 1315 |
1312 | 1316 |
1317 void OrthancPlugins::RegisterRefreshMetricsCallback(const void* parameters) | |
1318 { | |
1319 const _OrthancPluginRegisterRefreshMetricsCallback& p = | |
1320 *reinterpret_cast<const _OrthancPluginRegisterRefreshMetricsCallback*>(parameters); | |
1321 | |
1322 boost::mutex::scoped_lock lock(pimpl_->refreshMetricsMutex_); | |
1323 | |
1324 LOG(INFO) << "Plugin has registered a callback to refresh its metrics"; | |
1325 pimpl_->refreshMetricsCallbacks_.push_back(p.callback); | |
1326 } | |
1327 | |
1328 | |
1313 void OrthancPlugins::AnswerBuffer(const void* parameters) | 1329 void OrthancPlugins::AnswerBuffer(const void* parameters) |
1314 { | 1330 { |
1315 const _OrthancPluginAnswerBuffer& p = | 1331 const _OrthancPluginAnswerBuffer& p = |
1316 *reinterpret_cast<const _OrthancPluginAnswerBuffer*>(parameters); | 1332 *reinterpret_cast<const _OrthancPluginAnswerBuffer*>(parameters); |
1317 | 1333 |
3094 *reinterpret_cast<const _OrthancPluginRetrieveStaticString*>(parameters); | 3110 *reinterpret_cast<const _OrthancPluginRetrieveStaticString*>(parameters); |
3095 *p.result = EnumerationToString(SystemToolbox::AutodetectMimeType(p.argument)); | 3111 *p.result = EnumerationToString(SystemToolbox::AutodetectMimeType(p.argument)); |
3096 return true; | 3112 return true; |
3097 } | 3113 } |
3098 | 3114 |
3115 case _OrthancPluginService_SetMetricsValue: | |
3116 { | |
3117 const _OrthancPluginSetMetricsValue& p = | |
3118 *reinterpret_cast<const _OrthancPluginSetMetricsValue*>(parameters); | |
3119 | |
3120 MetricsType type; | |
3121 switch (p.type) | |
3122 { | |
3123 case OrthancPluginMetricsType_Default: | |
3124 type = MetricsType_Default; | |
3125 break; | |
3126 | |
3127 case OrthancPluginMetricsType_Timer: | |
3128 type = MetricsType_MaxOver10Seconds; | |
3129 break; | |
3130 | |
3131 default: | |
3132 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
3133 } | |
3134 | |
3135 { | |
3136 PImpl::ServerContextLock lock(*pimpl_); | |
3137 lock.GetContext().GetMetricsRegistry().SetValue(p.name, p.value, type); | |
3138 } | |
3139 | |
3140 return true; | |
3141 } | |
3142 | |
3099 default: | 3143 default: |
3100 return false; | 3144 return false; |
3101 } | 3145 } |
3102 } | 3146 } |
3103 | 3147 |
3153 RegisterIncomingHttpRequestFilter(parameters); | 3197 RegisterIncomingHttpRequestFilter(parameters); |
3154 return true; | 3198 return true; |
3155 | 3199 |
3156 case _OrthancPluginService_RegisterIncomingHttpRequestFilter2: | 3200 case _OrthancPluginService_RegisterIncomingHttpRequestFilter2: |
3157 RegisterIncomingHttpRequestFilter2(parameters); | 3201 RegisterIncomingHttpRequestFilter2(parameters); |
3202 return true; | |
3203 | |
3204 case _OrthancPluginService_RegisterRefreshMetricsCallback: | |
3205 RegisterRefreshMetricsCallback(parameters); | |
3158 return true; | 3206 return true; |
3159 | 3207 |
3160 case _OrthancPluginService_RegisterStorageArea: | 3208 case _OrthancPluginService_RegisterStorageArea: |
3161 { | 3209 { |
3162 LOG(INFO) << "Plugin has registered a custom storage area"; | 3210 LOG(INFO) << "Plugin has registered a custom storage area"; |
3657 } | 3705 } |
3658 } | 3706 } |
3659 | 3707 |
3660 return NULL; | 3708 return NULL; |
3661 } | 3709 } |
3710 | |
3711 | |
3712 void OrthancPlugins::RefreshMetrics() | |
3713 { | |
3714 boost::mutex::scoped_lock lock(pimpl_->refreshMetricsMutex_); | |
3715 | |
3716 for (PImpl::RefreshMetricsCallbacks::iterator | |
3717 it = pimpl_->refreshMetricsCallbacks_.begin(); | |
3718 it != pimpl_->refreshMetricsCallbacks_.end(); ++it) | |
3719 { | |
3720 if (*it != NULL) | |
3721 { | |
3722 (*it) (); | |
3723 } | |
3724 } | |
3725 } | |
3662 } | 3726 } |