aboutsummaryrefslogtreecommitdiff
blob: 756496c2a57c25c90dba54ae971761f88745ade6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import sys
import pprint
import ConfigParser
from gentoostats.environment import Environment
from gentoostats.packages import Packages
from gentoostats.metadata import Metadata

class Payload(object):

  def __init__(self, configfile='/etc/gentoostats/payload.cfg'):
	self.config = ConfigParser.ConfigParser()
	if len(self.config.read(configfile)) == 0:
	  sys.stderr.write('Cannot read ' + configfile)
	  sys.exit(1)

	self.payload = dict()
	self.payload['PROTOCOL'] = 1
	self.update()

  def __masked(self, section, item):
	try:
	  return not self.config.getboolean(section, item)
	except ConfigParser.NoOptionError:
	  return False
	except (ConfigParser.NoSectionError, ValueError):
	  sys.stderr.write('Malformed payload config')
	  sys.exit(1)

  def update(self):
  	env = Environment()
	self.payload['PLATFORM'] = 'Unknown' if self.__masked('ENV','PLATFORM') else env.getPlatform()
	self.payload['LASTSYNC'] = 'Unknown' if self.__masked('ENV','LASTSYNC') else env.getLastSync()
	self.payload['PROFILE'] = 'Unknown' if self.__masked('ENV','PROFILE') else env.getProfile()

	for var in ['ARCH','CHOST','CFLAGS','CXXFLAGS','FFLAGS','LDFLAGS','MAKEOPTS','SYNC']:
	  self.payload[var] = None if self.__masked('ENV',var) else env.getVar(var)

	for var in ['ACCEPT_KEYWORDS','LANG','GENTOO_MIRRORS','FEATURES','USE']:
	  self.payload[var] = [] if self.__masked('ENV',var) else env.getVar(var).split()

	self.payload['PACKAGES'] = dict()
	for cpv in Packages().getInstalledCPVs():
	  m = Metadata(cpv)
	  p = dict()
	  p['REPO'] = None if self.__masked('PACKAGES','REPO') else m.getRepoName()
	  p['KEYWORD'] = None if self.__masked('PACKAGES','KEYWORD') else m.getKeyword()
	  p['USE'] = dict()
	  p['USE']['PLUS'] = [] if self.__masked('PACKAGES','USE_PLUS') else m.getPlusFlags()
	  p['USE']['MINUS'] = [] if self.__masked('PACKAGES','USE_MINUS') else m.getMinusFlags()
	  p['USE']['UNSET'] = [] if self.__masked('PACKAGES','USE_UNSET') else m.getUnsetFlags()
	  p['COUNTER'] = None if self.__masked('PACKAGES','COUNTER') else m.getCounter()
	  p['SIZE'] = None if self.__masked('PACKAGES','SIZE') else m.getSize()
	  p['BUILD_TIME'] = None if self.__masked('PACKAGES','BUILD_TIME') else 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