魏夏潞 余永城 鄭玉蘭 王 笑
(福建省氣象信息中心,福建 福州 350000)
氣象數據是描述大氣狀態和特征的氣象科學數據,是與氣象相關學科的研究基礎。氣象數據共14大類,分別為地面、高空、輻射、海洋、大氣成分、衛星、雷達、數值預報產品、農業氣象和生態氣象、氣象災害、歷代氣候數據、科學試驗和考察、氣象服務產品以及其他資料。這些大類又可細分出約500個子類,并隨著氣象探測技術的發展,還在不斷增加。
氣象數據通過CTS通信系統進行傳輸。在通信系統中,傳輸配置是傳輸控制的基礎,其定義了資料的來源、目的以及分發方式。主要包括收發策略、分發用戶、分發主機、分發用戶組等多種數據表。伴隨著氣象數據類型的增多,通信系統傳輸配置的內容不斷增加,雖然增刪修改都有記錄可查,但在收發策略的配置中,需要展開目錄樹查找數據名稱。不同的數據在不同的二級目錄下,隨著時間的推移,即使是業務管理員也無法完整描述業務的全貌和每類資料的流程,數據在系統中可能出現二次配置現象,這給業務管理和業務調整工作帶來了難度。
為了解決傳輸流程不夠直觀這一問題,薛蕾等[1]于2014年通過分析每一項資料的收集分發配置,利用NetMiner可視化工具,將新一代國內氣象通信系統的配置文件更換為可視化的網狀結構圖,描述了主機間的傳輸關系。喬文文等[4]在薛蕾的基礎上進行改進,將新一代國內氣象通信系統與CTS2.0新舊兩版通信系統傳輸配置進行統一管理,利用Graphviz繪圖軟件完成適合廣東省的數據傳輸流程的可視化。
目前,福建省氣象數據傳輸流程的查看方式主要有數據庫查詢和網頁查看。數據庫查詢需要鏈接數據庫并熟悉SQL語言,查詢結果并不直觀。網頁查看則需要打開多個頁面,分別找到該數據的收發策略,分發主機是否啟用,分發用戶是否啟用等,流程較多。對于分發主機,接收數據的種類也多種多樣,這些設置都存在不同的收發策略中,查看一臺主機接收了哪些數據同樣十分煩瑣。針對以上問題,本文利用Graphviz繪圖軟件包和Numpy等函數包對福建省氣象數據傳輸流程進行可視化研究。
氣象通信系統實現文件傳輸需要經過收集初試數據、分發配置、分發到相應目的地這三個步驟。福建省的數據架構較為明確,圖1為福建省氣象通信傳輸架構圖,圖中數據來源主要有本省收集的各地市數據,省際共享數據,CMACast廣播下發數據,國家局數據訂閱下載和例如水利廳共享、海洋局預報等其他數據。這些數據收集后經過CTS2.0通信系統重復性校驗、快速質控、文件名匹配等步驟,分發到相應的服務器。

圖1 福建省氣象通信傳輸架構圖
這些配置依賴于氣象通信系統的收發策略。CTS2.0通信系統的收發策略文件保存在MySQL 數據庫:TS_FILE_SEND,TS_DIR_COL,TS_FILE_COL,TS_SEND_USER等表中。從這些表中可知數據從通信系統中分發的位置(SOURCE_DIR),通過文件名匹配策略(TEMPLATE_GROUP),經FTP、SFTP、HTTP等多種協議分發時需要用到用戶名(USER)、密碼 (PASSWORD),以及分發的目的地(ACCESS_URL)等多種信息。具體信息如表1所示。

表1 收發策略信息
Graphviz (Graph Visualization Software) 繪圖工具,由貝爾實驗室開發,支持多種語言dot腳本繪制圖形,并執行布局引擎來完成自動布局[6]。本研究采用Python語言進行編譯,加載Graphviz 的 API 包PyGraphviz。
Numpy (Numerical Python) 矩陣工具,將所需數據以二維矩陣的形式展示。
Streamlit網頁架構工具,可用于快速搭建Web應用。Streamlit是一款2019年完成的開源庫,API友好,基于tornado框架,封裝了大量互動組件,無須學習前端知識,同時支持markdown和html文本的渲染。
2.2.1 圖片繪制
繪圖數據需要連接數據庫獲取,使用pymysql函數包連接數據庫,并用SQL搜索語句將不同表關聯,相同要素匹配,最后導出所需數據。
因為一個數據傳向一個用戶就是一條信息,而一個數據會傳向多個用戶,所以需要將數據庫中得到的關聯表再處理,統計每類數據及其下屬數據之間的對應關系,將分發目的主機作為最小單位,將收集目錄和收集文件等相關信息冗余存儲,形成關系型的一對一的數據表格[7]。以AGME資料為例,AGME其下包含產量預報產品、其他要素、農業干旱預報產品、農業氣象情報業務產品、農業氣象旬月報、農作物實景觀測、農氣年度數據、農田小氣候觀測、林果觀測、生態與農業氣象觀測資料、秋收秋種預報產品(上傳)和自動站土壤水分資料共12種數據,發往Yun、Cimiss_DPC、CMADAAS_DPC、DBLIB_A_BK、BABJ、DBLIB_A等用戶,共57條配置信息,僅產量預報產品就擁有6條配置策略。將這些信息梳理分類,就得到源節點和目的節點之間的指向信息,表2為產量預報產品數據指向信息。

