Esempio n. 1
0
 def teardown(self):
     self.mechanic.stop_engine()
     logger.info("Closing metrics store.")
     self.metrics_store.close()
     logger.info("Summarizing results.")
     reporter.summarize(self.metrics_store, self.cfg, self.track)
     logger.info("Sweeping")
     self.sweep()
Esempio n. 2
0
 def after_lap(self, lap):
     if self.laps > 1:
         lap_time = self.lap_timer.split_time() - self.lap_times
         self.lap_times += lap_time
         hl, ml, sl = convert.seconds_to_hour_minute_seconds(lap_time)
         reporter.summarize(self.metrics_store, self.cfg, track=self.track, lap=lap)
         console.println("")
         if lap < self.laps:
             remaining = (self.laps - lap) * self.lap_times / lap
             hr, mr, sr = convert.seconds_to_hour_minute_seconds(remaining)
             console.info("Lap time %02d:%02d:%02d (ETA: %02d:%02d:%02d)" % (hl, ml, sl, hr, mr, sr), logger=logger)
         else:
             console.info("Lap time %02d:%02d:%02d" % (hl, ml, sl), logger=logger)
         console.println("")
Esempio n. 3
0
 def after_lap(self):
     logger.info("Finished lap [%d/%d]" % (self.current_lap, self.race.total_laps))
     if self.race.total_laps > 1:
         lap_time = self.lap_timer.split_time() - self.lap_times
         self.lap_times += lap_time
         hl, ml, sl = convert.seconds_to_hour_minute_seconds(lap_time)
         lap_results = reporter.calculate_results(self.metrics_store, self.race, self.current_lap)
         self.race.add_lap_results(lap_results)
         reporter.summarize(self.race, self.cfg, lap=self.current_lap)
         console.println("")
         if self.current_lap < self.race.total_laps:
             remaining = (self.race.total_laps - self.current_lap) * self.lap_times / self.current_lap
             hr, mr, sr = convert.seconds_to_hour_minute_seconds(remaining)
             console.info("Lap time %02d:%02d:%02d (ETA: %02d:%02d:%02d)" % (hl, ml, sl, hr, mr, sr), logger=logger)
         else:
             console.info("Lap time %02d:%02d:%02d" % (hl, ml, sl), logger=logger)
         console.println("")
Esempio n. 4
0
 def after_lap(self):
     logger.info("Finished lap [%d/%d]" %
                 (self.current_lap, self.race.total_laps))
     if self.race.total_laps > 1:
         lap_time = self.lap_timer.split_time() - self.lap_times
         self.lap_times += lap_time
         hl, ml, sl = convert.seconds_to_hour_minute_seconds(lap_time)
         lap_results = reporter.calculate_results(self.metrics_store,
                                                  self.race,
                                                  self.current_lap)
         self.race.add_lap_results(lap_results)
         reporter.summarize(self.race, self.cfg, lap=self.current_lap)
         console.println("")
         if self.current_lap < self.race.total_laps:
             remaining = (self.race.total_laps - self.current_lap
                          ) * self.lap_times / self.current_lap
             hr, mr, sr = convert.seconds_to_hour_minute_seconds(remaining)
             console.info("Lap time %02d:%02d:%02d (ETA: %02d:%02d:%02d)" %
                          (hl, ml, sl, hr, mr, sr),
                          logger=logger)
         else:
             console.info("Lap time %02d:%02d:%02d" % (hl, ml, sl),
                          logger=logger)
         console.println("")
Esempio n. 5
0
 def teardown(self):
     self.mechanic.stop_engine(self.cluster)
     self.metrics_store.close()
     reporter.summarize(self.cfg, self.track)
     self.sweep()
