From af646bf797dd1763e418c8531913682f4afb8ba2 Mon Sep 17 00:00:00 2001 From: Thomas Schwery Date: Mon, 2 Nov 2015 21:53:36 +0100 Subject: [PATCH] Removal of now useless style and script files, added jobs list at the bottom of the status page, added generation date in the header --- saltinventory.py | 11 +- templates/hostlist_template.html | 93 +++++++++-- www/hosts/.keep | 0 www/res/inittable.js | 7 + www/res/jquery.number.min.js | 2 - www/res/reset.css | 48 ------ www/res/skin.css | 255 ------------------------------- www/res/style.css | 162 -------------------- 8 files changed, 93 insertions(+), 485 deletions(-) delete mode 100644 www/hosts/.keep delete mode 100644 www/res/jquery.number.min.js delete mode 100644 www/res/reset.css delete mode 100644 www/res/skin.css delete mode 100644 www/res/style.css diff --git a/saltinventory.py b/saltinventory.py index 118ccc8..d3adfad 100755 --- a/saltinventory.py +++ b/saltinventory.py @@ -9,6 +9,8 @@ import salt.client import salt.runner import salt.config +import salt.wheel +import time from jinja2 import Template, BaseLoader, TemplateNotFound, FileSystemLoader, Environment # settings @@ -22,9 +24,10 @@ config = { class Inventorizer: config = None - + saltcmd = None saltrun = None + saltwhe = None host_list = {} @@ -35,6 +38,8 @@ class Inventorizer: opts = salt.config.master_config('/etc/salt/master') self.saltrun = salt.runner.RunnerClient(opts) + + self.saltwhe = salt.wheel.WheelClient(opts) self.process() @@ -43,14 +48,16 @@ class Inventorizer: self.createHostList() def collectHostData(self): + self.keys_list = self.saltwhe.cmd('key.list_all', [], {}, {}) self.host_list = self.saltcmd.cmd('*', 'grains.items') self.stat_list = self.saltrun.cmd('manage.status') + self.jobs_list = self.saltrun.cmd('jobs.list_jobs') def createHostList(self): fo = open(self.config['base_path'] + "hostlist.html", "wb") env = Environment(loader = FileSystemLoader(config['template_path'])) template = env.get_template('hostlist_template.html') - fo.write(template.render({'hostlist': self.host_list, 'statlist': self.stat_list})) + fo.write(template.render({'hostlist': self.host_list, 'statlist': self.stat_list, 'keylist': self.keys_list, 'joblist': self.jobs_list, 'now' : time.strftime('%Y-%m-%d %H:%M:%S')})) fo.close def lenFilter(self, list): diff --git a/templates/hostlist_template.html b/templates/hostlist_template.html index 4dab9d1..5c7417f 100644 --- a/templates/hostlist_template.html +++ b/templates/hostlist_template.html @@ -9,12 +9,20 @@ +
-

Inventory Salt minions list

+
+
+

Inventory Salt minions list

+
+
+

{{ now }}

+
+
@@ -73,21 +81,74 @@ -

Disconnected minions

- - - - - - - - {% for name in statlist %} - - - - {% endfor %} - -
Name
{{ name }}
+
+
+

Disconnected minions

+ + + + + + + + {% for name in statlist['down'] %} + + + + {% endfor %} + +
Name
{{ name }}
+
+
+

Pending keys

+ + + + + + + + {% for name in keylist['minions_pre'] %} + + + + {% endfor %} + +
Name
{{ name }}
+
+
+ +
+
+

Previous jobs

