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: client/bin/, client/
Date: Sun,  5 Jun 2011 08:40:52 +0000 (UTC)	[thread overview]
Message-ID: <e5ff4157b6470cd665ab8d6f46a108e2714bdf1a.vikraman@gentoo> (raw)

commit:     e5ff4157b6470cd665ab8d6f46a108e2714bdf1a
Author:     Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
AuthorDate: Sat Jun  4 18:22:09 2011 +0000
Commit:     Vikraman Choudhury <vikraman.choudhury <AT> gmail <DOT> com>
CommitDate: Sat Jun  4 18:22:09 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoostats.git;a=commit;h=e5ff4157

rewrote client, added more fields

---
 client/environment.py          |   47 ++++++++++++++++++++++++++++++++++++-
 client/metadata.py             |   45 ++++++++++++++++++++++++++++++++++++
 client/packages.py             |    1 +
 client/payload.py              |   49 ++++++++++++++++++++++++++++++++++++++++
 client/{bin/client => send.py} |   29 +++++------------------
 client/useflags.py             |    8 ------
 6 files changed, 146 insertions(+), 33 deletions(-)

diff --git a/client/environment.py b/client/environment.py
index 07b942e..f03a76c 100644
--- a/client/environment.py
+++ b/client/environment.py
@@ -1,9 +1,52 @@
 
 import logging
+import os
+import platform
 import portage
+from _emerge.actions import relative_profile_path
 
 class Environment(object):
 
+  def __init__(self):
+    self.portdir = portage.settings['PORTDIR']
+
   def getVar(self, myvar):
-    ret = portage.settings[myvar]
-    return ret
+    return portage.settings[myvar]
+
+  def getPlatform(self):
+    return platform.platform(aliased=1)
+
+  def getLastSync(self):
+    lastsync = None
+    try:
+      lastsync = portage.grabfile(os.path.join(self.portdir, 'metadata', 'timestamp.chk'))
+    except portage.exception.PortageException:
+      pass
+    if lastsync is None:
+      return 'Unknown'
+    return lastsync[0]
+  
+  def getProfile(self):
+    profilever = None
+    profile = portage.settings.profile_path
+    if profile:
+      profilever = relative_profile_path(self.portdir, profile)
+      if profilever is None:
+	try:
+	  for parent in portage.grabfile(os.path.join(profile, 'parent')):
+	    profilever = relative_profile_path(self.portdir,os.path.join(profile, parent))
+	    if profilever is not None:
+	      break
+	except portage.exception.PortageException:
+	  pass
+
+	if profilever is None:
+	  try:
+	    profilever = '!' + os.readlink(profile)
+	  except (OSError):
+	    pass
+
+    if profilever is None:
+      profilever = 'Unknown'
+
+    return profilever

diff --git a/client/metadata.py b/client/metadata.py
new file mode 100644
index 0000000..0b6a751
--- /dev/null
+++ b/client/metadata.py
@@ -0,0 +1,45 @@
+
+import portage
+from dbapi import VARDB
+from gentoolkit.enalyze.lib import FlagAnalyzer
+from gentoolkit.enalyze.lib import KeywordAnalyser
+
+class Metadata(object):
+
+  def __init__(self, cpv):
+    self.repo, self.counter, self.build_time, self.size = VARDB.aux_get(cpv,['repository','COUNTER','BUILD_TIME','SIZE'])
+
+    system_use = portage.settings['USE'].split()
+    fa = FlagAnalyzer(system=system_use)
+    self.flags = fa.analyse_cpv(cpv)
+
+    arch = portage.settings['ARCH']
+    accept_keywords = portage.settings['ACCEPT_KEYWORDS'].split()
+    ka = KeywordAnalyser(arch=arch,accept_keywords=accept_keywords)
+    self.keyword = ka.get_inst_keyword_cpv(cpv)
+
+  def getPlusFlags(self):
+    return list(self.flags[0])
+
+  def getMinusFlags(self):
+    return list(self.flags[1])
+
+  def getUnsetFlags(self):
+    return list(self.flags[2])
+
+  def getKeyword(self):
+    return self.keyword
+
+  def getRepoName(self):
+    if self.repo:
+      return self.repo
+    return 'Unknown'
+
+  def getCounter(self):
+    return self.counter
+
+  def getBuildTime(self):
+    return self.build_time
+
+  def getSize(self):
+    return self.size

diff --git a/client/packages.py b/client/packages.py
index 73cdfc5..7f9ca35 100644
--- a/client/packages.py
+++ b/client/packages.py
@@ -1,5 +1,6 @@
 
 import logging
