Beispiel #1
0
 def _parse_fields(self, path, separator=',', quote_character='"', fieldtypes={}):
   with open(path) as fh:
     field_generator = utils.field_values_from_separated_file(fh, separator, quote_character)
     row = next(field_generator)
     field_names = row.keys()
     field_types = utils.get_field_types((row.values() for row in itertools.chain([row], field_generator)), iterations=51)
     return [{'name': field[0], 'type': field[0] in fieldtypes and fieldtypes[field[0]] or field[1]} for field in zip(field_names, field_types)]
Beispiel #2
0
Datei: api.py Projekt: zlcken/hue
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
Beispiel #3
0
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