+ + + + + + + + + + + + + + {% for id, data in joblist|dictsort|reverse %} + + + + + + + + + + {% endfor %} + +
NameArgumentsFunctionStartTimeTargetTarget typeUser
{{ id }}{{ data.Arguments }}{{ data.Function }}{{ data.StartTime }}{{ data.Target }}{{ data['Target-type'] }}{{ data.User }}
+
+
diff --git a/www/hosts/.keep b/www/hosts/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/www/res/inittable.js b/www/res/inittable.js index 5e8b934..3c53966 100644 --- a/www/res/inittable.js +++ b/www/res/inittable.js @@ -4,6 +4,13 @@ $(document).ready(function() { $(this).html( '' ); } ); + var jobTable = $('#joblist').DataTable({ + 'paging': true, + 'info': false, + 'dom': 'tp', + 'pagingType': 'full' + }); + var table = $('#hostlist').DataTable({ 'paging': false, 'info': false, diff --git a/www/res/jquery.number.min.js b/www/res/jquery.number.min.js deleted file mode 100644 index 4fce02b..0000000 --- a/www/res/jquery.number.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery number 2.1.5 (c) github.com/teamdf/jquery-number | opensource.teamdf.com/license */ -(function(e){"use strict";function t(e,t){if(this.createTextRange){var n=this.createTextRange();n.collapse(true);n.moveStart("character",e);n.moveEnd("character",t-e);n.select()}else if(this.setSelectionRange){this.focus();this.setSelectionRange(e,t)}}function n(e){var t=this.value.length;e=e.toLowerCase()=="start"?"Start":"End";if(document.selection){var n=document.selection.createRange(),r,i,s;r=n.duplicate();r.expand("textedit");r.setEndPoint("EndToEnd",n);i=r.text.length-n.text.length;s=i+n.text.length;return e=="Start"?i:s}else if(typeof this["selection"+e]!="undefined"){t=this["selection"+e]}return t}var r={codes:{46:127,188:44,109:45,190:46,191:47,192:96,220:92,222:39,221:93,219:91,173:45,187:61,186:59,189:45,110:46},shifts:{96:"~",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",48:")",45:"_",61:"+",91:"{",93:"}",92:"|",59:":",39:'"',44:"<",46:">",47:"?"}};e.fn.number=function(i,s,o,u){u=typeof u==="undefined"?",":u;o=typeof o==="undefined"?".":o;s=typeof s==="undefined"?0:s;var a="\\u"+("0000"+o.charCodeAt(0).toString(16)).slice(-4),f=new RegExp("[^"+a+"0-9]","g"),l=new RegExp(a,"g");if(i===true){if(this.is("input:text")){return this.on({"keydown.format":function(i){var a=e(this),f=a.data("numFormat"),l=i.keyCode?i.keyCode:i.which,c="",h=n.apply(this,["start"]),p=n.apply(this,["end"]),d="",v=false;if(r.codes.hasOwnProperty(l)){l=r.codes[l]}if(!i.shiftKey&&l>=65&&l<=90){l+=32}else if(!i.shiftKey&&l>=69&&l<=105){l-=48}else if(i.shiftKey&&r.shifts.hasOwnProperty(l)){c=r.shifts[l]}if(c=="")c=String.fromCharCode(l);if(l!=8&&l!=45&&l!=127&&c!=o&&!c.match(/[0-9]/)){var m=i.keyCode?i.keyCode:i.which;if(m==46||m==8||m==127||m==9||m==27||m==13||(m==65||m==82||m==80||m==83||m==70||m==72||m==66||m==74||m==84||m==90||m==61||m==173||m==48)&&(i.ctrlKey||i.metaKey)===true||(m==86||m==67||m==88)&&(i.ctrlKey||i.metaKey)===true||m>=35&&m<=39||m>=112&&m<=123){return}i.preventDefault();return false}if(h==0&&p==this.value.length||a.val()==0){if(l==8){h=p=1;this.value="";f.init=s>0?-1:0;f.c=s>0?-(s+1):0;t.apply(this,[0,0])}else if(c==o){h=p=1;this.value="0"+o+(new Array(s+1)).join("0");f.init=s>0?1:0;f.c=s>0?-(s+1):0}else if(l==45){h=p=2;this.value="-0"+o+(new Array(s+1)).join("0");f.init=s>0?1:0;f.c=s>0?-(s+1):0;t.apply(this,[2,2])}else{f.init=s>0?-1:0;f.c=s>0?-s:0}}else{f.c=p-this.value.length}f.isPartialSelection=h==p?false:true;if(s>0&&c==o&&h==this.value.length-s-1){f.c++;f.init=Math.max(0,f.init);i.preventDefault();v=this.value.length+f.c}else if(l==45&&(h!=0||this.value.indexOf("-")==0)){i.preventDefault()}else if(c==o){f.init=Math.max(0,f.init);i.preventDefault()}else if(s>0&&l==127&&h==this.value.length-s-1){i.preventDefault()}else if(s>0&&l==8&&h==this.value.length-s){i.preventDefault();f.c--;v=this.value.length+f.c}else if(s>0&&l==127&&h>this.value.length-s-1){if(this.value==="")return;if(this.value.slice(h,h+1)!="0"){d=this.value.slice(0,h)+"0"+this.value.slice(h+1);a.val(d)}i.preventDefault();v=this.value.length+f.c}else if(s>0&&l==8&&h>this.value.length-s){if(this.value==="")return;if(this.value.slice(h-1,h)!="0"){d=this.value.slice(0,h-1)+"0"+this.value.slice(h);a.val(d)}i.preventDefault();f.c--;v=this.value.length+f.c}else if(l==127&&this.value.slice(h,h+1)==u){i.preventDefault()}else if(l==8&&this.value.slice(h-1,h)==u){i.preventDefault();f.c--;v=this.value.length+f.c}else if(s>0&&h==p&&this.value.length>s+1&&h>this.value.length-s-1&&isFinite(+c)&&!i.metaKey&&!i.ctrlKey&&!i.altKey&&c.length===1){if(p===this.value.length){d=this.value.slice(0,h-1)}else{d=this.value.slice(0,h)+this.value.slice(h+1)}this.value=d;v=h}if(v!==false){t.apply(this,[v,v])}a.data("numFormat",f)},"keyup.format":function(r){var i=e(this),o=i.data("numFormat"),u=r.keyCode?r.keyCode:r.which,a=n.apply(this,["start"]),f=n.apply(this,["end"]),l;if(a===0&&f===0&&(u===189||u===109)){i.val("-"+i.val());a=1;o.c=1-this.value.length;o.init=1;i.data("numFormat",o);l=this.value.length+o.c;t.apply(this,[l,l])}if(this.value===""||(u<48||u>57)&&(u<96||u>105)&&u!==8&&u!==46&&u!==110)return;i.val(i.val());if(s>0){if(o.init<1){a=this.value.length-s-(o.init<0?1:0);o.c=a-this.value.length;o.init=1;i.data("numFormat",o)}else if(a>this.value.length-s&&u!=8){o.c++;i.data("numFormat",o)}}if(u==46&&!o.isPartialSelection){o.c++;i.data("numFormat",o)}l=this.value.length+o.c;t.apply(this,[l,l])},"paste.format":function(t){var n=e(this),r=t.originalEvent,i=null;if(window.clipboardData&&window.clipboardData.getData){i=window.clipboardData.getData("Text")}else if(r.clipboardData&&r.clipboardData.getData){i=r.clipboardData.getData("text/plain")}n.val(i);t.preventDefault();return false}}).each(function(){var t=e(this).data("numFormat",{c:-(s+1),decimals:s,thousands_sep:u,dec_point:o,regex_dec_num:f,regex_dec:l,init:this.value.indexOf(".")?true:false});if(this.value==="")return;t.val(t.val())})}else{return this.each(function(){var t=e(this),n=+t.text().replace(f,"").replace(l,".");t.number(!isFinite(n)?0:+n,s,o,u)})}}return this.text(e.number.apply(window,arguments))};var i=null,s=null;if(e.isPlainObject(e.valHooks.text)){if(e.isFunction(e.valHooks.text.get))i=e.valHooks.text.get;if(e.isFunction(e.valHooks.text.set))s=e.valHooks.text.set}else{e.valHooks.text={}}e.valHooks.text.get=function(t){var n=e(t),r,s,o=n.data("numFormat");if(!o){if(e.isFunction(i)){return i(t)}else{return undefined}}else{if(t.value==="")return"";r=+t.value.replace(o.regex_dec_num,"").replace(o.regex_dec,".");return(t.value.indexOf("-")===0?"-":"")+(isFinite(r)?r:0)}};e.valHooks.text.set=function(t,n){var r=e(t),i=r.data("numFormat");if(!i){if(e.isFunction(s)){return s(t,n)}else{return undefined}}else{var o=e.number(n,i.decimals,i.dec_point,i.thousands_sep);return t.value=o}};e.number=function(e,t,n,r){r=typeof r==="undefined"?",":r;n=typeof n==="undefined"?".":n;t=!isFinite(+t)?0:Math.abs(t);var i="\\u"+("0000"+n.charCodeAt(0).toString(16)).slice(-4);var s="\\u"+("0000"+r.charCodeAt(0).toString(16)).slice(-4);e=(e+"").replace(".",n).replace(new RegExp(s,"g"),"").replace(new RegExp(i,"g"),".").replace(new RegExp("[^0-9+-Ee.]","g"),"");var o=!isFinite(+e)?0:+e,u="",a=function(e,t){var n=Math.pow(10,t);return""+Math.round(e*n)/n};u=(t?a(o,t):""+Math.round(o)).split(".");if(u[0].length>3){u[0]=u[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,r)}if((u[1]||"").length