WIS2 Downloader เป็นแอปพลิเคชัน Python ที่ใช้ Flask ซึ่งช่วยให้คุณเชื่อมต่อกับ WIS2 Global Broker จัดการการสมัครรับข้อมูลตามลำดับชั้นของหัวข้อ และกำหนดค่าไดเร็กทอรีการดาวน์โหลดที่เกี่ยวข้อง
/metrics
ซึ่งเหมาะสำหรับการแสดงภาพ Grafanapython -m pip install wis2downloader
สร้างไฟล์ config.json
ในไดเร็กทอรีในเครื่องของคุณที่สอดคล้องกับสคีมาต่อไปนี้:
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
ตัวอย่างได้รับด้านล่าง:
{
"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
}
ลินุกซ์ (ทุบตี)
export WIS2DOWNLOADER_CONFIG= < path_to_your_config_file >
Windows (พร้อมรับคำสั่ง)
set WIS2DOWNLOADER_CONFIG= < path_to_your_config_file >
วินโดวส์ (PowersShell)
$env :WIS2DOWNLOADER_CONFIG = < path_to_your_config_file >
โหมด Dev (Windows และ Linux)
wis2downloader
การใช้ gunicorn (Linux เท่านั้น)
gunicorn --bind 0.0.0.0:5050 -w 1 wis2downloader.app:app
หมายเหตุ : รองรับผู้ปฏิบัติงานเพียงคนเดียว เนื่องจากตัวดาวน์โหลดสร้างเธรดเพิ่มเติมและการคงอยู่ของการเชื่อมต่อ MQTT
แอปพลิเคชัน Flask ควรทำงานแล้ว หากคุณต้องการหยุดแอปพลิเคชัน คุณสามารถทำได้ในเทอร์มินัลด้วย Ctrl+C
คำจำกัดความ API ของตัวดาวน์โหลดสามารถพบได้ที่ตำแหน่งข้อมูล /swagger
เมื่อเรียกใช้ในเครื่อง โปรดดู [http://localhost:5050/swagger] ซึ่งรวมถึงความสามารถในการลองใช้อุปกรณ์ปลายทางต่างๆ
คุณสามารถเพิ่มการสมัครสมาชิกผ่านคำขอ POST ไปยังจุดสิ้นสุด /subscriptions
เนื้อหาคำขอควรเข้ารหัส JSON และเป็นไปตามสคีมาต่อไปนี้:
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
ในตัวอย่างนี้ การแจ้งเตือนทั้งหมดที่เผยแพร่ไปยังหัวข้อ surface-based-observations
จากศูนย์ WIS2 ใดๆ จะถูกสมัครรับข้อมูล โดยข้อมูลที่ดาวน์โหลดจะเขียนไปยังไดเร็กทอรีย่อย surface-obs
ของ download_dir
หมายเหตุ:
target
ระบบจะใช้ค่าเริ่มต้นเป็นหัวข้อที่มีการเผยแพร่ข้อมูล+
wildcard ใช้เพื่อระบุการจับคู่ใดๆ ในระดับเดียว โดยจับคู่เป็นจุดศูนย์กลาง WIS2 ในตัวอย่างข้างต้น#
wildcard ตรงกับหัวข้อใดๆ ที่หรือต่ำกว่าระดับที่เกิดขึ้น ในตัวอย่างข้างต้น หัวข้อใดๆ ที่เผยแพร่ด้านล่าง cache/a/wis2/+/data/core/weather/surface-based-observations จะถูกจับคู่ 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"
} '
การสมัครสมาชิกจะถูกลบผ่านคำขอ DELETE ไปยังปลายทาง /subscriptions/{topic}
โดยที่ {topic}
เป็นหัวข้อที่จะยกเลิกการสมัคร
curl -X DELETE http://localhost:5050/subscriptions/cache/a/wis2/%2B/data/core/weather/%23
สิ่งนี้จะยกเลิกการสมัครสมาชิก cache/a/wis2/+/data/core/weather/#
สังเกตความจำเป็นในการเข้ารหัส URL สัญลักษณ์ +
( %2B
) และ #
( %23
)
การสมัครสมาชิกปัจจุบันสามารถแสดงรายการผ่านคำขอ GET ไปยังจุดสิ้นสุดการสมัคร /subscriptions
curl http://localhost:5050/subscriptions
รายการการสมัครใช้งานที่ใช้งานอยู่ควรส่งคืนเป็นออบเจ็กต์ JSON
ตัววัด Prometheus สำหรับผู้ดาวน์โหลดจะพบได้ผ่านคำขอ GET ไปยังตำแหน่งข้อมูล /metrics
curl http://localhost:5050/metrics
ข้อบกพร่อง การปรับปรุง และปัญหาทั้งหมดได้รับการจัดการบน GitHub