Mercurial > hg > orthanc
comparison OrthancServer/Plugins/Samples/Housekeeper/Plugin.cpp @ 4982:40fd2a485a84
fix build for older compilers
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 25 Apr 2022 18:25:46 +0200 |
parents | d0c34145320c |
children | 8fba26292a9f |
comparison
equal
deleted
inserted
replaced
4981:d0c34145320c | 4982:40fd2a485a84 |
---|---|
34 #include <list> | 34 #include <list> |
35 #include <time.h> | 35 #include <time.h> |
36 | 36 |
37 static int globalPropertyId_ = 0; | 37 static int globalPropertyId_ = 0; |
38 static bool force_ = false; | 38 static bool force_ = false; |
39 static uint throttleDelay_ = 0; | 39 static unsigned int throttleDelay_ = 0; |
40 static std::unique_ptr<boost::thread> workerThread_; | 40 static std::unique_ptr<boost::thread> workerThread_; |
41 static bool workerThreadShouldStop_ = false; | 41 static bool workerThreadShouldStop_ = false; |
42 static bool triggerOnStorageCompressionChange_ = true; | 42 static bool triggerOnStorageCompressionChange_ = true; |
43 static bool triggerOnMainDicomTagsChange_ = true; | 43 static bool triggerOnMainDicomTagsChange_ = true; |
44 static bool triggerOnUnnecessaryDicomAsJsonFiles_ = true; | 44 static bool triggerOnUnnecessaryDicomAsJsonFiles_ = true; |
154 RunningPeriods runningPeriods_; | 154 RunningPeriods runningPeriods_; |
155 | 155 |
156 struct DbConfiguration | 156 struct DbConfiguration |
157 { | 157 { |
158 std::string orthancVersion; | 158 std::string orthancVersion; |
159 std::map<OrthancPluginResourceType, std::string> mainDicomTagsSignature; | 159 std::string patientsMainDicomTagsSignature; |
160 std::string studiesMainDicomTagsSignature; | |
161 std::string seriesMainDicomTagsSignature; | |
162 std::string instancesMainDicomTagsSignature; | |
160 bool storageCompressionEnabled; | 163 bool storageCompressionEnabled; |
161 | 164 |
162 DbConfiguration() | 165 DbConfiguration() |
163 : storageCompressionEnabled(false) | 166 : storageCompressionEnabled(false) |
164 { | 167 { |
165 } | 168 } |
166 | 169 |
167 bool IsDefined() const | 170 bool IsDefined() const |
168 { | 171 { |
169 return !orthancVersion.empty() && mainDicomTagsSignature.size() == 4; | 172 return !orthancVersion.empty(); |
170 } | 173 } |
171 | 174 |
172 void Clear() | 175 void Clear() |
173 { | 176 { |
174 orthancVersion.clear(); | 177 orthancVersion.clear(); |
175 mainDicomTagsSignature.clear(); | 178 patientsMainDicomTagsSignature.clear(); |
179 studiesMainDicomTagsSignature.clear(); | |
180 seriesMainDicomTagsSignature.clear(); | |
181 instancesMainDicomTagsSignature.clear(); | |
176 } | 182 } |
177 | 183 |
178 void ToJson(Json::Value& target) | 184 void ToJson(Json::Value& target) |
179 { | 185 { |
180 if (!IsDefined()) | 186 if (!IsDefined()) |
186 Json::Value signatures; | 192 Json::Value signatures; |
187 | 193 |
188 target = Json::objectValue; | 194 target = Json::objectValue; |
189 | 195 |
190 // default main dicom tags signature are the one from Orthanc 1.4.2 (last time the list was changed): | 196 // default main dicom tags signature are the one from Orthanc 1.4.2 (last time the list was changed): |
191 signatures["Patient"] = mainDicomTagsSignature[OrthancPluginResourceType_Patient]; | 197 signatures["Patient"] = patientsMainDicomTagsSignature; |
192 signatures["Study"] = mainDicomTagsSignature[OrthancPluginResourceType_Study]; | 198 signatures["Study"] = studiesMainDicomTagsSignature; |
193 signatures["Series"] = mainDicomTagsSignature[OrthancPluginResourceType_Series]; | 199 signatures["Series"] = seriesMainDicomTagsSignature; |
194 signatures["Instance"] = mainDicomTagsSignature[OrthancPluginResourceType_Instance]; | 200 signatures["Instance"] = instancesMainDicomTagsSignature; |
195 | 201 |
196 target["MainDicomTagsSignature"] = signatures; | 202 target["MainDicomTagsSignature"] = signatures; |
197 target["OrthancVersion"] = orthancVersion; | 203 target["OrthancVersion"] = orthancVersion; |
198 target["StorageCompressionEnabled"] = storageCompressionEnabled; | 204 target["StorageCompressionEnabled"] = storageCompressionEnabled; |
199 } | 205 } |
204 if (!source.isNull()) | 210 if (!source.isNull()) |
205 { | 211 { |
206 orthancVersion = source["OrthancVersion"].asString(); | 212 orthancVersion = source["OrthancVersion"].asString(); |
207 | 213 |
208 const Json::Value& signatures = source["MainDicomTagsSignature"]; | 214 const Json::Value& signatures = source["MainDicomTagsSignature"]; |
209 mainDicomTagsSignature[OrthancPluginResourceType_Patient] = signatures["Patient"].asString(); | 215 patientsMainDicomTagsSignature = signatures["Patient"].asString(); |
210 mainDicomTagsSignature[OrthancPluginResourceType_Study] = signatures["Study"].asString(); | 216 studiesMainDicomTagsSignature = signatures["Study"].asString(); |
211 mainDicomTagsSignature[OrthancPluginResourceType_Series] = signatures["Series"].asString(); | 217 seriesMainDicomTagsSignature = signatures["Series"].asString(); |
212 mainDicomTagsSignature[OrthancPluginResourceType_Instance] = signatures["Instance"].asString(); | 218 instancesMainDicomTagsSignature = signatures["Instance"].asString(); |
213 | 219 |
214 storageCompressionEnabled = source["StorageCompressionEnabled"].asBool(); | 220 storageCompressionEnabled = source["StorageCompressionEnabled"].asBool(); |
215 } | 221 } |
216 } | 222 } |
217 }; | 223 }; |
281 pluginStatus.lastChangeToProcess = -1; | 287 pluginStatus.lastChangeToProcess = -1; |
282 | 288 |
283 pluginStatus.currentlyProcessingConfiguration.orthancVersion = "1.9.0"; // when we don't know, we assume some files were stored with Orthanc 1.9.0 (last version saving the dicom-as-json files) | 289 pluginStatus.currentlyProcessingConfiguration.orthancVersion = "1.9.0"; // when we don't know, we assume some files were stored with Orthanc 1.9.0 (last version saving the dicom-as-json files) |
284 | 290 |
285 // default main dicom tags signature are the one from Orthanc 1.4.2 (last time the list was changed): | 291 // default main dicom tags signature are the one from Orthanc 1.4.2 (last time the list was changed): |
286 pluginStatus.currentlyProcessingConfiguration.mainDicomTagsSignature[OrthancPluginResourceType_Patient] = "0010,0010;0010,0020;0010,0030;0010,0040;0010,1000"; | 292 pluginStatus.currentlyProcessingConfiguration.patientsMainDicomTagsSignature = "0010,0010;0010,0020;0010,0030;0010,0040;0010,1000"; |
287 pluginStatus.currentlyProcessingConfiguration.mainDicomTagsSignature[OrthancPluginResourceType_Study] = "0008,0020;0008,0030;0008,0050;0008,0080;0008,0090;0008,1030;0020,000d;0020,0010;0032,1032;0032,1060"; | 293 pluginStatus.currentlyProcessingConfiguration.studiesMainDicomTagsSignature = "0008,0020;0008,0030;0008,0050;0008,0080;0008,0090;0008,1030;0020,000d;0020,0010;0032,1032;0032,1060"; |
288 pluginStatus.currentlyProcessingConfiguration.mainDicomTagsSignature[OrthancPluginResourceType_Series] = "0008,0021;0008,0031;0008,0060;0008,0070;0008,1010;0008,103e;0008,1070;0018,0010;0018,0015;0018,0024;0018,1030;0018,1090;0018,1400;0020,000e;0020,0011;0020,0037;0020,0105;0020,1002;0040,0254;0054,0081;0054,0101;0054,1000"; | 294 pluginStatus.currentlyProcessingConfiguration.seriesMainDicomTagsSignature = "0008,0021;0008,0031;0008,0060;0008,0070;0008,1010;0008,103e;0008,1070;0018,0010;0018,0015;0018,0024;0018,1030;0018,1090;0018,1400;0020,000e;0020,0011;0020,0037;0020,0105;0020,1002;0040,0254;0054,0081;0054,0101;0054,1000"; |
289 pluginStatus.currentlyProcessingConfiguration.mainDicomTagsSignature[OrthancPluginResourceType_Instance] = "0008,0012;0008,0013;0008,0018;0020,0012;0020,0013;0020,0032;0020,0037;0020,0100;0020,4000;0028,0008;0054,1330"; | 295 pluginStatus.currentlyProcessingConfiguration.instancesMainDicomTagsSignature = "0008,0012;0008,0013;0008,0018;0020,0012;0020,0013;0020,0032;0020,0037;0020,0100;0020,4000;0028,0008;0054,1330"; |
290 } | 296 } |
291 } | 297 } |
292 | 298 |
293 static void SaveStatusInDb(PluginStatus& pluginStatus) | 299 static void SaveStatusInDb(PluginStatus& pluginStatus) |
294 { | 300 { |
308 { | 314 { |
309 Json::Value signatures; | 315 Json::Value signatures; |
310 Json::Value systemInfo; | 316 Json::Value systemInfo; |
311 | 317 |
312 OrthancPlugins::RestApiGet(systemInfo, "/system", false); | 318 OrthancPlugins::RestApiGet(systemInfo, "/system", false); |
313 configuration.mainDicomTagsSignature[OrthancPluginResourceType_Patient] = systemInfo["MainDicomTags"]["Patient"].asString(); | 319 configuration.patientsMainDicomTagsSignature = systemInfo["MainDicomTags"]["Patient"].asString(); |
314 configuration.mainDicomTagsSignature[OrthancPluginResourceType_Study] = systemInfo["MainDicomTags"]["Study"].asString(); | 320 configuration.studiesMainDicomTagsSignature = systemInfo["MainDicomTags"]["Study"].asString(); |
315 configuration.mainDicomTagsSignature[OrthancPluginResourceType_Series] = systemInfo["MainDicomTags"]["Series"].asString(); | 321 configuration.seriesMainDicomTagsSignature = systemInfo["MainDicomTags"]["Series"].asString(); |
316 configuration.mainDicomTagsSignature[OrthancPluginResourceType_Instance] = systemInfo["MainDicomTags"]["Instance"].asString(); | 322 configuration.instancesMainDicomTagsSignature = systemInfo["MainDicomTags"]["Instance"].asString(); |
317 configuration.storageCompressionEnabled = systemInfo["StorageCompression"].asBool(); | 323 configuration.storageCompressionEnabled = systemInfo["StorageCompression"].asBool(); |
318 | 324 |
319 configuration.orthancVersion = OrthancPlugins::GetGlobalContext()->orthancVersion; | 325 configuration.orthancVersion = OrthancPlugins::GetGlobalContext()->orthancVersion; |
320 } | 326 } |
321 | 327 |
325 { | 331 { |
326 return true; | 332 return true; |
327 } | 333 } |
328 | 334 |
329 const char* lastVersion = last.orthancVersion.c_str(); | 335 const char* lastVersion = last.orthancVersion.c_str(); |
330 const std::map<OrthancPluginResourceType, std::string>& lastTags = last.mainDicomTagsSignature; | |
331 const std::map<OrthancPluginResourceType, std::string>& currentTags = current.mainDicomTagsSignature; | |
332 bool needsProcessing = false; | 336 bool needsProcessing = false; |
333 | 337 |
334 if (!OrthancPlugins::CheckMinimalVersion(lastVersion, 1, 9, 1)) | 338 if (!OrthancPlugins::CheckMinimalVersion(lastVersion, 1, 9, 1)) |
335 { | 339 { |
336 if (triggerOnUnnecessaryDicomAsJsonFiles_) | 340 if (triggerOnUnnecessaryDicomAsJsonFiles_) |
342 { | 346 { |
343 OrthancPlugins::LogWarning("Housekeeper: your storage might still contain some dicom-as-json files but the trigger has been disabled"); | 347 OrthancPlugins::LogWarning("Housekeeper: your storage might still contain some dicom-as-json files but the trigger has been disabled"); |
344 } | 348 } |
345 } | 349 } |
346 | 350 |
347 if (lastTags.at(OrthancPluginResourceType_Patient) != currentTags.at(OrthancPluginResourceType_Patient)) | 351 if (last.patientsMainDicomTagsSignature != current.patientsMainDicomTagsSignature) |
348 { | 352 { |
349 if (triggerOnMainDicomTagsChange_) | 353 if (triggerOnMainDicomTagsChange_) |
350 { | 354 { |
351 OrthancPlugins::LogWarning("Housekeeper: Patient main dicom tags have changed, -> will perform housekeeping"); | 355 OrthancPlugins::LogWarning("Housekeeper: Patient main dicom tags have changed, -> will perform housekeeping"); |
352 needsProcessing = true; | 356 needsProcessing = true; |
355 { | 359 { |
356 OrthancPlugins::LogWarning("Housekeeper: Patient main dicom tags have changed but the trigger is disabled"); | 360 OrthancPlugins::LogWarning("Housekeeper: Patient main dicom tags have changed but the trigger is disabled"); |
357 } | 361 } |
358 } | 362 } |
359 | 363 |
360 if (lastTags.at(OrthancPluginResourceType_Study) != currentTags.at(OrthancPluginResourceType_Study)) | 364 if (last.studiesMainDicomTagsSignature != current.studiesMainDicomTagsSignature) |
361 { | 365 { |
362 if (triggerOnMainDicomTagsChange_) | 366 if (triggerOnMainDicomTagsChange_) |
363 { | 367 { |
364 OrthancPlugins::LogWarning("Housekeeper: Study main dicom tags have changed, -> will perform housekeeping"); | 368 OrthancPlugins::LogWarning("Housekeeper: Study main dicom tags have changed, -> will perform housekeeping"); |
365 needsProcessing = true; | 369 needsProcessing = true; |
368 { | 372 { |
369 OrthancPlugins::LogWarning("Housekeeper: Study main dicom tags have changed but the trigger is disabled"); | 373 OrthancPlugins::LogWarning("Housekeeper: Study main dicom tags have changed but the trigger is disabled"); |
370 } | 374 } |
371 } | 375 } |
372 | 376 |
373 if (lastTags.at(OrthancPluginResourceType_Series) != currentTags.at(OrthancPluginResourceType_Series)) | 377 if (last.seriesMainDicomTagsSignature != current.seriesMainDicomTagsSignature) |
374 { | 378 { |
375 if (triggerOnMainDicomTagsChange_) | 379 if (triggerOnMainDicomTagsChange_) |
376 { | 380 { |
377 OrthancPlugins::LogWarning("Housekeeper: Series main dicom tags have changed, -> will perform housekeeping"); | 381 OrthancPlugins::LogWarning("Housekeeper: Series main dicom tags have changed, -> will perform housekeeping"); |
378 needsProcessing = true; | 382 needsProcessing = true; |
381 { | 385 { |
382 OrthancPlugins::LogWarning("Housekeeper: Series main dicom tags have changed but the trigger is disabled"); | 386 OrthancPlugins::LogWarning("Housekeeper: Series main dicom tags have changed but the trigger is disabled"); |
383 } | 387 } |
384 } | 388 } |
385 | 389 |
386 if (lastTags.at(OrthancPluginResourceType_Instance) != currentTags.at(OrthancPluginResourceType_Instance)) | 390 if (last.instancesMainDicomTagsSignature != current.instancesMainDicomTagsSignature) |
387 { | 391 { |
388 if (triggerOnMainDicomTagsChange_) | 392 if (triggerOnMainDicomTagsChange_) |
389 { | 393 { |
390 OrthancPlugins::LogWarning("Housekeeper: Instance main dicom tags have changed, -> will perform housekeeping"); | 394 OrthancPlugins::LogWarning("Housekeeper: Instance main dicom tags have changed, -> will perform housekeeping"); |
391 needsProcessing = true; | 395 needsProcessing = true; |