Esempio n. 6
0
 def receiveMessage(self, msg, sender):
     try:
         logger.info("BenchmarkActor#receiveMessage(msg = [%s] sender = [%s])" % (str(type(msg)), str(sender)))
         if isinstance(msg, Setup):
             self.start_sender = sender
             self.setup(msg)
         elif isinstance(msg, mechanic.EngineStarted):
             logger.info("Mechanic has started engine successfully.")
             self.metrics_store.meta_info = msg.system_meta_info
             cluster = msg.cluster_meta_info
             self.race.cluster = cluster
             console.info("Racing on track [%s], challenge [%s] and car %s\n"
                          % (self.race.track_name, self.race.challenge_name, self.race.car))
             # start running we assume that each race has at least one lap
             self.run()
         elif isinstance(msg, driver.TaskFinished):
             logger.info("Task has finished.")
             logger.info("Bulk adding request metrics to metrics store.")
             self.metrics_store.bulk_add(msg.metrics)
             # We choose *NOT* to reset our own metrics store's timer as this one is only used to collect complete metrics records from
             # other stores (used by driver and mechanic). Hence there is no need to reset the timer in our own metrics store.
             self.send(self.mechanic, mechanic.ResetRelativeTime(msg.next_task_scheduled_in))
         elif isinstance(msg, actor.BenchmarkCancelled):
             self.cancelled = True
             # even notify the start sender if it is the originator. The reason is that we call #ask() which waits for a reply.
             # We also need to ask in order to avoid races between this notification and the following ActorExitRequest.
             self.send(self.start_sender, msg)
         elif isinstance(msg, actor.BenchmarkFailure):
             logger.info("Received a benchmark failure from [%s] and will forward it now." % sender)
             self.error = True
             self.send(self.start_sender, msg)
         elif isinstance(msg, driver.BenchmarkComplete):
             logger.info("Benchmark is complete.")
             logger.info("Bulk adding request metrics to metrics store.")
             self.metrics_store.bulk_add(msg.metrics)
             self.send(self.main_driver, thespian.actors.ActorExitRequest())
             self.main_driver = None
             self.send(self.mechanic, mechanic.OnBenchmarkStop())
         elif isinstance(msg, mechanic.BenchmarkStopped):
             logger.info("Bulk adding system metrics to metrics store.")
             self.metrics_store.bulk_add(msg.system_metrics)
             logger.info("Flushing metrics data...")
             self.metrics_store.flush()
             logger.info("Flushing done")
             self.lap_counter.after_lap()
             if self.lap_counter.has_more_laps():
                 self.run()
             else:
                 self.teardown()
         elif isinstance(msg, mechanic.EngineStopped):
             logger.info("Mechanic has stopped engine successfully.")
             logger.info("Bulk adding system metrics to metrics store.")
             self.metrics_store.bulk_add(msg.system_metrics)
             self.metrics_store.flush()
             if not self.cancelled and not self.error:
                 final_results = reporter.calculate_results(self.metrics_store, self.race)
                 self.race.add_final_results(final_results)
                 reporter.summarize(self.race, self.cfg)
                 self.race_store.store_race(self.race)
             else:
                 logger.info("Suppressing output of summary report. Cancelled = [%r], Error = [%r]." % (self.cancelled, self.error))
             self.metrics_store.close()
             self.send(self.start_sender, Success())
         elif isinstance(msg, thespian.actors.ActorExitRequest):
             if self.mechanic:
                 self.send(self.mechanic, msg)
                 self.mechanic = None
             if self.main_driver:
                 self.send(self.main_driver, msg)
                 self.main_driver = None
         else:
             logger.info("BenchmarkActor received unknown message [%s] (ignoring)." % (str(msg)))
     except BaseException as e:
         self.error = True
         logger.exception("BenchmarkActor encountered a fatal exception. Shutting down.")
         self.send(self.start_sender, actor.BenchmarkFailure("Could not execute benchmark", e))
