Pengunduh WIS2 adalah aplikasi Python berbasis Flask yang memungkinkan Anda terhubung ke Broker Global WIS2, mengelola langganan hierarki topik, dan mengonfigurasi direktori unduhan terkait.
/metrics
, ideal untuk visualisasi Grafana.python -m pip install wis2downloader
Buat file config.json
di direktori lokal Anda yang sesuai dengan skema berikut:
schema :
type : object
properties :
base_url :
type : string
description :
Base URL for the wis2downloader service.
example : http://localhost:5050
broker_hostname :
type : string
description : The hostname of the global broker to subscribe to.
example : globalbroker.meteo.fr
broker_password :
type : string
description : The password to use when connecting to the specified global broker.
example : everyone
broker_port :
type : number
description : The port the global broker is using for the specified protocol.
example : 443
broker_protocol :
type : string
description : The protocol (websockets or tcp) to use when connecting to the global broker.
example : websockets
broker_username :
type : string
description : The username to use when connecting to the global broker.
example : everyone
download_workers :
type : number
description : The number of download worker threads to spawn.
example : 1
download_dir :
type : string
description : The path to download data to on the server/computer running the wis2downloader.
example : ./downloads
flask_host :
type : string
description : Network interface on which flask should listen when run in dev mode.
example : 0.0.0.0
flask_port :
type : number
description : The port on which flask should listen when run in dev mode.
example : 5050
log_level :
type : string
description : Log level to use
example : DEBUG
log_path :
type : string
description : Path to write log files to.
example : ./logs
min_free_space :
type : number
description :
Minimum free space (GB) to leave on download volume / disk after download.
Files exceeding limit will not be saved.
example : 10
save_logs :
type : boolean
description : Write log files to disk (true) or stdout (false)
example : false
mqtt_session_info :
type : string
description :
File to save session information (active subscriptions and MQTT client id) to.
Used to persist subscriptions on restart.
example : mqtt_session.json
validate_topics :
type : boolean
description : Whether to validate the specified topic against the published WIS2 topic hierarchy.
example : true
Contohnya diberikan di bawah ini:
{
"base_url" : " http://localhost:5050 " ,
"broker_hostname" : " globalbroker.meteo.fr " ,
"broker_password" : " everyone " ,
"broker_port" : 443 ,
"broker_protocol" : " websockets " ,
"broker_username" : " everyone " ,
"download_workers" : 1 ,
"download_dir" : " downloads " ,
"flask_host" : " 0.0.0.0 " ,
"flask_port" : 5050 ,
"log_level" : " DEBUG " ,
"log_path" : " logs " ,
"min_free_space" : 10 ,
"mqtt_session_info" : " mqtt_session.json " ,
"save_logs" : false ,
"validate_topics" : true
}
Linux (bash)
export WIS2DOWNLOADER_CONFIG= < path_to_your_config_file >
Windows (Prompt Perintah)
set WIS2DOWNLOADER_CONFIG= < path_to_your_config_file >
jendela (PowersShell)
$env :WIS2DOWNLOADER_CONFIG = < path_to_your_config_file >
Mode pengembang (Windows dan Linux)
wis2downloader
Menggunakan gunicorn (khusus Linux)
gunicorn --bind 0.0.0.0:5050 -w 1 wis2downloader.app:app
Catatan : Hanya satu pekerja yang didukung karena pengunduh menghasilkan thread tambahan dan koneksi MQTT yang bertahan.
Aplikasi Flask sekarang seharusnya sudah berjalan. Jika Anda perlu menghentikan aplikasi, Anda dapat melakukannya di terminal dengan Ctrl+C
.
Definisi API pengunduh dapat ditemukan di titik akhir /swagger
, ketika dijalankan secara lokal, lihat [http://localhost:5050/swagger]. ini termasuk kemampuan untuk mencoba titik akhir yang berbeda.
Langganan dapat ditambahkan melalui permintaan POST ke titik akhir /subscriptions
. Badan permintaan harus dikodekan JSON dan mematuhi skema berikut:
schema :
type : object
properties :
topic :
type : string
description : The WIS2 topic to subscribe to
example : cache/a/wis2/+/data/core/weather/surface-based-observations/#
target :
type : string
description : Sub directory to save data to
example : surface-obs
required :
- topic
Dalam contoh ini, semua pemberitahuan yang dipublikasikan ke topik surface-based-observations
dari pusat WIS2 mana pun akan berlangganan, dengan data yang diunduh ditulis ke subdirektori surface-obs
dari download_dir
.
Catatan:
target
tidak ditentukan maka target tersebut akan default ke topik data yang dipublikasikan.+
digunakan untuk menentukan kecocokan apa pun pada satu level, yang cocok dengan pusat WIS2 pada contoh di atas.#
Wildcard cocok dengan topik apa pun pada atau di bawah level kemunculannya. Dalam contoh di atas, topik apa pun yang dipublikasikan di bawah cache/a/wis2/+/data/core/weather/surface-based-observations akan dicocokkan. curl -X ' POST '
' http://127.0.0.1:5050/subscriptions '
-H ' accept: application/json '
-H ' Content-Type: application/json '
-d ' {
"topic": "cache/a/wis2/+/data/core/weather/surface-based-observations/#",
"target": "surface-obs"
} '
Langganan dihapus melalui permintaan DELETE ke titik akhir /subscriptions/{topic}
di mana {topic}
adalah topik untuk berhenti berlangganan.
curl -X DELETE http://localhost:5050/subscriptions/cache/a/wis2/%2B/data/core/weather/%23
Ini membatalkan langganan cache/a/wis2/+/data/core/weather/#
. Perhatikan kebutuhan untuk menyandikan URL dengan simbol +
( %2B
) dan #
( %23
).
Langganan saat ini dapat didaftarkan melalui permintaan GET ke titik akhir /subscriptions
.
curl http://localhost:5050/subscriptions
Daftar langganan aktif harus dikembalikan sebagai objek JSON.
Metrik Prometheus untuk pengunduh ditemukan melalui permintaan GET ke titik akhir /metrics
.
curl http://localhost:5050/metrics
Semua bug, peningkatan, dan masalah dikelola di GitHub.