+import portage
 from dbapi import VARDB
 
 class Packages(object):

diff --git a/client/payload.py b/client/payload.py
new file mode 100644
index 0000000..b888af9
--- /dev/null
+++ b/client/payload.py
@@ -0,0 +1,49 @@
+
+import pprint
+from environment import Environment
+from packages import Packages
+from metadata import Metadata
+
+class Payload(object):
+
+  def __init__(self):
+    self.payload = dict()
+    self.payload['PROTOCOL'] = 1
+    self.update()
+
+  def update(self):
+
+    env = Environment()
+    self.payload['PLATFORM'] = env.getPlatform()
+    self.payload['LASTSYNC'] = env.getLastSync()
+    self.payload['PROFILE'] = env.getProfile()
+
+    for var in ['ARCH','CFLAGS','CXXFLAGS','FFLAGS','LDFLAGS','MAKEOPTS']:
+      self.payload[var] = env.getVar(var)
+
+    for var in ['ACCEPT_KEYWORDS','LANG','GENTOO_MIRRORS','SYNC','FEATURES','USE']:
+      self.payload[var] = env.getVar(var).split()
+
+    self.payload['PACKAGES'] = dict()
+    for cpv in Packages().getInstalledCPVs():
+      m = Metadata(cpv)
+      p = dict()
+      p['REPO'] = m.getRepoName()
+      p['KEYWORD'] = m.getKeyword()
+      p['USE'] = dict()
+      p['USE']['PLUS'] = m.getPlusFlags()
+      p['USE']['MINUS'] = m.getMinusFlags()
+      p['USE']['UNSET'] = m.getUnsetFlags()
+      p['COUNTER'] = m.getCounter()
+      p['SIZE'] = m.getSize()
+      p['BUILD_TIME'] = m.getBuildTime()
+      self.payload['PACKAGES'][cpv] = p
+
+  def get(self):
+    return self.payload
+
+  def dump(self,human=False):
+    if human:
+      pprint.pprint(self.payload)
+    else:
+      print self.payload

diff --git a/client/bin/client b/client/send.py
similarity index 63%
rename from client/bin/client
rename to client/send.py
index f920250..8bf2bd2 100755
--- a/client/bin/client
+++ b/client/send.py
@@ -1,8 +1,6 @@
 #!/usr/bin/env python
 
-from packages import Packages
-from useflags import UseFlags
-from environment import Environment
+from payload import Payload
 import json
 import urllib, httplib
 
@@ -14,24 +12,6 @@ def getAuthInfo():
       }
   return auth_info
 
-def getPostData():
-  p = Packages()
-  u = UseFlags()
-  e = Environment()
-
-  post_data = {}
-  post_data['PROTOCOL'] = 1
-  post_data['AUTH'] = getAuthInfo()
-  for key in ('CFLAGS', 'CXXFLAGS', 'LDFLAGS', 'CHOST', 'FEATURES'):
-    post_data[key] = e.getVar(key)
-
-  packages = {}
-  for cpv in p.getInstalledCPVs(sort=True):
-    packages[cpv] = u.getUseFlags(cpv)
-  post_data['PACKAGES'] = packages
-
-  return post_data
-
 def serialize(object, human=False):
   if human:
     indent = 2
@@ -42,8 +22,11 @@ def serialize(object, human=False):
   return json.JSONEncoder(indent=indent, sort_keys=sort_keys).encode(object)
 
 def main():
-  post_body = serialize(getPostData(), human=True)
-  print post_body
+  pl = Payload()
+  pl.dump(human=True)
+  post_data = pl.get()
+  post_data['AUTH'] = getAuthInfo()
+  post_body = serialize(post_data,human=True)
   post_headers = {"Content-type": "application/json"}
   myuuid = getAuthInfo()['UUID']
   conn = httplib.HTTPConnection("127.0.0.1:8080")

diff --git a/client/useflags.py b/client/useflags.py
deleted file mode 100644
index 84a8dcf..0000000
--- a/client/useflags.py
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#TODO: Remove gentoolkit dependency
-from gentoolkit import flag
-
-class UseFlags(object):
-
-  def getUseFlags(self, cpv):
-    return flag.get_flags(cpv, True)[1]



             reply	other threads:[~2011-06-05  8:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-05  8:40 Vikraman Choudhury [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-05-02 14:32 [gentoo-commits] proj/gentoostats:master commit in: client/bin/, client/ Vikraman Choudhury
2011-05-01  9:51 Vikraman Choudhury
2011-04-30  4:24 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=e5ff4157b6470cd665ab8d6f46a108e2714bdf1a.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