Esempio n. 7
0
 def receiveMessage(self, msg, sender):
     try:
         logger.debug(
             "BenchmarkActor#receiveMessage(msg = [%s] sender = [%s])" %
             (str(type(msg)), str(sender)))
         if isinstance(msg, Setup):
             self.start_sender = sender
             self.setup(msg)
         elif isinstance(msg, mechanic.EngineStarted):
             logger.info("Mechanic has started engine successfully.")
             self.metrics_store.meta_info = msg.system_meta_info
             cluster = msg.cluster_meta_info
             self.race.cluster = cluster
             console.info(
                 "Racing on track [%s], challenge [%s] and car %s\n" %
                 (self.race.track_name, self.race.challenge_name,
                  self.race.car))
             # start running we assume that each race has at least one lap
             self.run()
         elif isinstance(msg, driver.TaskFinished):
             logger.info("Task has finished.")
             logger.info("Bulk adding request metrics to metrics store.")
             self.metrics_store.bulk_add(msg.metrics)
             # We choose *NOT* to reset our own metrics store's timer as this one is only used to collect complete metrics records from
             # other stores (used by driver and mechanic). Hence there is no need to reset the timer in our own metrics store.
             self.send(
                 self.mechanic,
                 mechanic.ResetRelativeTime(msg.next_task_scheduled_in))
         elif isinstance(msg, actor.BenchmarkCancelled):
             self.cancelled = True
             # even notify the start sender if it is the originator. The reason is that we call #ask() which waits for a reply.
             # We also need to ask in order to avoid races between this notification and the following ActorExitRequest.
             self.send(self.start_sender, msg)
         elif isinstance(msg, actor.BenchmarkFailure):
             logger.info(
                 "Received a benchmark failure from [%s] and will forward it now."
                 % sender)
             self.error = True
             self.send(self.start_sender, msg)
         elif isinstance(msg, driver.BenchmarkComplete):
             logger.info("Benchmark is complete.")
             logger.info("Bulk adding request metrics to metrics store.")
             self.metrics_store.bulk_add(msg.metrics)
             self.send(self.main_driver, thespian.actors.ActorExitRequest())
             self.main_driver = None
             self.send(self.mechanic, mechanic.OnBenchmarkStop())
         elif isinstance(msg, mechanic.BenchmarkStopped):
             logger.info("Bulk adding system metrics to metrics store.")
             self.metrics_store.bulk_add(msg.system_metrics)
             logger.info("Flushing metrics data...")
             self.metrics_store.flush()
             logger.info("Flushing done")
             self.lap_counter.after_lap()
             if self.lap_counter.has_more_laps():
                 self.run()
             else:
                 self.teardown()
         elif isinstance(msg, mechanic.EngineStopped):
             logger.info("Mechanic has stopped engine successfully.")
             logger.info("Bulk adding system metrics to metrics store.")
             self.metrics_store.bulk_add(msg.system_metrics)
             self.metrics_store.flush()
             if not self.cancelled and not self.error:
                 final_results = reporter.calculate_results(
                     self.metrics_store, self.race)
                 self.race.add_final_results(final_results)
                 reporter.summarize(self.race, self.cfg)
                 self.race_store.store_race(self.race)
             else:
                 logger.info(
                     "Suppressing output of summary report. Cancelled = [%r], Error = [%r]."
                     % (self.cancelled, self.error))
             self.metrics_store.close()
             self.send(self.start_sender, Success())
         elif isinstance(msg, thespian.actors.ActorExitRequest):
             if self.mechanic:
                 self.send(self.mechanic, msg)
                 self.mechanic = None
             if self.main_driver:
                 self.send(self.main_driver, msg)
                 self.main_driver = None
         else:
             logger.info(
                 "BenchmarkActor received unknown message [%s] (ignoring)."
                 % (str(msg)))
     except BaseException as e:
         self.error = True
         logger.exception(
             "BenchmarkActor encountered a fatal exception. Shutting down.")
         self.send(self.start_sender,
                   actor.BenchmarkFailure("Could not execute benchmark", e))