Info |
---|
This exercise is intended to teach you how to use Snowstorm to:
|
Last Updated:
On this page
Table of Contents | ||
---|---|---|
|
Tip |
---|
Please visit the Pre-requisites page to see software that may be useful during the day. In summary, we recommend using:
|
Accessing the server
You will be given an ip-address and a private key of an AWS instance to access. Go to the directory where you have put the training.pem file and run:
Code Block | ||||
---|---|---|---|---|
| ||||
chmod 700 training.pem ssh -i training.pem ubuntu@<ip-address> |
Warning |
---|
This should work without any problems on Linux and OSX. For Windows, because of the difference in using SSH, please follow the instructions on the Windows set up page. |
On the server you will find:
- /opt/releases - containing the following:
SnomedCT_InternationalRF2_PRODUCTION_20190731T120000Z.zip (July 2019 International Edition)
SnomedCT_ManagedServiceSE_PRODUCTION_SE1000052_20191130T120000Z.zip (November 2019 Swedish Extension)
SnomedCT_InternationalRF2_PRODUCTION_20200131T120000Z.zip (January 2020 International Edition)
SnomedCT_InternationalRF2_PRODUCTION_20200309T120000Z.zip (March 2020 International Edition)
- SnomedCT_ManagedServiceSE_PRODUCTION_SE1000052_20200531T120000Z.zip (May 2020 Swedish Extension)
/opt/snowstorm - currently empty
- /opt/sct-browser - the SNOMED CT browser
- /opt/Frontend-Interaction-Demonstration - containing the following:
- demo front end HTML for some exercises
Elasticsearch v6.8.8 has already been installed on the server. You can check that Elasticsearch is running with the following command:
Code Block | ||||
---|---|---|---|---|
| ||||
curl localhost:9200 |
You will need to download the most recent release of Snowstorm (currently v4.10.2) into the /opt/snowstorm folder:
Code Block | ||||
---|---|---|---|---|
| ||||
cd /opt/snowstorm sudo wget https://github.com/IHTSDO/snowstorm/releases/download/4.10.2/snowstorm-4.10.2.jar |
Starting Snowstorm
To start snowstorm you will need to run the following commands.
(Documentation available starting-snowstorm)
The simplest thing is to leave an SSH window open with this command running so you can easily access the log output. Advanced linux users feel free to use tmux or similar instead to simulate multiple sessions.
Code Block | ||||
---|---|---|---|---|
| ||||
cd /opt/snowstorm sudo java -Xms4g -Xmx4g -jar snowstorm*.jar --server.servlet.contextPath=/snowstorm | sudo tee -a snowstorm.log |
We are using tee to see the output in the window and copy it to a snowstorm.log file in the same directory.
Note |
---|
Now start a second terminal window (a new SSH session) and ssh back in to the server so that you can run other commands without killing the running Snowstorm application. |
Loading the initial data
Next load the SNAPSHOT of the July 2019 International Edition.
(Documentation available loading-snomed)
We will use the REST API to run the imports. Access the Snowstorm swagger interface using the AWS instance ip-address and port 8080, for example - http://<ip-address>:8080/snowstorm
First we need to start the import process by creating a new import job. Look for the Import endpoint and then create a new import using
Code Block | ||||
---|---|---|---|---|
| ||||
{ "branchPath": "MAIN", "createCodeSystemVersion": true, "type": "SNAPSHOT" } |
... and click on 'Try it now'.
The Response Headers will contain the location of the newly created job. Note the id of the import job as you will need it for the next step, this is a UUID it will look something like "d0b30d96-3714-443e-99a5-2f282b1f1b0".
We now need to give the server the file. Normally, you would upload the file through the swagger interface, but to reduce network issues, find the correct file and we will use curl to do this from the server directly:
Code Block | ||||
---|---|---|---|---|
| ||||
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' -F file=@/opt/releases/SnomedCT_InternationalRF2_PRODUCTION_20190731T120000Z.zip 'http://localhost:8080/imports/<import id>/archive' |
Replace <import id> with the UUID from the previous step.
You can watch the Snowstorm log to see how this is progressing or fetch the job status from the import job URL - http://<ip-address>:8080/imports/<import_id> .
This should take no more than 30 minutes.
Warning |
---|
Make sure that you wait for the import to complete before going any further forward. You can see it is completed by looking at the status of the import - |
If you want to check that you have imported successfully, you can do this by seeing how many SNOMED CT concepts there are on the MAIN branch with the following URL - http://<ip-address>:8080/MAIN/concepts?activeFilter=true&offset=0&limit=1
- which show that there are 350,830 active concepts.
Loading the local edition or extension
As this is the first time we will be importing the local edition or extension (SE in this instance), we will need to create a CodeSystem on the server. On the swagger interface, and in the ‘Code Systems’ section of the swagger interface, look for the ‘Create a code system’ endpoint. Use the following in the request to create the CodeSystem. Note the dependantVersionEffectiveTime allows you to create a CodeSystem dependent on a specific International Edition version.
Code Block | ||||
---|---|---|---|---|
| ||||
{ "branchPath": "MAIN/SNOMEDCT-SE", "shortName": "SNOMEDCT-SE", "countryCode": "se", "defaultLanguageCode": "sv", "dependantVersionEffectiveTime": 20190731, "name": "Swedish Extension" } |
and then click on 'Try it now'.
You now need to import the local extension or edition. First we need to start the import process by creating a new import job. Look for the Import endpoint and then create a new import using
Code Block | ||||
---|---|---|---|---|
| ||||
{ "branchPath": "MAIN/SNOMEDCT-SE", "createCodeSystemVersion": true, "type": "SNAPSHOT" } |
and then click on 'Try it now' and then note the id of the import as you will need it for the next step (it will look something like - d0b30d96-3714-443e-99a5-2f282b1f1b0)
We now need to give the server the file. Normally, you would do this through the swagger interface, but to reduce network issues, find the correct file and we will use curl to do this from the server directly
Code Block | ||||
---|---|---|---|---|
| ||||
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' -F file=@/opt/releases/SnomedCT_ManagedServiceSE_PRODUCTION_SE1000052_20191130T120000Z.zip 'http://localhost:8080/imports/<import id>/archive' |
You can watch log to see how this is progressing, or simply to the import endpoint - http://<ip-address>:8080/imports/<import id>
This should take no more than a few minutes.
Warning |
---|
Make sure that you wait for the import to complete before going any further forward. You can see it is completed by looking at the status of the import - |
Upgrading MAIN to a new International Edition
Every 6 months there is a new International Edition and it is important to keep your terminology server up to date. An upgrade is an import again, but for the International Edition, it is a DELTA import onto MAIN.
First, we need to create an import job as above
Code Block | ||||
---|---|---|---|---|
| ||||
{ "branchPath": "MAIN", "createCodeSystemVersion": true, "type": "DELTA" } |
and then click on 'Try it now' and then note the id of the import as before.
We now need to give the server the file as before
Code Block | ||||
---|---|---|---|---|
| ||||
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' -F file=@/opt/releases/SnomedCT_InternationalRF2_PRODUCTION_20200131T120000Z.zip 'http://localhost:8080/imports/<import id>/archive' |
Warning |
---|
Make sure that you wait for the import to complete before going any further forward. You can see it is completed by looking at the status of the import - |
Note | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Unusually, there was an interim release of the International Edition in March 2020 before the next Swedish release to respond to this year's COVID-19 pandemic and so we need to import that before the Swedish release. Do the same as above with the following import job info
And the following curl command
|
Upgrading the extension/edition branch to the new International Edition (merging the branch)
We now need to upgrade the local extension/edition branch.
In our example, we will now merge the MAIN branch into the SNOMEDCT-SE branch using the CodeSystem upgrade endpoint using the shortname, SNOMEDCT-SE:
Code Block | ||||
---|---|---|---|---|
| ||||
{ "newDependantVersion": 20200309 } |
You can check this has been successful by checking the status of the branch and seeing if it is forward.
Upgrading to a new extension or edition
Using what you have already done, see if you can do this making note the type and the branch that you will import into.