public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Vikraman Choudhury" <vikraman.choudhury@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoostats:master commit in: server/, server/templates/
Date: Thu,  7 Jul 2011 16:02:13 +0000 (UTC)	[thread overview]
Message-ID: <dbf074eb8ad273dcb0f6ac3e0f5af97a45ce0423.vikraman@gentoo> (raw)

commit:     dbf074eb8ad273dcb0f6ac3e0f5af97a45ce0423
Author:     Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
AuthorDate: Thu Jul  7 16:01:56 2011 +0000
Commit:     Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
CommitDate: Thu Jul  7 16:01:56 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoostats.git;a=commit;h=dbf074eb

add package stats

---
 server/app.py                     |    4 ++
 server/helpers.py                 |   26 ++++++------
 server/host.py                    |   32 ++++++++--------
 server/package.py                 |   74 +++++++++++++++++++++++++++++++++++++
 server/templates/package.html     |    7 +++
 server/templates/package_c.html   |    6 +++
 server/templates/package_cp.html  |    5 ++
 server/templates/package_cpv.html |    4 ++
 8 files changed, 129 insertions(+), 29 deletions(-)

diff --git a/server/app.py b/server/app.py
index ba77639..94dffdd 100755
--- a/server/app.py
+++ b/server/app.py
@@ -12,6 +12,7 @@ from kwd import Keyword
 from use import Use
 from repo import Repo
 from lang import Lang
