How to setup a Remote Subscriber
This example goes over how to subscribe to the swob files from the Environment Canada Weather office.
Setup
Initialize the credentials storage in the ~/.config/sr3/credentials.conf file:
$ sr3 edit credentials.conf
amqps://anonymous:anonymous@dd.weather.gc.ca
The format is a complete url on each line (amqps://<user>:<password>@<target.url>).
This credentials.conf file should be private (linux octal permissions: 0600).
.conf files placed in the ~/.config/sr3/subscribe_directory
will be automatically found by subscribe
, rather than giving the full path.
The edit command starts the user’s configured editor on the file to be created, in the correct directory:
$ sr3 edit subscribe/swob.conf
broker amqps://anonymous@dd.weather.gc.ca
subtopic observations.swob-ml.#
topicPrefix v02.post
directory /tmp/swob_downloads
accept .*
$ mkdir /tmp/swob_downloads
$ sr3 status subscribe/swob
2017-12-14 06:54:54,010 [INFO] subscribe swob 01 is stopped
Error
Currrently edit is failing if there isn’t a file in the expected location (it does in fact, not create a file) See issue #251 for more info or to complain. In the interim instead use:
$ mkdir -p .config/sr3/subscribe
$ touch $_/swob.conf
$ sr3 edit swob.conf
broker indicates where to connect to get the stream of notifications. The term broker is taken from AMQP (http://www.amqp.org), the protocol used to transfer the notifications. The notifications that will be received all have topics that correspond to their URL.
Note
Omitting directory
from the config file will write the files in the present working directory.
Given how quickly they arrive, be prepared to clean up.
Startup
Now start up the newly created subscriber:
$ sr3 start swob
2015-12-03 06:53:35,268 [INFO] user_config = 0 ../swob.conf
2015-12-03 06:53:35,269 [INFO] instances 1
2015-12-03 06:53:35,270 [INFO] sr3 subscribe swob 0001 started
Activity can be monitored via log files in ~/.cache/sr3/log/
or with the log command:
$ sr3 log swob
2015-12-03 06:53:35,635 [INFO] Binding queue q_anonymous.subscribe.swob.21096474.62787751 with key v02.post.observations.swob-ml.# to exchange xpublic on broker amqps://anonymous@dd.weather.gc.ca/
2015-12-03 17:32:01,834 [INFO] user_config = 1 ../swob.conf
2015-12-03 17:32:01,835 [INFO] subscribe start
2015-12-03 17:32:01,835 [INFO] subscribe run
2015-12-03 17:32:01,835 [INFO] AMQP broker(dd.weather.gc.ca) user(anonymous) vhost(/)
2015-12-03 17:32:01,835 [INFO] AMQP input : exchange(xpublic) topic(v02.post.observations.swob-ml.#)
2015-12-03 17:32:01,835 [INFO] AMQP output: exchange(xs_anonymous) topic(v02.report.#)
2015-12-03 17:32:08,191 [INFO] Binding queue q_anonymous.subscribe.swob.21096474.62787751 with key v02.post.observations.swob-ml.# to exchange xpublic on broker amqps://anonymous@dd.weather.gc.ca/
[Ctrl] + [C]
to exit watching the logs.
The startup log appears normal, indicating the authentication information was accepted.
Subscribe
will get the notification and download the file into the present working directory
(unless otherwise specified in the configuration file).
A normal download looks like this:
2015-12-03 17:32:15,031 [INFO] Received topic v02.post.observations.swob-ml.20151203.CMED
2015-12-03 17:32:15,031 [INFO] Received notice 20151203223214.699 http://dd2.weather.gc.ca/observations/swob-ml/20151203/CMED/2015-12-03-2200-CMED-AUTO-swob.xml
2015-12-03 17:32:15,031 [INFO] Received headers {'filename': '2015-12-03-2200-CMED-AUTO-swob.xml', 'parts': '1,3738,1,0,0', 'sum': 'd,157a9e98406e38a8252eaadf68c0ed60', 'source': 'metpx', 'to_clusters': 'DD,DDI.CMC,DDI.ED M', 'from_cluster': 'DD'}
2015-12-03 17:32:15,031 [INFO] downloading/copying into ./2015-12-03-2200-CMED-AUTO-swob.xml
Giving all the information contained in the notification. Here is a failure:
2015-12-03 17:32:30,715 [INFO] Downloads: http://dd2.weather.gc.ca/observations/swob-ml/20151203/CXFB/2015-12-03-2200-CXFB-AUTO-swob.xml into ./2015-12-03-2200-CXFB-AUTO-swob.xml 0-6791
2015-12-03 17:32:30,786 [ERROR] Download failed http://dd2.weather.gc.ca/observations/swob-ml/20151203/CXFB/2015-12-03-2200-CXFB-AUTO-swob.xml
2015-12-03 17:32:30,787 [ERROR] Server couldn't fulfill the request. Error code: 404, Not Found
This message is not always a failure as subscribe
retries a few times before giving up.
After a few minutes, here is what the download directory looks like:
$ ls -al | tail
-rw-rw-rw- 1 peter peter 7875 Dec 3 17:36 2015-12-03-2236-CL3D-AUTO-minute-swob.xml
-rw-rw-rw- 1 peter peter 7868 Dec 3 17:37 2015-12-03-2236-CL3G-AUTO-minute-swob.xml
-rw-rw-rw- 1 peter peter 7022 Dec 3 17:37 2015-12-03-2236-CTRY-AUTO-minute-swob.xml
-rw-rw-rw- 1 peter peter 6876 Dec 3 17:37 2015-12-03-2236-CYPY-AUTO-swob.xml
-rw-rw-rw- 1 peter peter 6574 Dec 3 17:36 2015-12-03-2236-CYZP-AUTO-swob.xml
-rw-rw-rw- 1 peter peter 7871 Dec 3 17:37 2015-12-03-2237-CL3D-AUTO-minute-swob.xml
-rw-rw-rw- 1 peter peter 7873 Dec 3 17:37 2015-12-03-2237-CL3G-AUTO-minute-swob.xml
-rw-rw-rw- 1 peter peter 7037 Dec 3 17:37 2015-12-03-2237-CTBF-AUTO-minute-swob.xml
-rw-rw-rw- 1 peter peter 7022 Dec 3 17:37 2015-12-03-2237-CTRY-AUTO-minute-swob.xml
-rw-rw-rw- 1 peter peter 122140 Dec 3 17:38 subscribe_dd_swob_0001.log
Cleanup
To not download more files, stop the subscriber:
$ sr3 stop subscribe/swob
2015-12-03 17:32:22,219 [INFO] subscribe swob 01 stopped
This however leaves the queue that sr3 start subscribe/swob
setup on the broker active,
as to allow a failed subscriber to attempt reconnecting without loosing progress.
That is until the broker times out the queue and removes it.
To tell the broker that we are finished with the queue, tell the subscriber to cleanup:
$ sr3 cleanup subscribe/swob
2015-12-03 17:32:22,008 [INFO] subscribe swob cleanup
2015-12-03 17:32:22,008 [INFO] AMQP broker(dd.weatheer.gc.ca) user(anonymous) vhost()
2015-12-03 17:32:22,008 [INFO] Using amqp module (AMQP 0-9-1)
2015-12-03 17:32:22,008 [INFO] deleting queue q_anonymous.subscribe.swob.21096474.62787751 (anonymous@dd.weather.gc.ca)
Best practice is to clear the queue when done as to lessen the load on the broker.