def test_default_utc(self, mocker): datetime_obj = mocker.patch('datadog_checks.base.utils.time.datetime') datetime_obj.now = mocker.MagicMock() dt = datetime(2020, 2, 2, tzinfo=UTC) datetime_obj.now.return_value = dt assert get_current_datetime() is dt datetime_obj.now.assert_called_once_with(UTC)
def test_tz(self, mocker): datetime_obj = mocker.patch('datadog_checks.base.utils.time.datetime') datetime_obj.now = mocker.MagicMock() nyc = tz.gettz('America/New_York') dt = datetime(2020, 2, 2, tzinfo=nyc) datetime_obj.now.return_value = dt assert get_current_datetime(nyc) is dt datetime_obj.now.assert_called_once_with(nyc)
def collect_events(self): # type: () -> None self.log.debug("Starting events collection (query start time: %s).", self.latest_event_query) latest_event_time = None collect_start_time = get_current_datetime() try: t0 = Timer() new_events = self.api.get_new_events( start_time=self.latest_event_query) self.gauge( 'datadog.vsphere.collect_events.time', t0.total(), tags=self.config.base_tags, raw=True, hostname=self._hostname, ) self.log.debug("Got %s new events from the vCenter event manager", len(new_events)) event_config = {'collect_vcenter_alarms': True} for event in new_events: self.log.debug("Processing event with id:%s, type:%s: msg:%s", event.key, type(event), event.fullFormattedMessage) normalized_event = VSphereEvent(event, event_config, self.config.base_tags) # Can return None if the event if filtered out event_payload = normalized_event.get_datadog_payload() if event_payload is not None: self.log.debug("Submit event with id:%s, type:%s: msg:%s", event.key, type(event), event.fullFormattedMessage) self.event(event_payload) if latest_event_time is None or event.createdTime > latest_event_time: latest_event_time = event.createdTime except Exception as e: # Don't get stuck on a failure to fetch an event # Ignore them for next pass self.log.warning("Unable to fetch Events %s", e) if latest_event_time is not None: self.latest_event_query = latest_event_time + dt.timedelta( seconds=1) else: # Let's set `self.latest_event_query` to `collect_start_time` as safeguard in case no events are reported # OR something bad happened (which might happen again indefinitely). self.latest_event_query = collect_start_time
def __init__(self, *args, **kwargs): # type: (*Any, **Any) -> None super(VSphereCheck, self).__init__(*args, **kwargs) instance = cast(InstanceConfig, self.instance) self._config = VSphereConfig(instance, self.init_config, self.log) self.latest_event_query = get_current_datetime() self.infrastructure_cache = InfrastructureCache(interval_sec=self._config.refresh_infrastructure_cache_interval) self.metrics_metadata_cache = MetricsMetadataCache( interval_sec=self._config.refresh_metrics_metadata_cache_interval ) self.api = cast(VSphereAPI, None) self.api_rest = cast(VSphereRestAPI, None) # Do not override `AgentCheck.hostname` self._hostname = None self.thread_pool = ThreadPoolExecutor(max_workers=self._config.threads_count) self.check_initializations.append(self.initiate_api_connection)