TW202138995A - 監控資料鏈的方法、裝置及計算機可讀存儲介質 - Google Patents
監控資料鏈的方法、裝置及計算機可讀存儲介質 Download PDFInfo
- Publication number
- TW202138995A TW202138995A TW109114421A TW109114421A TW202138995A TW 202138995 A TW202138995 A TW 202138995A TW 109114421 A TW109114421 A TW 109114421A TW 109114421 A TW109114421 A TW 109114421A TW 202138995 A TW202138995 A TW 202138995A
- Authority
- TW
- Taiwan
- Prior art keywords
- data
- key
- monitoring
- interface
- application
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
一種監控資料鏈的方法、裝置及計算機可讀存儲介質,所述方法包含步驟: 解析原始程式碼以生成所述原始程式碼的抽象語法樹;遍歷所述抽象語法樹,獲取關鍵節點,並根據所述關鍵節點,進一步獲取資料流依賴關係,根據所述資料流依賴關係串接成資料鏈;使用攔截器在所述原始程式碼的應用程式介面處設置攔截點以及關鍵指標,並經由所述資料鏈圖形化及關鍵指標視覺化以監控所述資料鏈。
Description
本發明是有關於程式碼分析的技術領域,尤其關於一種監控資料鏈的方法、裝置及計算機可讀存儲介質。
隨著數位化技術在各行各業的廣泛應用,電子商務、物流、智慧製造、行政管理等各領域的業務對軟體系統的依賴與日俱增,各種行業應用、領域軟體不斷湧現。隨著軟體的發展,使用者對於軟體應用的要求也不斷提高,包括更好的操作及更佳的用戶體驗。
然而由於市場、管理、政府政策等諸多內外部因素,使得業務變更頻繁,軟體需對應進行升級或修改,因此,軟體應用開發需要高擴展性、短週期性、易管理性及快回應性。對應用開發者而言,不僅需要完整正確的業務邏輯、在業務複雜之後,還需要有適當的管理能力,才能讓應用軟體有快速反覆運算的能力。此外,由於軟體公司的人員變動頻繁,即使有完整的應用開發文檔或程式碼註解進行業務交接,對開發來說,業務的複雜性還是會讓開發者陷入大量程式碼的苦惱中。當很多程式碼都沒有相應的開發文檔和程式碼註解,只能直接閱讀程式碼,將極大地降低開發效率。
有鑑於此,本發明的目的在於提供一種監控資料鏈的方法、裝置及計算機可讀存儲介質,可以對應用系統的資料流進行梳理和視覺化,便於原始程式碼調優和除錯。
本發明提供一種監控資料鏈的方法,所述方法包含以下步驟: 解析原始程式碼,生成所述原始程式碼的抽象語法樹;遍歷所述抽象語法樹,獲取關鍵節點;根據所述關鍵節點,獲取資料流依賴關係,並根據所述資料流依賴關係串接成資料鏈;在所述原始程式碼的應用程式介面處使用攔截器設置攔截點以及關鍵指標;根據所述資料流依賴關係,圖形化所述資料鏈;以及根據視覺化配置參數,將所述關鍵指標進行視覺化展示。
本發明還提供一種監控資料鏈的裝置,所述裝置包含: 處理器;以及記憶體,用於存儲至少一個計算機程式,其中,所述計算機程式包含由所述處理器執行的指令,使得所述處理器執行以下步驟:解析原始程式碼,生成所述原始程式碼的抽象語法樹;遍歷所述抽象語法樹,獲取關鍵節點;根據所述關鍵節點,獲取資料流依賴關係,並根據所述資料流依賴關係串接成資料鏈;在所述原始程式碼的應用程式介面處使用攔截器設置攔截點以及關鍵指標;根據所述資料流依賴關係,圖形化所述資料鏈;以及根據視覺化配置參數,將所述關鍵指標進行視覺化展示。
本發明還提供一種計算機可讀存儲介質,所述計算機可讀存儲介質上存儲有計算機程式,所述計算機程式被處理器執行時實現如上所述監控資料鏈的方法的步驟。
請參閱圖1,所示為本發明一實施例中監控資料鏈的方法流程圖。
步驟S102,解析原始程式碼以生成所述原始程式碼的抽象語法樹,其中,所述抽象語法樹是一種用來描述原始程式碼語法結構的樹形表示方式,將原始程式碼形成類與類之間、類的方法與方法之間以及類的註解、方法的註解的附屬關係。
在一實施例中,所述生成抽象語法樹的具體處理過程,包括詞法分析及語法分析兩步驟。
詞法分析,用於將原始程式碼的字元流轉換為標記(Token)清單。所述標記是程式語言中的最小元素,包括關鍵字、變數名、字面量及運算子等等。具體地,可讀取原始程式碼的字串,按照預設規則合併成標記,以形成標記清單。
語法分析,用於根據標記清單以及程式語言的語法定義進行語意分析,按照程式語言的語法結構生成原始程式碼對應的抽象語法樹,其中,抽象語法樹中的每一個節點都對應原始程式碼中的一個語法結構,例如,類型、修飾符、運算子等等。
在一實施例中,還可以應用行業程式碼標準,規範程式碼命名和檔路徑的命名,以在抽象語法樹中有效關聯資料鏈上下游的對應關係,其中,程式碼命名規範包含類的類名規範、類及方法的註解規範。例如,使用表現層狀態轉換(RESTful)風格,將“XXXXXController”類作為後臺應用的應用程式介面(Application Programming Interface,API)之對外介面, 類的註解必須包含“@RestController”和@“Api”,其中,“@Api”為關於模組API的描述;“XXXXXController”的方法的註解必須包含“@ApiOperation”。“XXXXXServiceImpl”類作為所有服務交互應用程式介面的命名規範,類的註解必須包含“@Service”。將“XXXXXRepository”類作為存取資料庫應用程式介面的命名規範,類的註解必須包含“@Query”。將“XXXXXEntity”類作為資料庫映射實體應用程式介面的命名規範,類的註解必須包含“@Data”、“@Entity”、“@Table”;各個欄位的註解必須包含“@Column”。在一實施例中,“XXXXX”可為軟體的名稱或該原始程式碼的統一命名。
步驟S104,遍歷所述抽象語法樹,獲取類、方法及註解等關鍵節點。在一實施例中,可以將收集到的關鍵節點存儲為清單,也可依節點的類型不同,分別存儲為類的關鍵節點列表、方法的關鍵節點列表及註解的關鍵節點列表,其中,所述清單可包含索引值,用於將類及類的方法相互對應。
步驟S106,根據收集到的關鍵節點,獲取資料流依賴關係,完成資料鏈的串接。具體地,根據所述類名規範中的所有類名,依次遍歷所述類的關鍵節點列表,找到所有類的類名符合類名規範者,再由查找到的類的關鍵節點,遍歷所述方法的關鍵節點列表,找到所有對應於該類的方法關鍵節點,藉此梳理所有關鍵節點間的資料流依賴關係,串接成資料鏈。例如,首先查找類名為“Controller”的所有類、找出該些類對應的所有類的方法,並依此方式逐次查找類名為“ServiceImpl”、“Repository”以及“Repository”的所有類及對應的類的方法。
步驟S108,使用攔截器在應用程式介面處設置攔截點攔截API 呼叫,並設置欲監控的關鍵指標;計算並更新所述關鍵指標。在一實施例中,所述關鍵指標包含各個攔截點的名稱、輸入參數、輸出結果、處理完成執行時間以及執行次數等。在一實施例中,可以將所述攔截器的攔截點所攔截到的相關資訊及關鍵指標存儲到即時或離線的資料庫,例如Kylin、HBase、Druid或Redis資料庫等。
具體地,為了可以動態地對程式碼進行監控和調試,在一例中,可以使用Spring boot框架中剖面導向程式設計(Aspect Oriented Programming,AOP)的特性,實現攔截功能。使用AOP的攔截器,不會破壞原來程式邏輯,可以很好地對業務邏輯的各個部份進行隔離,從而使得業務邏輯各部分之間的耦合度降低。
舉例來說,可以在以下三個應用程式介面處設置攔截點:後臺應用的應用程式介面之對外介面(XXXXXController)處、所有服務交互的應用程式介面(XXXXXServiceImpl)處、存取資料庫的應用程式介面(XXXXXRepository)處。攔截器主要攔截各個攔截點的名稱,記錄當前請求的呼叫者、當前呼叫參數、當前請求的呼叫時間、當前請求的返回結果、當前請求的結束時間、當前請求的總體耗時,並據以計算以及更新所述關鍵指標中的各個攔截點的名稱、輸入參數、輸出結果、處理完成執行時間以及執行次數。
步驟S110,將資料流依賴關係圖形化,形成資料鏈關係圖,並將關鍵指標視覺化。在一實施例中,首先,定義資料鏈中每一個節點的關聯式結構為{本身節點,前置節點,後續節點},其中,前置節點用以表示資料的來源以及後續節點用以表示資料的去向,接著,根據步驟S106中獲取的資料流依賴關係,將資料鏈圖形化。具體地,可以使用Canvas(HTML元素)進行圖形繪製,經由網頁頁面載入資料鏈及資料依賴關係,直接在網頁頁面畫出資料依賴關係圖。在另一實施例中,還可以將資料鏈中的各個關鍵節點,根據步驟S106中獲取的資料流依賴關係構建有向邊,並據以構建用於描述所述資料依賴關係的有向圖。在一實施例中,可以按照用戶需求進行關鍵指標的視覺化展示。例如,為了資料的即時性和效率性,可以採用websocket技術,獲取在步驟S108中資料庫存儲的即時更新資料,根據視覺化配置參數,將關鍵指標進行視覺化展示。其中,所述視覺化配置參數包含圖表維度設定、看板配置以及報表設定等。在一實施例中,所述視覺化配置參數可以是預設值或也可以經由用戶設定。
經由資料流依賴關係圖形化及關鍵指標視覺化,可以即時顯示各個請求呼叫的介面、所涉及的資料鏈、資料流方向;還可以監控資料鏈上各個節點的輸入參數、輸出結果,快速排查在各個應用程式環節上執行結果是否正確;以及根據各個節點的處理完成執行時間,可以清楚且快速地分析原始程式碼在各個應用環節的處理效率,為原始程式碼調優提供準確定位;最後,執行次數可以用於即時統計各介面在運行時的即時訪問用量。
請參閱圖2,所示為本發明一實施例中裝置200的方塊圖。所述裝置200可用於執行如圖1所示的監控資料鏈的方法。所述裝置200包含處理器202以及計算機可讀存儲介質204。所述處理器202電性連接所述計算機可讀存儲介質204。所述處理器202可以是微控制器、微處理器或其他具有運算處理能力的電路,被配置為執行或處理存儲在所述計算機可讀存儲介質204中的指令、資料以及計算機程式。所述計算機可讀存儲介質204包含唯讀記憶體(ROM)、隨機存取記憶體(RAM)、磁片存儲介質裝置、光存儲介質裝置、快閃記憶體裝置、電氣、光學或其他物理/有形(例如,非暫時性)等計算機可讀存儲介質,用於存儲控制所述裝置200運行的一個或多個計算機程式,並且由所述處理器202執行。在本實施例中,所述計算機可讀存儲介質204存儲或編碼有計算機程式,用於供所述處理器202執行如圖1所示的監控資料鏈的方法。所述裝置200可因配置或性能不同而產生比較大的差異,可以包括一個或多個處理器202和一個或多個計算機可讀存儲介質204。在另一實施例中,所述裝置200還可以包含有線或無線網路介面、鍵盤以及輸入輸出裝置,所述裝置200還可以包括其他用於實現裝置功能的元件。
在一實施例中,還可以使用一種計算機可讀存儲介質,用於存儲計算機程式,所述程式被例如處理器執行時可以實現上述任意一個實施例中所述監控資料鏈方法的步驟。在一些可能的實施方式中,本發明的各個方面還可以實現為一種程式產品的形式,其包括程式碼,當所述程式產品在終端設備上運行時,所述程式碼用於使所述終端設備執行所述監控資料鏈方法部分中描述的根據本發明各種示例性實施方式的步驟。
總結來說,本發明的監控資料鏈的方法、裝置及計算機可讀存儲介質可以對應用系統的資料流進行梳理和視覺化,在生成資料鏈的同時,可以根據關鍵指標統計原始程式碼的使用情況和使用效率,便於原始程式碼調優和排查錯誤,相較于傳統收集錯誤日誌和分析完整程式碼進行調優,本發明有著即時、快速、清晰的優勢。
值得注意的是,以上實施例僅用以說明本發明的技術方案而非限制,儘管參照較佳實施例對本發明進行了詳細說明,本領域的普通技術人員應當理解,可以對本發明的技術方案進行修改或等同替換,而不脫離本發明技術方案的精神和範圍。
S102~S110:步驟
200:裝置
202:處理器
204:計算機可讀存儲介質
圖1 為根據本發明一實施例的監控資料鏈的方法流程圖。
圖2為根據本發明一實施例的監控資料鏈的裝置的方塊圖。
藉由以下對具體實施例詳細的描述結合附圖,將可輕易的瞭解上述內容及此項發明之諸多優點。
無
S102~S110:步驟
Claims (9)
- 一種監控資料鏈方法,其中,所述方法包含以下步驟: 解析原始程式碼,生成所述原始程式碼的抽象語法樹; 遍歷所述抽象語法樹,獲取關鍵節點; 根據所述關鍵節點,獲取資料流依賴關係,並根據所述資料流依賴關係串接成資料鏈; 在所述原始程式碼的應用程式介面處使用攔截器設置攔截點以及關鍵指標; 根據所述資料流依賴關係,圖形化所述資料鏈;以及 根據視覺化配置參數,將所述關鍵指標進行視覺化展示。
- 如請求項1所述的監控資料鏈方法,其中,所述關鍵節點包括類、方法以及註解。
- 如請求項1所述的監控資料鏈方法,其中,所述關鍵指標包含攔截點的名稱、輸入參數、輸出結果、處理完成執行時間以及執行次數。
- 如請求項1所述的監控資料鏈方法,其中,所述應用程式介面處包括後臺應用的應用程式介面之對外介面處、所有服務交互的應用程式介面處以及存取資料庫的應用程式介面處。
- 一種監控資料鏈裝置,其中,所述裝置包含: 處理器;以及 計算機可讀存儲介質,用於存儲至少一個計算機程式,其中,所述計算機程式包含由所述處理器執行的指令,使得所述處理器執行以下步驟: 解析原始程式碼,生成所述原始程式碼的抽象語法樹; 遍歷所述抽象語法樹,獲取關鍵節點; 根據所述關鍵節點,獲取資料流依賴關係,並根據所述資料流依賴關係串接成資料鏈; 在所述原始程式碼的應用程式介面處使用攔截器設置攔截點以及關鍵指標; 根據所述資料流依賴關係,圖形化所述資料鏈;以及 根據視覺化配置參數,將所述關鍵指標進行視覺化展示。
- 如請求項5所述的監控資料鏈裝置,其中,所述關鍵節點包括類、方法以及註解。
- 如請求項5所述的監控資料鏈裝置,其中,所述關鍵指標包含攔截點的名稱、輸入參數、輸出結果、處理完成執行時間以及執行次數。
- 如請求項5所述的監控資料鏈裝置,其中,所述應用程式介面處包括後臺應用的應用程式介面之對外介面處、所有服務交互的應用程式介面處以及存取資料庫的應用程式介面處。
- 一種計算機可讀存儲介質,其中,所述計算機可讀存儲介質用於存儲計算機程式,所述計算機程式被處理器執行時實現如請求項1至4中任一項所述監控資料鏈方法的步驟。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010291677.0A CN113535228B (zh) | 2020-04-14 | 2020-04-14 | 监控数据链路的方法、装置及计算机可读存储介质 |
CN202010291677.0 | 2020-04-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202138995A true TW202138995A (zh) | 2021-10-16 |
TWI754269B TWI754269B (zh) | 2022-02-01 |
Family
ID=78006237
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109114421A TWI754269B (zh) | 2020-04-14 | 2020-04-29 | 監控資料鏈的方法、裝置及計算機可讀存儲介質 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20210318858A1 (zh) |
CN (1) | CN113535228B (zh) |
TW (1) | TWI754269B (zh) |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI467481B (zh) * | 2010-05-31 | 2015-01-01 | Ibm | 層級式程式源碼管理方法、系統及電腦程式產品 |
US9256401B2 (en) * | 2011-05-31 | 2016-02-09 | Microsoft Technology Licensing, Llc | Editor visualization of symbolic relationships |
CN102243586B (zh) * | 2011-07-22 | 2015-02-04 | 于秀山 | 一种软件功能图自动获取方法 |
CN105159715B (zh) * | 2015-09-01 | 2018-07-20 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
US10942922B2 (en) * | 2015-09-28 | 2021-03-09 | Microsoft Technology Licensing, Llc | Generation of data flow from syntax tree |
CN107153606A (zh) * | 2016-03-04 | 2017-09-12 | 郭德贵 | 一种程序分析过程可视化方法及系统 |
CN106201846B (zh) * | 2016-06-30 | 2019-07-12 | 微梦创科网络科技(中国)有限公司 | 自动化测试中的性能监控方法及装置 |
CN107168847A (zh) * | 2017-04-21 | 2017-09-15 | 国家电网公司 | 一种支撑分布式架构的全链路应用监控方法与装置 |
CN107729214B (zh) * | 2017-10-13 | 2021-03-09 | 中电福富信息科技有限公司 | 一种可视化的分布式系统实时监控运维方法及装置 |
CN109766241A (zh) * | 2018-12-29 | 2019-05-17 | 中国银行股份有限公司 | 系统监控方法、装置、计算机设备及计算机可读存储介质 |
CN110231974A (zh) * | 2019-06-06 | 2019-09-13 | 深圳前海微众银行股份有限公司 | 运维信息的可视化方法、装置、设备及可读存储介质 |
CN110442641B (zh) * | 2019-08-06 | 2022-07-12 | 中国工商银行股份有限公司 | 一种链路拓扑图展示方法、装置、存储介质及设备 |
CN110737466B (zh) * | 2019-10-16 | 2021-04-02 | 南京航空航天大学 | 基于静态程序分析的源代码编码序列表示方法 |
-
2020
- 2020-04-14 CN CN202010291677.0A patent/CN113535228B/zh active Active
- 2020-04-29 TW TW109114421A patent/TWI754269B/zh active
- 2020-05-27 US US16/884,425 patent/US20210318858A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
CN113535228A (zh) | 2021-10-22 |
TWI754269B (zh) | 2022-02-01 |
CN113535228B (zh) | 2024-04-09 |
US20210318858A1 (en) | 2021-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9576037B2 (en) | Self-analyzing data processing job to determine data quality issues | |
Byun et al. | Chronograph: Enabling temporal graph traversals for efficient information diffusion analysis over time | |
US9483387B1 (en) | Tree comparison functionality for services | |
EP2616965B1 (en) | Support for a parameterized query/view in complex event processing | |
KR102239127B1 (ko) | 네트워크 상에서 데이터 소스의 질의 | |
US8805875B1 (en) | Systems and methods for information retrieval | |
US8452754B2 (en) | Static analysis framework for database applications | |
US11334474B2 (en) | Fast change impact analysis tool for large-scale software systems | |
US11599539B2 (en) | Column lineage and metadata propagation | |
Biswas et al. | Boa meets python: A boa dataset of data science software in python language | |
Fokaefs et al. | Wsdarwin: Studying the evolution of web service systems | |
CN110209700B (zh) | 一种数据流关联方法、装置、电子设备及存储介质 | |
CN104679500B (zh) | 实体类自动生成实现方法及装置 | |
GB2450989A (en) | Graphical user interface tool | |
US20230040635A1 (en) | Graph-based impact analysis of misconfigured or compromised cloud resources | |
US20230015186A1 (en) | Partially typed semantic based query execution optimization | |
JP2023071664A (ja) | フォーマット特有のデータ処理動作 | |
US11573790B2 (en) | Generation of knowledge graphs based on repositories of code | |
Wininger et al. | A declarative framework for stateful analysis of execution traces | |
CN116578585B (zh) | 数据查询方法、装置、电子设备及存储介质 | |
US10719424B1 (en) | Compositional string analysis | |
TWI754269B (zh) | 監控資料鏈的方法、裝置及計算機可讀存儲介質 | |
WO2023124253A1 (zh) | 一种图搜索方法、装置、设备及存储介质 | |
CN115544089A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN114691197A (zh) | 代码分析方法、装置、电子设备和存储介质 |