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;