Przewodnik programisty: generowanie wykresu zgłoszenia serwisowego

W tym dokumencie opisano solidną, bezpieczną dla wątków metodę generowania wizualnego wykresu wywołań długotrwałego pliku aura_engine.py. Używamy profilera yappi (do obsługi wielowątkowości) i gprof2dot do wizualizacji.

Warunki wstępne

Upewnij się, że masz zainstalowane niezbędne narzędzia globalnie lub w środowisku wirtualnym:

KOD_BLOKU_0

Krok 1: Modyfikacja usługi w celu profilowania

Skrypt aura_engine.py musi zostać zmodyfikowany, aby ręcznie uruchomić profiler yappi i bezpiecznie zapisać dane profilowania w przypadku przerwania (Ctrl+C).

Kluczowe zmiany w aura_engine.py:

  1. Import i obsługa sygnałów: Zaimportuj yappi i zdefiniuj funkcję generate_graph_on_interrupt (jak zaimplementowano wcześniej), aby wywołać yappi.stop() i stats.save(...).

  2. Start/Stop: Dodaj yappi.start() i signal.signal(signal.SIGINT, ...) w bloku if __name__ == "__main__":, aby zawinąć wykonanie main(...).

Krok 2: Uruchomienie usługi i zebranie danych

Uruchom zmodyfikowany skrypt bezpośrednio i pozwól mu przetwarzać dane przez wystarczający czas (np. 10-20 sekund), aby upewnić się, że wszystkie podstawowe funkcje, w tym funkcje wątkowe (takie jak korekcja LanguageTool), zostaną wywołane.

KOD_BLOKU_1

Naciśnij raz Ctrl+C, aby uruchomić procedurę obsługi sygnału. Spowoduje to zatrzymanie profilera i zapisanie surowych danych w:

\mathbf{yappi\_profile\_data.prof

Krok 3: Generowanie i filtrowanie wykresu wizualnego

Używamy gprof2dot do konwersji surowych danych pstats na format SVG. Ponieważ zaawansowane opcje filtrowania, takie jak --include' i –threshold’ mogą nie być obsługiwane w naszym konkretnym środowisku, używamy podstawowego filtra --strip w celu oczyszczenia informacji o ścieżce i zmniejszenia bałaganu z wewnętrznych elementów systemu.

Wykonaj polecenie wizualizacji:

KOD_BLOKU_2

Krok 4: Dokumentacja (kadrowanie ręczne)

Wynikowy plik yappi_call_graph_stripped.svg (lub .png) będzie duży, ale dokładnie będzie zawierał pełny przebieg wykonania, łącznie ze wszystkimi wątkami.

W celach dokumentacyjnych ręcznie przytnij obraz, aby skupić się na centralnej logice (10–20 głównych węzłów i ich połączeniach), aby utworzyć ukierunkowany i czytelny wykres wywołań dla dokumentacji repozytorium.

Archiwizacja

Zmodyfikowany plik konfiguracyjny oraz ostateczną wizualizację Call Graph należy zarchiwizować w katalogu źródłowym dokumentacji:

Artefakt

Lokalizacja

Zmodyfikowany plik usługi

doc_sources/profiling/aura_engine_profiling_base.py

Ostatecznie przycięty obraz

doc_sources/profiling/core_logic_call_graph.svg

Surowe dane profilowe

(Opcjonalnie: Należy wyłączyć z ostatecznej dokumentacji repozytorium)

yappi_call_graph