def start(self, flush_interval=10, roll_up_interval=10, device=None, flush_in_thread=True, flush_in_greenlet=False, disabled=False): """ Start the ThreadStats instance with the specified metric flushing method and preferences. By default, metrics will be flushed in a thread. >>> stats.start() If you're running a gevent server and want to flush metrics in a greenlet, set *flush_in_greenlet* to True. Be sure to import and monkey patch gevent before starting ThreadStats. :: >>> from gevent import monkey; monkey.patch_all() >>> stats.start(flush_in_greenlet=True) If you'd like to flush metrics in process, set *flush_in_thread* to False, though you'll have to call ``flush`` manually to post metrics to the server. :: >>> stats.start(flush_in_thread=False) If for whatever reason, you need to disable metrics collection in a hurry, set ``disabled`` to True and metrics won't be collected or flushed. >>> stats.start(disabled=True) *Note:* Please remember to set your API key before, using datadog module ``initialize`` method. >>> from datadog import initialize, ThreadStats >>> initialize(api_key='my_api_key') >>> stats = ThreadStats() >>> stats.start() >>> stats.increment('home.page.hits') :param flush_interval: The number of seconds to wait between flushes. :type flush_interval: int :param flush_in_thread: True if you'd like to spawn a thread to flush metrics. It will run every `flush_interval` seconds. :type flush_in_thread: bool :param flush_in_greenlet: Set to true if you'd like to flush in a gevent greenlet. :type flush_in_greenlet: bool :param disabled: Disable metrics collection :type disabled: bool """ self.flush_interval = flush_interval self.roll_up_interval = roll_up_interval self.device = device self._disabled = disabled self._is_auto_flushing = False # Create an aggregator self._metric_aggregator = MetricsAggregator(self.roll_up_interval) self._event_aggregator = EventsAggregator() # The reporter is responsible for sending metrics off to their final destination. # It's abstracted to support easy unit testing and in the near future, forwarding # to the datadog agent. self.reporter = HttpReporter() self._is_flush_in_progress = False self.flush_count = 0 if self._disabled: log.info( "ThreadStats instance is disabled. No metrics will flush.") else: if flush_in_greenlet: self._start_flush_greenlet() elif flush_in_thread: self._start_flush_thread()