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>
next 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