From ed849a2ef4977a1812aa8cab8c26641808e9a38b Mon Sep 17 00:00:00 2001 From: Marcin Stolarek Date: Wed, 6 Aug 2014 09:59:44 +0200 Subject: [PATCH 1/4] More colours with cyclic usage. --- var/www/ganglia/graph.d/slurm_probejob_pendtime.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/var/www/ganglia/graph.d/slurm_probejob_pendtime.php b/var/www/ganglia/graph.d/slurm_probejob_pendtime.php index 432dbe2..bdde2b3 100644 --- a/var/www/ganglia/graph.d/slurm_probejob_pendtime.php +++ b/var/www/ganglia/graph.d/slurm_probejob_pendtime.php @@ -20,6 +20,10 @@ function graph_slurm_probejob_pendtime ( &$rrdtool_graph ) { { $series = $series."LINE2:'".$partition."'".$colours[$i].":'".$partition."' "; $i++; + if(count($colours)<=$i) + { + i=0; + } } From 1d3fdb3a9005a07611d3984f8b95d381cc24c586 Mon Sep 17 00:00:00 2001 From: Marcin Stolarek Date: Wed, 6 Aug 2014 10:01:44 +0200 Subject: [PATCH 2/4] more colours --- var/www/ganglia/graph.d/slurm_probejob_pendtime.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/www/ganglia/graph.d/slurm_probejob_pendtime.php b/var/www/ganglia/graph.d/slurm_probejob_pendtime.php index bdde2b3..23133bc 100644 --- a/var/www/ganglia/graph.d/slurm_probejob_pendtime.php +++ b/var/www/ganglia/graph.d/slurm_probejob_pendtime.php @@ -14,7 +14,7 @@ function graph_slurm_probejob_pendtime ( &$rrdtool_graph ) { } - $colours=array("#00000f","#FF0000","#00FF00","#FFFF00","#0000FF"); + $colours=array("#00000f","#FF0000","#00FF00","#FFFF00","#0000FF","#FFAA00","#FF00BB"); $i=0; foreach ( $json_conf['probejob_partitions'] as $partition) { From 5e6a1916df878607724f6a22fb92eed787157289 Mon Sep 17 00:00:00 2001 From: Dominik Bartkiewicz Date: Wed, 6 Aug 2014 15:57:23 +0200 Subject: [PATCH 3/4] security fix based on cinek810 works --- lib/python/site-packages/slurmmon/jobs.py | 2 +- usr/sbin/slurmmon_whitespace_report | 40 ++++++++++++++++++++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/lib/python/site-packages/slurmmon/jobs.py b/lib/python/site-packages/slurmmon/jobs.py index e656e75..6634ed1 100644 --- a/lib/python/site-packages/slurmmon/jobs.py +++ b/lib/python/site-packages/slurmmon/jobs.py @@ -294,7 +294,7 @@ def job_html_report(job, syntax_highlight_css=config.syntax_highlight_css, synta html += '' % syntax_highlight_css html += '' html += '

%s


' % job['JobID'] - html += config.syntax_highlight(job['JobScript']) + html += '' % job['JobID'] html += '


' html += '\n
%s
\n' % job['SacctReport'] html += '
' diff --git a/usr/sbin/slurmmon_whitespace_report b/usr/sbin/slurmmon_whitespace_report index 818793a..a15410b 100755 --- a/usr/sbin/slurmmon_whitespace_report +++ b/usr/sbin/slurmmon_whitespace_report @@ -57,7 +57,7 @@ def write_report(output_dir, completed_jobs_cpu=True, live_nodes_cpu=True): range = datetime.timedelta(days=1) #the amount of entries to include in tables - limit = 15 + limit = 20 state = 'COMPLETED' @@ -95,6 +95,7 @@ def write_report(output_dir, completed_jobs_cpu=True, live_nodes_cpu=True): jobs_all = jobs.get_jobs(state=state, starttime=starttime, endtime=endtime, filter=config.filter_whitespace_cpu_job) + #--- cpu wasters @@ -110,26 +111,55 @@ def write_report(output_dir, completed_jobs_cpu=True, live_nodes_cpu=True): for s in ('user', 'job', 'CPU days wasted', 'CPU efficiency', 'cores allocated', 'job script preview (click job link for full details)'): html += '%s' % s html += '' - + #entries + + import Image + import ImageFont + import ImageDraw + for j in jobs_cpu_wasters: html += '' - for i, x in enumerate((j['User'], j['JobID'], int(round(j['CPU_Wasted']/(60*60*24))), '%d%%' % int(round(j['CPU_Efficiency']*100)), j['NCPUS'], config.syntax_highlight(j['JobScriptPreview']))): + #for i, x in enumerate((j['User'], j['JobID'], int(round(j['CPU_Wasted']/(60*60*24))), '%d%%' % int(round(j['CPU_Efficiency']*100)), j['NCPUS'], config.syntax_highlight(j['JobScript']))): + for i, x in enumerate((j['User'], j['JobID'], int(round(j['CPU_Wasted']/(60*60*24))), '%d%%' % int(round(j['CPU_Efficiency']*100)), j['NCPUS'], j['JobID'])): if i==1: html += '%s' % (x, x) elif i==2: html += '%s' % x elif i in (3, 4): html += '%s' % x + elif i==5: + html += '' % x else: html += '%s' % x html += '\n' - + y_size = min( 42*18+40 ,len(j['JobScript'].splitlines())*18+40) + img = Image.new('RGB', (600, y_size), "white") + d = ImageDraw.Draw(img) + fontPath = "/usr/share/fonts/dejavu/DejaVuLGCSansMono.ttf" + fontSans12 = ImageFont.truetype ( fontPath, 12 ) + x_pos=20 + y_pos=20 + for line in j['JobScript'].splitlines(): + if line.rfind("module") !=-1 or line.rfind("mpirun") != -1 or line.rfind("srun") !=-1 or line.rfind("mpiexec") !=-1: + d.text( (x_pos,y_pos), line, font=fontSans12 , fill=(255, 0, 0) ) + else: + d.text( (x_pos,y_pos), line, font=fontSans12 , fill=(0, 0, 0) ) + y_pos = y_pos + 18 + if y_pos > y_size -20: + break + del d + try: + img.save(os.path.join(output_dir,"jobs/%s.png" % j['JobID']),'png') + except: + print "Unable to save image" + with open(os.path.join(jobs_dirname, '%s.html' % j['JobID']), 'w') as f: f.write(jobs.job_html_report(j)) #wrap-up html += '' + #Generate images with script @@ -191,6 +221,8 @@ def write_report(output_dir, completed_jobs_cpu=True, live_nodes_cpu=True): with open(os.path.join(output_dir,page_filename),'w') as f: f.write(html) + print os.path.join(output_dir,page_filename) + if __name__=='__main__': conf = '/etc/slurmmon.conf' From 66683c3442e80e8f05645d7d2da4643558ee891b Mon Sep 17 00:00:00 2001 From: Dominik Bartkiewicz Date: Wed, 6 Aug 2014 16:01:55 +0200 Subject: [PATCH 4/4] cleaning --- usr/sbin/slurmmon_whitespace_report | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/usr/sbin/slurmmon_whitespace_report b/usr/sbin/slurmmon_whitespace_report index a15410b..59e292d 100755 --- a/usr/sbin/slurmmon_whitespace_report +++ b/usr/sbin/slurmmon_whitespace_report @@ -114,13 +114,13 @@ def write_report(output_dir, completed_jobs_cpu=True, live_nodes_cpu=True): #entries + #Generate images with script import Image import ImageFont import ImageDraw for j in jobs_cpu_wasters: html += '' - #for i, x in enumerate((j['User'], j['JobID'], int(round(j['CPU_Wasted']/(60*60*24))), '%d%%' % int(round(j['CPU_Efficiency']*100)), j['NCPUS'], config.syntax_highlight(j['JobScript']))): for i, x in enumerate((j['User'], j['JobID'], int(round(j['CPU_Wasted']/(60*60*24))), '%d%%' % int(round(j['CPU_Efficiency']*100)), j['NCPUS'], j['JobID'])): if i==1: html += '%s' % (x, x) @@ -159,7 +159,6 @@ def write_report(output_dir, completed_jobs_cpu=True, live_nodes_cpu=True): #wrap-up html += '' - #Generate images with script @@ -221,8 +220,6 @@ def write_report(output_dir, completed_jobs_cpu=True, live_nodes_cpu=True): with open(os.path.join(output_dir,page_filename),'w') as f: f.write(html) - print os.path.join(output_dir,page_filename) - if __name__=='__main__': conf = '/etc/slurmmon.conf'