@@ -74,52 +74,36 @@ def end():
74
74
sys .exit (0 )
75
75
76
76
77
- def start (config , args ):
78
- """Start Glances."""
79
-
80
- # Load mode
81
- global mode
82
-
83
- if args .trace_malloc or args .memory_leak :
84
- tracemalloc .start ()
85
-
86
- start_duration = Counter ()
87
-
88
- if core .is_standalone ():
89
- from glances .standalone import GlancesStandalone as GlancesMode
90
- elif core .is_client ():
91
- if core .is_client_browser ():
92
- from glances .client_browser import GlancesClientBrowser as GlancesMode
93
- else :
94
- from glances .client import GlancesClient as GlancesMode
95
- elif core .is_server ():
96
- from glances .server import GlancesServer as GlancesMode
97
- elif core .is_webserver ():
98
- from glances .webserver import GlancesWebServer as GlancesMode
99
-
100
- # Init the mode
101
- logger .info (f"Start { GlancesMode .__name__ } mode" )
102
- mode = GlancesMode (config = config , args = args )
103
-
104
- # Start the main loop
77
+ def start_main_loop (args , start_duration ):
105
78
logger .debug (f"Glances started in { start_duration .get ()} seconds" )
106
79
if args .stop_after :
107
80
logger .info (f'Glances will be stopped in ~{ args .stop_after * args .time } seconds' )
108
81
82
+
83
+ def check_memleak (args , mode ):
109
84
if args .memory_leak :
110
- print (f'Memory leak detection, please wait ~{ args .stop_after * args .time * args .memory_leak * 2 } seconds...' )
85
+ wait = args .stop_after * args .time * args .memory_leak * 2
86
+ print (f'Memory leak detection, please wait ~{ wait } seconds...' )
111
87
# First run without dump to fill the memory
112
88
mode .serve_n (args .stop_after )
113
89
# Then start the memory-leak loop
114
90
snapshot_begin = tracemalloc .take_snapshot ()
91
+ else :
92
+ snapshot_begin = None
93
+
94
+ return snapshot_begin
95
+
115
96
97
+ def setup_server_mode (args , mode ):
116
98
if args .stdout_issue or args .stdout_apidoc :
117
99
# Serve once for issue/test mode
118
100
mode .serve_issue ()
119
101
else :
120
102
# Serve forever
121
103
mode .serve_forever ()
122
104
105
+
106
+ def maybe_trace_memleak (args , snapshot_begin ):
123
107
if args .memory_leak :
124
108
snapshot_end = tracemalloc .take_snapshot ()
125
109
snapshot_diff = snapshot_end .compare_to (snapshot_begin , 'filename' )
@@ -136,6 +120,39 @@ def start(config, args):
136
120
for stat in top_stats [:10 ]:
137
121
print (stat )
138
122
123
+
124
+ def start (config , args ):
125
+ """Start Glances."""
126
+
127
+ # Load mode
128
+ global mode
129
+
130
+ if args .trace_malloc or args .memory_leak :
131
+ tracemalloc .start ()
132
+
133
+ start_duration = Counter ()
134
+
135
+ if core .is_standalone ():
136
+ from glances .standalone import GlancesStandalone as GlancesMode
137
+ elif core .is_client ():
138
+ if core .is_client_browser ():
139
+ from glances .client_browser import GlancesClientBrowser as GlancesMode
140
+ else :
141
+ from glances .client import GlancesClient as GlancesMode
142
+ elif core .is_server ():
143
+ from glances .server import GlancesServer as GlancesMode
144
+ elif core .is_webserver ():
145
+ from glances .webserver import GlancesWebServer as GlancesMode
146
+
147
+ # Init the mode
148
+ logger .info (f"Start { GlancesMode .__name__ } mode" )
149
+ mode = GlancesMode (config = config , args = args )
150
+
151
+ start_main_loop (args , start_duration )
152
+ snapshot_begin = check_memleak (args , mode )
153
+ setup_server_mode (args , mode )
154
+ maybe_trace_memleak (args , snapshot_begin )
155
+
139
156
# Shutdown
140
157
mode .end ()
141
158
0 commit comments