def parse_fields(request): if request.method != 'POST': raise PopupException(_('POST request required.')) result = {'status': -1} source_type = request.POST.get('source') if source_type == 'file': content_type = request.POST.get('type') try: if content_type == 'separated': delimiter = request.POST.get('separator', ',') quote = request.POST.get('quote', '"') file_obj = request.fs.open(request.POST.get('path')) field_list = field_values_from_separated_file( file_obj, delimiter, quote) row = next(field_list) field_names = row.keys() field_types = get_field_types( (row.values() for row in itertools.chain([row], field_list)), iterations=51) file_obj.close() result['data'] = zip(field_names, field_types) result['status'] = 0 elif content_type == 'morphlines': morphlines = json.loads(request.POST.get('morphlines')) # Look for entries that take on the form %{SYSLOGTIMESTAMP:timestamp} field_results = re.findall( r'\%\{(?P<type>\w+)\:(?P<name>\w+)\}', morphlines['expression']) if field_results: result['data'] = [] for field_result in field_results: result['data'].append( (field_result[1], get_type_from_morphline_type(field_result[0]))) result['status'] = 0 else: result['status'] = 1 result['message'] = _('Could not detect any fields.') elif content_type == 'log': file_obj = request.fs.open(request.POST.get('path')) result['data'] = fields_from_log(file_obj) file_obj.close() result['status'] = 0 else: result['status'] = 1 result['message'] = _('Type %s not supported.') % content_type except Exception, e: LOG.exception(e.message) result['message'] = e.message
def parse_fields(request): if request.method != 'POST': raise PopupException(_('POST request required.')) result = {'status': -1} source_type = request.POST.get('source') if source_type == 'file': content_type = request.POST.get('type') try: if content_type == 'separated': delimiter = request.POST.get('separator', ',') quote = request.POST.get('quote', '"') file_obj = request.fs.open(request.POST.get('path')) field_list = field_values_from_separated_file(file_obj, delimiter, quote) row = next(field_list) field_names = row.keys() field_types = get_field_types((row.values() for row in itertools.chain([row], field_list)), iterations=51) file_obj.close() result['data'] = zip(field_names, field_types) result['status'] = 0 elif content_type == 'morphlines': morphlines = json.loads(request.POST.get('morphlines')) # Look for entries that take on the form %{SYSLOGTIMESTAMP:timestamp} field_results = re.findall(r'\%\{(?P<type>\w+)\:(?P<name>\w+)\}', morphlines['expression']) if field_results: result['data'] = [] for field_result in field_results: result['data'].append( (field_result[1], get_type_from_morphline_type(field_result[0])) ) result['status'] = 0 else: result['status'] = 1 result['message'] = _('Could not detect any fields.') elif content_type == 'log': file_obj = request.fs.open(request.POST.get('path')) result['data'] = fields_from_log(file_obj) file_obj.close() result['status'] = 0 else: result['status'] = 1 result['message'] = _('Type %s not supported.') % content_type except Exception, e: LOG.exception(e.message) result['message'] = e.message