# डेवलपर गाइड: सेवा कॉल ग्राफ़ उत्पन्न करना यह दस्तावेज़ लंबे समय से चल रहे `aura_engine.py` का विज़ुअल कॉल ग्राफ़ उत्पन्न करने के लिए मजबूत, थ्रेड-सुरक्षित विधि का वर्णन करता है। हम विज़ुअलाइज़ेशन के लिए `yappi` प्रोफाइलर (मल्टी-थ्रेडिंग समर्थन के लिए) और `gprof2dot` का उपयोग करते हैं। ### पूर्वावश्यकताएँ सुनिश्चित करें कि आपके पास विश्व स्तर पर या आपके आभासी वातावरण में आवश्यक उपकरण स्थापित हैं: __CODE_ब्लॉक_0__ ### चरण 1: प्रोफ़ाइलिंग के लिए सेवा को संशोधित करना `yappi` प्रोफाइलर को मैन्युअल रूप से शुरू करने और रुकावट (`Ctrl+C`) पर प्रोफाइलिंग डेटा को शानदार ढंग से सहेजने के लिए `aura_engine.py` स्क्रिप्ट को संशोधित किया जाना चाहिए। **`aura_engine.py` में मुख्य परिवर्तन:** 1. **आयात और सिग्नल हैंडलर:** `yappi` आयात करें और `yappi.stop()` और `stats.save(...)` को कॉल करने के लिए `generate_graph_on_interpt` फ़ंक्शन को परिभाषित करें (जैसा कि पहले लागू किया गया था)। 2. **प्रारंभ/रोकें:** `main(...)` के निष्पादन को पूरा करने के लिए `if __name__ == "__main__":` ब्लॉक के भीतर `yappi.start()` और `signal.signal(signal.SIGINT, ...)` जोड़ें। ### चरण 2: सेवा चलाना और डेटा एकत्र करना संशोधित स्क्रिप्ट को सीधे चलाएं और इसे पर्याप्त समय (उदाहरण के लिए, 10-20 सेकंड) के लिए डेटा संसाधित करने की अनुमति दें ताकि यह सुनिश्चित हो सके कि थ्रेडेड वाले (जैसे लैंग्वेजटूल सुधार) सहित सभी मुख्य फ़ंक्शन कॉल किए जाते हैं। __CODE_ब्लॉक_1__ सिग्नल हैंडलर को ट्रिगर करने के लिए **Ctrl+C** को एक बार दबाएँ। यह प्रोफाइलर को रोक देगा और कच्चे डेटा को यहां सहेज देगा: `\mathbf{yappi\_profile\_data.prof` ### चरण 3: विज़ुअल ग्राफ़ बनाना और फ़िल्टर करना हम कच्चे `pstats` डेटा को SVG प्रारूप में परिवर्तित करने के लिए `gprof2dot` का उपयोग करते हैं। चूँकि `--include` और `--threshold` जैसे उन्नत फ़िल्टरिंग विकल्प हमारे विशिष्ट वातावरण द्वारा समर्थित नहीं हो सकते हैं, हम पथ जानकारी को साफ़ करने और सिस्टम आंतरिक से अव्यवस्था को कम करने के लिए मूल **`--strip`** फ़िल्टर का उपयोग करते हैं। **विज़ुअलाइज़ेशन कमांड निष्पादित करें:** __CODE_ब्लॉक_2__ ### चरण 4: दस्तावेज़ीकरण (मैनुअल फ़सल) परिणामी `yappi_call_graph_stripped.svg` (या `.png`) फ़ाइल बड़ी होगी, लेकिन इसमें सभी थ्रेड्स सहित पूर्ण निष्पादन प्रवाह सटीक रूप से शामिल है। दस्तावेज़ीकरण उद्देश्यों के लिए, रिपॉजिटरी दस्तावेज़ीकरण के लिए एक केंद्रित और पठनीय कॉल ग्राफ़ बनाने के लिए केंद्रीय तर्क (10-20 कोर नोड्स और उनके कनेक्शन) पर ध्यान केंद्रित करने के लिए **छवि को मैन्युअल रूप से क्रॉप करें**। ### संग्रहित किया जा रहा है संशोधित कॉन्फ़िगरेशन फ़ाइल और अंतिम कॉल ग्राफ़ विज़ुअलाइज़ेशन को दस्तावेज़ीकरण स्रोत निर्देशिका में संग्रहीत किया जाना चाहिए: | कलाकृति | स्थान | | :--- | :--- | | **संशोधित सेवा फ़ाइल** | `doc_sources/profiling/aura_engine_profiling_base.py` | | **अंतिम क्रॉप की गई छवि** | `doc_sources/profiling/core_logic_call_graph.svg` | | **कच्चा प्रोफाइलिंग डेटा** | *(वैकल्पिक: अंतिम रिपॉजिटरी दस्तावेज़ीकरण से बाहर रखा जाना चाहिए)* | ![yappi_call_graph](../yappi_call_graph_stripped.svg_20251024_010459.png "yappi_call_graph_stripped.svg_20251024_010459.png")