#!/usr/bin/python

# cgi-script for searching the results

import sys
import glob
import os
import cgi
import cgitb
import re

def getfiles(path, arguments):
  files = []
  if 'folder' in arguments:
    files.append(path + '/daca2-' + arguments['folder'].value + '.html')
  else:
    files.extend(sorted(glob.glob(path+'/daca2-?.html')))
    files.extend(sorted(glob.glob(path+'/daca2-lib?.html')))
  return files

def readlines(filename):
  if not os.path.isfile(filename):
    return []
  f = open(filename, 'rt')
  lines = f.readlines()
  f.close()
  return lines

def trimline(line):
  while len(line)>1 and (line[-1]=='\r' or line[-1]=='\n'):
    line = line[:-1]
  return line

def matchline(line, id):
  return line.endswith('[' + id + ']')

def doSearch(path,arguments):
  id = arguments['id'].value
  for g in getfiles(path, arguments):
    ftp = ''
    found = False
    for line in readlines(g):
      line = trimline(line)
      if line.startswith('ftp://'):
        ftp = line
      if matchline(line, id):
        found = True
        sys.stdout.write(ftp + '\n')
      elif line.find(': note:') < 0:
        found = False
      if found:
        sys.stdout.write(line + '\n')

def summary(path, arguments):
  count = {}
  for g in getfiles(path, arguments):
    for line in readlines(g):
      line = trimline(line)
      res = re.match(r'.*: (error|warning|style|performance|portability):.*\[([a-zA-Z0-9]+)\]$', line)
      if res is None:
        continue
      id = res.group(2)
      if id in count:
        count[id] = count[id] + 1
      else:
        count[id] = 1
  print('<table>')
  for id in sorted(count.keys()):
    print('<tr><td>' + id +'</td><td><a href="/cgi-bin/daca2-search.cgi?id='+id+'">'+str(count[id])+'</a></td></tr>')
  print('</table>')

sys.stdout.write('Content-type: text/html\r\n\r\n')
sys.stdout.write('<html><body>\n')

cgitb.enable()
arguments = cgi.FieldStorage()
if 'id' in arguments:
  id = arguments['id'].value
  #id = 'oppositeInnerCondition'
  print(id)
  sys.stdout.write('<pre>\n')
  doSearch('../htdocs/devinfo/daca2-report', arguments)
  #doSearch(os.path.expanduser('~/temp'), id)
  sys.stdout.write('</pre>\n')
else:
  summary('../htdocs/devinfo/daca2-report', arguments)
  #summary(os.path.expanduser('~/temp'), arguments)
sys.stdout.write('</body></html>\n')
