annotate OrthancServer/Plugins/Samples/DelayedDeletion/Plugin.cpp @ 5538:6ce05f8b5b13

deprecating OrthancPluginSetDescription2(), OrthancPluginExtendOrthancExplorer2() and OrthancPluginSetRootUri2()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 16 Mar 2024 11:34:28 +0100
parents 48b8dae6dc77
children 0b18690c1935
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5263
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
1 /**
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
4 * Department, University Hospital of Liege, Belgium
5485
48b8dae6dc77 upgrade to year 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5452
diff changeset
5 * Copyright (C) 2017-2024 Osimis S.A., Belgium
48b8dae6dc77 upgrade to year 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5452
diff changeset
6 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
5263
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
7 *
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
8 * This program is free software: you can redistribute it and/or
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
9 * modify it under the terms of the GNU General Public License as
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
10 * published by the Free Software Foundation, either version 3 of the
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
11 * License, or (at your option) any later version.
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
12 *
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
13 * This program is distributed in the hope that it will be useful, but
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
16 * General Public License for more details.
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
17 *
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
18 * You should have received a copy of the GNU General Public License
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
20 **/
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
21
ae3f29be5ca5 fix compatibility with visual studio precompiled headers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5031
diff changeset
22
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
23 #include "PendingDeletionsDatabase.h"
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
24
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
25 #include "../../../../OrthancFramework/Sources/FileStorage/FilesystemStorage.h"
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
26 #include "../../../../OrthancFramework/Sources/Logging.h"
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
27 #include "../../../../OrthancFramework/Sources/MultiThreading/SharedMessageQueue.h"
5265
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
28 #include "../Common/OrthancPluginCppWrapper.h"
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
29
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
30 #include <boost/thread.hpp>
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
31
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
32
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
33 class PendingDeletion : public Orthanc::IDynamicObject
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
34 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
35 private:
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
36 Orthanc::FileContentType type_;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
37 std::string uuid_;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
38
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
39 public:
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
40 PendingDeletion(Orthanc::FileContentType type,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
41 const std::string& uuid) :
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
42 type_(type),
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
43 uuid_(uuid)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
44 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
45 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
46
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
47 Orthanc::FileContentType GetType() const
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
48 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
49 return type_;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
50 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
51
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
52 const std::string& GetUuid() const
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
53 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
54 return uuid_;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
55 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
56 };
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
57
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
58
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
59 static const char* DELAYED_DELETION = "DelayedDeletion";
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
60 static bool continue_ = false;
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
61 static Orthanc::SharedMessageQueue queue_;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
62 static std::unique_ptr<Orthanc::FilesystemStorage> storage_;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
63 static std::unique_ptr<PendingDeletionsDatabase> db_;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
64 static std::unique_ptr<boost::thread> deletionThread_;
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
65 static const char* databaseServerIdentifier_ = NULL;
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
66 static unsigned int throttleDelayMs_ = 0;
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
67
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
68
5265
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
69 static Orthanc::FileContentType Convert(OrthancPluginContentType type)
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
70 {
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
71 switch (type)
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
72 {
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
73 case OrthancPluginContentType_Dicom:
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
74 return Orthanc::FileContentType_Dicom;
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
75
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
76 case OrthancPluginContentType_DicomAsJson:
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
77 return Orthanc::FileContentType_DicomAsJson;
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
78
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
79 case OrthancPluginContentType_DicomUntilPixelData:
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
80 return Orthanc::FileContentType_DicomUntilPixelData;
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
81
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
82 default:
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
83 return Orthanc::FileContentType_Unknown;
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
84 }
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
85 }
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
86
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
87
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
88 static OrthancPluginErrorCode StorageCreate(const char* uuid,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
89 const void* content,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
90 int64_t size,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
91 OrthancPluginContentType type)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
92 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
93 try
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
94 {
5265
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
95 storage_->Create(uuid, content, size, Convert(type));
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
96 return OrthancPluginErrorCode_Success;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
97 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
98 catch (Orthanc::OrthancException& e)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
99 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
100 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
101 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
102 catch (...)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
103 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
104 return OrthancPluginErrorCode_StorageAreaPlugin;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
105 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
106 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
107
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
108
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
109 static OrthancPluginErrorCode StorageReadWhole(OrthancPluginMemoryBuffer64* target, // Memory buffer where to store the content of the file. It must be allocated by the plugin using OrthancPluginCreateMemoryBuffer64(). The core of Orthanc will free it.
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
110 const char* uuid,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
111 OrthancPluginContentType type)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
112 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
113 try
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
114 {
5265
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
115 std::unique_ptr<Orthanc::IMemoryBuffer> buffer(storage_->Read(uuid, Convert(type)));
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
116
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
117 // copy from a buffer allocated on plugin's heap into a buffer allocated on core's heap
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
118 if (OrthancPluginCreateMemoryBuffer64(OrthancPlugins::GetGlobalContext(), target, buffer->GetSize()) != OrthancPluginErrorCode_Success)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
119 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
120 OrthancPlugins::LogError("Delayed deletion plugin: error while reading object " + std::string(uuid) + ", cannot allocate memory of size " + boost::lexical_cast<std::string>(buffer->GetSize()) + " bytes");
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
121 return OrthancPluginErrorCode_StorageAreaPlugin;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
122 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
123
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
124 memcpy(target->data, buffer->GetData(), buffer->GetSize());
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
125
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
126 return OrthancPluginErrorCode_Success;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
127 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
128 catch (Orthanc::OrthancException& e)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
129 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
130 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
131 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
132 catch (...)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
133 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
134 return OrthancPluginErrorCode_StorageAreaPlugin;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
135 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
136 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
137
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
138
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
139 static OrthancPluginErrorCode StorageReadRange(OrthancPluginMemoryBuffer64* target, // Memory buffer where to store the content of the range. The memory buffer is allocated and freed by Orthanc. The length of the range of interest corresponds to the size of this buffer.
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
140 const char* uuid,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
141 OrthancPluginContentType type,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
142 uint64_t rangeStart)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
143 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
144 try
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
145 {
5265
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
146 std::unique_ptr<Orthanc::IMemoryBuffer> buffer(storage_->ReadRange(uuid, Convert(type), rangeStart, rangeStart + target->size));
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
147
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
148 assert(buffer->GetSize() == target->size);
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
149
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
150 memcpy(target->data, buffer->GetData(), buffer->GetSize());
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
151
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
152 return OrthancPluginErrorCode_Success;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
153 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
154 catch (Orthanc::OrthancException& e)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
155 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
156 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
157 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
158 catch (...)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
159 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
160 return OrthancPluginErrorCode_StorageAreaPlugin;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
161 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
162
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
163 return OrthancPluginErrorCode_Success;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
164 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
165
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
166
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
167 static OrthancPluginErrorCode StorageRemove(const char* uuid,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
168 OrthancPluginContentType type)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
169 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
170 try
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
171 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
172 LOG(INFO) << "DelayedDeletion - Scheduling delayed deletion of " << uuid;
5265
0e8dfba67ac9 fix pch
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5263
diff changeset
173 db_->Enqueue(uuid, Convert(type));
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
174
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
175 return OrthancPluginErrorCode_Success;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
176 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
177 catch (Orthanc::OrthancException& e)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
178 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
179 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
180 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
181 catch (...)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
182 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
183 return OrthancPluginErrorCode_StorageAreaPlugin;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
184 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
185 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
186
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
187 static void DeletionWorker()
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
188 {
5452
8345267e8de5 Added OrthancPluginSetCurrentThreadName() in the plugin SDK
Alain Mazy <am@osimis.io>
parents: 5265
diff changeset
189 OrthancPluginSetCurrentThreadName(OrthancPlugins::GetGlobalContext(), "DELETION");
8345267e8de5 Added OrthancPluginSetCurrentThreadName() in the plugin SDK
Alain Mazy <am@osimis.io>
parents: 5265
diff changeset
190
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
191 static const unsigned int GRANULARITY = 100; // In milliseconds
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
192
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
193 while (continue_)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
194 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
195 std::string uuid;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
196 Orthanc::FileContentType type = Orthanc::FileContentType_Dicom; // Dummy initialization
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
197
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
198 bool hasDeleted = false;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
199
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
200 while (continue_ && db_->Dequeue(uuid, type))
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
201 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
202 if (!hasDeleted)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
203 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
204 LOG(INFO) << "DelayedDeletion - Starting to process the pending deletions";
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
205 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
206
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
207 hasDeleted = true;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
208
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
209 try
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
210 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
211 LOG(INFO) << "DelayedDeletion - Asynchronous removal of file: " << uuid;
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
212 storage_->Remove(uuid, type);
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
213
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
214 if (throttleDelayMs_ > 0)
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
215 {
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
216 boost::this_thread::sleep(boost::posix_time::milliseconds(throttleDelayMs_));
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
217 }
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
218 }
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
219 catch (Orthanc::OrthancException& ex)
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
220 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
221 LOG(ERROR) << "DelayedDeletion - Cannot remove file: " << uuid << " " << ex.What();
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
222 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
223 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
224
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
225 if (hasDeleted)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
226 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
227 LOG(INFO) << "DelayedDeletion - All the pending deletions have been completed";
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
228 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
229
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
230 boost::this_thread::sleep(boost::posix_time::milliseconds(GRANULARITY));
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
231 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
232 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
233
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
234
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
235 OrthancPluginErrorCode OnChangeCallback(OrthancPluginChangeType changeType,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
236 OrthancPluginResourceType resourceType,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
237 const char* resourceId)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
238 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
239 switch (changeType)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
240 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
241 case OrthancPluginChangeType_OrthancStarted:
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
242 assert(deletionThread_.get() == NULL);
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
243
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
244 LOG(WARNING) << "DelayedDeletion - Starting the deletion thread";
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
245 continue_ = true;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
246 deletionThread_.reset(new boost::thread(DeletionWorker));
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
247 break;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
248
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
249 case OrthancPluginChangeType_OrthancStopped:
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
250
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
251 if (deletionThread_.get() != NULL)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
252 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
253 LOG(WARNING) << "DelayedDeletion - Stopping the deletion thread";
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
254 continue_ = false;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
255 if (deletionThread_->joinable())
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
256 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
257 deletionThread_->join();
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
258 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
259 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
260
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
261 break;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
262
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
263 default:
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
264 break;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
265 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
266
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
267 return OrthancPluginErrorCode_Success;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
268 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
269
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
270
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
271
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
272 void GetPluginStatus(OrthancPluginRestOutput* output,
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
273 const char* url,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
274 const OrthancPluginHttpRequest* request)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
275 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
276
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
277 Json::Value status;
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
278 status["FilesPendingDeletion"] = db_->GetSize();
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
279 status["DatabaseServerIdentifier"] = databaseServerIdentifier_;
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
280
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
281 std::string s = status.toStyledString();
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
282 OrthancPluginAnswerBuffer(OrthancPlugins::GetGlobalContext(), output, s.c_str(),
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
283 s.size(), "application/json");
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
284 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
285
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
286
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
287
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
288 extern "C"
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
289 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
290 ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* context)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
291 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
292 OrthancPlugins::SetGlobalContext(context);
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
293 Orthanc::Logging::InitializePluginContext(context);
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
294
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
295
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
296 /* Check the version of the Orthanc core */
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
297 if (OrthancPluginCheckVersion(context) == 0)
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
298 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
299 char info[1024];
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
300 sprintf(info, "Your version of Orthanc (%s) must be above %d.%d.%d to run this plugin",
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
301 context->orthancVersion,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
302 ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
303 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER,
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
304 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER);
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
305 OrthancPluginLogError(context, info);
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
306 return -1;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
307 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
308
5538
6ce05f8b5b13 deprecating OrthancPluginSetDescription2(), OrthancPluginExtendOrthancExplorer2() and OrthancPluginSetRootUri2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 5485
diff changeset
309 OrthancPluginSetDescription2(context, ORTHANC_PLUGIN_NAME, "Plugin removing files from storage asynchronously.");
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
310
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
311 OrthancPlugins::OrthancConfiguration orthancConfig;
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
312
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
313 if (!orthancConfig.IsSection(DELAYED_DELETION))
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
314 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
315 LOG(WARNING) << "DelayedDeletion - plugin is loaded but not enabled (no \"DelayedDeletion\" section found in configuration)";
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
316 return 0;
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
317 }
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
318
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
319 OrthancPlugins::OrthancConfiguration delayedDeletionConfig;
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
320 orthancConfig.GetSection(delayedDeletionConfig, DELAYED_DELETION);
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
321
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
322 if (delayedDeletionConfig.GetBooleanValue("Enable", true))
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
323 {
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
324 databaseServerIdentifier_ = OrthancPluginGetDatabaseServerIdentifier(context);
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
325 throttleDelayMs_ = delayedDeletionConfig.GetUnsignedIntegerValue("ThrottleDelayMs", 0); // delay in ms
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
326
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
327
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
328 std::string pathStorage = orthancConfig.GetStringValue("StorageDirectory", "OrthancStorage");
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
329 LOG(WARNING) << "DelayedDeletion - Path to the storage area: " << pathStorage;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
330
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
331 storage_.reset(new Orthanc::FilesystemStorage(pathStorage));
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
332
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
333 boost::filesystem::path defaultDbPath = boost::filesystem::path(pathStorage) / (std::string("pending-deletions.") + databaseServerIdentifier_ + ".db");
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
334 std::string dbPath = delayedDeletionConfig.GetStringValue("Path", defaultDbPath.string());
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
335
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
336 LOG(WARNING) << "DelayedDeletion - Path to the SQLite database: " << dbPath;
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
337
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
338 // This must run after the allocation of "storage_", to make sure
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
339 // that the folder actually exists
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
340 db_.reset(new PendingDeletionsDatabase(dbPath));
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
341
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
342 OrthancPluginRegisterStorageArea2(context, StorageCreate, StorageReadWhole, StorageReadRange, StorageRemove);
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
343
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
344 OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback);
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
345
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
346 OrthancPlugins::RegisterRestCallback<GetPluginStatus>(std::string("/plugins/") + ORTHANC_PLUGIN_NAME + "/status", true);
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
347 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
348 else
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
349 {
5031
eec3e4a91663 DelayedDeletion plugin: first version
Alain Mazy <am@osimis.io>
parents: 5024
diff changeset
350 LOG(WARNING) << "DelayedDeletion - plugin is loaded but disabled (check your \"DelayedDeletion.Enable\" configuration)";
5024
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
351 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
352
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
353 return 0;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
354 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
355
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
356 ORTHANC_PLUGINS_API void OrthancPluginFinalize()
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
357 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
358 db_.reset();
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
359 storage_.reset();
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
360 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
361
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
362 ORTHANC_PLUGINS_API const char* OrthancPluginGetName()
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
363 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
364 return ORTHANC_PLUGIN_NAME;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
365 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
366
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
367 ORTHANC_PLUGINS_API const char* OrthancPluginGetVersion()
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
368 {
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
369 return ORTHANC_PLUGIN_VERSION;
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
370 }
c2ebc47f4f18 wip: adding DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
diff changeset
371 }