+from package import Package
 from host import Host
 
 urls = (
@@ -24,6 +25,9 @@ urls = (
 	r'/use', 'Use',
 	r'/repo', 'Repo',
 	r'/lang', 'Lang',
+	r'/package/(.+)/(.+)', 'Package',
+	r'/package/(.+)', 'Package',
+	r'/package', 'Package',
 	r'/host/(.+)', 'Host'
 	)
 

diff --git a/server/helpers.py b/server/helpers.py
index 386d73c..10ac31f 100644
--- a/server/helpers.py
+++ b/server/helpers.py
@@ -1,6 +1,7 @@
 
 import uuid
 import re
+from portage.versions import catpkgsplit
 
 # check valid uuid
 
@@ -15,22 +16,21 @@ def uuidbin(string):
   u = uuid.UUID(string)
   return u.bytes
 
-# split package name into cpv
-# based on pkgsplit code 
-# in portage/versions.py
+# custom pkgsplit
 
 def pkgsplit(pkgname):
-  cpv={}
-  pkgsplit = pkgname.split('/',1)
-  cpv['cat'] = pkgsplit[0]
-  pv_re =re.compile(r'(?x)^(?P<pn>[\w\+][\w\+-]*?(?P<pn_inval>-(cvs\.)?(\d+)((\.\d+)*)([a-z]?)((_(pre|p|beta|alpha|rc)\d*)*)(-r(\d+))?)?)-(?P<ver>(cvs\.)?(\d+)((\.\d+)*)([a-z]?)((_(pre|p|beta|alpha|rc)\d*)*))(-r(?P<rev>\d+))?$')
-  m = pv_re.match(pkgsplit[1])
-  cpv['pkg'] = m.group('pn')
-  rev = m.group('rev')
-  if rev is None:
- 	cpv['ver'] = m.group('ver')
+  cpv={'cat':'','pkg':'','ver':''}
+  cpvr = catpkgsplit(pkgname)
+  if cpvr is None:
+	pkgsplit = pkgname.split('/')
+	cpv['cat'] = pkgsplit[0]
+	cpv['pkg'] = pkgsplit[1]
   else:
-	cpv['ver'] = m.group('ver') + '-r' + rev
+	cpv['cat'] = cpvr[0]
+	cpv['pkg'] = cpvr[1]
+	cpv['ver'] = cpvr[2]
+	if cpvr[3] != 'r0':
+	  cpv['ver'] = cpv['ver'] + '-' + cpvr[3]
   return cpv
 
 # get functions for index keys

diff --git a/server/host.py b/server/host.py
index b0d9235..c9a5d03 100644
--- a/server/host.py
+++ b/server/host.py
@@ -16,46 +16,46 @@ class Host(object):
 	if len(hosts) == 0:
 	  return config.notfound()
 
-	get_data = dict()
-	get_data['UUID'] = str_uuid
+	host_data = dict()
+	host_data['UUID'] = str_uuid
 
 	env = db.select('ENV', vars={'uuid':uuid}, where="UUID=$uuid")
 	e = env[0]
 	for var in ['PLATFORM','LASTSYNC','PROFILE','ARCH','CHOST','CFLAGS','CXXFLAGS','FFLAGS','LDFLAGS','MAKEOPTS','SYNC']:
-	  get_data[var] = e[var]
+	  host_data[var] = e[var]
 	
-	get_data['FEATURES'] = list()
+	host_data['FEATURES'] = list()
 	features = db.query('SELECT FEATURE FROM HOST_FEATURES NATURAL JOIN FEATURES WHERE UUID=$uuid', vars={'uuid':uuid})
 	for f in features:
-	  get_data['FEATURES'].append(f['FEATURE'])
+	  host_data['FEATURES'].append(f['FEATURE'])
 
-	get_data['ACCEPT_KEYWORDS'] = list()
+	host_data['ACCEPT_KEYWORDS'] = list()
 	keywords = db.query('SELECT KEYWORD FROM GLOBAL_KEYWORDS NATURAL JOIN KEYWORDS WHERE UUID=$uuid', vars={'uuid':uuid})
 	for k in keywords:
-	  get_data['ACCEPT_KEYWORDS'].append(k['KEYWORD'])
+	  host_data['ACCEPT_KEYWORDS'].append(k['KEYWORD'])
 	
-	get_data['USE'] = list()
+	host_data['USE'] = list()
 	useflags = db.query('SELECT USEFLAG FROM GLOBAL_USEFLAGS NATURAL JOIN USEFLAGS WHERE UUID=$uuid', vars={'uuid':uuid})
 	for u in useflags:
-	  get_data['USE'].append(u['USEFLAG'])
+	  host_data['USE'].append(u['USEFLAG'])
 
-	get_data['LANG'] = list()
+	host_data['LANG'] = list()
 	lang = db.query('SELECT LANG FROM HOST_LANG NATURAL JOIN LANG WHERE UUID=$uuid', vars={'uuid':uuid})
 	for l in lang:
-	  get_data['LANG'].append(l['LANG'])
+	  host_data['LANG'].append(l['LANG'])
 
-	get_data['GENTOO_MIRRORS'] = list()
+	host_data['GENTOO_MIRRORS'] = list()
 	mirrors = db.query('SELECT MIRROR FROM HOST_MIRRORS NATURAL JOIN GENTOO_MIRRORS WHERE UUID=$uuid', vars={'uuid':uuid})
 	for m in mirrors:
-	  get_data['GENTOO_MIRRORS'].append(m['MIRROR'])
+	  host_data['GENTOO_MIRRORS'].append(m['MIRROR'])
 
-	get_data['PACKAGES'] = dict()
+	host_data['PACKAGES'] = dict()
 	packages = db.query('SELECT CAT, PKG, VER FROM INSTALLED_PACKAGES NATURAL JOIN PACKAGES WHERE UUID=$uuid ORDER BY CAT, PKG, VER', vars={'uuid':uuid})
 	for p in packages:
 	  cpv = p['CAT'] + '/' + p['PKG'] + '-' + p['VER']
-	  get_data['PACKAGES'][cpv] = dict()
+	  host_data['PACKAGES'][cpv] = dict()
 
-	return render.host(get_data)
+	return render.host(host_data)
 
   def POST(self, str_uuid):
 	post_data = json.JSONDecoder().decode(web.data())

diff --git a/server/package.py b/server/package.py
new file mode 100644
index 0000000..8f23daf
--- /dev/null
+++ b/server/package.py
@@ -0,0 +1,74 @@
+
+import helpers
+from config import render, db
+
+class Package(object):
+  def GET(self, *args):
+	l = len(args)
+	if l == 0:
+	  return self.__GET()
+	elif l == 1:
+	  return self.__GET_C(args[0])
+	elif l == 2:
+	  cpv = helpers.pkgsplit(args[0] + '/' + args[1])
+	  if cpv['ver'] == '':
+		return self.__GET_CP(cpv['cat'], cpv['pkg'])
+	  else:
+		return self.__GET_CPV(cpv['cat'], cpv['pkg'], cpv['ver'])
+	else:
+	  return config.internalerror()
+
+  def __GET(self):
+	pquery = db.query('SELECT COUNT(DISTINCT UUID) AS HOST_COUNT,\
+		COUNT(DISTINCT CAT) AS C_COUNT,\
+		COUNT(DISTINCT CAT,PKG) AS CP_COUNT,\
+		COUNT(DISTINCT CAT,PKG,VER) AS CPV_COUNT\
+		FROM INSTALLED_PACKAGES RIGHT OUTER JOIN PACKAGES\
+		ON INSTALLED_PACKAGES.PKEY = PACKAGES.PKEY')
+	t = pquery[0]
+	pdata = {
+		'HOST_COUNT':t['HOST_COUNT'],
+		'C_COUNT':t['C_COUNT'],
+		'CP_COUNT':t['CP_COUNT'],
+		'CPV_COUNT':t['CPV_COUNT']
+		}
+	return render.package(pdata)
+
+  def __GET_C(self, cat):
+	pquery = db.query('SELECT COUNT(DISTINCT UUID) AS HOST_COUNT,\
+		COUNT(DISTINCT CAT,PKG) AS CP_COUNT,\
+		COUNT(DISTINCT CAT,PKG,VER) AS CPV_COUNT\
+		FROM INSTALLED_PACKAGES RIGHT OUTER JOIN PACKAGES\
+		ON INSTALLED_PACKAGES.PKEY = PACKAGES.PKEY\
+		WHERE CAT=$cat', vars={'cat':cat})
+	t = pquery[0]
+	pdata = {
+		'HOST_COUNT':t['HOST_COUNT'],
+		'CP_COUNT':t['CP_COUNT'],
+		'CPV_COUNT':t['CPV_COUNT']
+		}
+	return render.package_c(cat, pdata)
+
+  def __GET_CP(self, cat, pkg):
+	pquery = db.query('SELECT COUNT(DISTINCT UUID) AS HOST_COUNT,\
+		COUNT(DISTINCT CAT,PKG,VER) AS CPV_COUNT\
+		FROM INSTALLED_PACKAGES RIGHT OUTER JOIN PACKAGES\
+		ON INSTALLED_PACKAGES.PKEY = PACKAGES.PKEY\
+		WHERE CAT=$cat AND PKG=$pkg', vars={'cat':cat,'pkg':pkg})
+	t = pquery[0]
+	pdata = {
+		'HOST_COUNT':t['HOST_COUNT'],
+		'CPV_COUNT':t['CPV_COUNT']
+		}
+	return render.package_cp(cat, pkg, pdata)
+
+  def __GET_CPV(self, cat, pkg, ver):
+	pquery = db.query('SELECT COUNT(DISTINCT UUID) AS HOST_COUNT\
+		FROM INSTALLED_PACKAGES RIGHT OUTER JOIN PACKAGES\
+		ON INSTALLED_PACKAGES.PKEY = PACKAGES.PKEY\
+		WHERE CAT=$cat AND PKG=$pkg AND VER=$ver', vars={'cat':cat,'pkg':pkg,'ver':ver})
+	t = pquery[0]
+	pdata = {
+		'HOST_COUNT':t['HOST_COUNT'],
+		}
+	return render.package_cpv(cat, pkg, ver, pdata)

diff --git a/server/templates/package.html b/server/templates/package.html
new file mode 100644
index 0000000..ca8ec96
--- /dev/null
+++ b/server/templates/package.html
@@ -0,0 +1,7 @@
+$def with (pdata)
+$var title: Package
+
+No. of hosts: $pdata['HOST_COUNT']</br>
+No. of categories: $pdata['C_COUNT']</br>
+No. of category-packages: $pdata['CP_COUNT']</br>
+No. of category-package-versions: $pdata['CPV_COUNT']</br>

diff --git a/server/templates/package_c.html b/server/templates/package_c.html
new file mode 100644
index 0000000..1d8e43a
--- /dev/null
+++ b/server/templates/package_c.html
@@ -0,0 +1,6 @@
+$def with (cat, pdata)
+$var title: $cat
+
+No. of hosts: $pdata['HOST_COUNT']</br>
+No. of category-packages: $pdata['CP_COUNT']</br>
+No. of category-package-versions: $pdata['CPV_COUNT']</br>

diff --git a/server/templates/package_cp.html b/server/templates/package_cp.html
new file mode 100644
index 0000000..1f24f8e
--- /dev/null
+++ b/server/templates/package_cp.html
@@ -0,0 +1,5 @@
+$def with (cat, pkg, pdata)
+$var title: $cat/$pkg
+
+No. of hosts: $pdata['HOST_COUNT']</br>
+No. of category-package-versions: $pdata['CPV_COUNT']</br>

diff --git a/server/templates/package_cpv.html b/server/templates/package_cpv.html
new file mode 100644
index 0000000..4abb62a
--- /dev/null
+++ b/server/templates/package_cpv.html
@@ -0,0 +1,4 @@
+$def with (cat, pkg, ver, pdata)
+$var title: $cat/$pkg-$ver
+
+No. of hosts: $pdata['HOST_COUNT']</br>



             reply	other threads:[~2011-07-07 16:02 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-07 16:02 Vikraman Choudhury [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-08-11 20:41 [gentoo-commits] proj/gentoostats:master commit in: server/, server/templates/ Vikraman Choudhury
2011-08-03 23:45 Vikraman Choudhury
2011-08-03 21:52 Vikraman Choudhury
2011-07-17 21:51 Vikraman Choudhury
2011-07-09 17:09 Vikraman Choudhury
2011-07-07 19:40 Vikraman Choudhury
2011-07-03 18:04 Vikraman Choudhury
2011-06-14 17:43 Vikraman Choudhury
2011-05-06 14:42 Vikraman Choudhury

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dbf074eb8ad273dcb0f6ac3e0f5af97a45ce0423.vikraman@gentoo \
    --to=vikraman.choudhury@gmail.com \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox