#
# Xavi Leon <xleon@ac.upc.edu>
-import os
+import os, os.path
import pyinotify
import logger
+from functools import reduce
# Base dir for libvirt
BASE_DIR = '/sys/fs/cgroup'
-SUB_SYSTEMS = ['blkio', 'freezer', 'devices', 'memory', 'cpu,cpuacct', 'cpuset']
-VIRT_TECHS = ['lxc']
-
-# Global cgroup mapping.
-CGROUPS = dict()
-
-class CgroupWatch(pyinotify.ProcessEvent):
-
- def process_IN_CREATE(self, event):
- path = os.path.join(event.path, event.name)
- CGROUPS[event.name] = path
- logger.verbose("Cgroup Notify: Created cgroup %s on %s" % \
- (event.name, event.path))
-
- def process_IN_DELETE(self, event):
- try:
- del CGROUPS[event.name]
- except:
- logger.verbose("Cgroup Notify: Cgroup %s does not exist, continuing..."%event.name)
- logger.verbose("Cgroup Notify: Deleted cgroup %s on %s" % \
- (event.name, event.path))
-
-
-#logger.verbose("Cgroups: Recognizing already existing cgroups...")
-#for virt in VIRT_TECHS:
-# filenames = os.listdir(os.path.join(BASE_DIR, virt))
-# for filename in filenames:
-# path = os.path.join(BASE_DIR, virt, filename)
-# if os.path.isdir(path):
-# CGROUPS[filename] = path
-
-#logger.verbose("Cgroups: Initializing watchers...")
-#wm = pyinotify.WatchManager()
-#notifier = pyinotify.ThreadedNotifier(wm, CgroupWatch())
-#for virt in VIRT_TECHS:
-# wdd = wm.add_watch(os.path.join(BASE_DIR, virt),
-# pyinotify.IN_DELETE | pyinotify.IN_CREATE,
-# rec=False)
-#notifier.daemon = True
-#notifier.start()
def get_cgroup_paths(subsystem="cpuset"):
subsystem_bases = [
if result is None:
name = name + ".libvirt-lxc"
result = reduce(lambda a, b: b if name in os.path.basename(b) else a,
- get_cgroup_paths(subsystem), None)
+ get_cgroup_paths(subsystem), None)
return result
def get_cgroups():
""" Returns the list of cgroups active at this moment on the node """
- return map(os.path.basename, get_cgroup_paths())
+ return list(map(os.path.basename, get_cgroup_paths()))
def write(name, key, value, subsystem="cpuset"):
""" Writes a value to the file key with the cgroup with name """
base_path = get_cgroup_path(name, subsystem)
with open(os.path.join(base_path, key), 'w') as f:
- print >>f, value
+ print(value, file=f)
+ logger.verbose("cgroups.write: overwrote {}".format(base_path))
def append(name, key, value, subsystem="cpuset"):
""" Appends a value to the file key with the cgroup with name """
base_path = get_cgroup_path(name, subsystem)
with open(os.path.join(base_path, key), 'a') as f:
- print >>f, value
+ print(value, file=f)
+ logger.verbose("cgroups.append: appended {}".format(base_path))
if __name__ == '__main__':
subsystems = 'blkio cpu cpu,cpuacct cpuacct cpuset devices freezer memory net_cls perf_event systemd'.split()
for subsystem in subsystems:
- print 'get_cgroup_path({}, {}) = {}'.\
- format(name, subsystem, get_cgroup_path(name, subsystem))
+ print('get_cgroup_path({}, {}) = {}'.\
+ format(name, subsystem, get_cgroup_path(name, subsystem)))
# print 'get_cgroup_paths = {}'.format(get_cgroup_paths(subsystem))