annotate Sphinx/source/users/advanced-rest.rst @ 596:ef64d0769014

private tags
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 18 Jan 2021 11:12:01 +0100
parents 090cc988c35e
children eaa6cdfa7ba6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 .. _rest-advanced:
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 Advanced features of the REST API
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 =================================
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 .. contents::
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 :depth: 3
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 This section of the Orthanc Book is a complement to the description of
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 the :ref:`REST API of Orthanc <rest>`. It explains some advanced uses
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 of the API.
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 .. _jobs:
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 Jobs
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 ----
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 Since Orthanc 1.4.0, a jobs engine is embedded within Orthanc. Jobs
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
20 are high-level tasks to be processed by Orthanc. Jobs are first added
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
21 to a queue of pending tasks, and Orthanc will simultaneously execute a
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
22 fixed number of jobs (check out :ref:`configuration option
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
23 <configuration>` ``ConcurrentJobs``). Once the jobs have been
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
24 processed, they are tagged as successful or failed, and kept in a
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
25 history (the size of this history is controlled by the
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
26 ``JobsHistorySize`` option).
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
28 By default, Orthanc saves the jobs into its database (check out the
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
29 ``SaveJobs`` option). If Orthanc is stopped then relaunched, the jobs
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
30 whose processing was not finished are automatically put into the queue
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
31 of pending tasks. The command-line option ``--no-jobs`` can also be
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
32 used to prevent the loading of jobs from the database upon the launch
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
33 of Orthanc.
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
35 Note that the queue of pending jobs has a maximum size (check out the
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
36 ``LimitJobs`` option). When this limit is reached, the addition of new
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
37 jobs is blocked until some job finishes.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
38
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
39
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
40
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
41 Synchronous vs. asynchronous calls
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
42 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
43
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
44 Some calls to the REST API of Orthanc need time to be executed, and
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 thus result in adding a job to the processing queue. This notably
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 includes the following URIs:
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 * :ref:`Modifying and anonymizing <anonymization>` DICOM instances.
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 * Creating ZIP or media archives.
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 * C-Move SCU (``/queries/.../retrieve``).
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 * C-Store SCU (``/modalities/.../store``).
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 * Sending to an Orthanc peer (``/peers/.../store``).
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 * :ref:`Split/merge <split-merge>`.
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 * Sending images using the :ref:`transfers accelerator <transfers>` plugin.
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 Such REST API calls can be configured to be executed in a synchronous
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 or an asynchronous mode:
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 * **Synchronous calls** wait for the end of the execution of their
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 associated job. This is in general the default behavior.
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61 * **Asynchronous calls** end immediately and return a handle to their
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
62 associated job. It is up to the caller to monitor the execution by
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
63 calling the jobs API (e.g. to know whether the job has finished its
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
64 execution).
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 The choice between synchronous and asynchronous modes is done by
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
67 setting the ``Synchronous`` field (or indifferently the
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
68 ``Asynchronous`` field) in the POST body of the call to the REST
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
69 API. Note that the :ref:`transfers accelerator <transfers>` only runs
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
70 in asynchronous mode.
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
72 An integer number (possibly negative) can be specified in the
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
73 ``Priority`` field of the POST body. Jobs with higher priority will be
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
74 executed first. By default, the priority is set to zero.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
75
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
76 Despite being more complex to handle, the asynchronous mode is highly
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 recommended for jobs whose execution time can last over a dozen of
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 seconds (typically, the creation of an archive or a network transfer).
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
79 Indeed, synchronous calls can be affected by timeouts in the HTTP
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
80 protocol if they last too long.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
81
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
82
260
f9e7036d81d0 updating DICOMweb documentation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 253
diff changeset
83 .. _jobs-monitoring:
f9e7036d81d0 updating DICOMweb documentation
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 253
diff changeset
84
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
85 Monitoring jobs
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
86 ^^^^^^^^^^^^^^^
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
87
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
88 .. highlight:: bash
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
89
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
90 The list of all jobs can be retrieved as follows::
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
91
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
92 $ curl http://localhost:8042/jobs
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
93 [ "e0d12aac-47eb-454f-bb7f-9857931e2904" ]
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
94
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
95 Full details about each job can be retrieved::
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
96
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
97 $ curl http://localhost:8042/jobs/e0d12aac-47eb-454f-bb7f-9857931e2904
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
98 {
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
99 "CompletionTime" : "20190306T095223.753851",
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
100 "Content" : {
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
101 "Description" : "REST API",
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
102 "InstancesCount" : 1,
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
103 "UncompressedSizeMB" : 0
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
104 },
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
105 "CreationTime" : "20190306T095223.750666",
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
106 "EffectiveRuntime" : 0.001,
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
107 "ErrorCode" : 0,
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
108 "ErrorDescription" : "Success",
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
109 "ID" : "e0d12aac-47eb-454f-bb7f-9857931e2904",
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
110 "Priority" : 0,
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
111 "Progress" : 100,
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
112 "State" : "Success",
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
113 "Timestamp" : "20190306T095408.556082",
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
114 "Type" : "Archive"
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
115 }
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
117 Note that the ``/jobs?expand`` URI will retrieve this information in
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
118 one single REST query. The ``Content`` field contains the parameters
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
119 of the job, and is very specific to the ``Type`` of job.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
120
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
121 The ``State`` field can be:
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
122
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
123 * ``Pending``: The job is waiting to be executed.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
124 * ``Running``: The job is being executed. The ``Progress`` field will
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
125 be continuously updated to reflect the progression of the execution.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
126 * ``Success``: The job has finished with success.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
127 * ``Failure``: The job has finished with failure. Check out the
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
128 ``ErrorCode`` and ``ErrorDescription`` fields for more information.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
129 * ``Paused``: The job has been paused.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
130 * ``Retry``: The job has failed internally, and has been scheduled for
568
090cc988c35e Orthanc 1.8.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 554
diff changeset
131 re-submission after a delay. As of Orthanc 1.8.2, this feature is not
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
132 used by any type of job.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
133
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
134 In order to wait for the end of an asynchronous call, the caller will
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
135 typically have to poll the ``/jobs/...` URI (i.e. make periodic
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
136 calls), waiting for the ``State`` field to become ``Success`` or
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
137 ``Failure``.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
138
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
139
322
c5226c5509ca storage commitment scp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 310
diff changeset
140 .. _jobs-controlling:
c5226c5509ca storage commitment scp
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 310
diff changeset
141
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
142 Interacting with jobs
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
143 ^^^^^^^^^^^^^^^^^^^^^
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
144
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
145 Given the ID of some job, one can:
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
146
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
147 * Cancel the job by POST-ing to ``/jobs/.../cancel``.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
148 * Pause the job by POST-ing to ``/jobs/.../pause``.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
149 * Resume a job in ``Paused`` state by POST-ing to ``/jobs/.../resume``.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
150 * Retry a job in ``Failed`` state by POST-ing to ``/jobs/.../resubmit``.
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
151
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
152 The related state machine is depicted in the `implementation notes
449
2922fb1bd65e fix links
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 441
diff changeset
153 <https://hg.orthanc-server.com/orthanc/raw-file/default/OrthancServer/Resources/ImplementationNotes/JobsEngineStates.pdf>`__.
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155
487
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
156 Example: Asynchronous generation of an archive
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
157 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158
487
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
159 .. highlight:: bash
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
160
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
161 Sucessful jobs are associated with a set of so-called "outputs" that
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
162 can be attached to the job.
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
163
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
164 Here is a sample bash session to ask Orthanc to generate a ZIP
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
165 archive, then to download it locally::
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
166
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
167 $ curl http://localhost:8042/studies/27f7126f-4f66fb14-03f4081b-f9341db2-53925988/archive -d '{"Asynchronous":true}'
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
168 {
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
169 "ID" : "82cc02d1-03fe-41f9-be46-a308d16ea94a",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
170 "Path" : "/jobs/82cc02d1-03fe-41f9-be46-a308d16ea94a"
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
171 }
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
172 $ curl http://localhost:8042/jobs/82cc02d1-03fe-41f9-be46-a308d16ea94a
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
173 {
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
174 "CompletionTime" : "20200817T144700.401777",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
175 "Content" : {
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
176 "Description" : "REST API",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
177 "InstancesCount" : 232,
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
178 "UncompressedSizeMB" : 64
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
179 },
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
180 "CreationTime" : "20200817T144658.011824",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
181 "EffectiveRuntime" : 2.3879999999999999,
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
182 "ErrorCode" : 0,
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
183 "ErrorDescription" : "Success",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
184 "ID" : "82cc02d1-03fe-41f9-be46-a308d16ea94a",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
185 "Priority" : 0,
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
186 "Progress" : 100,
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
187 "State" : "Success",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
188 "Timestamp" : "20200817T144705.770825",
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
189 "Type" : "Archive"
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
190 }
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
191 $ curl http://localhost:8042/jobs/82cc02d1-03fe-41f9-be46-a308d16ea94a/archive > a.zip
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
192
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
193 Note how we retrieve the content of the archive by accessing the
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
194 ``archive`` output of the job (check out the virtual method
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
195 ``IJob::GetOutput()`` from the `source code
568
090cc988c35e Orthanc 1.8.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 554
diff changeset
196 <https://hg.orthanc-server.com/orthanc/file/Orthanc-1.8.2/OrthancServer/Sources/ServerJobs/ArchiveJob.cpp>`__
487
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
197 of Orthanc).
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
198
516
416581db306e sample: asynchronous download of media archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 513
diff changeset
199 Here is the corresponding sequence of commands to generate a DICOMDIR
416581db306e sample: asynchronous download of media archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 513
diff changeset
200 media::
416581db306e sample: asynchronous download of media archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 513
diff changeset
201
416581db306e sample: asynchronous download of media archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 513
diff changeset
202 $ curl http://localhost:8042/studies/27f7126f-4f66fb14-03f4081b-f9341db2-53925988/media -d '{"Asynchronous":true}'
416581db306e sample: asynchronous download of media archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 513
diff changeset
203 $ curl http://localhost:8042/jobs/6332be8a-0052-44fb-8cc2-ac959aeccad9/archive > a.zip
416581db306e sample: asynchronous download of media archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 513
diff changeset
204
568
090cc988c35e Orthanc 1.8.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 554
diff changeset
205 As of Orthanc 1.8.2, only the creation of a ZIP or a DICOMDIR archive
516
416581db306e sample: asynchronous download of media archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 513
diff changeset
206 produces such "outputs".
487
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
207
13bb9af3df26 Example: Asynchronous generation of an archive
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 461
diff changeset
208
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 .. _pdf:
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210
310
c13431b26e55 title about pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 297
diff changeset
211 Attaching PDF file as DICOM series
c13431b26e55 title about pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 297
diff changeset
212 ----------------------------------
224
02399e86f046 starting documentation of jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213
226
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
214 Among many different types of data, DICOM files can be used to store
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
215 PDF files. The ``/tools/create-dicom`` URI can be used to upload a PDF
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
216 file to Orthanc. The following scripts perform such a *DICOM-ization*;
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
217 They convert the ``HelloWorld2.pdf`` file to base64, then perform a
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
218 ``POST`` request with JSON data containing the converted payload.
225
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
219
545
931052bd5a53 explain the "Parent" field in "/tools/create-dicom" for PDF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 528
diff changeset
220 Importantly, the ``Parent`` field of the ``POST`` body can be set to
931052bd5a53 explain the "Parent" field in "/tools/create-dicom" for PDF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 528
diff changeset
221 the :ref:`Orthanc identifier of some study <orthanc-ids>` in order to
931052bd5a53 explain the "Parent" field in "/tools/create-dicom" for PDF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 528
diff changeset
222 attach the newly-created PDF series to the given parent study.
931052bd5a53 explain the "Parent" field in "/tools/create-dicom" for PDF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 528
diff changeset
223
297
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
224 Using bash:
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
225
297
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
226 .. code-block:: bash
225
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
227
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
228 # create the json data, with the BASE64 data embedded in it
545
931052bd5a53 explain the "Parent" field in "/tools/create-dicom" for PDF
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 528
diff changeset
229 (echo -n '{"Parent": "b6e8436b-c5835b7b-cecc9576-0483e165-ab5c710b", "Tags" : {"Modality" : "CT"}, "Content" : "data:application/pdf;base64,'; base64 HelloWorld2.pdf; echo '"}') > /tmp/foo
225
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
230
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
231 # upload it to Orthanc
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
232 cat /tmp/foo | curl -H "Content-Type: application/json" -d @- http://localhost:8042/tools/create-dicom
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
233
227
08c47b8abeea jobs api
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 226
diff changeset
234
297
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
235 Using powershell:
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
236
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
237 .. code-block:: perl
225
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
238
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
239 # create the BASE64 string data
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
240 $fileInBase64 = $([Convert]::ToBase64String((gc -Path "HelloWorld2.pdf" -Encoding Byte)))
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
241
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
242 # create the json data
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
243 $params = @{Tags = @{PatientName = "Benjamino";Modality = "CT"};Content= "data:application/pdf;base64,$fileInBase64"}
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
244
376
6d7a36447e21 Small rephrasing
Benjamin Golinvaux <bgo@osimis.io>
parents: 363
diff changeset
245 # disabling the progress bar makes the Invoke-RestMethod call MUCH faster
297
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
246 $ProgressPreference = 'SilentlyContinue'
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
247
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
248 # upload it to Orthanc
64d1ddab8246 Improved PDF creation Pwsh snippet + added Dicom instance upload example with
Benjamin Golinvaux <bgo@osimis.io>
parents: 290
diff changeset
249 $reply = Invoke-RestMethod http://localhost:8042/tools/create-dicom -Method POST -Body ($params|ConvertTo-Json) -ContentType 'application/json'
225
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
250
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
251 # display the result
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
252 Write-Host "The instance can be retrieved in PDF at http://localhost:8042$($reply.Path)/pdf"
ced9dbf86de8 Added tutorial that shows how to upload and retrieve PDF files using the REST API
Benjamin Golinvaux <bgo@osimis.io>
parents: 224
diff changeset
253
226
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
254 Please note that the ``/tools/create-dicom`` API call will return the
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
255 Orthanc instance ID of the newly created DICOM resource.
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
256
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
257 You can use the ``/instances/.../pdf`` URI to retrieve an embedded PDF
eaae8d630277 proofreading of pdf
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 225
diff changeset
258 file.
228
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
259
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
260
596
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
261 .. _private-tags:
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
262
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
263 Creating DICOM instance with private tags
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
264 -----------------------------------------
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
265
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
266 .. highlight:: json
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
267
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
268 The ``/tools/create-dicom`` URI can be used to create DICOM instances
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
269 containing private tags. Those private tags must first be defined in
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
270 the ``Dictionary`` configuration option of Orthanc. Importantly, the
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
271 ``xxxx,0010`` tag must be defined to register the private creator,
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
272 where ``xxxx`` is the private group of interest. Here is a sample::
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
273
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
274 {
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
275 "Dictionary" : {
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
276 "0405,0010" : [ "LO", "Private data element", 1, 1, "RawDataStore" ],
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
277 "0405,1001" : [ "ST", "XML", 1, 1, "RawDataStore" ]
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
278 }
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
279 }
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
280
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
281 Once Orthanc is started using this configuration file, it is possible
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
282 to create a DICOM instance using the following POST body on
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
283 ``/tools/create-dicom``::
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
284
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
285 {
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
286 "PrivateCreator" : "RawDataStore",
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
287 "Tags" :
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
288 {
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
289 "PatientName" : "Love^Sarah",
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
290 "PatientID" : "7",
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
291 "0405,0010" : "RawDataStore",
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
292 "0405,1001" : "<xml><test>Testing</test></xml>"
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
293 }
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
294 }
ef64d0769014 private tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 568
diff changeset
295
228
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
296
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
297 .. _prometheus:
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
298
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
299 Instrumentation with Prometheus
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
300 -------------------------------
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
301
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
302 .. highlight:: text
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
303
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
304 Orthanc publishes its metrics according to the `text-based format of
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
305 Prometheus
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
306 <https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format>`__
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
307 (check also the `OpenMetrics project <https://openmetrics.io/>`__), onto
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
308 the ``/tools/metrics-prometheus`` URI of the REST API. For instance::
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
309
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
310 $ curl http://localhost:8042/tools/metrics-prometheus
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
311 orthanc_count_instances 1 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
312 orthanc_count_patients 1 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
313 orthanc_count_series 1 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
314 orthanc_count_studies 1 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
315 orthanc_disk_size_mb 0.0135002136 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
316 orthanc_jobs_completed 1 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
317 orthanc_jobs_failed 0 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
318 orthanc_jobs_pending 0 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
319 orthanc_jobs_running 0 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
320 orthanc_jobs_success 1 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
321 orthanc_rest_api_active_requests 1 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
322 orthanc_rest_api_duration_ms 0 1551868094265
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
323 orthanc_storage_create_duration_ms 0 1551865919315
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
324 orthanc_storage_read_duration_ms 0 1551865943752
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
325 orthanc_store_dicom_duration_ms 5 1551865919319
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
326 orthanc_uncompressed_size_mb 0.0135002136 1551868380543
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
327
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
328
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
329 .. highlight:: bash
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
330
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
331 Note that the collection of metrics can be statically disabled by
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
332 setting the :ref:`global configuration option <configuration>`
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
333 ``MetricsEnabled`` to ``false``, or dynamically disabled by PUT-ing
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
334 ``0`` on ``/tools/metrics``::
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
335
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
336 $ curl http://localhost:8042/tools/metrics
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
337 1
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
338 $ curl http://localhost:8042/tools/metrics -X PUT -d '0'
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
339 $ curl http://localhost:8042/tools/metrics
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
340 0
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
341
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
342
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
343 .. highlight:: yaml
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
344
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
345 Here is a sample configuration for Prometheus (in the `YAML format
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
346 <https://en.wikipedia.org/wiki/YAML>`__)::
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
347
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
348 scrape_configs:
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
349 - job_name: 'orthanc'
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
350 scrape_interval: 10s
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
351 metrics_path: /tools/metrics-prometheus
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
352 basic_auth:
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
353 username: orthanc
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
354 password: orthanc
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
355 static_configs:
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
356 - targets: ['192.168.0.2:8042']
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
357
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
358 .. highlight:: bash
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
359
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
360 Obviously, make sure to adapt this sample with your actual IP
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
361 address. Thanks to Docker, you can easily start a Prometheus server by
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
362 writing this configuration to, say, ``/tmp/prometheus.yml``, then
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
363 type::
972900443cf8 prometheus
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 227
diff changeset
364
363
9c28eeab2db6 removed sudo from docker
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 359
diff changeset
365 $ sudo run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml --rm prom/prometheus:v2.7.0