表2 產量預報產品數據指向信息
Graphviz畫圖構建組件為圖、節點、邊,用不同的屬性例如形狀、顏色、字體、大小等對其進行描述。通過加載梳理完成的數據指向信息,自上而下構建傳輸流程圖。首先,定義一個圖形。其次,將繪圖框架定為三層結構,第一層數據源信息,包含源主機一級目錄名、源主機二級文件名、文件名匹配模板和源主機文件地址。第二層為目標主機接收地址。第三層為分發用戶和對應的密碼。各層級之間使用線段連接,利用是否停止服務(IS_STOP_SERVER)和啟用標志(RUN_FLAG)判斷該資料是否傳輸,黑色實線表示正常傳輸,紅色虛線表示傳輸未啟用。最后,設置每一層的字體、顏色、形狀等屬性信息,添加圖片說明。繪制完成后,導出圖片。
2.2.2 表格繪制
為了解分發目的主機接收數據種類,本研究取出目的主機接收的文件種類,使用numpy包將其轉換為n行5列的二維數組,方便用戶查看。
2.2.3 可視化制作
網頁版客戶端具有擴展性好,使用方便,不需要安裝的優勢,無論是開發還是維護都只要更新服務器端的軟件即可同步更新。
本研究利用開源API的Python庫Streamlit構建可視化頁面。網頁側邊欄放置一級目錄名和下屬資料名,選取需要的資料后,繪圖區域自動生成數據流程圖。相比于目錄樹查找,本研究增加了搜索框,采用模糊匹配的方式搜索想要查找的資料名,能夠列出所有包含搜索字段的資料名,操作人員可根據需要選取。
繪圖區域下方放置目的主機接收資料查詢框,該查詢框也采用模糊查詢的方式,只需輸入部分主機IP,程序就會自動匹配完整IP,并列出該主機接收資料名稱的表格。
整體程序設定一周重新讀取數據庫一次,避免出現更新不及時,信息滯后的情況,同時清空圖片緩存,等下一次選擇該數據時再重新出圖,避免占用過多存儲空間。
圖片選取福建省產量預報產品數據為例,搜索“產量預報”,選取后生成的傳輸流程如圖2所示。圖2中,圓角矩形表示數據的源信息,即數據名稱、文件名模板、出發點;橢圓形表示目的主機節點,包含目的主機IP、接收地址;便條包含的信息為分發目的主機用戶名和密碼,可以方便操作者了解一類資料的配置信息。從圖中可以看出,產量預報產品共分發給6個用戶,清晰展示了此資料傳輸脈絡,且繪制時間短。
圖2中隱去IP第2、3段,隱去分發目的主機密碼。表格選取IP為10.*.*.14的目的主機,這臺主機主要負責分發鄰省數據到各臺服務器,從圖3中可以看出,10.*.*.14主機共接收了7種數據。

圖2 利用Graphviz繪制的福建省產量預報產品傳輸流程示意圖

圖3 10.*.*.14主機接收數據種類示意圖
目前,繪制傳輸流程圖和顯示主機接收數據種類表格功能已集成到CTS2.0綜合運維系統。
為了簡單快速地查看福建省氣象數據傳輸流程,直觀方便地了解主機接收的數據,本研究將福建省省級氣象通信業務的收發策略配置信息進行處理,利用Graphviz軟件對氣象流程繪圖,Numpy對目的主機接收的文件種類建表,Streamlit完成網頁可視化。結果表明,該設計可以有效得到數據傳輸流程圖,對解決日益增長的數據管理需求,數據流程模糊不清等問題有重要幫助。并且,流程可視化后,運維人員也能精準地描述各類數據的業務流程,有助于準確分析和調整業務需求。