Extracts and sets the feature data from the log file necessary for a reduction

def _extract_features(self):
        """
        Extracts and sets the feature data from the log file necessary for a reduction
        """
        for parsed_line in self.parsed_lines:

            # If it's ssh, we can handle it
            if parsed_line.get('program') == 'sshd':
                result = self._parse_auth_message(parsed_line['message'])

                # Add the ip if we have it
                if 'ip' in result:
                    self.features['ips'].append(result['ip'])

                    # If we haven't seen the ip, add it
                    if result['ip'] not in self.ips_to_pids:
                        # Make the value a list of pids
                        self.ips_to_pids[result['ip']] = [parsed_line['processid']]
                    else:
                        # If we have seen the ip before, add the pid if it's a new one
                        if parsed_line['processid'] not in self.ips_to_pids[result['ip']]:
                            self.ips_to_pids[result['ip']].append(parsed_line['processid'])