...
- Make sure to have Python3 installed with pip3 support, setuptools and wheel.
Install Aviso
Code Block language bash theme DJango user@local sudo pip3 install -e git+https://git.ecmwf.int/scm/lex/aviso.git@master#egg=aviso
Create a configuration file in the default location /etc/aviso/config.yaml with the following settings:
Code Block language yml username: <user_email> listeners: - event: dissemination request: destination: <user_destination> class: od expver: 1 domain: g stream: enfo step: [1,2,3] triggers: - type: echo
The first line is required for a correct authentication, the username is the email associated to the user's ECMWF account. This can be checked by logging at https://api.ecmwf.int/v1/key/.
This file is a basic The
listeners
block is an example of adissemination
event listener.request
describes for which dissemination event users want to execute the triggers. It is made by of a set of fields. Users have to specify only the fields they wants to use as filters.destination
is a mandatory field and it is associated to one or more destinations which are linked to the user's ECMWF account. Only the notifications complying with all the fields defined will execute the trigger. The trigger in this example isecho
. This will simply print out the notification to the console output.Save the ECMWF key as a file in /etc/aviso/key. The key can be obtained by logging at https://api.ecmwf.int/v1/key/ .
Launch the aviso application
Code Block language bash theme DJango user@local aviso listen
Once in execution this command will create a process waiting for notifications. Users can terminate the application by typing
CTRL+C
.Note, the configuration file is only read at start time, therefore every time users make changes to it they need to restart the listening process.
...
Code Block | ||
---|---|---|
| ||
{ "event": "dissemination", "request": { "class": "od", "date": "20191112", "destination": "FOO", "domain": "g", "expver": "0001", "step": "001", "stream": "enfo", "time": "18" }, "location": "httpss3://xxxstorage.ecmwf.inteuropeanweather.cloud/xxxecpds/xxx.xx" } |
Here an example file of a listener command triggering a bash script executing a MARS request.
...
Code Block | ||
---|---|---|
| ||
from pyaviso import NotificationManager # define function to be called def do_something(notification): print(f"Notification for step {notification['request']['step']} received") # now do something useful with it ... # define the trigger trigger = {"type": "function", "function": do_something} # create a event listener request that uses that trigger request = {"class": "od", "stream": "enfo"oper", "expver": 1, "datedomain": 20190810"g", "timestep": 01} listener = {"event": "mars", "request": request, "triggers": [trigger]} listeners = {"listeners": [listener]} # run it aviso = NotificationManager() aviso.listen(listeners=listeners) |
...