code: def _ParseLogLine(self, parser_mediator, structure, key):
      
      time_elements_tuple = self._GetTimeElementsTuple(structure)
  
      try:
        date_time = dfdatetime_time_elements.TimeElements(
            time_elements_tuple=time_elements_tuple)
      except ValueError:
        parser_mediator.ProduceExtractionWarning(
            'invalid date time value: {0!s}'.format(structure.date_time))
        return
  
      self._last_month = time_elements_tuple[1]
  
      # If the actual entry is a repeated entry, we take the basic information
      # from the previous entry, but use the timestamp from the actual entry.
      if key == 'logline':
        self._previous_structure = structure
      else:
        structure = self._previous_structure
  
      event_data = MacAppFirewallLogEventData()
      event_data.action = structure.action
      event_data.agent = structure.agent
      event_data.computer_name = structure.computer_name
      # Due to the use of CharsNotIn pyparsing structure contains whitespaces
      # that need to be removed.
      event_data.process_name = structure.process_name.strip()
      event_data.status = structure.status
  
      event = time_events.DateTimeValuesEvent(
          date_time, definitions.TIME_DESCRIPTION_ADDED)
      parser_mediator.ProduceEventWithEventData(event, event_data)
docs: Parse a single log line and produce an event object.
  
      Args:
        parser_mediator (ParserMediator): mediates interactions between parsers
            and other components, such as storage and dfvfs.
        key (str): identifier of the structure of tokens.
        structure (pyparsing.ParseResults): structure of tokens derived from
            a line of a text file.