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 $'
|