You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@community.apache.org by se...@apache.org on 2015/07/02 11:03:37 UTC
svn commit: r1688786 - in /comdev/reporter.apache.org: data/parsepmcs.py
data/reformat.py readjira.py site/addrelease.py site/chi.py site/getjson.py
site/jiraversions.py
Author: sebb
Date: Thu Jul 2 09:03:37 2015
New Revision: 1688786
URL: http://svn.apache.org/r1688786
Log:
Fix EOLs
Modified:
comdev/reporter.apache.org/data/parsepmcs.py (props changed)
comdev/reporter.apache.org/data/reformat.py (props changed)
comdev/reporter.apache.org/readjira.py (contents, props changed)
comdev/reporter.apache.org/site/addrelease.py (contents, props changed)
comdev/reporter.apache.org/site/chi.py (props changed)
comdev/reporter.apache.org/site/getjson.py (contents, props changed)
comdev/reporter.apache.org/site/jiraversions.py (contents, props changed)
Propchange: comdev/reporter.apache.org/data/parsepmcs.py
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: comdev/reporter.apache.org/data/reformat.py
------------------------------------------------------------------------------
svn:eol-style = native
Modified: comdev/reporter.apache.org/readjira.py
URL: http://svn.apache.org/viewvc/comdev/reporter.apache.org/readjira.py?rev=1688786&r1=1688785&r2=1688786&view=diff
==============================================================================
--- comdev/reporter.apache.org/readjira.py (original)
+++ comdev/reporter.apache.org/readjira.py Thu Jul 2 09:03:37 2015
@@ -1,43 +1,43 @@
-#!/usr/bin/env python
-
-import re, os, json, urllib2, base64, time
-from os import listdir
-from os.path import isfile, join
-
-mypath = "/var/www/reporter.apache.org/data/JIRA"
-myfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
-
-jirapass = ""
-with open("/var/www/reporter.apache.org/data/jirapass.txt", "r") as f:
- jirapass = f.read().strip()
- f.close()
-
-def getJIRAS(project):
- refresh = True
- if refresh:
- base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
-
- try:
- req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20created%20%3E=%20-91d""")
- req.add_header("Authorization", "Basic %s" % base64string)
- cdata = json.loads(urllib2.urlopen(req).read())
- req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20resolved%20%3E=%20-91d""")
- req.add_header("Authorization", "Basic %s" % base64string)
- rdata = json.loads(urllib2.urlopen(req).read())
- with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
- f.write(json.dumps([cdata['total'], rdata['total'], project]))
- f.close()
- return cdata['total'], rdata['total'], project
- except Exception as err:
- with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
- f.write(json.dumps([0,0,None]))
- f.close()
- return 0,0, None
-
-for project in myfiles:
- jiraname = project.replace(".json", "")
- if jiraname != "projects":
- print("Refreshing JIRA stats for " + jiraname)
- getJIRAS(jiraname)
- time.sleep(2)
+#!/usr/bin/env python
+
+import re, os, json, urllib2, base64, time
+from os import listdir
+from os.path import isfile, join
+
+mypath = "/var/www/reporter.apache.org/data/JIRA"
+myfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
+
+jirapass = ""
+with open("/var/www/reporter.apache.org/data/jirapass.txt", "r") as f:
+ jirapass = f.read().strip()
+ f.close()
+
+def getJIRAS(project):
+ refresh = True
+ if refresh:
+ base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
+
+ try:
+ req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20created%20%3E=%20-91d""")
+ req.add_header("Authorization", "Basic %s" % base64string)
+ cdata = json.loads(urllib2.urlopen(req).read())
+ req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20resolved%20%3E=%20-91d""")
+ req.add_header("Authorization", "Basic %s" % base64string)
+ rdata = json.loads(urllib2.urlopen(req).read())
+ with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
+ f.write(json.dumps([cdata['total'], rdata['total'], project]))
+ f.close()
+ return cdata['total'], rdata['total'], project
+ except Exception as err:
+ with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
+ f.write(json.dumps([0,0,None]))
+ f.close()
+ return 0,0, None
+
+for project in myfiles:
+ jiraname = project.replace(".json", "")
+ if jiraname != "projects":
+ print("Refreshing JIRA stats for " + jiraname)
+ getJIRAS(jiraname)
+ time.sleep(2)
\ No newline at end of file
Propchange: comdev/reporter.apache.org/readjira.py
------------------------------------------------------------------------------
svn:eol-style = native
Modified: comdev/reporter.apache.org/site/addrelease.py
URL: http://svn.apache.org/viewvc/comdev/reporter.apache.org/site/addrelease.py?rev=1688786&r1=1688785&r2=1688786&view=diff
==============================================================================
--- comdev/reporter.apache.org/site/addrelease.py (original)
+++ comdev/reporter.apache.org/site/addrelease.py Thu Jul 2 09:03:37 2015
@@ -1,63 +1,63 @@
-#!/usr/bin/env python
-import os, sys, re, json, subprocess, urllib, datetime, time
-import base64, urllib2, cgi
-
-form = cgi.FieldStorage();
-user = os.environ['HTTP_X_AUTHENTICATED_USER'] if 'HTTP_X_AUTHENTICATED_USER' in os.environ else "nobody"
-date = int(form['date'].value) if ('date' in form and len(form['date'].value) > 0) else None
-version = form['version'].value if ('version' in form and len(form['version'].value) > 0) else None
-committee = form['committee'].value if 'committee' in form else None
-dojson = form['json'].value if 'json' in form else None
-
-def getPMCs(uid):
- groups = []
- ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '(|(memberUid=%s)(member=uid=%s,ou=people,dc=apache,dc=org))' % (uid, uid), 'cn'])
- picked = {}
- for match in re.finditer(r"dn: cn=([a-zA-Z0-9]+),ou=pmc,ou=committees,ou=groups,dc=apache,dc=org", ldapdata):
- group = match.group(1)
- if group != "incubator":
- groups.append(group)
- return groups
-
-
-def isMember(uid):
- members = []
- ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '-b', 'cn=member,ou=groups,dc=apache,dc=org'])
- for match in re.finditer(r"memberUid: ([-a-z0-9_.]+)", ldapdata):
- group = match.group(1)
- members.append(group)
- if uid in members:
- return True
- return False
-
-def getReleaseData(committee):
- try:
- with open("/var/www/reporter.apache.org/data/releases/%s.json" % committee, "r") as f:
- x = json.loads(f.read())
- f.close()
- return x;
- except:
- return {}
-
-saved = False
-committees = getPMCs(user)
-if date and version and committee:
- if committee in committees or isMember(user):
- rdata = getReleaseData(committee)
- rdata[version] = date
- with open("/var/www/reporter.apache.org/data/releases/%s.json" % committee, "w") as f:
- f.write(json.dumps(rdata))
- f.close()
- saved = True
- if dojson:
- print("Content-Type: application/json\r\n\r\n")
- print(json.dumps({'versions': rdata}))
- else:
- print("Content-Type: text/html\r\n\r\n<h3>Data submitted!</h3>You may see the updated committee data at: <a href='https://reporter.apache.org/?%s'>https://reporter.apache.org/?%s</a>." % (committee, committee))
-
-if not saved:
- if dojson:
- print("Content-Type: application/json\r\n\r\n{\"error\": \"Not saved\"}")
- else:
- print("Content-Type: text/plain\r\n\r\nCould not save. Make sure you have filled out all fields and have access to this committee data! For further inquiries, please contact dev@community.apache.org")
+#!/usr/bin/env python
+import os, sys, re, json, subprocess, urllib, datetime, time
+import base64, urllib2, cgi
+
+form = cgi.FieldStorage();
+user = os.environ['HTTP_X_AUTHENTICATED_USER'] if 'HTTP_X_AUTHENTICATED_USER' in os.environ else "nobody"
+date = int(form['date'].value) if ('date' in form and len(form['date'].value) > 0) else None
+version = form['version'].value if ('version' in form and len(form['version'].value) > 0) else None
+committee = form['committee'].value if 'committee' in form else None
+dojson = form['json'].value if 'json' in form else None
+
+def getPMCs(uid):
+ groups = []
+ ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '(|(memberUid=%s)(member=uid=%s,ou=people,dc=apache,dc=org))' % (uid, uid), 'cn'])
+ picked = {}
+ for match in re.finditer(r"dn: cn=([a-zA-Z0-9]+),ou=pmc,ou=committees,ou=groups,dc=apache,dc=org", ldapdata):
+ group = match.group(1)
+ if group != "incubator":
+ groups.append(group)
+ return groups
+
+
+def isMember(uid):
+ members = []
+ ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '-b', 'cn=member,ou=groups,dc=apache,dc=org'])
+ for match in re.finditer(r"memberUid: ([-a-z0-9_.]+)", ldapdata):
+ group = match.group(1)
+ members.append(group)
+ if uid in members:
+ return True
+ return False
+
+def getReleaseData(committee):
+ try:
+ with open("/var/www/reporter.apache.org/data/releases/%s.json" % committee, "r") as f:
+ x = json.loads(f.read())
+ f.close()
+ return x;
+ except:
+ return {}
+
+saved = False
+committees = getPMCs(user)
+if date and version and committee:
+ if committee in committees or isMember(user):
+ rdata = getReleaseData(committee)
+ rdata[version] = date
+ with open("/var/www/reporter.apache.org/data/releases/%s.json" % committee, "w") as f:
+ f.write(json.dumps(rdata))
+ f.close()
+ saved = True
+ if dojson:
+ print("Content-Type: application/json\r\n\r\n")
+ print(json.dumps({'versions': rdata}))
+ else:
+ print("Content-Type: text/html\r\n\r\n<h3>Data submitted!</h3>You may see the updated committee data at: <a href='https://reporter.apache.org/?%s'>https://reporter.apache.org/?%s</a>." % (committee, committee))
+
+if not saved:
+ if dojson:
+ print("Content-Type: application/json\r\n\r\n{\"error\": \"Not saved\"}")
+ else:
+ print("Content-Type: text/plain\r\n\r\nCould not save. Make sure you have filled out all fields and have access to this committee data! For further inquiries, please contact dev@community.apache.org")
\ No newline at end of file
Propchange: comdev/reporter.apache.org/site/addrelease.py
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: comdev/reporter.apache.org/site/chi.py
------------------------------------------------------------------------------
svn:eol-style = native
Modified: comdev/reporter.apache.org/site/getjson.py
URL: http://svn.apache.org/viewvc/comdev/reporter.apache.org/site/getjson.py?rev=1688786&r1=1688785&r2=1688786&view=diff
==============================================================================
--- comdev/reporter.apache.org/site/getjson.py (original)
+++ comdev/reporter.apache.org/site/getjson.py Thu Jul 2 09:03:37 2015
@@ -1,311 +1,311 @@
-#!/usr/bin/env python
-import os, sys, re, json, subprocess, urllib, time
-import base64, urllib2, cgi
-
-form = cgi.FieldStorage();
-oproject = form['only'].value if ('only' in form and len(form['only'].value) > 0) else None
-
-
-jmap = {
- 'trafficserver': ['TS'],
- 'cordova': ['CB'],
- 'corinthia': ['COR']
-}
-
-pmap = {
- 'community': 'comdev',
- 'ws': 'webservices'
-}
-
-ldapmap = {
- 'webservices': 'ws'
-}
-
-jirapass = ""
-with open("/var/www/reporter.apache.org/data/jirapass.txt", "r") as f:
- jirapass = f.read().strip()
- f.close()
-
-def getPMCs(uid):
- groups = []
- ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '(|(memberUid=%s)(member=uid=%s,ou=people,dc=apache,dc=org))' % (uid, uid), 'cn'])
- picked = {}
- for match in re.finditer(r"dn: cn=([a-zA-Z0-9]+),ou=pmc,ou=committees,ou=groups,dc=apache,dc=org", ldapdata):
- group = match.group(1)
- if group != "incubator":
-
- groups.append(group)
- return groups
-
-
-def isMember(uid):
- members = []
- ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '-b', 'cn=member,ou=groups,dc=apache,dc=org'])
- for match in re.finditer(r"memberUid: ([-a-z0-9_.]+)", ldapdata):
- group = match.group(1)
- members.append(group)
- if uid in members:
- return True
- return False
-
-def getJIRAProjects(project):
- project = project.replace("Apache ", "").strip().lower()
- refresh = True
- x = {}
- jiras = []
- try:
- mtime = 0
- try:
- st=os.stat("/var/www/reporter.apache.org/data/JIRA/projects.json")
- mtime=st.st_mtime
- except:
- pass
- if mtime >= (time.time() - 86400):
- refresh = False
- with open("/var/www/reporter.apache.org/data/JIRA/projects.json", "r") as f:
- x = json.loads(f.read())
- f.close()
- else:
- base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
-
- try:
- req = req = urllib2.Request("https://issues.apache.org/jira/rest/api/2/project.json")
- req.add_header("Authorization", "Basic %s" % base64string)
- x = json.loads(urllib2.urlopen(req).read())
- with open("/var/www/reporter.apache.org/data/JIRA/projects.json", "w") as f:
- f.write(json.dumps(x))
- f.close()
- except:
- pass
- except:
- pass
-
- for entry in x:
- if entry['name'].replace("Apache ", "").strip().lower() == project:
- jiras.append(entry['key'])
- elif 'projectCategory' in entry and entry['projectCategory']['name'].replace("Apache ", "").strip().lower() == project:
- jiras.append(entry['key'])
- return jiras
-
-def getJIRAS(project):
- refresh = True
- try:
- st=os.stat("/var/www/reporter.apache.org/data/JIRA/%s.json" % project)
- mtime=st.st_mtime
- if mtime >= (time.time() - (2*86400)):
- refresh = False
- with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "r") as f:
- x = json.loads(f.read())
- f.close()
- return x[0], x[1], x[2]
- except:
- pass
-
- if refresh:
- base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
-
- try:
- req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20created%20%3E=%20-91d""")
- req.add_header("Authorization", "Basic %s" % base64string)
- cdata = json.loads(urllib2.urlopen(req).read())
- req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20resolved%20%3E=%20-91d""")
- req.add_header("Authorization", "Basic %s" % base64string)
- rdata = json.loads(urllib2.urlopen(req).read())
- with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
- f.write(json.dumps([cdata['total'], rdata['total'], project]))
- f.close()
- return cdata['total'], rdata['total'], project
- except Exception as err:
- with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
- f.write(json.dumps([0,0,None]))
- f.close()
- return 0,0, None
-
-def getProjectData(project):
- try:
- y = []
- with open("/var/www/projects.apache.org/site/json/projects/%s.json" % project, "r") as f:
- x = json.loads(f.read())
- f.close()
- with open("/var/www/projects.apache.org/site/json/foundation/pmcs.json", "r") as f:
- p = json.loads(f.read())
- f.close()
- for xproject in p:
- y.append(xproject)
- if xproject == project:
- x['name'] = p[project]['name']
- with open("/var/www/projects.apache.org/site/json/foundation/chairs.json", "r") as f:
- c = json.loads(f.read())
- f.close()
- for xproject in c:
- if xproject.lower() == x['name'].lower():
- x['chair'] = c[xproject]
- z = {}
- with open("/var/www/reporter.apache.org/data/health.json", "r") as f:
- h = json.loads(f.read())
- f.close()
- z = {}
- for entry in h:
- if entry['group'] == project:
- z = entry
-
- return x, y, z;
- except:
- x = {}
- y = []
- with open("/var/www/projects.apache.org/site/json/foundation/pmcs.json", "r") as f:
- p = json.loads(f.read())
- f.close()
- for xproject in p:
- y.append(xproject)
- if xproject == project:
- x['name'] = p[project]['name']
-
- with open("/var/www/projects.apache.org/site/json/foundation/chairs.json", "r") as f:
- c = json.loads(f.read())
- f.close()
- for xproject in c:
- if 'name' in x and xproject == x['name']:
- x['chair'] = c[xproject]
- z = {}
- with open("/var/www/reporter.apache.org/data/health.json", "r") as f:
- h = json.loads(f.read())
- f.close()
- z = {}
- for entry in h:
- if entry['group'] == project:
- z = entry
- return x,y,z
-
-def getReleaseData(project):
- try:
- with open("/var/www/reporter.apache.org/data/releases/%s.json" % project, "r") as f:
- x = json.loads(f.read())
- f.close()
- return x;
- except:
- return {}
-
-
-
-pchanges = {}
-cchanges = {}
-
-with open("/var/www/reporter.apache.org/data/pmcs.json", "r") as f:
- pchanges = json.loads(f.read())
- f.close()
-
-with open("/var/www/reporter.apache.org/data/projects.json", "r") as f:
- cchanges = json.loads(f.read())
- f.close()
-
-
-user = os.environ['HTTP_X_AUTHENTICATED_USER'] if 'HTTP_X_AUTHENTICATED_USER' in os.environ else ""
-m = re.match(r"^([-a-zA-Z0-9_.]+)$", user)
-groups = []
-
-cdata = {}
-if m:
- uid = m.group(1)
- groups = getPMCs(uid)
- include = os.environ['QUERY_STRING'] if 'QUERY_STRING' in os.environ else None
- if include and isMember(uid) and not include in groups and len(include) > 1:
- groups.append(include)
- if oproject and len(oproject) > 0 and isMember(uid):
- groups = [oproject]
- mlstats = {}
- with open("/var/www/reporter.apache.org/data/mailinglists.json", "r") as f:
- ml = json.loads(f.read())
- f.close()
- for entry in ml:
- tlp = entry.split(".")[0]
- if tlp in pmap:
- tlp = pmap[tlp]
- if tlp in groups:
- mlstats[tlp] = mlstats[tlp] if tlp in mlstats else {}
- mlstats[tlp][entry] = ml[entry]
- emails = {}
- with open("/var/www/reporter.apache.org/data/maildata_extended.json", "r") as f:
- mld = json.loads(f.read())
- f.close()
- for entry in mld:
- tlp = entry.split("-")[0]
- if tlp in pmap:
- tlp = pmap[tlp]
- if tlp in groups:
- emails[tlp] = emails[tlp] if tlp in emails else {}
- emails[tlp][entry] = mld[entry]
- jdata = {}
- ddata = {}
- rdata = {}
- allpmcs = []
- keys = {}
- count = {}
- health = {}
- for group in groups:
- jiras = []
- count[group] = [0,0]
- xgroup = group
- if group in ldapmap:
- xgroup = ldapmap[group]
- if xgroup in pchanges:
- count[group][0] = len(pchanges[xgroup])
- if xgroup in cchanges:
- count[group][1] = len(cchanges[xgroup])
- jdata[group] = [0,0, None]
- ddata[group], allpmcs, phealth = getProjectData(group)
- health[group] = phealth
- rdata[group] = getReleaseData(group)
- jiraname = group.upper()
- if group in jmap:
- for jiraname in jmap[group]:
- x,y, p = getJIRAS(jiraname)
- jdata[group][0] += x
- jdata[group][1] += y
- jdata[group][2] = p
- elif group in ddata and 'name' in ddata[group]:
- jiras = getJIRAProjects(ddata[group]['name'])
- keys[group] = jiras
- for jiraname in jiras:
- x,y, p= getJIRAS(jiraname)
- jdata[group][0] += x
- jdata[group][1] += y
- jdata[group][2] = p
- elif jiraname:
- x,y, p= getJIRAS(jiraname)
- jdata[group][0] += x
- jdata[group][1] += y
- jdata[group][2] = p
-
- cdata[group] = cdata[xgroup] if xgroup in cdata else {'pmc': {}, 'committer': {}}
- for pmc in pchanges:
- if pmc == xgroup:
- for member in pchanges[pmc]:
- if pchanges[pmc][member][1] > 0:
- cdata[group]['pmc'][member] = pchanges[pmc][member]
- for pmc in cchanges:
- if pmc == xgroup:
- for member in cchanges[pmc]:
- if cchanges[pmc][member][1] > 0:
- cdata[group]['committer'][member] = cchanges[pmc][member]
- if not isMember(uid):
- allpmcs = []
- output = {
- 'count': count,
- 'pmcs': groups,
- 'all': allpmcs,
- 'mail': mlstats,
- 'delivery': emails,
- 'jira': jdata,
- 'changes': cdata,
- 'pdata': ddata,
- 'releases': rdata,
- 'keys': keys,
- 'health': health
- }
- dump = json.dumps(output)
- print ("Content-Type: application/json\r\nContent-Length: %u\r\n\r\n" % (len(dump)+1))
- print(dump)
-else:
- print ("Content-Type: text/html\r\n\r\n")
- print("Unknown or invalid user id presented")
+#!/usr/bin/env python
+import os, sys, re, json, subprocess, urllib, time
+import base64, urllib2, cgi
+
+form = cgi.FieldStorage();
+oproject = form['only'].value if ('only' in form and len(form['only'].value) > 0) else None
+
+
+jmap = {
+ 'trafficserver': ['TS'],
+ 'cordova': ['CB'],
+ 'corinthia': ['COR']
+}
+
+pmap = {
+ 'community': 'comdev',
+ 'ws': 'webservices'
+}
+
+ldapmap = {
+ 'webservices': 'ws'
+}
+
+jirapass = ""
+with open("/var/www/reporter.apache.org/data/jirapass.txt", "r") as f:
+ jirapass = f.read().strip()
+ f.close()
+
+def getPMCs(uid):
+ groups = []
+ ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '(|(memberUid=%s)(member=uid=%s,ou=people,dc=apache,dc=org))' % (uid, uid), 'cn'])
+ picked = {}
+ for match in re.finditer(r"dn: cn=([a-zA-Z0-9]+),ou=pmc,ou=committees,ou=groups,dc=apache,dc=org", ldapdata):
+ group = match.group(1)
+ if group != "incubator":
+
+ groups.append(group)
+ return groups
+
+
+def isMember(uid):
+ members = []
+ ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '-b', 'cn=member,ou=groups,dc=apache,dc=org'])
+ for match in re.finditer(r"memberUid: ([-a-z0-9_.]+)", ldapdata):
+ group = match.group(1)
+ members.append(group)
+ if uid in members:
+ return True
+ return False
+
+def getJIRAProjects(project):
+ project = project.replace("Apache ", "").strip().lower()
+ refresh = True
+ x = {}
+ jiras = []
+ try:
+ mtime = 0
+ try:
+ st=os.stat("/var/www/reporter.apache.org/data/JIRA/projects.json")
+ mtime=st.st_mtime
+ except:
+ pass
+ if mtime >= (time.time() - 86400):
+ refresh = False
+ with open("/var/www/reporter.apache.org/data/JIRA/projects.json", "r") as f:
+ x = json.loads(f.read())
+ f.close()
+ else:
+ base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
+
+ try:
+ req = req = urllib2.Request("https://issues.apache.org/jira/rest/api/2/project.json")
+ req.add_header("Authorization", "Basic %s" % base64string)
+ x = json.loads(urllib2.urlopen(req).read())
+ with open("/var/www/reporter.apache.org/data/JIRA/projects.json", "w") as f:
+ f.write(json.dumps(x))
+ f.close()
+ except:
+ pass
+ except:
+ pass
+
+ for entry in x:
+ if entry['name'].replace("Apache ", "").strip().lower() == project:
+ jiras.append(entry['key'])
+ elif 'projectCategory' in entry and entry['projectCategory']['name'].replace("Apache ", "").strip().lower() == project:
+ jiras.append(entry['key'])
+ return jiras
+
+def getJIRAS(project):
+ refresh = True
+ try:
+ st=os.stat("/var/www/reporter.apache.org/data/JIRA/%s.json" % project)
+ mtime=st.st_mtime
+ if mtime >= (time.time() - (2*86400)):
+ refresh = False
+ with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "r") as f:
+ x = json.loads(f.read())
+ f.close()
+ return x[0], x[1], x[2]
+ except:
+ pass
+
+ if refresh:
+ base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
+
+ try:
+ req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20created%20%3E=%20-91d""")
+ req.add_header("Authorization", "Basic %s" % base64string)
+ cdata = json.loads(urllib2.urlopen(req).read())
+ req = req = urllib2.Request("""https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20""" + project + """%20AND%20resolved%20%3E=%20-91d""")
+ req.add_header("Authorization", "Basic %s" % base64string)
+ rdata = json.loads(urllib2.urlopen(req).read())
+ with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
+ f.write(json.dumps([cdata['total'], rdata['total'], project]))
+ f.close()
+ return cdata['total'], rdata['total'], project
+ except Exception as err:
+ with open("/var/www/reporter.apache.org/data/JIRA/%s.json" % project, "w") as f:
+ f.write(json.dumps([0,0,None]))
+ f.close()
+ return 0,0, None
+
+def getProjectData(project):
+ try:
+ y = []
+ with open("/var/www/projects.apache.org/site/json/projects/%s.json" % project, "r") as f:
+ x = json.loads(f.read())
+ f.close()
+ with open("/var/www/projects.apache.org/site/json/foundation/pmcs.json", "r") as f:
+ p = json.loads(f.read())
+ f.close()
+ for xproject in p:
+ y.append(xproject)
+ if xproject == project:
+ x['name'] = p[project]['name']
+ with open("/var/www/projects.apache.org/site/json/foundation/chairs.json", "r") as f:
+ c = json.loads(f.read())
+ f.close()
+ for xproject in c:
+ if xproject.lower() == x['name'].lower():
+ x['chair'] = c[xproject]
+ z = {}
+ with open("/var/www/reporter.apache.org/data/health.json", "r") as f:
+ h = json.loads(f.read())
+ f.close()
+ z = {}
+ for entry in h:
+ if entry['group'] == project:
+ z = entry
+
+ return x, y, z;
+ except:
+ x = {}
+ y = []
+ with open("/var/www/projects.apache.org/site/json/foundation/pmcs.json", "r") as f:
+ p = json.loads(f.read())
+ f.close()
+ for xproject in p:
+ y.append(xproject)
+ if xproject == project:
+ x['name'] = p[project]['name']
+
+ with open("/var/www/projects.apache.org/site/json/foundation/chairs.json", "r") as f:
+ c = json.loads(f.read())
+ f.close()
+ for xproject in c:
+ if 'name' in x and xproject == x['name']:
+ x['chair'] = c[xproject]
+ z = {}
+ with open("/var/www/reporter.apache.org/data/health.json", "r") as f:
+ h = json.loads(f.read())
+ f.close()
+ z = {}
+ for entry in h:
+ if entry['group'] == project:
+ z = entry
+ return x,y,z
+
+def getReleaseData(project):
+ try:
+ with open("/var/www/reporter.apache.org/data/releases/%s.json" % project, "r") as f:
+ x = json.loads(f.read())
+ f.close()
+ return x;
+ except:
+ return {}
+
+
+
+pchanges = {}
+cchanges = {}
+
+with open("/var/www/reporter.apache.org/data/pmcs.json", "r") as f:
+ pchanges = json.loads(f.read())
+ f.close()
+
+with open("/var/www/reporter.apache.org/data/projects.json", "r") as f:
+ cchanges = json.loads(f.read())
+ f.close()
+
+
+user = os.environ['HTTP_X_AUTHENTICATED_USER'] if 'HTTP_X_AUTHENTICATED_USER' in os.environ else ""
+m = re.match(r"^([-a-zA-Z0-9_.]+)$", user)
+groups = []
+
+cdata = {}
+if m:
+ uid = m.group(1)
+ groups = getPMCs(uid)
+ include = os.environ['QUERY_STRING'] if 'QUERY_STRING' in os.environ else None
+ if include and isMember(uid) and not include in groups and len(include) > 1:
+ groups.append(include)
+ if oproject and len(oproject) > 0 and isMember(uid):
+ groups = [oproject]
+ mlstats = {}
+ with open("/var/www/reporter.apache.org/data/mailinglists.json", "r") as f:
+ ml = json.loads(f.read())
+ f.close()
+ for entry in ml:
+ tlp = entry.split(".")[0]
+ if tlp in pmap:
+ tlp = pmap[tlp]
+ if tlp in groups:
+ mlstats[tlp] = mlstats[tlp] if tlp in mlstats else {}
+ mlstats[tlp][entry] = ml[entry]
+ emails = {}
+ with open("/var/www/reporter.apache.org/data/maildata_extended.json", "r") as f:
+ mld = json.loads(f.read())
+ f.close()
+ for entry in mld:
+ tlp = entry.split("-")[0]
+ if tlp in pmap:
+ tlp = pmap[tlp]
+ if tlp in groups:
+ emails[tlp] = emails[tlp] if tlp in emails else {}
+ emails[tlp][entry] = mld[entry]
+ jdata = {}
+ ddata = {}
+ rdata = {}
+ allpmcs = []
+ keys = {}
+ count = {}
+ health = {}
+ for group in groups:
+ jiras = []
+ count[group] = [0,0]
+ xgroup = group
+ if group in ldapmap:
+ xgroup = ldapmap[group]
+ if xgroup in pchanges:
+ count[group][0] = len(pchanges[xgroup])
+ if xgroup in cchanges:
+ count[group][1] = len(cchanges[xgroup])
+ jdata[group] = [0,0, None]
+ ddata[group], allpmcs, phealth = getProjectData(group)
+ health[group] = phealth
+ rdata[group] = getReleaseData(group)
+ jiraname = group.upper()
+ if group in jmap:
+ for jiraname in jmap[group]:
+ x,y, p = getJIRAS(jiraname)
+ jdata[group][0] += x
+ jdata[group][1] += y
+ jdata[group][2] = p
+ elif group in ddata and 'name' in ddata[group]:
+ jiras = getJIRAProjects(ddata[group]['name'])
+ keys[group] = jiras
+ for jiraname in jiras:
+ x,y, p= getJIRAS(jiraname)
+ jdata[group][0] += x
+ jdata[group][1] += y
+ jdata[group][2] = p
+ elif jiraname:
+ x,y, p= getJIRAS(jiraname)
+ jdata[group][0] += x
+ jdata[group][1] += y
+ jdata[group][2] = p
+
+ cdata[group] = cdata[xgroup] if xgroup in cdata else {'pmc': {}, 'committer': {}}
+ for pmc in pchanges:
+ if pmc == xgroup:
+ for member in pchanges[pmc]:
+ if pchanges[pmc][member][1] > 0:
+ cdata[group]['pmc'][member] = pchanges[pmc][member]
+ for pmc in cchanges:
+ if pmc == xgroup:
+ for member in cchanges[pmc]:
+ if cchanges[pmc][member][1] > 0:
+ cdata[group]['committer'][member] = cchanges[pmc][member]
+ if not isMember(uid):
+ allpmcs = []
+ output = {
+ 'count': count,
+ 'pmcs': groups,
+ 'all': allpmcs,
+ 'mail': mlstats,
+ 'delivery': emails,
+ 'jira': jdata,
+ 'changes': cdata,
+ 'pdata': ddata,
+ 'releases': rdata,
+ 'keys': keys,
+ 'health': health
+ }
+ dump = json.dumps(output)
+ print ("Content-Type: application/json\r\nContent-Length: %u\r\n\r\n" % (len(dump)+1))
+ print(dump)
+else:
+ print ("Content-Type: text/html\r\n\r\n")
+ print("Unknown or invalid user id presented")
Propchange: comdev/reporter.apache.org/site/getjson.py
------------------------------------------------------------------------------
svn:eol-style = native
Modified: comdev/reporter.apache.org/site/jiraversions.py
URL: http://svn.apache.org/viewvc/comdev/reporter.apache.org/site/jiraversions.py?rev=1688786&r1=1688785&r2=1688786&view=diff
==============================================================================
--- comdev/reporter.apache.org/site/jiraversions.py (original)
+++ comdev/reporter.apache.org/site/jiraversions.py Thu Jul 2 09:03:37 2015
@@ -1,73 +1,73 @@
-#!/usr/bin/env python
-import os, sys, json, urllib2, re, time, base64, cgi, subprocess
-
-form = cgi.FieldStorage();
-user = os.environ['HTTP_X_AUTHENTICATED_USER'] if 'HTTP_X_AUTHENTICATED_USER' in os.environ else "nobody"
-project = form['project'].value if ('project' in form and len(form['project'].value) > 0) else None
-jiraname = form['jiraname'].value if ('jiraname' in form and len(form['jiraname'].value) > 0) else None
-prepend = form['prepend'].value if ('prepend' in form and len(form['prepend'].value) > 0) else None
-
-def getPMCs(uid):
- groups = []
- ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '(|(memberUid=%s)(member=uid=%s,ou=people,dc=apache,dc=org))' % (uid, uid), 'cn'])
- picked = {}
- for match in re.finditer(r"dn: cn=([a-zA-Z0-9]+),ou=pmc,ou=committees,ou=groups,dc=apache,dc=org", ldapdata):
- group = match.group(1)
- if group != "incubator":
-
- groups.append(group)
- return groups
-
-
-def getReleaseData(project):
- try:
- with open("/var/www/reporter.apache.org/data/releases/%s.json" % project, "r") as f:
- x = json.loads(f.read())
- f.close()
- return x;
- except:
- return {}
-
-
-def isMember(uid):
- members = []
- ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '-b', 'cn=member,ou=groups,dc=apache,dc=org'])
- for match in re.finditer(r"memberUid: ([-a-z0-9_.]+)", ldapdata):
- group = match.group(1)
- members.append(group)
- if uid in members:
- return True
- return False
-
-
-jirapass = ""
-with open("/var/www/reporter.apache.org/data/jirapass.txt", "r") as f:
- jirapass = f.read().strip()
- f.close()
-
-groups = getPMCs(user)
-if (isMember(user) or project in groups) and jiraname:
- jiraname = jiraname.upper()
- base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
- rdata = getReleaseData(project)
- try:
- req = req = urllib2.Request("https://issues.apache.org/jira/rest/api/2/project/%s/versions" % jiraname)
- req.add_header("Authorization", "Basic %s" % base64string)
- cdata = json.loads(urllib2.urlopen(req).read())
- for entry in cdata:
- if ('name' in entry and 'releaseDate' in entry and 'released' in entry and entry['released']):
- date = time.mktime(time.strptime(entry['releaseDate'], "%Y-%m-%d"))
- if prepend:
- entry['name'] = "%s-%s" % (prepend, entry['name'])
- rdata[entry['name']] = date
- except Exception as err:
- pass
- with open("/var/www/reporter.apache.org/data/releases/%s.json" % project, "w") as f:
- f.write(json.dumps(rdata))
- f.close()
-
- print("Content-Type: application/json\r\n\r\n")
- print(json.dumps({'status': 'Fetched', 'versions': rdata}))
-
-else:
- print("Content-Type: application/json\r\n\r\n{\"status\": \"Data missing\"}\r\n")
+#!/usr/bin/env python
+import os, sys, json, urllib2, re, time, base64, cgi, subprocess
+
+form = cgi.FieldStorage();
+user = os.environ['HTTP_X_AUTHENTICATED_USER'] if 'HTTP_X_AUTHENTICATED_USER' in os.environ else "nobody"
+project = form['project'].value if ('project' in form and len(form['project'].value) > 0) else None
+jiraname = form['jiraname'].value if ('jiraname' in form and len(form['jiraname'].value) > 0) else None
+prepend = form['prepend'].value if ('prepend' in form and len(form['prepend'].value) > 0) else None
+
+def getPMCs(uid):
+ groups = []
+ ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '(|(memberUid=%s)(member=uid=%s,ou=people,dc=apache,dc=org))' % (uid, uid), 'cn'])
+ picked = {}
+ for match in re.finditer(r"dn: cn=([a-zA-Z0-9]+),ou=pmc,ou=committees,ou=groups,dc=apache,dc=org", ldapdata):
+ group = match.group(1)
+ if group != "incubator":
+
+ groups.append(group)
+ return groups
+
+
+def getReleaseData(project):
+ try:
+ with open("/var/www/reporter.apache.org/data/releases/%s.json" % project, "r") as f:
+ x = json.loads(f.read())
+ f.close()
+ return x;
+ except:
+ return {}
+
+
+def isMember(uid):
+ members = []
+ ldapdata = subprocess.check_output(['ldapsearch', '-x', '-LLL', '-b', 'cn=member,ou=groups,dc=apache,dc=org'])
+ for match in re.finditer(r"memberUid: ([-a-z0-9_.]+)", ldapdata):
+ group = match.group(1)
+ members.append(group)
+ if uid in members:
+ return True
+ return False
+
+
+jirapass = ""
+with open("/var/www/reporter.apache.org/data/jirapass.txt", "r") as f:
+ jirapass = f.read().strip()
+ f.close()
+
+groups = getPMCs(user)
+if (isMember(user) or project in groups) and jiraname:
+ jiraname = jiraname.upper()
+ base64string = base64.encodestring('%s:%s' % ('githubbot', jirapass))[:-1]
+ rdata = getReleaseData(project)
+ try:
+ req = req = urllib2.Request("https://issues.apache.org/jira/rest/api/2/project/%s/versions" % jiraname)
+ req.add_header("Authorization", "Basic %s" % base64string)
+ cdata = json.loads(urllib2.urlopen(req).read())
+ for entry in cdata:
+ if ('name' in entry and 'releaseDate' in entry and 'released' in entry and entry['released']):
+ date = time.mktime(time.strptime(entry['releaseDate'], "%Y-%m-%d"))
+ if prepend:
+ entry['name'] = "%s-%s" % (prepend, entry['name'])
+ rdata[entry['name']] = date
+ except Exception as err:
+ pass
+ with open("/var/www/reporter.apache.org/data/releases/%s.json" % project, "w") as f:
+ f.write(json.dumps(rdata))
+ f.close()
+
+ print("Content-Type: application/json\r\n\r\n")
+ print(json.dumps({'status': 'Fetched', 'versions': rdata}))
+
+else:
+ print("Content-Type: application/json\r\n\r\n{\"status\": \"Data missing\"}\r\n")
Propchange: comdev/reporter.apache.org/site/jiraversions.py
------------------------------------------------------------------------------
svn:eol-style = native