@@ -150,44 +150,61 @@ def _fetch_flags(self) -> dict[str, list[dict[str, str]]]:
150150 logger .info ("Fetching flags from %s" , self ._url )
151151 response = get (self ._url , timeout = self ._timeout , verify = self ._verify_ssl )
152152 response .raise_for_status ()
153-
154- logger .info ("Flags fetched successfully" )
153+ logger .info ("Flags fetched successfully from %s" , self ._url )
155154 logger .debug ("Response content: %s" , response .text )
156- logger .warning ("Response[%i]: %r" , response .status_code , response .json ())
157-
155+ logger .debug ("Response[%i]: %r" , response .status_code , response .json ())
158156 return Flag .from_json (response .json ())
159157 except RequestException as e :
160- print (f"Error fetching flags: { e } " )
158+ logger .error ("Error fetching flags from %s: %s" , self ._url , e , exc_info = True )
159+ return {}
160+ except ValueError as e :
161+ logger .error ("Invalid response format from %s: %s" , self ._url , e , exc_info = True )
161162 return {}
162- except ( KeyError , ValueError ) :
163- logger .error ( "Invalid response format: 'flags' key not found" )
163+ except Exception as e :
164+ logger .critical ( "Unexpected error during flag fetch: %s" , e , exc_info = True )
164165 return {}
165166
166167 def _update (self ) -> None :
167168 """
168169 Update the internal flag dictionary by fetching the latest flags.
169170 """
170- flags_data = self ._fetch_flags ()
171- if flags_data :
172- self ._flags = flags_data
173- self ._last_update = datetime .now (timezone .utc )
174- logger .info ("Flags updated successfully" )
175- logger .debug ("Current flags: %s" , self ._flags )
171+ try :
172+ flags_data = self ._fetch_flags ()
173+ if flags_data :
174+ self ._flags = flags_data
175+ self ._last_update = datetime .now (timezone .utc )
176+ logger .info ("Flags updated successfully at %s" , self ._last_update )
177+ logger .debug ("Current flags: %s" , self ._flags )
178+ else :
179+ logger .warning ("No flags data received; keeping previous flags." )
180+ except Exception as e :
181+ logger .critical ("Unexpected error during flag update: %s" , e , exc_info = True )
176182
177183 def _schedule_update (self ) -> None :
178184 """
179185 Start the background scheduler for periodic flag updates.
180186 """
181187 def run_scheduler ():
182- self ._scheduler .enter (self ._interval , 1 , self .recurring_update )
183- self ._scheduler .run ()
188+ try :
189+ self ._scheduler .enter (self ._interval , 1 , self .recurring_update )
190+ self ._scheduler .run ()
191+ except Exception as e :
192+ logger .critical ("Scheduler thread encountered an error: %s" , e , exc_info = True )
184193
185194 self ._scheduler_thread = Thread (target = run_scheduler , daemon = True )
186195 self ._scheduler_thread .start ()
196+ logger .info ("Flag update scheduler started (interval=%s seconds)" , self ._interval )
187197
188198 def recurring_update (self ) -> None :
189199 """
190200 Periodically update flags at the configured interval.
191201 """
192- self ._update ()
193- self ._scheduler .enter (self ._interval , 1 , self .recurring_update )
202+ try :
203+ self ._update ()
204+ except Exception as e :
205+ logger .error ("Error during recurring flag update: %s" , e , exc_info = True )
206+ finally :
207+ try :
208+ self ._scheduler .enter (self ._interval , 1 , self .recurring_update )
209+ except Exception as e :
210+ logger .critical ("Failed to reschedule recurring update: %s" , e , exc_info = True )
0 commit comments