async def METHOD_NAME(self, query, offset, length):
    response_txt = None
    return_obj = {}
    all_events = []
    try:
        processes_obj = {}
        processes_search_response = await self.api_client.run_processes_search(query, start=offset, rows=length)
        processes_search_parsed_response = self._handle_errors(processes_search_response, processes_obj)
        if not self.show_events or not processes_search_parsed_response.get('success', False):
            return processes_search_parsed_response
        if processes_search_parsed_response.get('success', False):
            time_window = extract_time_window(query)
            events_limit_reached = False
            for process in processes_search_parsed_response['data']:
                try:
                    events_obj = {}
                    events_response = await self.api_client.run_events_search(process_id=process['id'],
                                                                        segment_id=process['segment_id'])
                    events_parsed_response = self._handle_errors(events_response, events_obj, results_key='process')
                    if events_parsed_response.get('success', False):
                        events = Connector._get_events(events_parsed_response['data'], time_window)
                        for raw_event in events:
                            event = create_event_obj(process, raw_event)
                            if event:
                                all_events.append(event)
                                if 0 < self.result_limit <= len(all_events):
                                    events_limit_reached = True
                                    break
                except Exception:
                    self.logger.warn('cannot fetch events for process: ' + str(process['process_id']))
                if events_limit_reached:
                    break
        return {'success': True, 'data': all_events}
    except Exception as e:
        if response_txt is not None:
            ErrorResponder.fill_error(return_obj, message='unexpected exception', connector=self.connector)
            self.logger.error('can not parse response: ' + str(response_txt))
        else:
            raise e