[Gug-cvs] gug/gug/module/dm/algorithm simple.py, NONE, 1.1 __init__.py, NONE, 1.1 job_data.py, NONE
Status: Planning
Brought to you by:
szferi
From: Adrian T. <cs...@us...> - 2007-09-27 10:36:03
|
Update of /cvsroot/gug/gug/gug/module/dm/algorithm In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv23476/gug/module/dm/algorithm Added Files: simple.py __init__.py job_data.py Log Message: Adding Decision Maker module It is Integrated into the following services: Sched, CM, StM --- NEW FILE: job_data.py --- '''Simple ordering algrithms''' __revision__ = '$Revision: 1.1 $' from gug.module.dm.algorithm.simple import AbstractOrder from gug.client.storage import Storage from gug.client.soap import get_client from gug.common.jsdl import get_staging_info from gug.common.simplexml import SimpleXML, SimpleXMLError from gug.common import log from gug.common.exception import * import urlparse class JSDLDataStageOrdering(AbstractOrder): def __init__(self, dm, gis_proxy, config): self.dm = dm self.gis_proxy = gis_proxy self.config = config self.storage = Storage(gis_proxy = gis_proxy) def _crop_file(self,path): if path.startswith('file://'): path = path[7:] return path def order(self, csg, jsdl): try: stcs = {} stageins = self._get_stage_in_data_from_jsdl(jsdl) for stage in stageins.values(): try: stage_dirs = self.storage.ls(self._crop_file(stage), True) for (dir, datas) in stage_dirs: for data in datas: if data.has_key('surl'): for surl in data['surl']: #host = urlparse.urlparse(surl)[1].split(':')[0] host = surl.split('-')[0] stcs[host] = stcs.get(host, 0) + 1 except NotDirectoryLikeException: for surl in self.storage.stat(self._crop_file(stage))['surl']: #host = urlparse.urlparse(surl)[1].split(':')[0] host = surl.split('-')[0] stcs[host] = stcs.get(host, 0) + 1 print stcs try: yield csg.next() except: return except: log.error() def _get_stage_in_data_from_jsdl(self, jsdl): stage_in, stage_out = get_staging_info(jsdl) print stage_in print stage_out return stage_in --- NEW FILE: simple.py --- '''Simple ordering algrithms''' __revision__ = '$Revision: 1.1 $' import random class AbstractOrder: def __init__(self, dm, gis_proxy, config): self.dm = dm self.gis_proxy = gis_proxy self.config = config def order(self, csg, filter = None): try: yield csg.next() except: return class RandomOrder(AbstractOrder): '''Random ordering''' def order(self, csg, filter = None): ret = [] try: while True: ret = [] for i in range(3): ret.append(csg.next()) random.shuffle(ret) for i in ret: yield i except: random.shuffle(ret) for i in ret: yield i class MaximumFreeSpaceOrder(AbstractOrder): '''Maximum Free Space ordering''' is_ordered = False def _max_space_order_cache(self): for (key, value) in self.dm.resource_list.iteritems(): print self.dm.resource_list[key][1]['DataStorageFree'] key.sort(self.dm.resource_list[key][1]['DataStorageFree']) def order(self, csg, filter = None): self._max_space_order_cache() ret = [] try: while True: ret = [] for i in range(3): ret.append(csg.next()) random.shuffle(ret) for i in ret: yield i except: random.shuffle(ret) for i in ret: yield i --- NEW FILE: __init__.py --- '''Ordering algorithms for DM''' __revision__ = '$Revision: 1.1 $' |