module.py
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 ini={}
00012 cm_kernel=None
00013
00014
00015 import os
00016 import string
00017 import copy
00018 import json
00019
00020
00021 def init(i):
00022 return {'cm_return':0}
00023
00024
00025 def gen_docs(i):
00026
00027 """
00028 Generate cM documentation
00029
00030 Input: {
00031 }
00032
00033 Output: {
00034 cm_return - return code >0 if error
00035 }
00036 """
00037
00038
00039 cm_default_web_uoa=''
00040 if 'cm_web_uoa' in i and i['cm_web_uoa']!='':
00041 cm_default_web_uoa=i['cm_web_uoa']
00042 else:
00043 cm_default_web_uoa=''
00044 if 'cm_default_web_uoa' in cm_kernel.ini['dcfg'] and cm_kernel.ini['dcfg']['cm_default_web_uoa']!='':
00045 cm_default_web_uoa=cm_kernel.ini['dcfg']['cm_default_web_uoa']
00046
00047
00048 if cm_default_web_uoa=='': cm_default_web_uoa=var_cm_cfg_default
00049
00050 r=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-web'],
00051 'cm_action':'load',
00052 'cm_data_uoa':cm_default_web_uoa})
00053 if r['cm_return']>0: return r
00054
00055 web=r['cm_data_obj']['cfg']
00056
00057
00058 du=cm_kernel.ini['dcfg'].get('cm_documentation_uoa','')
00059 if du=='':
00060 return {'cm_return':1, 'cm_error':'cm_documentation_uoa is not set in kernel configuration'}
00061
00062 lp=[]
00063
00064
00065 ii={}
00066 ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-module']
00067 ii['cm_action']='load'
00068 ii['cm_data_uoa']=ini['cfg']['cm_modules']['cm-core']
00069 r=cm_kernel.access(ii)
00070 if r['cm_return']>0: return r
00071
00072 p=r['cm_path_module']
00073 lp.append(p)
00074
00075
00076 ii={}
00077 ii['cm_run_module_uoa']=ini['cm_module_uid']
00078 ii['cm_action']='load'
00079 ii['cm_data_uoa']=du
00080 r=cm_kernel.access(ii)
00081 if r['cm_return']>0: return r
00082
00083 pt=r['cm_path']
00084
00085
00086 for q in ini['cfg']['source_libs']:
00087 ii={}
00088 ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['code.source']
00089 ii['cm_action']='load'
00090 ii['cm_data_uoa']=q
00091 r=cm_kernel.access(ii)
00092 if r['cm_return']==0:
00093 p+=' '+r['cm_path']
00094 lp.append(r['cm_path'])
00095
00096 p='"'+p+'"'
00097
00098
00099 cm_kernel.print_for_con('Path with modules to prepare documentation:')
00100 cm_kernel.print_for_con(' '+p)
00101 cm_kernel.print_for_con('')
00102 cm_kernel.print_for_con('Path for output:')
00103 cm_kernel.print_for_con(' '+pt)
00104 cm_kernel.print_for_con('')
00105
00106
00107 ii={}
00108 ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['code']
00109 ii['cm_action']='run'
00110
00111 ii['work_dir_module_uoa']=ini['cfg']['cm_modules']['os.script']
00112 ii['work_dir_data_uoa']=i['script_uoa_to_generate_doc']
00113
00114 ii['run_script_uoa']=i['script_uoa_to_generate_doc']
00115 ii['run_script']='gen_docs'
00116
00117 os.putenv('CM_DOC_PATH_INPUT','"'+p+'"')
00118 os.putenv('CM_DOC_PATH_OUTPUT',pt)
00119
00120 r=cm_kernel.access(ii)
00121 if r['cm_return']>0: return r
00122
00123
00124 pr='html'
00125 ext='.html'
00126 ext1='.out'
00127
00128 s=du+'&cm_web_filename=html/'
00129
00130 url0=web['http_prefix']+'cm_web_module_uoa=web&cm_web_action=show&cid=internal:'+s
00131 url=web['http_prefix']+'cm_menu=scenarios&cm_submenu=browse_cm_api&cid=internal:'+s
00132
00133 pt1=os.path.join(pt,pr)
00134 dirList=os.listdir(pt1)
00135 for fn in dirList:
00136 p=os.path.join(pt1,fn)
00137 p1=os.path.join(pt1,fn+ext1)
00138
00139 url1=url+fn+'#'
00140
00141 print p
00142
00143 if os.path.isfile(p) and p.endswith(ext):
00144 cm_kernel.print_for_con('Processing file '+p+' ...')
00145 f=file(p,'r')
00146 f1=file(p1,'wb')
00147
00148 while True:
00149 line = f.readline()
00150 if not line: break
00151
00152 line=line.replace(' href="#', ' href="#'+url1)
00153
00154 if string.find(line, ' href="http')==-1:
00155 line=line.replace(' href="', ' href="'+url)
00156 if string.find(line, ' src="http')==-1:
00157 line=line.replace(' src="', ' src="'+url0)
00158
00159 f1.write(line)
00160
00161 f1.close()
00162 f.close()
00163
00164 os.remove(p)
00165
00166 os.rename(p1,p)
00167
00168 cm_kernel.print_for_con('')
00169 cm_kernel.print_for_con('Documentation was generated successfully!')
00170
00171 return {'cm_return':0}
00172
00173
00174 def gen_stats(i):
00175
00176 """
00177 Generate cM statistics
00178
00179 Input: {
00180 (cm_repo_uoa) - repo where to create entry
00181 }
00182
00183 Output: {
00184 cm_return - return code >0 if error
00185 }
00186 """
00187
00188
00189 su=cm_kernel.ini['dcfg'].get('cm_internal_statistics_uoa','')
00190 if su=='':
00191 return {'cm_return':1, 'cm_error':'cm_internal_statistics_uoa is not set in kernel configuration'}
00192
00193 cru=i.get('cm_repo_uoa','')
00194
00195
00196 lock_uid=''
00197 d={}
00198 ii={}
00199 ii['cm_run_module_uoa']=ini['cm_module_uid']
00200 ii['cm_data_uoa']=su
00201 if cru!='': ii['cm_repo_uoa']=cru
00202 ii_copy=copy.deepcopy(ii)
00203 ii['cm_action']='load'
00204 ii['lock_acquire']='yes'
00205 r=cm_kernel.access(ii)
00206 if r['cm_return']==0:
00207 d=r['cm_data_obj']['cfg']
00208 lock_uid=r['lock_uid']
00209
00210
00211 dc=0
00212
00213 r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['class'], 'cm_action':'list'})
00214 if r1['cm_return']==0:
00215 dc=len(r1['cm_mixed'])
00216
00217 d['number_of_classes']=str(dc)
00218
00219
00220 db=0
00221 db_unique_uid=[]
00222
00223 rb=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['code.source'],
00224 'cm_action':'list',
00225 'cm_classes_uoa':[i['benchmark_class_uoa']]})
00226 if rb['cm_return']==0:
00227
00228 for q in rb['cm_mixed']:
00229 if q['cm_uid'] not in db_unique_uid:
00230 db_unique_uid.append(q['cm_uid'])
00231 db+=1
00232
00233 d['number_of_benchmarks']=str(db)
00234
00235
00236 dd=0
00237
00238 rd=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['dataset'],
00239 'cm_action':'list'})
00240 if rd['cm_return']==0:
00241 dd=len(rd['cm_mixed'])
00242
00243 d['number_of_datasets']=str(dd)
00244
00245
00246 dbd=0
00247 db_unique_uid=[]
00248
00249 for q in rb['cm_mixed']:
00250 if q['cm_uid'] not in db_unique_uid:
00251 db_unique_uid.append(q['cm_uid'])
00252
00253 di=q['cm_data_obj_cfg']
00254
00255 found=False
00256 if len(di.get('run_cmds',{}))>0:
00257 for j in di['run_cmds']:
00258 jj=di['run_cmds'][j]
00259 if len(jj.get('dataset_classes_uoa',[]))>0:
00260 for k in jj['dataset_classes_uoa']:
00261 if k!='':
00262 for l in rd['cm_mixed']:
00263 dx=l['cm_data_obj_cfg']
00264 if len(dx.get('cm_classes_uoa',[]))>0:
00265 dx1=dx['cm_classes_uoa']
00266 if k in dx1:
00267 Found=True
00268 dbd+=1
00269
00270 if not found:
00271
00272 dbd+=1
00273
00274 d['number_of_combinations_bench_dataset']=str(dbd)
00275
00276
00277 dp=0
00278
00279 r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['package'],
00280 'cm_action':'list'})
00281 if r1['cm_return']==0:
00282 dp=len(r1['cm_mixed'])
00283
00284 d['number_of_packages']=str(dp)
00285
00286 diter=int(d.get('number_of_total_explored_points','0'))
00287 diter1=int(d.get('number_of_latest_explored_points','0'))
00288
00289 if diter1!=0:
00290 diter+=diter1
00291 diter1=0
00292
00293 d['number_of_total_explored_points']=str(diter)
00294 d['number_of_latest_explored_points']=str(diter1)
00295
00296
00297 ii=ii_copy
00298 ii['cm_array']=d
00299 ii['cm_action']='add'
00300 if cru!='': ii['cm_repo_uoa']=cru
00301 if lock_uid!='':
00302 ii['lock_uid']=lock_uid
00303 ii['cm_action']='update'
00304
00305 r=cm_kernel.access(ii)
00306 if r['cm_return']>0: return r
00307
00308 cm_kernel.print_for_con('')
00309 cm_kernel.print_for_con('Statistics was generated successfully!')
00310
00311 return {'cm_return':0}
00312
00313
00314 def view_stats(i):
00315
00316 """
00317 View cM statistics (through web)
00318
00319 Input: {
00320 }
00321
00322 Output: {
00323 cm_return - return code >0 if error
00324 }
00325 """
00326
00327
00328 if 'cfg' in cm_kernel.ini['web_style']: web=cm_kernel.ini['web_style']['cfg']
00329 else:
00330 return {'cm_return':1, 'cm_error':'web style is not defined'}
00331
00332
00333 su=cm_kernel.ini['dcfg'].get('cm_internal_statistics_uoa','')
00334 if su=='':
00335 return {'cm_return':1, 'cm_error':'cm_internal_statistics_uoa is not set in kernel configuration'}
00336
00337
00338 ii={}
00339 ii['cm_run_module_uoa']=ini['cm_module_uid']
00340 ii['cm_action']='load'
00341 ii['cm_data_uoa']=su
00342 ii['cm_admin']='yes'
00343 r=cm_kernel.access(ii)
00344 if r['cm_return']>0: return r
00345 d=r['cm_data_obj']['cfg']
00346
00347
00348 c1='<span style="color: red;"><i>'
00349 c2='<i></span>'
00350
00351 href='<a href="'+web['http_prefix']
00352
00353 cm_kernel.print_for_web('<small><table border="0" cellpadding="0" cellspacing="0">')
00354
00355 cm_kernel.print_for_web('</td></tr><tr><td><B>Number of shared codelets and benchmarks:</B></td><td>')
00356 cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['code.source']+'" target="_blank">')
00357 cm_kernel.print_for_web(c1+d.get('number_of_benchmarks','')+c2)
00358 cm_kernel.print_for_web('</a>')
00359
00360 cm_kernel.print_for_web('</td></tr><tr><td><B>Number of shared datasets:</B></td><td>')
00361 cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['dataset']+'" target="_blank">')
00362 cm_kernel.print_for_web(c1+d.get('number_of_datasets','')+c2)
00363 cm_kernel.print_for_web('</a>')
00364
00365 cm_kernel.print_for_web('</td></tr><tr><td><B>Number of shared tools:</B></td><td>')
00366 cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['package']+'" target="_blank">')
00367 cm_kernel.print_for_web(c1+d.get('number_of_packages','')+c2)
00368 cm_kernel.print_for_web('</a>')
00369
00370
00371
00372 cm_kernel.print_for_web('<tr><td><B>Number of classes:</B></td><td>')
00373 cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['class']+'" target="_blank">')
00374 cm_kernel.print_for_web(c1+d.get('number_of_classes','')+c2)
00375 cm_kernel.print_for_web('</a>')
00376
00377
00378 cm_kernel.print_for_web('</td></tr><tr><td><B>Number of combinations of benchmarks and datasets:</B></td><td>')
00379 cm_kernel.print_for_web(c1+d.get('number_of_combinations_bench_dataset','')+c2)
00380
00381
00382
00383 cm_kernel.print_for_web('</td></tr><tr><td><B>Number of total explored points in space:</B></td><td>')
00384 cm_kernel.print_for_web(c1+d.get('number_of_total_explored_points','')+c2)
00385
00386 cm_kernel.print_for_web('</td></tr><tr><td><B>Number of latest explored points in space:</B></td><td>')
00387 cm_kernel.print_for_web(c1+d.get('number_of_latest_explored_points','')+c2)
00388 cm_kernel.print_for_web('</td></tr><tr><td></td><td>')
00389
00390
00391 cm_kernel.print_for_web('</td></tr></table></small>')
00392
00393 return {'cm_return':0}