From d25c34e699e7380cb49f5cfa331aae03d883d92d Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Tue, 13 Jan 2015 01:19:53 +0100 Subject: [PATCH 001/267] add angularjs --- MANIFEST.in | 2 +- glances/outputs/bottle/index.html | 242 +++++++++++++++++++++++ glances/outputs/glances_bottle.py | 22 +-- glances/outputs/static/js/angular.min.js | 216 ++++++++++++++++++++ glances/outputs/static/js/controllers.js | 175 ++++++++++++++++ 5 files changed, 637 insertions(+), 20 deletions(-) create mode 100644 glances/outputs/bottle/index.html create mode 100644 glances/outputs/static/js/angular.min.js create mode 100644 glances/outputs/static/js/controllers.js diff --git a/MANIFEST.in b/MANIFEST.in index dae6a3d7..e976fa45 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,7 +3,7 @@ include COPYING include NEWS include README.rst include conf/glances.conf -include glances/outputs/bottle/*.tpl +include glances/outputs/bottle/*.html include glances/outputs/static/css/*.css include glances/outputs/static/js/*.js include man/glances.1 diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html new file mode 100644 index 00000000..4dccc9d4 --- /dev/null +++ b/glances/outputs/bottle/index.html @@ -0,0 +1,242 @@ + + + + + + +Glances + + + + + + + + + + +
Loading...
+
+
+
+
+ +
+ Refresh time  {{result["system"].hostname}}  +
+ +
+
+
+ Uptime: {{result["uptime"]}} +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + +
CPU{{result["cpu"].total}}%
user:{{result["cpu"].user}}%
system:{{result["cpu"].system}}%
idle:{{result["cpu"].idle}}%
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
MEM{{result["mem"].percent}}%
total:{{result["mem"].total | bytes:2}}
used:{{result["mem"].used | bytes:2}}
free:{{result["mem"].free | bytes:2}}
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
SWAP{{result["memswap"].percent}}%
total:{{result["memswap"].total | bytes:2}}
used:{{result["memswap"].used | bytes:2}}
free:{{result["memswap"].free | bytes:2}}
+
+
+
+
+
+
+ + + + + + + + + + + + + +
NETWORKRx/sTx/s
{{network.interface_name | min_size}}}{{network.rx | bytes}}{{network.tx | bytes}}
+
+ +
+ + + + + + + + + + + + + +
DISK I/OR/sW/s
{{disk.disk_name | min_size}}{{disk.read_bytes | bytes}}{{disk.write_bytes | bytes}}
+
+
+ + + + + + + + + + + + + +
FILE SYSUsedTotal
{{fs.mnt_point}} ({{fs.device_name}}){{fs.size - fs.free | bytes}}{{fs.size | bytes}}
+
+ +
+
+
+ + + + + + + +
No warning or critical alert detected{{alert}}
+
+ +
+ TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, + {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view +
+ +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CPU%MEM%PIDUSERNISCommand
{{process.cpu_percent | number:1}}{{process.memory_percent | number:1}}{{process.pid}}{{process.username}}{{process.nice | exclamation}}{{process.status}}{{process.name}}
+
+
+
+
+ + diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index 27b56343..cf80bf17 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -246,22 +246,6 @@ class GlancesBottle(object): stats: Stats database to display """ - stats = { - 'system': self.stats.get_plugin('system').get_stats_display(args=self.args), - 'uptime': self.stats.get_plugin('uptime').get_stats_display(args=self.args), - 'cpu': self.stats.get_plugin('cpu').get_stats_display(args=self.args), - 'load': self.stats.get_plugin('load').get_stats_display(args=self.args), - 'mem': self.stats.get_plugin('mem').get_stats_display(args=self.args), - 'memswap': self.stats.get_plugin('memswap').get_stats_display(args=self.args), - 'network': self.stats.get_plugin('network').get_stats_display(args=self.args), - 'diskio': self.stats.get_plugin('diskio').get_stats_display(args=self.args), - 'fs': self.stats.get_plugin('fs').get_stats_display(args=self.args), - 'raid': self.stats.get_plugin('raid').get_stats_display(args=self.args), - 'sensors': self.stats.get_plugin('sensors').get_stats_display(args=self.args), - 'alert': self.stats.get_plugin('alert').get_stats_display(args=self.args), - 'processcount': self.stats.get_plugin('processcount').get_stats_display(args=self.args), - 'monitor': self.stats.get_plugin('monitor').get_stats_display(args=self.args), - 'processlist': self.stats.get_plugin('processlist').get_stats_display(args=self.args) - } - - return template('base', refresh_time=refresh_time, stats=stats) + path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "bottle", "index.html") + f = open(path, encoding="utf-8") + return f.read() \ No newline at end of file diff --git a/glances/outputs/static/js/angular.min.js b/glances/outputs/static/js/angular.min.js new file mode 100644 index 00000000..0be575c2 --- /dev/null +++ b/glances/outputs/static/js/angular.min.js @@ -0,0 +1,216 @@ +/* + AngularJS v1.2.26 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(W,X,t){'use strict';function C(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.26/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?K(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+K(b)})}catch(d){return K(c)}}function dc(b){try{return decodeURIComponent(b)}catch(a){}}function ec(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=dc(c[0]),y(d)&&(b=y(c[1])?dc(c[1]):!0,kb.call(a,d)?J(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Cb(b){var a= +[];r(b,function(b,d){J(b)?r(b,function(b){a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))}):a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))});return a.length?a.join("&"):""}function lb(b){return Ca(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ca(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Xc(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,g=["ng:app","ng-app","x-ng-app", +"data-ng-app"],k=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;r(g,function(a){g[a]=!0;c(X.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(r(b.querySelectorAll("."+a),c),r(b.querySelectorAll("."+a+"\\:"),c),r(b.querySelectorAll("["+a+"]"),c))});r(d,function(a){if(!e){var b=k.exec(" "+a.className+" ");b?(e=a,f=(b[2]||"").replace(/\s+/g,",")):r(a.attributes,function(b){!e&&g[b.name]&&(e=a,f=b.value)})}});e&&a(e,f?[f]:[])}function fc(b,a){var c=function(){b=w(b);if(b.injector()){var c=b[0]===X? +"document":ia(b);throw Ta("btstrpd",c.replace(//,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=gc(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(W&&!d.test(W.name))return c();W.name=W.name.replace(d,"");Va.resumeBootstrap=function(b){r(b,function(b){a.push(b)});c()}}function mb(b,a){a= +a||"_";return b.replace(Yc,function(b,d){return(d?a:"")+b.toLowerCase()})}function Db(b,a,c){if(!b)throw Ta("areq",a||"?",c||"required");return b}function Wa(b,a,c){c&&J(b)&&(b=b[b.length-1]);Db(P(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Da(b,a){if("hasOwnProperty"===b)throw Ta("badname",a);}function hc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g "+e[1]+a.replace(me,"<$1>")+e[2];d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a=Q?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ka(b,a){var c=typeof b,d;"function"==c||"object"==c&&null!==b?"function"==typeof(d= +b.$$hashKey)?d=b.$$hashKey():d===t&&(d=b.$$hashKey=(a||hb)()):d=b;return c+":"+d}function bb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function sc(b){var a,c;"function"===typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(pe,""),c=c.match(qe),r(c[1].split(re),function(b){b.replace(se,function(b,c,d){a.push(d)})})),b.$inject=a):J(b)?(c=b.length-1,Wa(b[c],"fn"),a=b.slice(0,c)):Wa(b,"fn",!0);return a}function gc(b){function a(a){return function(b,c){if(T(b))r(b, +$b(a));else return a(b,c)}}function c(a,b){Da(a,"service");if(P(b)||J(b))b=n.instantiate(b);if(!b.$get)throw cb("pget",a);return l[a+k]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,f,k;r(a,function(a){if(!h.get(a)){h.put(a,!0);try{if(v(a))for(c=Ya(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,f=0,k=d.length;f 4096 bytes)!"));else{if(m.cookie!== +da)for(da=m.cookie,d=da.split("; "),O={},f=0;fh&&this.remove(p.key),b},get:function(a){if(h").parent()[0])});var f=L(a,b,a,c,d,e);ca(a,"ng-scope");return function(b,c,d,e){Db(b,"scope");var g=c?La.clone.call(a):a;r(d,function(a,b){g.data("$"+b+"Controller",a)});d=0;for(var m=g.length;darguments.length&& +(b=a,a=t);K&&(c=da);return p(a,b,c)}var u,M,z,O,I,B,da={},rb;u=c===f?d:ha(d,new Ob(w(f),d.$attr));M=u.$$element;if(L){var Na=/^\s*([@=&])(\??)\s*(\w*)\s*$/;B=e.$new(!0);!H||H!==L&&H!==L.$$originalDirective?M.data("$isolateScopeNoTemplate",B):M.data("$isolateScope",B);ca(M,"ng-isolate-scope");r(L.scope,function(a,c){var d=a.match(Na)||[],f=d[3]||c,g="?"==d[2],d=d[1],m,l,n,p;B.$$isolateBindings[c]=d+f;switch(d){case "@":u.$observe(f,function(a){B[c]=a});u.$$observers[f].$$scope=e;u[f]&&(B[c]=b(u[f])(e)); +break;case "=":if(g&&!u[f])break;l=q(u[f]);p=l.literal?Aa:function(a,b){return a===b||a!==a&&b!==b};n=l.assign||function(){m=B[c]=l(e);throw ja("nonassign",u[f],L.name);};m=B[c]=l(e);B.$watch(function(){var a=l(e);p(a,B[c])||(p(a,m)?n(e,a=B[c]):B[c]=a);return m=a},null,l.literal);break;case "&":l=q(u[f]);B[c]=function(a){return l(e,a)};break;default:throw ja("iscp",L.name,c,a);}})}rb=p&&F;R&&r(R,function(a){var b={$scope:a===L||a.$$isolateScope?B:e,$element:M,$attrs:u,$transclude:rb},c;I=a.controller; +"@"==I&&(I=u[a.name]);c=s(I,b);da[a.name]=c;K||M.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});g=0;for(z=m.length;gG.priority)break;if(V=G.scope)O=O||G,G.templateUrl||(db("new/isolated scope",L,G,Z),T(V)&&(L=G));C=G.name;!G.templateUrl&&G.controller&&(V=G.controller,R=R||{},db("'"+C+"' controller",R[C],G,Z),R[C]=G);if(V=G.transclude)x=!0,G.$$tlb|| +(db("transclusion",fa,G,Z),fa=G),"element"==V?(K=!0,u=G.priority,V=Z,Z=d.$$element=w(X.createComment(" "+C+": "+d[C]+" ")),c=Z[0],Na(f,Ba.call(V,0),c),S=z(V,e,u,g&&g.name,{nonTlbTranscludeDirective:fa})):(V=w(Kb(c)).contents(),Z.empty(),S=z(V,e));if(G.template)if(D=!0,db("template",H,G,Z),H=G,V=P(G.template)?G.template(Z,d):G.template,V=W(V),G.replace){g=G;V=Ib.test(V)?w(aa(V)):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",C,"");Na(f,Z,c);qa={$attr:{}};V=da(c,[],qa);var $=a.splice(Fa+ +1,a.length-(Fa+1));L&&y(V);a=a.concat(V).concat($);E(d,qa);qa=a.length}else Z.html(V);if(G.templateUrl)D=!0,db("template",H,G,Z),H=G,G.replace&&(g=G),N=ue(a.splice(Fa,a.length-Fa),Z,d,f,x&&S,m,n,{controllerDirectives:R,newIsolateScopeDirective:L,templateDirective:H,nonTlbTranscludeDirective:fa}),qa=a.length;else if(G.compile)try{Q=G.compile(Z,d,S),P(Q)?F(null,Q,U,Y):Q&&F(Q.pre,Q.post,U,Y)}catch(ve){l(ve,ia(Z))}G.terminal&&(N.terminal=!0,u=Math.max(u,G.priority))}N.scope=O&&!0===O.scope;N.transcludeOnThisElement= +x;N.templateOnThisElement=D;N.transclude=S;p.hasElementTranscludeDirective=K;return N}function y(a){for(var b=0,c=a.length;bp.priority)&&-1!=p.restrict.indexOf(f)&&(q&&(p=bc(p,{$$start:q,$$end:n})),b.push(p),h=p)}catch(F){l(F)}}return h}function E(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!= +e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(ca(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function ue(a,b,c,d,e,f,g,h){var m=[],l,q,s=b[0],u=a.shift(),F=D({},u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),N=P(u.templateUrl)?u.templateUrl(b,c):u.templateUrl; +b.empty();n.get(A.getTrustedResourceUrl(N),{cache:p}).success(function(n){var p,A;n=W(n);if(u.replace){n=Ib.test(n)?w(aa(n)):[];p=n[0];if(1!=n.length||1!==p.nodeType)throw ja("tplrt",u.name,N);n={$attr:{}};Na(d,b,p);var z=da(p,[],n);T(u.scope)&&y(z);a=z.concat(a);E(c,n)}else p=s,b.html(n);a.unshift(F);l=H(a,p,c,e,b,u,f,g,h);r(d,function(a,c){a==p&&(d[c]=b[0])});for(q=L(b[0].childNodes,e);m.length;){n=m.shift();A=m.shift();var R=m.shift(),I=m.shift(),z=b[0];if(A!==s){var B=A.className;h.hasElementTranscludeDirective&& +u.replace||(z=Kb(p));Na(R,w(A),z);ca(w(z),B)}A=l.transcludeOnThisElement?O(n,l.transclude,I):I;l(q,n,z,d,A)}m=null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){a=e;m?(m.push(b),m.push(c),m.push(d),m.push(a)):(l.transcludeOnThisElement&&(a=O(b,l.transclude,e)),l(q,b,c,d,a))}}function x(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?d:n.reject(d)}var c={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},d=function(a){var b=e.headers,c=D({},a.headers),d,f,b=D({},b.common,b[K(a.method)]); +a:for(d in b){a=K(d);for(f in c)if(K(f)===a)continue a;c[d]=b[d]}(function(a){var b;r(a,function(c,d){P(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(c);return c}(a);D(c,a);c.headers=d;c.method=Ia(c.method);var f=[function(a){d=a.headers;var c=xc(a.data,wc(d),a.transformRequest);x(c)&&r(d,function(a,b){"content-type"===K(b)&&delete d[b]});x(a.withCredentials)&&!x(e.withCredentials)&&(a.withCredentials=e.withCredentials);return s(a,c,d).then(b,b)},t],g=n.when(c);for(r(A,function(a){(a.request||a.requestError)&& +f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var m=f.shift(),g=g.then(a,m)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,c)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,c)});return g};return g}function s(c,f,g){function h(a,b,c,e){I&&(200<=a&&300>a?I.put(w,[a,b,vc(c),e]):I.remove(w));p(b,a,c,e);d.$$phase||d.$apply()}function p(a,b,d,e){b=Math.max(b,0);(200<= +b&&300>b?A.resolve:A.reject)({data:a,status:b,headers:wc(d),config:c,statusText:e})}function s(){var a=Ra(q.pendingRequests,c);-1!==a&&q.pendingRequests.splice(a,1)}var A=n.defer(),r=A.promise,I,H,w=F(c.url,c.params);q.pendingRequests.push(c);r.then(s,s);!c.cache&&!e.cache||(!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method)||(I=T(c.cache)?c.cache:T(e.cache)?e.cache:u);if(I)if(H=I.get(w),y(H)){if(H&&P(H.then))return H.then(s,s),H;J(H)?p(H[1],H[0],ha(H[2]),H[3]):p(H,200,{},"OK")}else I.put(w,r);x(H)&& +((H=Pb(c.url)?b.cookies()[c.xsrfCookieName||e.xsrfCookieName]:t)&&(g[c.xsrfHeaderName||e.xsrfHeaderName]=H),a(c.method,w,f,h,g,c.timeout,c.withCredentials,c.responseType));return r}function F(a,b){if(!b)return a;var c=[];Tc(b,function(a,b){null===a||x(a)||(J(a)||(a=[a]),r(a,function(a){T(a)&&(a=ta(a)?a.toISOString():na(a));c.push(Ca(b)+"="+Ca(a))}))});0=Q&&(!b.match(/^(get|post|head|put|delete|options)$/i)|| +!W.XMLHttpRequest))return new W.ActiveXObject("Microsoft.XMLHTTP");if(W.XMLHttpRequest)return new W.XMLHttpRequest;throw C("$httpBackend")("noxhr");}function Vd(){this.$get=["$browser","$window","$document",function(b,a,c){return ye(b,xe,b.defer,a.angular.callbacks,c[0])}]}function ye(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),g=null;f.type="text/javascript";f.src=a;f.async=!0;g=function(a){$a(f,"load",g);$a(f,"error",g);e.body.removeChild(f);f=null;var k=-1,s="unknown";a&&("load"!== +a.type||d[b].called||(a={type:"error"}),s=a.type,k="error"===a.type?404:200);c&&c(k,s)};sb(f,"load",g);sb(f,"error",g);8>=Q&&(f.onreadystatechange=function(){v(f.readyState)&&/loaded|complete/.test(f.readyState)&&(f.onreadystatechange=null,g({type:"load"}))});e.body.appendChild(f);return g}var g=-1;return function(e,m,h,l,n,p,q,s){function F(){A=g;R&&R();z&&z.abort()}function u(a,d,e,f,g){L&&c.cancel(L);R=z=null;0===d&&(d=e?200:"file"==ua(m).protocol?404:0);a(1223===d?204:d,e,f,g||"");b.$$completeOutstandingRequest(E)} +var A;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==K(e)){var N="_"+(d.counter++).toString(36);d[N]=function(a){d[N].data=a;d[N].called=!0};var R=f(m.replace("JSON_CALLBACK","angular.callbacks."+N),N,function(a,b){u(l,a,d[N].data,"",b);d[N]=E})}else{var z=a(e);z.open(e,m,!0);r(n,function(a,b){y(a)&&z.setRequestHeader(b,a)});z.onreadystatechange=function(){if(z&&4==z.readyState){var a=null,b=null,c="";A!==g&&(a=z.getAllResponseHeaders(),b="response"in z?z.response:z.responseText);A===g&& +10>Q||(c=z.statusText);u(l,A||z.status,b,a,c)}};q&&(z.withCredentials=!0);if(s)try{z.responseType=s}catch(ca){if("json"!==s)throw ca;}z.send(h||null)}if(0=k&&(n.resolve(q),l(p.$$intervalId),delete e[p.$$intervalId]);s||b.$apply()},g);e[p.$$intervalId]=n;return p}var e={};d.cancel= +function(b){return b&&b.$$intervalId in e?(e[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete e[b.$$intervalId],!0):!1};return d}]}function bd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "), +SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function Qb(b){b=b.split("/");for(var a=b.length;a--;)b[a]= +lb(b[a]);return b.join("/")}function zc(b,a,c){b=ua(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=U(b.port)||ze[b.protocol]||null}function Ac(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ua(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=ec(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ra(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function eb(b){var a= +b.indexOf("#");return-1==a?b:b.substr(0,a)}function Rb(b){return b.substr(0,eb(b).lastIndexOf("/")+1)}function Bc(b,a){this.$$html5=!0;a=a||"";var c=Rb(b);zc(b,this,b);this.$$parse=function(a){var e=ra(c,a);if(!v(e))throw Sb("ipthprfx",a,c);Ac(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Cb(this.$$search),b=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e; +if((e=ra(b,d))!==t)return d=e,(e=ra(a,e))!==t?c+(ra("/",e)||e):b+d;if((e=ra(c,d))!==t)return c+e;if(c==d+"/")return c}}function Tb(b,a){var c=Rb(b);zc(b,this,b);this.$$parse=function(d){var e=ra(b,d)||ra(c,d),e="#"==e.charAt(0)?ra(a,e):this.$$html5?e:"";if(!v(e))throw Sb("ihshprfx",d,a);Ac(e,this,b);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash? +"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(eb(b)==eb(a))return a}}function Ub(b,a){this.$$html5=!0;Tb.apply(this,arguments);var c=Rb(b);this.$$rewrite=function(d){var e;if(b==eb(d))return d;if(e=ra(c,d))return b+a+e;if(c===d+"/")return c};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function tb(b){return function(){return this[b]}} +function Cc(b,a){return function(c){if(x(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Wd(){var b="",a=!1;this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return y(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess",k.absUrl(),a)}var k,m,h=d.baseHref(),l=d.url(),n;a?(n=l.substring(0,l.indexOf("/",l.indexOf("//")+2))+(h||"/"),m=e.history?Bc:Ub):(n= +eb(l),m=Tb);k=new m(n,"#"+b);k.$$parse(k.$$rewrite(l));var p=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var e=w(a.target);"a"!==K(e[0].nodeName);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href");T(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=ua(g.animVal).href);if(!p.test(g)){if(m===Ub){var h=e.attr("href")||e.attr("xlink:href");if(h&&0>h.indexOf("://"))if(g="#"+b,"/"==h[0])g=n+g+h;else if("#"==h[0])g=n+g+(k.path()||"/")+h; +else{var l=k.path().split("/"),h=h.split("/");2!==l.length||l[1]||(l.length=1);for(var q=0;qe?Dc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var g=0,k;do k=Dc(d[g++],d[g++],d[g++],d[g++],d[g++],c,a)(b,f),f=t,b=k;while(ga)for(b in h++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(r--,delete e[b])}else e!==d&&(e=d,h++);return h},function(){n?(n=!1,b(d,d,c)):b(d,g,c);if(k)if(T(d))if(Pa(d)){g=Array(d.length);for(var a=0;at&&(w=4-t,O[w]||(O[w]=[]),B=P(d.exp)?"fn: "+(d.exp.name||d.exp.toString()): +d.exp,B+="; newVal: "+na(f)+"; oldVal: "+na(k),O[w].push(B));else if(d===c){z=!1;break a}}catch(y){p.$$phase=null,e(y)}if(!(h=L.$$childHead||L!==this&&L.$$nextSibling))for(;L!==this&&!(h=L.$$nextSibling);)L=L.$parent}while(L=h);if((z||l.length)&&!t--)throw p.$$phase=null,a("infdig",b,na(O));}while(z||l.length);for(p.$$phase=null;r.length;)try{r.shift()()}catch(v){e(v)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(r(this.$$listenerCount, +Bb(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=E,this.$on= +this.$watch=function(){return E})}},$eval:function(a,b){return f(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||g.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]= +c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[Ra(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,k={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){k.defaultPrevented=!0},defaultPrevented:!1},h=[k].concat(Ba.call(arguments,1)),l,m;do{d=f.$$listeners[a]||c;k.currentScope=f;l=0;for(m=d.length;lc.msieDocumentMode)throw xa("iequirks");var e=ha(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b}, +e.valueOf=Qa);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,g=e.getTrusted,k=e.trustAs;r(ga,function(a,b){var c=K(b);e[Za("parse_as_"+c)]=function(b){return f(a,b)};e[Za("get_trusted_"+c)]=function(b){return g(a,b)};e[Za("trust_as_"+c)]=function(b){return k(a,b)}});return e}]}function ce(){this.$get=["$window","$document",function(b,a){var c={},d=U((/android (\d+)/.exec(K((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator|| +{}).userAgent),f=a[0]||{},g=f.documentMode,k,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,h=f.body&&f.body.style,l=!1,n=!1;if(h){for(var p in h)if(l=m.exec(p)){k=l[0];k=k.substr(0,1).toUpperCase()+k.substr(1);break}k||(k="WebkitOpacity"in h&&"webkit");l=!!("transition"in h||k+"Transition"in h);n=!!("animation"in h||k+"Animation"in h);!d||l&&n||(l=v(f.body.style.webkitTransition),n=v(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!g||7< +g),hasEvent:function(a){if("input"==a&&9==Q)return!1;if(x(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:Xa(),vendorPrefix:k,transitions:l,animations:n,android:d,msie:Q,msieDocumentMode:g}}]}function ee(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,k,m){var h=c.defer(),l=h.promise,n=y(m)&&!m;k=a.defer(function(){try{h.resolve(e())}catch(a){h.reject(a),d(a)}finally{delete f[l.$$timeoutId]}n||b.$apply()},k);l.$$timeoutId=k;f[k]=h; +return l}var f={};e.cancel=function(b){return b&&b.$$timeoutId in f?(f[b.$$timeoutId].reject("canceled"),delete f[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return e}]}function ua(b,a){var c=b;Q&&(Y.setAttribute("href",c),c=Y.href);Y.setAttribute("href",c);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname: +"/"+Y.pathname}}function Pb(b){b=v(b)?ua(b):b;return b.protocol===Hc.protocol&&b.host===Hc.host}function fe(){this.$get=ba(W)}function mc(b){function a(d,e){if(T(d)){var f={};r(d,function(b,c){f[c]=a(c,b)});return f}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Ic);a("date",Jc);a("filter",Ce);a("json",De);a("limitTo",Ee);a("lowercase",Fe);a("number",Kc);a("orderBy",Lc);a("uppercase",Ge)}function Ce(){return function(b, +a,c){if(!J(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;bb;b=Math.abs(b);var g=b+"",k="",m=[],h=!1;if(-1!==g.indexOf("e")){var l=g.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&& +l[3]>e+1?(g="0",b=0):(k=g,h=!0)}if(h)0b)&&(k=b.toFixed(e));else{g=(g.split(Nc)[1]||"").length;x(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);0===b&&(f=!1);b=(""+b).split(Nc);g=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(g.length>=n+p)for(l=g.length-n,h=0;hb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Xb(e,a,d)}}function vb(b,a){return function(c,d){var e=c["get"+b](),f=Ia(a?"SHORT"+b:b);return d[f][e]}}function Jc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,k=b[8]? +a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=U(b[9]+b[10]),g=U(b[9]+b[11]));k.call(a,U(b[1]),U(b[2])-1,U(b[3]));f=U(b[4]||0)-f;g=U(b[5]||0)-g;k=U(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,f,g,k,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var f="",g=[],k,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;v(c)&&(c=He.test(c)?U(c):a(c));ib(c)&&(c=new Date(c)); +if(!ta(c))return c;for(;e;)(m=Ie.exec(e))?(g=g.concat(Ba.call(m,1)),e=g.pop()):(g.push(e),e=null);r(g,function(a){k=Je[a];f+=k?k(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return f}}function De(){return function(b){return na(b,!0)}}function Ee(){return function(b,a){if(!J(b)&&!v(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):U(a);if(v(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||q()});if(e.hasEvent("paste"))a.on("paste cut",q)}a.on("change",n);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var s=c.ngPattern;s&&((e=s.match(/^\/(.*)\/([gim]*)$/))?(s=RegExp(e[1],e[2]),e=function(a){return sa(d, +"pattern",d.$isEmpty(a)||s.test(a),a)}):e=function(c){var e=b.$eval(s);if(!e||!e.test)throw C("ngPattern")("noregexp",s,e,ia(a));return sa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var r=U(c.ngMinlength);e=function(a){return sa(d,"minlength",d.$isEmpty(a)||a.length>=r,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var u=U(c.ngMaxlength);e=function(a){return sa(d,"maxlength",d.$isEmpty(a)||a.length<=u,a)};d.$parsers.push(e); +d.$formatters.push(e)}}function Yb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;dQ?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Xa=function(){if(y(Xa.isActive_))return Xa.isActive_;var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]")); +if(!b)try{new Function("")}catch(a){b=!0}return Xa.isActive_=b},Yc=/[A-Z]/g,ad={full:"1.2.26",major:1,minor:2,dot:26,codeName:"captivating-disinterest"};S.expando="ng339";var ab=S.cache={},ne=1,sb=W.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},$a=W.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};S._data=function(b){return this.cache[b[this.expando]]||{}};var ie=/([\:\-\_]+(.))/g, +je=/^moz([A-Z])/,Hb=C("jqLite"),ke=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Ib=/<|&#?\w+;/,le=/<([\w:]+)/,me=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th= +ea.td;var La=S.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),S(W).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?w(this[b]):w(this[this.length+b])},length:0,push:Me,sort:[].sort,splice:[].splice},qb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){qb[K(b)]=b});var rc={};r("input select option textarea button form details".split(" "), +function(b){rc[Ia(b)]=!0});r({data:Mb,removeData:Lb},function(b,a){S[a]=b});r({data:Mb,inheritedData:pb,scope:function(b){return w.data(b,"$scope")||pb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return w.data(b,"$isolateScope")||w.data(b,"$isolateScopeNoTemplate")},controller:oc,injector:function(b){return pb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Nb,css:function(b,a,c){a=Za(a);if(y(c))b.style[a]=c;else{var d;8>=Q&&(d=b.currentStyle&&b.currentStyle[a], +""===d&&(d="auto"));d=d||b.style[a];8>=Q&&(d=""===d?t:d);return d}},attr:function(b,a,c){var d=K(a);if(qb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||E).specified?d:t;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(x(d))return e?b[e]:"";b[e]=d}var a=[];9>Q?(a[1]= +"innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(x(a)){if("SELECT"===Ma(b)&&b.multiple){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(x(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Re={n:"\n",f:"\f",r:"\r", +t:"\t",v:"\v","'":"'",'"':'"'},Wb=function(a){this.options=a};Wb.prototype={constructor:Wb,lex:function(a){this.text=a;this.index=0;this.ch=t;this.lastCh=":";for(this.tokens=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+ +this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(fb.ZERO,a.fn, +this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Ec(d,this.options,this.text);return D(function(c,d,k){return e(k||a(c,d))},{assign:function(e,g,k){(k=a(e,k))||a.assign(e,k={});return ub(k,d,g,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,f){var g=a(e,f),k=d(e,f),m;ka(k,c.text);if(!g)return t;(g=va(g[k],c.text))&&(g.then&&c.options.unwrapPromises)&& +(m=g,"$$v"in g||(m.$$v=t,m.then(function(a){m.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var k=ka(d(e,g),c.text);(g=va(a(e,g),c.text))||a.assign(e,g={});return g[k]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var k=[],m=c?c(f,g):f,h=0;ha.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Xb(Math[0< +a?"floor":"ceil"](a/60),2)+Xb(Math.abs(a%60),2))}},Ie=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,He=/^\-?\d+$/;Jc.$inject=["$locale"];var Fe=ba(K),Ge=ba(Ia);Lc.$inject=["$parse"];var dd=ba({restrict:"E",compile:function(a,c){8>=Q&&(c.href||c.name||c.$set("href",""),a.append(X.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===za.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)|| +a.preventDefault()})}}}),Fb={};r(qb,function(a,c){if("multiple"!=a){var d=pa("ng-"+c);Fb[d]=function(){return{priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(["src","srcset","href"],function(a){var c=pa("ng-"+a);Fb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,k=a;"href"===a&&"[object SVGAnimatedString]"===za.call(e.prop("href"))&&(k="xlinkHref",f.$attr[k]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(k,c),Q&&g&&e.prop(g,f[k])):"href"=== +a&&f.$set(k,null)})}}}});var yb={$addControl:E,$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E};Oc.$inject=["$element","$attrs","$scope","$animate"];var Rc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,f,g){if(!f.action){var k=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};sb(e[0],"submit",k);e.on("$destroy",function(){c(function(){$a(e[0],"submit",k)},0,!1)})}var m=e.parent().controller("form"), +h=f.name||f.ngForm;h&&ub(a,h,g,h);if(m)e.on("$destroy",function(){m.$removeControl(g);h&&ub(a,h,t,h);D(g,yb)})}}}}}]},ed=Rc(),rd=Rc(!0),Se=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Te=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Ue=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Sc={text:Ab,number:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Ue.test(a))return e.$setValidity("number", +!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return t});Ke(e,"number",Ve,null,e.$$validityState);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return sa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return sa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return sa(e,"number",e.$isEmpty(a)|| +ib(a),a)})},url:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"url",e.$isEmpty(a)||Se.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"email",e.$isEmpty(a)||Te.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){x(d.name)&&c.attr("name",hb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue}; +d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;v(f)||(f=!0);v(g)||(g=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:g})},hidden:E,button:E,submit:E,reset:E,file:E},Ve=["badInput"],jc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel", +link:function(d,e,f,g){g&&(Sc[K(f.type)]||Sc.text)(d,e,f,g,c,a)}}}],wb="ng-valid",xb="ng-invalid",Oa="ng-pristine",zb="ng-dirty",We=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,f,g){function k(a,c){c=c?"-"+mb(c,"-"):"";g.removeClass(e,(a?xb:wb)+c);g.addClass(e,(a?wb:xb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name= +d.name;var m=f(d.ngModel),h=m.assign;if(!h)throw C("ngModel")("nonassign",d.ngModel,ia(e));this.$render=E;this.$isEmpty=function(a){return x(a)||""===a||null===a||a!==a};var l=e.inheritedData("$formController")||yb,n=0,p=this.$error={};e.addClass(Oa);k(!0);this.$setValidity=function(a,c){p[a]!==!c&&(c?(p[a]&&n--,n||(k(!0),this.$valid=!0,this.$invalid=!1)):(k(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,k(c,a),l.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine= +!0;g.removeClass(e,zb);g.addClass(e,Oa)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,g.removeClass(e,Oa),g.addClass(e,zb),l.$setDirty());r(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,h(a,d),r(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var q=this;a.$watch(function(){var c=m(a);if(q.$modelValue!==c){var d=q.$formatters,e=d.length;for(q.$modelValue=c;e--;)c=d[e](c);q.$viewValue!==c&&(q.$viewValue= +c,q.$render())}return c})}],Gd=function(){return{require:["ngModel","^?form"],controller:We,link:function(a,c,d,e){var f=e[0],g=e[1]||yb;g.$addControl(f);a.$on("$destroy",function(){g.$removeControl(f)})}}},Id=ba({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),kc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required", +!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},Hd=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!x(a)){var c=[];a&&r(a.split(f),function(a){a&&c.push(aa(a))});return c}});e.$formatters.push(function(a){return J(a)?a.join(", "):t});e.$isEmpty=function(a){return!a||!a.length}}}},Xe=/^(true|false|\d+)$/,Jd=function(){return{priority:100, +compile:function(a,c){return Xe.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},jd=ya({compile:function(a){a.addClass("ng-binding");return function(a,d,e){d.data("$binding",e.ngBind);a.$watch(e.ngBind,function(a){d.text(a==t?"":a)})}}}),ld=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}], +kd=["$sce","$parse",function(a,c){return{compile:function(d){d.addClass("ng-binding");return function(d,f,g){f.data("$binding",g.ngBindHtml);var k=c(g.ngBindHtml);d.$watch(function(){return(k(d)||"").toString()},function(c){f.html(a.getTrustedHtml(k(d))||"")})}}}}],md=Yb("",!0),od=Yb("Odd",0),nd=Yb("Even",1),pd=ya({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),qd=[function(){return{scope:!0,controller:"@",priority:500}}],lc={},Ye={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), +function(a){var c=pa("ng-"+a);lc[c]=["$parse","$rootScope",function(d,e){return{compile:function(f,g){var k=d(g[c]);return function(c,d){d.on(a,function(d){var f=function(){k(c,{$event:d})};Ye[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var td=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var k,m,h;c.$watch(e.ngIf,function(f){Ua(f)?m||(m=c.$new(),g(m,function(c){c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+ +" ");k={clone:c};a.enter(c,d.parent(),d)})):(h&&(h.remove(),h=null),m&&(m.$destroy(),m=null),k&&(h=Eb(k.clone),a.leave(h,function(){h=null}),k=null))})}}}],ud=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,f){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Va.noop,compile:function(g,k){var m=k.ngInclude||k.src,h=k.onload||"",l=k.autoscroll;return function(g,k,q,r,F){var u=0,t,w,R,z=function(){w&&(w.remove(),w=null);t&&(t.$destroy(),t=null); +R&&(e.leave(R,function(){w=null}),w=R,R=null)};g.$watch(f.parseAsResourceUrl(m),function(f){var m=function(){!y(l)||l&&!g.$eval(l)||d()},q=++u;f?(a.get(f,{cache:c}).success(function(a){if(q===u){var c=g.$new();r.template=a;a=F(c,function(a){z();e.enter(a,null,k,m)});t=c;R=a;t.$emit("$includeContentLoaded");g.$eval(h)}}).error(function(){q===u&&z()}),g.$emit("$includeContentRequested")):(z(),r.template=null)})}}}}],Kd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude", +link:function(c,d,e,f){d.html(f.template);a(d.contents())(c)}}}],vd=ya({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),wd=ya({terminal:!0,priority:1E3}),xd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var k=g.count,m=g.$attr.when&&f.attr(g.$attr.when),h=g.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),q=c.endSymbol(),s=/^when(Minus)?(.+)$/;r(g,function(a,c){s.test(c)&&(l[K(c.replace("when","").replace("Minus","-"))]= +f.attr(g.$attr[c]))});r(l,function(a,e){n[e]=c(a.replace(d,p+k+"-"+h+q))});e.$watch(function(){var c=parseFloat(e.$eval(k));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-h));return n[c](e,f,!0)},function(a){f.text(a)})}}}],yd=["$parse","$animate",function(a,c){var d=C("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,f,g,k,m){var h=g.ngRepeat,l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,q,s,t,u,A={$id:Ka};if(!l)throw d("iexp", +h);g=l[1];k=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){u&&(A[u]=a);A[t]=c;A.$index=d;return n(e,A)}):(q=function(a,c){return Ka(c)},s=function(a){return a});l=g.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",g);t=l[3]||l[1];u=l[2];var y={};e.$watchCollection(k,function(a){var g,k,l=f[0],n,A={},B,I,H,v,E,C,x,J=[];if(Pa(a))C=a,E=p||q;else{E=p||s;C=[];for(H in a)a.hasOwnProperty(H)&&"$"!=H.charAt(0)&&C.push(H);C.sort()}B=C.length;k=J.length=C.length;for(g=0;gB;)d=t.pop(),p.removeOption(d.label),d.element.remove()}for(;z.length>M;)z.pop()[0].element.remove()}var h;if(!(h=s.match(d)))throw Ze("iexp",s,ia(f));var l=c(h[2]||h[1]),m=h[4]||h[6],n=h[5],r=c(h[3]||""),u=c(h[2]? +h[1]:m),w=c(h[7]),x=h[8]?c(h[8]):null,z=[[{element:f,label:""}]];F&&(a(F)(e),F.removeClass("ng-scope"),F.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=w(e)||[],d={},h,l,p,r,s,v,y;if(q)for(l=[],r=0,v=z.length;r@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}'); +//# sourceMappingURL=angular.min.js.map \ No newline at end of file diff --git a/glances/outputs/static/js/controllers.js b/glances/outputs/static/js/controllers.js new file mode 100644 index 00000000..d3d9cd81 --- /dev/null +++ b/glances/outputs/static/js/controllers.js @@ -0,0 +1,175 @@ +var glancesApp = angular.module('glancesApp', []); + +glancesApp.filter('min_size', function() { + return function(input) { + var max = 8; + if (input.length > max) { + return "_" + input.substring(input.length - max) + } + return input + }; +}); +glancesApp.filter('exclamation', function() { + return function(input) { + if (input == undefined || input =='') { + return '?' + } + return input + }; +}); + +/** + * Fork from https://gist.github.com/thomseddon/3511330 + *   => \u00A0 + * WARNING : kilobyte (kB) != kibibyte (KiB) (more info here : http://en.wikipedia.org/wiki/Byte ) + **/ +glancesApp.filter('bytes', function() { + return function(bytes, precision) { + if (isNaN(parseFloat(bytes)) || !isFinite(bytes) || bytes == 0) return '0B'; + var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'], + number = Math.floor(Math.log(bytes) / Math.log(1000)); + return (bytes / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; + } +}); + +glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', function($scope, $http, $interval, $q) { + + $scope.limitSuffix = ['critical', 'careful', 'warning'] + $scope.refreshTime = 3 + $scope.pluginLimits = [] + + $scope.initLimits = function() { + $scope.pluginsList(); + } + + $scope.pluginsList = function() { + $http.get('/api/2/pluginslist').success(function(d, status, headers, config) { + $scope.plugins = d; + + for (var i = 0;i< $scope.plugins.length; i++) { + var pluginName = $scope.plugins[i]; + $scope.limits(pluginName); + } + + }).error(function(d, status, headers, config) { + console.log('error' + d + status + headers + config); + }); + } + $scope.limits = function(pluginName) { + url = "/api/2/" + pluginName + "/limits" + console.log("url = " + url) + $http.get(url).success(function(d, status, headers, config) { + $scope.pluginLimits[pluginName] = d; + }).error(function(d, status, headers, config) { + console.log('error'); + }); + } + + var canceler = undefined; + + /** + * Refresh all the data of the view + */ + $scope.refreshData = function() { + canceler = $q.defer(); + $http.get('/api/2/all', {timeout: canceler.promise}).success(function(response, status, headers, config) { + //alert('success'); + + function timemillis(array) { + var sum = 0.0 + for (var i = 0; i < array.length; i++) { + sum += array[i] * 1000.0; + } + return sum; + } + function leftpad(input) { + if (input < 10) { + return "0" + input + } + return input + } + function timedelta(input) { + var sum = timemillis(input); + var d = new Date(sum); + var hour = leftpad(d.getUTCHours()) // TODO : multiple days ( * (d.getDay() * 24))) + var minutes = leftpad(d.getUTCMinutes()) + var seconds = leftpad(d.getUTCSeconds()) + var milliseconds = parseInt("" + d.getUTCMilliseconds() / 10) + var millisecondsStr = leftpad(milliseconds) + return hour +":" + minutes + ":" + seconds + "." + millisecondsStr + }; + + for (var i = 0; i < response['processlist'].length; i++) { + var process = response['processlist'][i] + process.memvirt = process.memory_info[1] + process.memres = process.memory_info[0] + process.timeformatted = timedelta(process.cpu_times) + process.timemillis = timemillis(process.cpu_times) + process.io_read = (process.io_counters[0] - process.io_counters[2]) / process.time_since_update + process.io_write = (process.io_counters[1] - process.io_counters[3]) / process.time_since_update + } + $scope.result = response; + canceler.resolve() + }).error(function(d, status, headers, config) { + console.log('error status:' + status + " - headers = " + headers); + canceler.resolve() + }); + } + + $scope.getClass = function(pluginName, limitNamePrefix, value, num) { + if ($scope.pluginLimits != undefined && $scope.pluginLimits[pluginName] != undefined) { + for (var i = 0; i < $scope.limitSuffix.length; i++) { + var limitName = limitNamePrefix + $scope.limitSuffix[i] + var limit = $scope.pluginLimits[pluginName][limitName] + + if (value > limit) { + //console.log("value = " + value + " - limit = " + limit) + var pos = limitName.lastIndexOf("_") + var className = limitName.substring(pos + 1) + //console.log("className = " + className) + if (num == 1) { + return className + '_log' + } + return className + } + } + } + if (num == 1) { + return "ok_log" + } + return "ok"; + } + + $scope.initLimits(); + + var stop; + $scope.configureRefresh = function () { + if (!angular.isDefined(stop)) { + //$scope.refreshData(); + stop = $interval(function() { + $scope.refreshData(); + }, $scope.refreshTime * 1000); // in milliseconds + } + } + + $scope.$watch( + function() { return $scope.refreshTime; }, + function(newValue, oldValue) { + $scope.stopRefresh(); + $scope.configureRefresh(); + } + ); + + $scope.stopRefresh = function() { + if (angular.isDefined(stop)) { + $interval.cancel(stop); + stop = undefined; + } + }; + + $scope.$on('$destroy', function() { + // Make sure that the interval is destroyed too + $scope.stopRefresh(); + }); + +} ]); \ No newline at end of file From 8de1a2fabcadaca7dac810e37f920079cb7b3177 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Tue, 13 Jan 2015 01:20:15 +0100 Subject: [PATCH 002/267] add angularjs --- glances/outputs/bottle/base.tpl | 59 ------------------- glances/outputs/bottle/plugin_table.tpl | 22 ------- glances/outputs/bottle/plugin_text.tpl | 11 ---- glances/outputs/static/js/modernizr.custom.js | 4 -- 4 files changed, 96 deletions(-) delete mode 100644 glances/outputs/bottle/base.tpl delete mode 100644 glances/outputs/bottle/plugin_table.tpl delete mode 100644 glances/outputs/bottle/plugin_text.tpl delete mode 100755 glances/outputs/static/js/modernizr.custom.js diff --git a/glances/outputs/bottle/base.tpl b/glances/outputs/bottle/base.tpl deleted file mode 100644 index c0fec737..00000000 --- a/glances/outputs/bottle/base.tpl +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - Glances - - - - - - -
-
-
-
- % include('plugin_text', plugin_name="system", stats=stats['system']) -
-
- % include('plugin_text', plugin_name="uptime", stats=stats['uptime']) -
-
-
-
-
- % include('plugin_table', plugin_name="cpu", stats=stats['cpu']) -
-
- % include('plugin_table', plugin_name="load", stats=stats['load']) -
-
- % include('plugin_table', plugin_name="mem", stats=stats['mem']) -
-
- % include('plugin_table', plugin_name="memswap", stats=stats['memswap']) -
-
-
-
- % include('plugin_table', plugin_name="network", stats=stats['network']) - % include('plugin_table', plugin_name="diskio", stats=stats['diskio']) - % include('plugin_table', plugin_name="fs", stats=stats['fs']) - % include('plugin_table', plugin_name="sensors", stats=stats['sensors']) -
-
- % include('plugin_table', plugin_name="alert", stats=stats['alert']) - % include('plugin_text', plugin_name="processcount", stats=stats['processcount']) -
-
- % include('plugin_table', plugin_name="monitor", stats=stats['monitor']) -
-
- % include('plugin_table', plugin_name="processlist", stats=stats['processlist']) -
-
-
- - \ No newline at end of file diff --git a/glances/outputs/bottle/plugin_table.tpl b/glances/outputs/bottle/plugin_table.tpl deleted file mode 100644 index f98e5497..00000000 --- a/glances/outputs/bottle/plugin_table.tpl +++ /dev/null @@ -1,22 +0,0 @@ -% if stats['msgdict'] != []: -
- - - - % for msg in stats['msgdict']: - % if msg['msg'].startswith('\n'): - - - % else: - % if stats['display']: - - % end - % end - % end - - -
- {{ msg['msg'] }} -
-
-% end \ No newline at end of file diff --git a/glances/outputs/bottle/plugin_text.tpl b/glances/outputs/bottle/plugin_text.tpl deleted file mode 100644 index 990e7478..00000000 --- a/glances/outputs/bottle/plugin_text.tpl +++ /dev/null @@ -1,11 +0,0 @@ -% if stats['msgdict'] != []: -
-% for msg in stats['msgdict']: - % if stats['display']: - - {{ msg['msg'] }} - - % end -% end -
-% end \ No newline at end of file diff --git a/glances/outputs/static/js/modernizr.custom.js b/glances/outputs/static/js/modernizr.custom.js deleted file mode 100755 index c6ead250..00000000 --- a/glances/outputs/static/js/modernizr.custom.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.8.2 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-touch-shiv-cssclasses-teststyles-prefixes-load - */ -;window.Modernizr=function(a,b,c){function w(a){j.cssText=a}function x(a,b){return w(m.join(a+";")+(b||""))}function y(a,b){return typeof a===b}function z(a,b){return!!~(""+a).indexOf(b)}function A(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:y(f,"function")?f.bind(d||b):f}return!1}var d="2.8.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n={},o={},p={},q=[],r=q.slice,s,t=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},u={}.hasOwnProperty,v;!y(u,"undefined")&&!y(u.call,"undefined")?v=function(a,b){return u.call(a,b)}:v=function(a,b){return b in a&&y(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=r.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(r.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(r.call(arguments)))};return e}),n.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:t(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c};for(var B in n)v(n,B)&&(s=B.toLowerCase(),e[s]=n[B](),q.push((e[s]?"":"no-")+s));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)v(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},w(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=m,e.testStyles=t,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+q.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f Date: Thu, 1 Jan 2015 19:40:08 +0100 Subject: [PATCH 003/267] Fix typos --- docs/glances-doc.rst | 8 ++++---- glances/README.txt | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 26c375d4..24e713a0 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -226,7 +226,7 @@ The following commands (key pressed) are supported while in Glances: ``F`` Switch between FS used and free space ``g`` - Generate hraphs for current history + Generate graphs for current history ``h`` Show/hide the help screen ``i`` @@ -240,7 +240,7 @@ The following commands (key pressed) are supported while in Glances: ``p`` Sort processes by name ``q`` or ``ESC`` - Quit the current Glances session + Quit the current Glances session ``r`` Reset history ``s`` @@ -273,7 +273,7 @@ In the Glances client browser (accessible through the --browser command line arg ``DOWN`` Down in the servers list ``q`` or ``ESC`` - Quit Glances + Quit Glances Configuration ============= @@ -582,7 +582,7 @@ In standalone mode, additionals informations are provided for the top process: * CPU affinity (number of cores used by the process) * Extended memory information (swap, shared, text, lib, data and dirty on Linux) * Open threads, files and network sessions (TCP and UDP) -* IO nice level +* IO nice level The extended stats feature could be enabled using the --enable-process-extended option (command line) or the ``e`` key (curses interface). diff --git a/glances/README.txt b/glances/README.txt index 3b64f75d..fe29ae0e 100644 --- a/glances/README.txt +++ b/glances/README.txt @@ -1,6 +1,6 @@ You are in the main Glances's source folder. This page is **ONLY** for developpers purposes. -If you are lookink for user manual, please follow this link: https://github.com/nicolargo/glances/blob/master/docs/glances-doc.rst +If you are looking for the user manual, please follow this link: https://github.com/nicolargo/glances/blob/master/docs/glances-doc.rst === @@ -35,4 +35,4 @@ outputs/ exports/ => Glances export interfaces glances_csv.py The CSV export module - ... \ No newline at end of file + ... From b13ce2545ddf1e3912c466f67752573b51ff5c61 Mon Sep 17 00:00:00 2001 From: desbma Date: Thu, 1 Jan 2015 19:40:43 +0100 Subject: [PATCH 004/267] RESTFULL -> RESTFUL --- docs/glances-doc.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 24e713a0..16b08b4c 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -736,12 +736,12 @@ Glances will generate stats as: APIs Documentations =================== -Glances includes a `XML-RPC server`_ and a `RESTFULL-JSON`_ API which and can be used by another client software. +Glances includes a `XML-RPC server`_ and a `RESTFUL-JSON`_ API which and can be used by another client software. APIs documentations are available at: - XML-RPC: https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to -- RESTFULL-JSON: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFULL-JSON-API +- RESTFUL-JSON: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFUL-JSON-API Support ======= @@ -759,5 +759,5 @@ Feel free to contribute ! .. _psutil: https://code.google.com/p/psutil/ .. _XML-RPC server: http://docs.python.org/2/library/simplexmlrpcserver.html -.. _RESTFULL-JSON: http://jsonapi.org/ +.. _RESTFUL-JSON: http://jsonapi.org/ .. _forum: https://groups.google.com/forum/?hl=en#!forum/glances-users From 878a46ca6dd52b7cb6f57db29ad7ee3e2771079c Mon Sep 17 00:00:00 2001 From: desbma Date: Thu, 1 Jan 2015 19:41:55 +0100 Subject: [PATCH 005/267] Add a sentence to explain how to set refresh rate for web UI --- docs/glances-doc.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 16b08b4c..7700fb9f 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -117,6 +117,8 @@ and on the client enter the following URL in your favorite web browser: where ``@server`` is the IP address or hostname of the server. +To change the refresh rate of the page, just add the period in seconds between refreshes at the end of the URL, ie. to refresh every 10s, use ``http://@server:61208/10``. + The Glances web interface follows responsive web design principles. Screenshot from Chrome on Android From 611a7657bb0015db1fdbe91f0287559b300935f4 Mon Sep 17 00:00:00 2001 From: desbma Date: Thu, 1 Jan 2015 19:50:21 +0100 Subject: [PATCH 006/267] Don't break wiki link --- docs/glances-doc.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 7700fb9f..a3a267ce 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -743,7 +743,7 @@ Glances includes a `XML-RPC server`_ and a `RESTFUL-JSON`_ API which and can be APIs documentations are available at: - XML-RPC: https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to -- RESTFUL-JSON: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFUL-JSON-API +- RESTFUL-JSON: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFULL-JSON-API Support ======= From 2fa566e89dfbb85f8b87d286561362160e79b682 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Thu, 1 Jan 2015 22:34:55 +0100 Subject: [PATCH 007/267] Add GlancesActions class. Actions are run every refresh time... It sucks... --- conf/glances-test.conf | 1 + glances/__init__.py | 2 +- glances/__main__.py | 2 +- glances/core/glances_actions.py | 40 ++++++++ glances/core/glances_autodiscover.py | 2 +- glances/core/glances_client.py | 2 +- glances/core/glances_client_browser.py | 2 +- glances/core/glances_config.py | 2 +- glances/core/glances_globals.py | 2 +- glances/core/glances_logging.py | 2 +- glances/core/glances_logs.py | 2 +- glances/core/glances_main.py | 2 +- glances/core/glances_monitor_list.py | 2 +- glances/core/glances_password.py | 2 +- glances/core/glances_processes.py | 2 +- glances/core/glances_server.py | 2 +- glances/core/glances_snmp.py | 2 +- glances/core/glances_standalone.py | 2 +- glances/core/glances_staticlist.py | 2 +- glances/core/glances_stats.py | 2 +- glances/core/glances_timer.py | 2 +- glances/core/glances_webserver.py | 2 +- glances/exports/glances_csv.py | 2 +- glances/exports/glances_export.py | 2 +- glances/exports/glances_history.py | 2 +- glances/exports/glances_influxdb.py | 2 +- glances/exports/glances_statsd.py | 125 +++++++++++++++++++++++ glances/outputs/glances_bottle.py | 2 +- glances/outputs/glances_colorconsole.py | 2 +- glances/outputs/glances_curses.py | 2 +- glances/plugins/glances_alert.py | 2 +- glances/plugins/glances_batpercent.py | 2 +- glances/plugins/glances_core.py | 2 +- glances/plugins/glances_cpu.py | 2 +- glances/plugins/glances_diskio.py | 2 +- glances/plugins/glances_fs.py | 2 +- glances/plugins/glances_hddtemp.py | 2 +- glances/plugins/glances_help.py | 2 +- glances/plugins/glances_load.py | 2 +- glances/plugins/glances_mem.py | 2 +- glances/plugins/glances_memswap.py | 2 +- glances/plugins/glances_monitor.py | 2 +- glances/plugins/glances_network.py | 2 +- glances/plugins/glances_now.py | 2 +- glances/plugins/glances_percpu.py | 2 +- glances/plugins/glances_plugin.py | 73 +++++++++---- glances/plugins/glances_processcount.py | 2 +- glances/plugins/glances_processlist.py | 2 +- glances/plugins/glances_psutilversion.py | 2 +- glances/plugins/glances_raid.py | 2 +- glances/plugins/glances_sensors.py | 2 +- glances/plugins/glances_system.py | 2 +- glances/plugins/glances_uptime.py | 2 +- 53 files changed, 268 insertions(+), 69 deletions(-) create mode 100644 glances/core/glances_actions.py create mode 100644 glances/exports/glances_statsd.py diff --git a/conf/glances-test.conf b/conf/glances-test.conf index 0e141fe2..d4f9dbdc 100644 --- a/conf/glances-test.conf +++ b/conf/glances-test.conf @@ -3,6 +3,7 @@ user_careful=50 user_warning=70 user_critical=90 +user_critical_action=touch /tmp/glances.alert iowait_careful=50 iowait_warning=70 iowait_critical=90 diff --git a/glances/__init__.py b/glances/__init__.py index c5c0200f..7b14b3f3 100644 --- a/glances/__init__.py +++ b/glances/__init__.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/__main__.py b/glances/__main__.py index 9aeb86f2..871dea89 100644 --- a/glances/__main__.py +++ b/glances/__main__.py @@ -3,7 +3,7 @@ # # Glances - An eye on your system # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_actions.py b/glances/core/glances_actions.py new file mode 100644 index 00000000..9ee947b2 --- /dev/null +++ b/glances/core/glances_actions.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""Manage on alert actions.""" + +# Import system lib +from subprocess import Popen + +# Import Glances lib +from glances.core.glances_logging import logger + + +class GlancesActions(object): + + """This class manage action if an alert is reached""" + + def run(self, commands): + """Run the commands (in background) + - commands: a list of command line""" + + for cmd in commands: + logger.info("Action triggered: {0}".format(cmd)) + splitted_cmd = cmd.split() + Popen(splitted_cmd) diff --git a/glances/core/glances_autodiscover.py b/glances/core/glances_autodiscover.py index 62d627b1..f9659f08 100644 --- a/glances/core/glances_autodiscover.py +++ b/glances/core/glances_autodiscover.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_client.py b/glances/core/glances_client.py index a903cf4d..755b88c0 100644 --- a/glances/core/glances_client.py +++ b/glances/core/glances_client.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_client_browser.py b/glances/core/glances_client_browser.py index e54c0849..a198399b 100644 --- a/glances/core/glances_client_browser.py +++ b/glances/core/glances_client_browser.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_config.py b/glances/core/glances_config.py index 2b690836..935f08e3 100644 --- a/glances/core/glances_config.py +++ b/glances/core/glances_config.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_globals.py b/glances/core/glances_globals.py index e2f8878e..3cf9fa51 100644 --- a/glances/core/glances_globals.py +++ b/glances/core/glances_globals.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_logging.py b/glances/core/glances_logging.py index f1e0e5d4..74518f3e 100644 --- a/glances/core/glances_logging.py +++ b/glances/core/glances_logging.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_logs.py b/glances/core/glances_logs.py index 577e4601..7d6a10b6 100644 --- a/glances/core/glances_logs.py +++ b/glances/core/glances_logs.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index 86dac256..7a5b016f 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_monitor_list.py b/glances/core/glances_monitor_list.py index 5bc20e12..98b0604f 100644 --- a/glances/core/glances_monitor_list.py +++ b/glances/core/glances_monitor_list.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_password.py b/glances/core/glances_password.py index 87e6d137..3ec9179c 100644 --- a/glances/core/glances_password.py +++ b/glances/core/glances_password.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_processes.py b/glances/core/glances_processes.py index 62637914..6584a3d0 100644 --- a/glances/core/glances_processes.py +++ b/glances/core/glances_processes.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_server.py b/glances/core/glances_server.py index f4ecd07c..91d627bb 100644 --- a/glances/core/glances_server.py +++ b/glances/core/glances_server.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_snmp.py b/glances/core/glances_snmp.py index 67cfd3ef..95e1e602 100644 --- a/glances/core/glances_snmp.py +++ b/glances/core/glances_snmp.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_standalone.py b/glances/core/glances_standalone.py index 12a3daf2..50170a97 100644 --- a/glances/core/glances_standalone.py +++ b/glances/core/glances_standalone.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_staticlist.py b/glances/core/glances_staticlist.py index 56db4d22..1ff942a7 100644 --- a/glances/core/glances_staticlist.py +++ b/glances/core/glances_staticlist.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_stats.py b/glances/core/glances_stats.py index 64da8919..b9e98288 100644 --- a/glances/core/glances_stats.py +++ b/glances/core/glances_stats.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_timer.py b/glances/core/glances_timer.py index 8b21d8d4..71fd4667 100644 --- a/glances/core/glances_timer.py +++ b/glances/core/glances_timer.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/core/glances_webserver.py b/glances/core/glances_webserver.py index f83793a6..39c477cc 100644 --- a/glances/core/glances_webserver.py +++ b/glances/core/glances_webserver.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/exports/glances_csv.py b/glances/exports/glances_csv.py index d3cb452d..a71e492b 100644 --- a/glances/exports/glances_csv.py +++ b/glances/exports/glances_csv.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/exports/glances_export.py b/glances/exports/glances_export.py index 5e52f237..a4d219f1 100644 --- a/glances/exports/glances_export.py +++ b/glances/exports/glances_export.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/exports/glances_history.py b/glances/exports/glances_history.py index 36217897..674bdb5c 100644 --- a/glances/exports/glances_history.py +++ b/glances/exports/glances_history.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/exports/glances_influxdb.py b/glances/exports/glances_influxdb.py index 057fa456..801fb962 100644 --- a/glances/exports/glances_influxdb.py +++ b/glances/exports/glances_influxdb.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/exports/glances_statsd.py b/glances/exports/glances_statsd.py new file mode 100644 index 00000000..63a9e1fc --- /dev/null +++ b/glances/exports/glances_statsd.py @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""Statsd interface class.""" + +# Import sys libs +from statsd import StatsClient +from numbers import Number +import sys + +# Import Glances lib +from glances.core.glances_logging import logger +from ConfigParser import NoSectionError, NoOptionError +from glances.exports.glances_export import GlancesExport + + +class Export(GlancesExport): + + """This class manages the Statsd export module.""" + + def __init__(self, config=None, args=None): + """Init the Statsd export IF.""" + GlancesExport.__init__(self, config=config, args=args) + + # Load the InfluxDB configuration file + self.host = None + self.port = None + self.prefix = None + self.export_enable = self.load_conf() + if not self.export_enable: + sys.exit(2) + + # Default prefix for stats is 'glances' + if self.prefix is None: + self.prefix = 'glances' + + # Init the Statsd client + self.client = StatsClient(self.host, + int(self.port), + prefix=self.prefix) + + def load_conf(self, section="statsd"): + """Load the Statsd configuration in the Glances configuration file""" + if self.config is None: + return False + try: + self.host = self.config.get_raw_option(section, "host") + self.port = self.config.get_raw_option(section, "port") + except NoSectionError: + logger.critical("No Statsd configuration found") + return False + except NoOptionError as e: + logger.critical("Error in the Statsd configuration (%s)" % e) + return False + else: + logger.debug("Load Statsd from the Glances configuration file") + # Prefix is optional + try: + self.prefix = self.config.get_raw_option(section, "prefix") + except NoOptionError as e: + pass + return True + + def init(self, prefix='glances'): + """Init the connection to the Statsd server""" + if not self.export_enable: + return None + return StatsClient(self.host, + self.port, + prefix=prefix) + + def update(self, stats): + """Update stats to the InfluxDB server.""" + if not self.export_enable: + return False + + # Get the stats + all_stats = stats.getAll() + plugins = stats.getAllPlugins() + + # Loop over available plugin + i = 0 + for plugin in plugins: + if plugin in self.plugins_to_export(): + if type(all_stats[i]) is list: + for item in all_stats[i]: + export_names = map( + lambda x: item[item['key']] + '.' + x, item.keys()) + export_values = item.values() + self.__export(plugin, export_names, export_values) + elif type(all_stats[i]) is dict: + export_names = all_stats[i].keys() + export_values = all_stats[i].values() + self.__export(plugin, export_names, export_values) + i += 1 + + return True + + def __export(self, name, columns, points): + """Export the stats to the Statsd server""" + for i in range(0, len(columns)): + if not isinstance(points[i], Number): + continue + stat_name = '{0}.{1}'.format(name, columns[i]) + stat_value = points[i] + try: + self.client.gauge(stat_name, stat_value) + except Exception as e: + logger.critical("Can not export stats to Statsd (%s)" % e) diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index cf80bf17..ae603208 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/outputs/glances_colorconsole.py b/glances/outputs/glances_colorconsole.py index 8407114c..49c55037 100644 --- a/glances/outputs/glances_colorconsole.py +++ b/glances/outputs/glances_colorconsole.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index abf26a53..5cedb395 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_alert.py b/glances/plugins/glances_alert.py index 49714cde..78c6c45a 100644 --- a/glances/plugins/glances_alert.py +++ b/glances/plugins/glances_alert.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_batpercent.py b/glances/plugins/glances_batpercent.py index f5d67fda..ff1deecc 100644 --- a/glances/plugins/glances_batpercent.py +++ b/glances/plugins/glances_batpercent.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_core.py b/glances/plugins/glances_core.py index ffd4ef2f..20127c8b 100644 --- a/glances/plugins/glances_core.py +++ b/glances/plugins/glances_core.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_cpu.py b/glances/plugins/glances_cpu.py index 436c18e7..685f5454 100644 --- a/glances/plugins/glances_cpu.py +++ b/glances/plugins/glances_cpu.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_diskio.py b/glances/plugins/glances_diskio.py index 373c878c..0cf68bec 100644 --- a/glances/plugins/glances_diskio.py +++ b/glances/plugins/glances_diskio.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_fs.py b/glances/plugins/glances_fs.py index 4f74e45b..20dc85c1 100644 --- a/glances/plugins/glances_fs.py +++ b/glances/plugins/glances_fs.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_hddtemp.py b/glances/plugins/glances_hddtemp.py index 1492a251..82f29f1b 100644 --- a/glances/plugins/glances_hddtemp.py +++ b/glances/plugins/glances_hddtemp.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_help.py b/glances/plugins/glances_help.py index 2644e171..02504b1d 100644 --- a/glances/plugins/glances_help.py +++ b/glances/plugins/glances_help.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_load.py b/glances/plugins/glances_load.py index c689173d..aa2f0dde 100644 --- a/glances/plugins/glances_load.py +++ b/glances/plugins/glances_load.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_mem.py b/glances/plugins/glances_mem.py index 2c2eca43..52bee12a 100644 --- a/glances/plugins/glances_mem.py +++ b/glances/plugins/glances_mem.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_memswap.py b/glances/plugins/glances_memswap.py index 2fcaa8c9..20751add 100644 --- a/glances/plugins/glances_memswap.py +++ b/glances/plugins/glances_memswap.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_monitor.py b/glances/plugins/glances_monitor.py index 16d548ae..66765ea1 100644 --- a/glances/plugins/glances_monitor.py +++ b/glances/plugins/glances_monitor.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_network.py b/glances/plugins/glances_network.py index 0b6ef070..9ef8bc89 100644 --- a/glances/plugins/glances_network.py +++ b/glances/plugins/glances_network.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_now.py b/glances/plugins/glances_now.py index 199085ec..b40fa44f 100644 --- a/glances/plugins/glances_now.py +++ b/glances/plugins/glances_now.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_percpu.py b/glances/plugins/glances_percpu.py index a0a06243..93abeab6 100644 --- a/glances/plugins/glances_percpu.py +++ b/glances/plugins/glances_percpu.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index da6d6889..9954cf20 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by @@ -32,6 +32,7 @@ from operator import itemgetter from glances.core.glances_globals import is_py3 from glances.core.glances_logging import logger from glances.core.glances_logs import glances_logs +from glances.core.glances_actions import GlancesActions class GlancesPlugin(object): @@ -64,6 +65,9 @@ class GlancesPlugin(object): # Init the limits dictionnary self.limits = dict() + # Init the actions + self.actions = GlancesActions() + def __repr__(self): """Return the raw stats.""" return self.stats @@ -263,6 +267,8 @@ class GlancesPlugin(object): except ValueError: self.limits[ self.plugin_name + '_' + s] = config.get_raw_option(self.plugin_name, s).split(",") + logger.debug("Load limit: {0} = {1}".format(self.plugin_name + '_' + s, + self.limits[self.plugin_name + '_' + s])) def set_limits(self, input_limits): """Set the limits to input_limits.""" @@ -299,19 +305,21 @@ class GlancesPlugin(object): # Manage limits ret = 'OK' try: - if value > self.__get_limit_critical(header=header): + if value > self.__get_limit('critical', header=header): ret = 'CRITICAL' - elif value > self.__get_limit_warning(header=header): + elif value > self.__get_limit('warning', header=header): ret = 'WARNING' - elif value > self.__get_limit_careful(header=header): + elif value > self.__get_limit('careful', header=header): ret = 'CAREFUL' elif current < min: ret = 'CAREFUL' except KeyError: return 'DEFAULT' - # Manage log (if needed) + # Init the return post string log_str = "" + + # Manage log if log: # Add _LOG to the return string # So stats will be highlited with a specific color @@ -324,6 +332,12 @@ class GlancesPlugin(object): # Add the log to the list glances_logs.add(ret, stat_name.upper(), value, []) + # Manage action + action = self.__get_limit_action(ret.lower(), header=header) + if action is not None: + # An action is available for the current alert, run it + self.actions.run(action) + # Default is ok return ret + log_str @@ -331,23 +345,42 @@ class GlancesPlugin(object): """Get the alert log.""" return self.get_alert(current, min, max, header, log=True) - def __get_limit_critical(self, header=""): - if header == "": - return self.limits[self.plugin_name + '_' + 'critical'] - else: - return self.limits[self.plugin_name + '_' + header + '_' + 'critical'] + def __get_limit(self, criticity, header=""): + """Return the limit value for the alert""" + prefix = self.plugin_name + '_' + if header != "": + prefix += header + '_' + action = self.limits[prefix + criticity] + return action - def __get_limit_warning(self, header=""): - if header == "": - return self.limits[self.plugin_name + '_' + 'warning'] - else: - return self.limits[self.plugin_name + '_' + header + '_' + 'warning'] + def __get_limit_action(self, criticity, header=""): + """Return the action for the alert""" + prefix = self.plugin_name + '_' + if header != "": + prefix += header + '_' + try: + action = self.limits[prefix + criticity + '_action'] + except KeyError: + action = None + return action - def __get_limit_careful(self, header=""): - if header == "": - return self.limits[self.plugin_name + '_' + 'careful'] - else: - return self.limits[self.plugin_name + '_' + header + '_' + 'careful'] + # def __get_limit_critical(self, header=""): + # if header == "": + # return self.limits[self.plugin_name + '_' + 'critical'] + # else: + # return self.limits[self.plugin_name + '_' + header + '_' + 'critical'] + + # def __get_limit_warning(self, header=""): + # if header == "": + # return self.limits[self.plugin_name + '_' + 'warning'] + # else: + # return self.limits[self.plugin_name + '_' + header + '_' + 'warning'] + + # def __get_limit_careful(self, header=""): + # if header == "": + # return self.limits[self.plugin_name + '_' + 'careful'] + # else: + # return self.limits[self.plugin_name + '_' + header + '_' + 'careful'] def get_conf_value(self, value, header="", plugin_name=None): """Return the configuration (header_)value for the current plugin (or the one given by the plugin_name var)""" diff --git a/glances/plugins/glances_processcount.py b/glances/plugins/glances_processcount.py index cfdc1ebc..3248ef1d 100644 --- a/glances/plugins/glances_processcount.py +++ b/glances/plugins/glances_processcount.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_processlist.py b/glances/plugins/glances_processlist.py index 061ccc1b..c0502c7b 100644 --- a/glances/plugins/glances_processlist.py +++ b/glances/plugins/glances_processlist.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_psutilversion.py b/glances/plugins/glances_psutilversion.py index 9c54b8df..0c2ffa14 100644 --- a/glances/plugins/glances_psutilversion.py +++ b/glances/plugins/glances_psutilversion.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_raid.py b/glances/plugins/glances_raid.py index 82645cf8..20743c36 100644 --- a/glances/plugins/glances_raid.py +++ b/glances/plugins/glances_raid.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_sensors.py b/glances/plugins/glances_sensors.py index 5fe7fddc..089933a9 100644 --- a/glances/plugins/glances_sensors.py +++ b/glances/plugins/glances_sensors.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_system.py b/glances/plugins/glances_system.py index 3a5f10da..a227847c 100644 --- a/glances/plugins/glances_system.py +++ b/glances/plugins/glances_system.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by diff --git a/glances/plugins/glances_uptime.py b/glances/plugins/glances_uptime.py index 63f6341e..12e1c22b 100644 --- a/glances/plugins/glances_uptime.py +++ b/glances/plugins/glances_uptime.py @@ -2,7 +2,7 @@ # # This file is part of Glances. # -# Copyright (C) 2014 Nicolargo +# Copyright (C) 2015 Nicolargo # # Glances is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by From 4ef5bb2faad40a8a94912d389f5970a6f08a3932 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Thu, 1 Jan 2015 22:46:25 +0100 Subject: [PATCH 008/267] Display 64bit every time on 64bit environment and fix the display of io read/write (issue #469 Thk to Sylvain Mouquet) --- glances/plugins/glances_processlist.py | 8 ++++---- glances/plugins/glances_system.py | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/glances/plugins/glances_processlist.py b/glances/plugins/glances_processlist.py index c0502c7b..2e1cc6c0 100644 --- a/glances/plugins/glances_processlist.py +++ b/glances/plugins/glances_processlist.py @@ -235,18 +235,18 @@ class Plugin(GlancesPlugin): # IO read/write if 'io_counters' in p: # IO read - io_rs = (p['io_counters'][0] - p['io_counters'][2]) / p['time_since_update'] + io_rs = int((p['io_counters'][0] - p['io_counters'][2]) / p['time_since_update']) if io_rs == 0: msg = '{0:>6}'.format("0") else: - msg = '{0:>6}'.format(self.auto_unit(io_rs, low_precision=False)) + msg = '{0:>6}'.format(self.auto_unit(io_rs, low_precision=True)) ret.append(self.curse_add_line(msg, optional=True, additional=True)) # IO write - io_ws = (p['io_counters'][1] - p['io_counters'][3]) / p['time_since_update'] + io_ws = int((p['io_counters'][1] - p['io_counters'][3]) / p['time_since_update']) if io_ws == 0: msg = '{0:>6}'.format("0") else: - msg = '{0:>6}'.format(self.auto_unit(io_ws, low_precision=False)) + msg = '{0:>6}'.format(self.auto_unit(io_ws, low_precision=True)) ret.append(self.curse_add_line(msg, optional=True, additional=True)) else: msg = '{0:>6}'.format("?") diff --git a/glances/plugins/glances_system.py b/glances/plugins/glances_system.py index a227847c..e5e1acfa 100644 --- a/glances/plugins/glances_system.py +++ b/glances/plugins/glances_system.py @@ -118,6 +118,10 @@ class Plugin(GlancesPlugin): elif self.stats['os_name'] == "Windows": os_version = platform.win32_ver() self.stats['os_version'] = ' '.join(os_version[::2]) + # if the python version is 32 bit perhaps the windows operating system is 64bit + if self.stats['platform'] == '32bit': + if 'PROCESSOR_ARCHITEW6432' in os.environ: + self.stats['platform'] = '64bit' else: self.stats['os_version'] = "" # Add human readable name From 64ffa5ed16610441790bc983a2e2f5d42ce49a8c Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Thu, 1 Jan 2015 23:40:40 +0100 Subject: [PATCH 009/267] Trigger OK --- glances/core/glances_actions.py | 41 ++++++++++++++++++++++++++++--- glances/plugins/glances_plugin.py | 24 +++++++++--------- 2 files changed, 50 insertions(+), 15 deletions(-) diff --git a/glances/core/glances_actions.py b/glances/core/glances_actions.py index 9ee947b2..0624fd13 100644 --- a/glances/core/glances_actions.py +++ b/glances/core/glances_actions.py @@ -30,11 +30,44 @@ class GlancesActions(object): """This class manage action if an alert is reached""" - def run(self, commands): - """Run the commands (in background) - - commands: a list of command line""" + def __init__(self): + """Init GlancesActions class""" + # Dict with the criticity status + # - key: stat_name + # - value: criticity + # Goal: avoid to execute the same command twice + self.status = {} + + def get(self, stat_name): + """Get the stat_name criticity""" + try: + return self.status[stat_name] + except KeyError: + return None + + def set(self, stat_name, criticity): + """Set the stat_name to criticity""" + self.status[stat_name] = criticity + + def run(self, stat_name, criticity, commands): + """Run the commands (in background) + - stats_name: plugin_name (+ header) + - criticity: criticity of the trigger + - commands: a list of command line + + Return True if the commands have been ran""" + + if self.get(stat_name) == criticity: + # Action already executed => Exit + return False + + # Ran all actions in background for cmd in commands: - logger.info("Action triggered: {0}".format(cmd)) + logger.info("Action triggered for {0} ({1}): {2}".format(stat_name, criticity, cmd)) splitted_cmd = cmd.split() Popen(splitted_cmd) + + self.set(stat_name, criticity) + + return True diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index 9954cf20..ecc2d4ca 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -316,27 +316,29 @@ class GlancesPlugin(object): except KeyError: return 'DEFAULT' - # Init the return post string - log_str = "" + # Get the stat_name = plugin_name (+ header) + if header == "": + stat_name = self.plugin_name + else: + stat_name = self.plugin_name + '_' + header # Manage log + log_str = "" if log: # Add _LOG to the return string # So stats will be highlited with a specific color log_str = "_LOG" - # Get the stat_name = plugin_name (+ header) - if header == "": - stat_name = self.plugin_name - else: - stat_name = self.plugin_name + '_' + header # Add the log to the list glances_logs.add(ret, stat_name.upper(), value, []) # Manage action - action = self.__get_limit_action(ret.lower(), header=header) - if action is not None: - # An action is available for the current alert, run it - self.actions.run(action) + # Here is a command line for the current trigger ? + command = self.__get_limit_action(ret.lower(), header=header) + if command is not None: + # Acommand line is available for the current alert, run it + self.actions.run(stat_name, ret.lower(), command) + else: + self.actions.set(stat_name, ret.lower()) # Default is ok return ret + log_str From 014543fab63c757d844b669fe6ed6c9a939f09f3 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Fri, 2 Jan 2015 17:45:18 +0100 Subject: [PATCH 010/267] Catch exp on alert --- glances/core/glances_actions.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/glances/core/glances_actions.py b/glances/core/glances_actions.py index 0624fd13..4c7011e0 100644 --- a/glances/core/glances_actions.py +++ b/glances/core/glances_actions.py @@ -66,7 +66,10 @@ class GlancesActions(object): for cmd in commands: logger.info("Action triggered for {0} ({1}): {2}".format(stat_name, criticity, cmd)) splitted_cmd = cmd.split() - Popen(splitted_cmd) + try: + Popen(splitted_cmd) + except OSError as e: + logger.error("Can't execute the action ({0})".format(e)) self.set(stat_name, criticity) From 07194861271c8f61030ddc24389503d4ec1de67b Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Fri, 2 Jan 2015 22:59:08 +0100 Subject: [PATCH 011/267] Add {{mustache}} feature to the action script --- NEWS | 5 ++- conf/glances-test.conf | 5 ++- glances/core/glances_actions.py | 15 ++++--- glances/outputs/glances_curses.py | 5 ++- glances/plugins/glances_fs.py | 4 +- glances/plugins/glances_plugin.py | 64 ++++++++++++++++++------------ glances/plugins/glances_sensors.py | 4 ++ 7 files changed, 65 insertions(+), 37 deletions(-) diff --git a/NEWS b/NEWS index 24298846..7ecc1530 100644 --- a/NEWS +++ b/NEWS @@ -2,12 +2,13 @@ Glances Version 2.x ============================================================================== -Version 2.X +Version 2.3 =========== + * Add actions on alerts (issue #132). It is now possible to run action (command line) by triggers. Action could containq {Mustache} {{tag}} (Mustache) with stat value. * Add InfluxDB export module (--export-influxdb) (issue #455) * Add Statsd export module (--export-statsd) (issue #465) - * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client (issue #463) + * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463) * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart * Add the RAID plugins (issue #447) diff --git a/conf/glances-test.conf b/conf/glances-test.conf index d4f9dbdc..4a804eea 100644 --- a/conf/glances-test.conf +++ b/conf/glances-test.conf @@ -3,7 +3,7 @@ user_careful=50 user_warning=70 user_critical=90 -user_critical_action=touch /tmp/glances.alert +user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert iowait_careful=50 iowait_warning=70 iowait_critical=90 @@ -72,13 +72,14 @@ hide=sda2,sda5 # Default limits for free filesytem space in % # Default values if not defined: 50/70/90 careful=50 +careful_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert warning=70 critical=90 [sensors] # Sensors core limits # Default values if not defined: 60/70/80 -temperature_core_careful=60 +temperature_core_careful=50 temperature_core_warning=70 temperature_core_critical=80 # Temperatures in °C for hddtemp diff --git a/glances/core/glances_actions.py b/glances/core/glances_actions.py index 4c7011e0..6069e0e8 100644 --- a/glances/core/glances_actions.py +++ b/glances/core/glances_actions.py @@ -21,6 +21,7 @@ # Import system lib from subprocess import Popen +import pystache # Import Glances lib from glances.core.glances_logging import logger @@ -50,11 +51,12 @@ class GlancesActions(object): """Set the stat_name to criticity""" self.status[stat_name] = criticity - def run(self, stat_name, criticity, commands): + def run(self, stat_name, criticity, commands, mustache_dict=None): """Run the commands (in background) - stats_name: plugin_name (+ header) - criticity: criticity of the trigger - - commands: a list of command line + - commands: a list of command line with optional {{mustache}} + - mustache_dict: Plugin stats (can be use within {{mustache}}) Return True if the commands have been ran""" @@ -64,10 +66,13 @@ class GlancesActions(object): # Ran all actions in background for cmd in commands: - logger.info("Action triggered for {0} ({1}): {2}".format(stat_name, criticity, cmd)) - splitted_cmd = cmd.split() + # Replace {{arg}} by the dict one (Thk to {Mustache}) + cmd_full = pystache.render(cmd, mustache_dict) + # Execute the action + logger.info("Action triggered for {0} ({1}): {2}".format(stat_name, criticity, cmd_full)) + logger.debug("Stats value for the trigger: {0}".format(mustache_dict)) try: - Popen(splitted_cmd) + Popen(cmd_full, shell=True) except OSError as e: logger.error("Can't execute the action ({0})".format(e)) diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 5cedb395..378dc64b 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -697,6 +697,7 @@ class _GlancesCurses(object): # Display x = display_x + x_max = x y = display_y for m in plugin_stats['msgdict']: # New line @@ -740,9 +741,11 @@ class _GlancesCurses(object): # good offset = len(m['msg']) x = x + offset + if x > x_max: + x_max = x # Compute the next Glances column/line position - self.next_column = max(self.next_column, x + self.space_between_column) + self.next_column = max(self.next_column, x_max + self.space_between_column) self.next_line = max(self.next_line, y + self.space_between_line) def erase(self): diff --git a/glances/plugins/glances_fs.py b/glances/plugins/glances_fs.py index 20dc85c1..621ea5bc 100644 --- a/glances/plugins/glances_fs.py +++ b/glances/plugins/glances_fs.py @@ -209,7 +209,9 @@ class Plugin(GlancesPlugin): msg = '{0:>7}'.format(self.auto_unit(i['free'])) else: msg = '{0:>7}'.format(self.auto_unit(i['used'])) - ret.append(self.curse_add_line(msg, self.get_alert(i['used'], max=i['size']))) + ret.append(self.curse_add_line(msg, self.get_alert(i['used'], + max=i['size'], + header=i['mnt_point']))) msg = '{0:>7}'.format(self.auto_unit(i['size'])) ret.append(self.curse_add_line(msg)) diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index ecc2d4ca..15ba53e1 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -333,12 +333,25 @@ class GlancesPlugin(object): # Manage action # Here is a command line for the current trigger ? - command = self.__get_limit_action(ret.lower(), header=header) - if command is not None: - # Acommand line is available for the current alert, run it - self.actions.run(stat_name, ret.lower(), command) - else: + try: + command = self.__get_limit_action(ret.lower(), header=header) + except KeyError: + # Reset the trigger self.actions.set(stat_name, ret.lower()) + else: + # A command line is available for the current alert, run it + # Build the {{mustache}} dictionnary + if type(self.stats) is list: + # If the stats are stored in a list of dict (fs plugin for exemple) + # Return the dict for the current header + try: + mustache_dict = (item for item in self.stats if item[self.get_key()] == header).next() + except StopIteration: + mustache_dict = {} + else: + # Use the stats dict + mustache_dict = self.stats + self.actions.run(stat_name, ret.lower(), command, mustache_dict=mustache_dict) # Default is ok return ret + log_str @@ -352,38 +365,37 @@ class GlancesPlugin(object): prefix = self.plugin_name + '_' if header != "": prefix += header + '_' - action = self.limits[prefix + criticity] - return action + + # Get the limit for stat + header + # Exemple: network_wlan0_rx_careful + try: + limit = self.limits[prefix + criticity] + except KeyError: + # Try fallback to plugin default limit + # Exemple: network_careful + limit = self.limits[self.plugin_name + '_' + criticity] + + # Return the limit + return limit def __get_limit_action(self, criticity, header=""): """Return the action for the alert""" prefix = self.plugin_name + '_' if header != "": prefix += header + '_' + + # Get the limit for stat + header + # Exemple: network_wlan0_rx_careful_action try: action = self.limits[prefix + criticity + '_action'] except KeyError: - action = None + # Try fallback to plugin default limit + # Exemple: network_careful_action + action = self.limits[self.plugin_name + '_' + criticity + '_action'] + + # Return the action list return action - # def __get_limit_critical(self, header=""): - # if header == "": - # return self.limits[self.plugin_name + '_' + 'critical'] - # else: - # return self.limits[self.plugin_name + '_' + header + '_' + 'critical'] - - # def __get_limit_warning(self, header=""): - # if header == "": - # return self.limits[self.plugin_name + '_' + 'warning'] - # else: - # return self.limits[self.plugin_name + '_' + header + '_' + 'warning'] - - # def __get_limit_careful(self, header=""): - # if header == "": - # return self.limits[self.plugin_name + '_' + 'careful'] - # else: - # return self.limits[self.plugin_name + '_' + header + '_' + 'careful'] - def get_conf_value(self, value, header="", plugin_name=None): """Return the configuration (header_)value for the current plugin (or the one given by the plugin_name var)""" if plugin_name is None: diff --git a/glances/plugins/glances_sensors.py b/glances/plugins/glances_sensors.py index 089933a9..00fc3552 100644 --- a/glances/plugins/glances_sensors.py +++ b/glances/plugins/glances_sensors.py @@ -64,6 +64,10 @@ class Plugin(GlancesPlugin): # Init the stats self.reset() + def get_key(self): + """Return the key of the list""" + return 'label' + def reset(self): """Reset/init the stats.""" self.stats = [] From 2919eac36334302f7ae967f102e1b11d8f4f1323 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Fri, 2 Jan 2015 23:23:47 +0100 Subject: [PATCH 012/267] Update documentation --- conf/glances.conf | 2 ++ docs/glances-doc.rst | 24 ++++++++++++++++++++++-- setup.py | 3 ++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/conf/glances.conf b/conf/glances.conf index c8378e98..f3df2a25 100644 --- a/conf/glances.conf +++ b/conf/glances.conf @@ -70,6 +70,8 @@ critical=90 [fs] # Default limits for free filesytem space in % # Default values if not defined: 50/70/90 +# It is also possible to define per mount point value +# Example: /_careful=40 careful=50 warning=70 critical=90 diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index a3a267ce..9ae0929f 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -4,9 +4,9 @@ Glances This manual describes *Glances* version 2.2. -Copyright © 2012-2014 Nicolas Hennion +Copyright © 2011-2015 Nicolas Hennion -December 2014 +Junuary 2015 .. contents:: Table of Contents @@ -671,6 +671,26 @@ Each alert message displays the following information: 4. {min,avg,max} values or number of running processes for monitored processes list alerts +Actions +------- + +Glances can trigger actions on events. + +By action, we mean all shell command line. For example, if you want to execute the foo.py script if the last 5 minutes load are critical then add the action line to the Glances configuration file: + + [load] + critical=5.0 + critical_action=python /path/to/foo.py + +All the stats are usable in the command line by the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a warning space trigger is reached: + +[fs] +warning=70 +warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert + +Note: You can use all the stats for the current plugin (see https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for the stats list) + + Gateway to others services ========================== diff --git a/setup.py b/setup.py index 5d78b0f0..cf1d40a8 100755 --- a/setup.py +++ b/setup.py @@ -67,7 +67,8 @@ setup( 'CHART': ['matplotlib'], 'BROWSER': ['zeroconf>=0.16', 'netifaces'], 'RAID': ['pymdstat'], - 'EXPORT': ['influxdb', 'statsd'] + 'EXPORT': ['influxdb', 'statsd'], + 'ACTION': ['pystache'] }, packages=['glances'], include_package_data=True, From 3048c8763854e6703f63d068d3332227288db811 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Fri, 2 Jan 2015 23:31:05 +0100 Subject: [PATCH 013/267] Update install documentation --- README.rst | 2 ++ docs/glances-doc.rst | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index 54d3999b..18986715 100644 --- a/README.rst +++ b/README.rst @@ -41,6 +41,8 @@ Optional dependencies: - ``pysnmp`` (for SNMP support) - ``zeroconf`` and ``netifaces`` (for the auto discoverer mode) - ``influxdb`` (for the InfluxDB export module) +- ``statsd`` (for the StatsD export module) +- ``pystache`` (for the action script feature) Installation ============ diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 9ae0929f..7ea6c134 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -684,11 +684,11 @@ By action, we mean all shell command line. For example, if you want to execute t All the stats are usable in the command line by the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a warning space trigger is reached: -[fs] -warning=70 -warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert + [fs] + warning=70 + warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert -Note: You can use all the stats for the current plugin (see https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for the stats list) +*Note*: You can use all the stats for the current plugin (see https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for the stats list) Gateway to others services From 27501dc4639f66f00f86c1f6fc49ba412667bdde Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 3 Jan 2015 14:45:14 +0100 Subject: [PATCH 014/267] Refactor get limit and alert method --- glances/plugins/glances_plugin.py | 38 ++++++++++++------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index 15ba53e1..f7de80eb 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -302,26 +302,26 @@ class GlancesPlugin(object): except TypeError: return 'DEFAULT' + # Build the stat_name = plugin_name + header + if header == "": + stat_name = self.plugin_name + else: + stat_name = self.plugin_name + '_' + header + # Manage limits ret = 'OK' try: - if value > self.__get_limit('critical', header=header): + if value > self.__get_limit('critical', stat_name=stat_name): ret = 'CRITICAL' - elif value > self.__get_limit('warning', header=header): + elif value > self.__get_limit('warning', stat_name=stat_name): ret = 'WARNING' - elif value > self.__get_limit('careful', header=header): + elif value > self.__get_limit('careful', stat_name=stat_name): ret = 'CAREFUL' elif current < min: ret = 'CAREFUL' except KeyError: return 'DEFAULT' - # Get the stat_name = plugin_name (+ header) - if header == "": - stat_name = self.plugin_name - else: - stat_name = self.plugin_name + '_' + header - # Manage log log_str = "" if log: @@ -334,7 +334,7 @@ class GlancesPlugin(object): # Manage action # Here is a command line for the current trigger ? try: - command = self.__get_limit_action(ret.lower(), header=header) + command = self.__get_limit_action(ret.lower(), stat_name=stat_name) except KeyError: # Reset the trigger self.actions.set(stat_name, ret.lower()) @@ -360,16 +360,12 @@ class GlancesPlugin(object): """Get the alert log.""" return self.get_alert(current, min, max, header, log=True) - def __get_limit(self, criticity, header=""): + def __get_limit(self, criticity, stat_name=""): """Return the limit value for the alert""" - prefix = self.plugin_name + '_' - if header != "": - prefix += header + '_' - # Get the limit for stat + header # Exemple: network_wlan0_rx_careful try: - limit = self.limits[prefix + criticity] + limit = self.limits[stat_name + '_' + criticity] except KeyError: # Try fallback to plugin default limit # Exemple: network_careful @@ -378,16 +374,12 @@ class GlancesPlugin(object): # Return the limit return limit - def __get_limit_action(self, criticity, header=""): + def __get_limit_action(self, criticity, stat_name=""): """Return the action for the alert""" - prefix = self.plugin_name + '_' - if header != "": - prefix += header + '_' - # Get the limit for stat + header # Exemple: network_wlan0_rx_careful_action try: - action = self.limits[prefix + criticity + '_action'] + action = self.limits[stat_name + '_' + criticity + '_action'] except KeyError: # Try fallback to plugin default limit # Exemple: network_careful_action @@ -397,7 +389,7 @@ class GlancesPlugin(object): return action def get_conf_value(self, value, header="", plugin_name=None): - """Return the configuration (header_)value for the current plugin (or the one given by the plugin_name var)""" + """Return the configuration (header_) value for the current plugin (or the one given by the plugin_name var)""" if plugin_name is None: plugin_name = self.plugin_name if header == "": From 338330271d62629461f867d7fd940231e65fa08f Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 3 Jan 2015 17:43:02 +0100 Subject: [PATCH 015/267] Factorize export code --- glances/exports/glances_csv.py | 2 ++ glances/exports/glances_export.py | 33 +++++++++++++++++++++++++++++ glances/exports/glances_influxdb.py | 31 ++------------------------- glances/exports/glances_statsd.py | 31 ++------------------------- 4 files changed, 39 insertions(+), 58 deletions(-) diff --git a/glances/exports/glances_csv.py b/glances/exports/glances_csv.py index a71e492b..2b450027 100644 --- a/glances/exports/glances_csv.py +++ b/glances/exports/glances_csv.py @@ -53,6 +53,8 @@ class Export(GlancesExport): logger.info("Stats exported to CSV file: {0}".format(self.csv_filename)) + self.export_enable = True + self.first_line = True def exit(self): diff --git a/glances/exports/glances_export.py b/glances/exports/glances_export.py index a4d219f1..a8681a64 100644 --- a/glances/exports/glances_export.py +++ b/glances/exports/glances_export.py @@ -44,6 +44,10 @@ class GlancesExport(object): self.config = config self.args = args + # By default export is disable + # Had to be set to True in the __init__ class of child + self.export_enable = False + def exit(self): """Close the export module.""" logger.debug("Finalise export interface %s" % self.export_name) @@ -51,3 +55,32 @@ class GlancesExport(object): def plugins_to_export(self): """Return the list of plugins to export""" return ['cpu', 'load', 'mem', 'memswap', 'network', 'diskio', 'fs', 'processcount'] + + def update(self, stats): + """Update stats to a server. + The method buil two list: names and values + and call the export method to export the stats""" + if not self.export_enable: + return False + + # Get the stats + all_stats = stats.getAll() + plugins = stats.getAllPlugins() + + # Loop over available plugin + i = 0 + for plugin in plugins: + if plugin in self.plugins_to_export(): + if type(all_stats[i]) is list: + for item in all_stats[i]: + export_names = map( + lambda x: item[item['key']] + '.' + x, item.keys()) + export_values = item.values() + self.export(plugin, export_names, export_values) + elif type(all_stats[i]) is dict: + export_names = all_stats[i].keys() + export_values = all_stats[i].values() + self.export(plugin, export_names, export_values) + i += 1 + + return True diff --git a/glances/exports/glances_influxdb.py b/glances/exports/glances_influxdb.py index 801fb962..60b9c1ee 100644 --- a/glances/exports/glances_influxdb.py +++ b/glances/exports/glances_influxdb.py @@ -93,34 +93,7 @@ class Export(GlancesExport): sys.exit(2) return db - def update(self, stats): - """Update stats to the InfluxDB server.""" - if not self.export_enable: - return False - - # Get the stats - all_stats = stats.getAll() - plugins = stats.getAllPlugins() - - # Loop over available plugin - i = 0 - for plugin in plugins: - if plugin in self.plugins_to_export(): - if type(all_stats[i]) is list: - for item in all_stats[i]: - export_names = map( - lambda x: item[item['key']] + '_' + x, item.keys()) - export_values = item.values() - self.write_to_influxdb(plugin, export_names, export_values) - elif type(all_stats[i]) is dict: - export_names = all_stats[i].keys() - export_values = all_stats[i].values() - self.write_to_influxdb(plugin, export_names, export_values) - i += 1 - - return True - - def write_to_influxdb(self, name, columns, points): + def export(self, name, columns, points): """Write the points to the InfluxDB server""" data = [ { @@ -131,4 +104,4 @@ class Export(GlancesExport): try: self.client.write_points(data) except Exception as e: - logger.critical("Can not export stats to InfluxDB (%s)" % e) + logger.error("Can not export stats to InfluxDB (%s)" % e) diff --git a/glances/exports/glances_statsd.py b/glances/exports/glances_statsd.py index 63a9e1fc..982a9bfb 100644 --- a/glances/exports/glances_statsd.py +++ b/glances/exports/glances_statsd.py @@ -85,34 +85,7 @@ class Export(GlancesExport): self.port, prefix=prefix) - def update(self, stats): - """Update stats to the InfluxDB server.""" - if not self.export_enable: - return False - - # Get the stats - all_stats = stats.getAll() - plugins = stats.getAllPlugins() - - # Loop over available plugin - i = 0 - for plugin in plugins: - if plugin in self.plugins_to_export(): - if type(all_stats[i]) is list: - for item in all_stats[i]: - export_names = map( - lambda x: item[item['key']] + '.' + x, item.keys()) - export_values = item.values() - self.__export(plugin, export_names, export_values) - elif type(all_stats[i]) is dict: - export_names = all_stats[i].keys() - export_values = all_stats[i].values() - self.__export(plugin, export_names, export_values) - i += 1 - - return True - - def __export(self, name, columns, points): + def export(self, name, columns, points): """Export the stats to the Statsd server""" for i in range(0, len(columns)): if not isinstance(points[i], Number): @@ -122,4 +95,4 @@ class Export(GlancesExport): try: self.client.gauge(stat_name, stat_value) except Exception as e: - logger.critical("Can not export stats to Statsd (%s)" % e) + logger.error("Can not export stats to Statsd (%s)" % e) From 754798538ededc09cd8a61711bc5fa6fc2c4fafa Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 3 Jan 2015 17:46:14 +0100 Subject: [PATCH 016/267] PyStache is not mandatory --- glances/core/glances_actions.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/glances/core/glances_actions.py b/glances/core/glances_actions.py index 6069e0e8..ee29fd61 100644 --- a/glances/core/glances_actions.py +++ b/glances/core/glances_actions.py @@ -19,13 +19,19 @@ """Manage on alert actions.""" -# Import system lib -from subprocess import Popen -import pystache - # Import Glances lib from glances.core.glances_logging import logger +# Import system lib +from subprocess import Popen +try: + import pystache +except ImportError: + logger.warning("PyStache lib not installed (action script with mustache will not work)") + pystache_tag = False +else: + pystache_tag = True + class GlancesActions(object): @@ -67,7 +73,10 @@ class GlancesActions(object): # Ran all actions in background for cmd in commands: # Replace {{arg}} by the dict one (Thk to {Mustache}) - cmd_full = pystache.render(cmd, mustache_dict) + if pystache_tag: + cmd_full = pystache.render(cmd, mustache_dict) + else: + cmd_full = cmd # Execute the action logger.info("Action triggered for {0} ({1}): {2}".format(stat_name, criticity, cmd_full)) logger.debug("Stats value for the trigger: {0}".format(mustache_dict)) From 540cdb4073395622756a74334e631302e53656a8 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 3 Jan 2015 19:11:21 +0100 Subject: [PATCH 017/267] Add wget to Glances autoinstall procedure --- README.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rst b/README.rst index 18986715..6c70452b 100644 --- a/README.rst +++ b/README.rst @@ -56,6 +56,12 @@ To install both dependacies and latest Glances version, just enter the followin curl -L http://bit.ly/glances | /bin/bash +or + +.. code-block:: console + + wget -O- http://bit.ly/glances | /bin/bash + *Note*: Only supported on some GNU/Linux distributions. If you want to support others distribs, please contribute to `glancesautoinstall`_. From 8021a2bd3ada5c7733b0aab0a88680db56296339 Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Sat, 3 Jan 2015 19:33:03 +0100 Subject: [PATCH 018/267] README.rst: FreeBSD: pkg(8) is now the only package management tool --- README.rst | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.rst b/README.rst index 6c70452b..80e78c47 100644 --- a/README.rst +++ b/README.rst @@ -106,12 +106,6 @@ FreeBSD To install the binary package: -.. code-block:: console - - # pkg_add -r py27-glances - -Using pkgng: - .. code-block:: console # pkg install py27-glances From db17fb77aff4dcd804ef74763db96a029b9474aa Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Sun, 4 Jan 2015 16:26:55 +0100 Subject: [PATCH 019/267] README.rst: fix broken links Simplify by removing superfluous links. --- README.rst | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/README.rst b/README.rst index 80e78c47..f1fa2ed2 100644 --- a/README.rst +++ b/README.rst @@ -56,7 +56,7 @@ To install both dependacies and latest Glances version, just enter the followin curl -L http://bit.ly/glances | /bin/bash -or +or .. code-block:: console @@ -68,10 +68,10 @@ If you want to support others distribs, please contribute to `glancesautoinstall PyPI: The simple way -------------------- -Glances is on `PyPI`_. By using PyPI, you are sure to have the latest +Glances is on ``PyPI``. By using PyPI, you are sure to have the latest stable version. -To install, simply use `pip`_: +To install, simply use ``pip``: .. code-block:: console @@ -120,7 +120,7 @@ To install Glances from ports: OS X ---- -OS X users can install Glances using `Homebrew`_ or `MacPorts`_. +OS X users can install Glances using ``Homebrew`` or ``MacPorts``. Homebrew ```````` @@ -142,7 +142,7 @@ Windows - Install Python for Windows: http://www.python.org/getit/ - Install the psutil library: https://pypi.python.org/pypi?:action=display&name=psutil#downloads -- Install the `colorconsole`_ library: http://code.google.com/p/colorconsole/downloads/list +- Install the colorconsole library: https://pypi.python.org/pypi/colorconsole - Download Glances from here: http://nicolargo.github.io/glances/ Source @@ -163,7 +163,7 @@ on Debian/Ubuntu you need to install first the *python-dev* package. Puppet ------ -You can install Glances using `Puppet`_: https://github.com/rverchere/puppet-glances +You can install Glances using ``Puppet``: https://github.com/rverchere/puppet-glances Usage ===== @@ -227,12 +227,9 @@ License LGPL. See ``COPYING`` for more details. -.. _psutil: https://code.google.com/p/psutil/ +.. _psutil: https://github.com/giampaolo/psutil .. _glancesautoinstall: https://github.com/nicolargo/glancesautoinstall .. _@nicolargo: https://twitter.com/nicolargo .. _@glances_system: https://twitter.com/glances_system -.. _PyPI: https://pypi.python.org/pypi -.. _pip: http://www.pip-installer.org/ -.. _colorconsole: https://pypi.python.org/pypi/colorconsole .. _glances-doc: https://github.com/nicolargo/glances/blob/master/docs/glances-doc.rst .. _forum: https://groups.google.com/forum/?hl=en#!forum/glances-users From abe37cc7a2fe37a84534d6ae66b5baf21efa753a Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Sun, 4 Jan 2015 16:38:00 +0100 Subject: [PATCH 020/267] README.rst: fix misspelling --- README.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index f1fa2ed2..a917d7f4 100644 --- a/README.rst +++ b/README.rst @@ -50,7 +50,8 @@ Installation Glances Auto Install script --------------------------- -To install both dependacies and latest Glances version, just enter the following command line: +To install both dependencies and latest Glances version, just enter the +following command line: .. code-block:: console @@ -63,7 +64,7 @@ or wget -O- http://bit.ly/glances | /bin/bash *Note*: Only supported on some GNU/Linux distributions. -If you want to support others distribs, please contribute to `glancesautoinstall`_. +If you want to support other distributions, please contribute to `glancesautoinstall`_. PyPI: The simple way -------------------- @@ -205,8 +206,8 @@ You can also detect and display all Glances servers available on your network or And RTFM, always. -Gateway to others services -========================== +Gateway to other services +========================= Glances can export stats to: CSV file, InfluxDB and Statsd server. From 9b17311c4b64c0b477c65bf081435ba61b5873be Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Sun, 4 Jan 2015 17:15:26 +0100 Subject: [PATCH 021/267] README.rst: prettify Mention pymdstat as optional dep. --- README.rst | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.rst b/README.rst index a917d7f4..faff1001 100644 --- a/README.rst +++ b/README.rst @@ -38,6 +38,7 @@ Optional dependencies: - ``py3sensors`` (for hardware monitoring support) [Linux-only] - ``hddtemp`` (for HDD temperature monitoring support) [Linux-only] - ``batinfo`` (for battery monitoring support) [Linux-only] +- ``pymdstat`` (for RAID support) [Linux-only] - ``pysnmp`` (for SNMP support) - ``zeroconf`` and ``netifaces`` (for the auto discoverer mode) - ``influxdb`` (for the InfluxDB export module) @@ -63,8 +64,8 @@ or wget -O- http://bit.ly/glances | /bin/bash -*Note*: Only supported on some GNU/Linux distributions. -If you want to support other distributions, please contribute to `glancesautoinstall`_. +*Note*: Only supported on some GNU/Linux distributions. If you want to +support other distributions, please contribute to `glancesautoinstall`_. PyPI: The simple way -------------------- @@ -149,7 +150,7 @@ Windows Source ------ -To install Glances version X.Y from source: +To install Glances from source: .. code-block:: console @@ -198,25 +199,26 @@ on the server side and run: on the client one. -You can also detect and display all Glances servers available on your network or defined in the configuration file: +You can also detect and display all Glances servers available on your +network or defined in the configuration file: .. code-block:: console $ glances --browser -And RTFM, always. +and RTFM, always. Gateway to other services ========================= -Glances can export stats to: CSV file, InfluxDB and Statsd server. +Glances can export stats to: ``CSV`` file, ``InfluxDB`` and ``StatsD`` server. Documentation ============= For complete documentation see `glances-doc`_. -If you have any question (after RTFM !), please post it on the official Q&A `forum`_. +If you have any question (after RTFM!), please post it on the official Q&A `forum`_. Author ====== From c3be300dab0d3950c44f1dcb1fbedde569b636ef Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sun, 4 Jan 2015 20:59:04 +0100 Subject: [PATCH 022/267] Docker plugin first version --- NEWS | 3 +- README.rst | 1 + docs/glances-doc.rst | 7 + docs/images/docker.png | Bin 0 -> 60028 bytes glances/core/glances_main.py | 2 + glances/outputs/glances_curses.py | 12 +- glances/plugins/glances_batpercent.py | 1 + glances/plugins/glances_docker.py | 201 ++++++++++++++++++++++++++ glances/plugins/glances_help.py | 4 + 9 files changed, 228 insertions(+), 3 deletions(-) create mode 100644 docs/images/docker.png create mode 100644 glances/plugins/glances_docker.py diff --git a/NEWS b/NEWS index 7ecc1530..81ee3911 100644 --- a/NEWS +++ b/NEWS @@ -10,7 +10,8 @@ Version 2.3 * Add Statsd export module (--export-statsd) (issue #465) * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463) * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart - * Add the RAID plugins (issue #447) + * Add the RAID plugin (issue #447) + * Add the Docker plugin (issue #440) Version 2.2.1 ============= diff --git a/README.rst b/README.rst index faff1001..c1f309cd 100644 --- a/README.rst +++ b/README.rst @@ -44,6 +44,7 @@ Optional dependencies: - ``influxdb`` (for the InfluxDB export module) - ``statsd`` (for the StatsD export module) - ``pystache`` (for the action script feature) +- ``docker-py`` (for the Docker monitoring support) [Linux-only] Installation ============ diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 7ea6c134..c86b1c7b 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -671,6 +671,13 @@ Each alert message displays the following information: 4. {min,avg,max} values or number of running processes for monitored processes list alerts +Docker +------ + +If you use Docker, Glances can help you to monitor your container. Glances uses the Docker API through the Docker-Py library. + +.. image:: images/docker.png + Actions ------- diff --git a/docs/images/docker.png b/docs/images/docker.png new file mode 100644 index 0000000000000000000000000000000000000000..e8115359e89ce8f7fe0e39bd0e260d417f33bad1 GIT binary patch literal 60028 zcmV)3K+C_0P)i?DhBO(9*1R(w+K*(Q`h_YNN z{&NHX#QYy20sv;aK;ip@=ym|j^)d4enhOA+=TqVb2DujI9x(fAXxG?6U+BFwV*EA{ zfPlb#R`V0FB&myUJ+u8Cv{x6kRVT5x%oWhQT_W>y^ZU^an=7Mr*L<}xzd`KHtUe;~ zyGLhpP^Kl%_;Ls`98pT$LeUOP-_p_3dmpplE#%La=gs*K5~{l)>y8p>=^!E^a^GCN%oKl@{Qil^dH?2SSl!hb)yCGy!9^c&**_bC1m z`j&_M`;36ld<3Cup5)OWfB=K&jxqY5#Fh{O0%CyfT~J5>P*zq-L}3`_aycUYiG&y= zuPCGtEkh*_f^)0pJHe*83BKRRS)*vPdc16^D<dVzI$^IbnoeFl> zQT$1AiL#t9(swc0uYrVpvQ{xu6hxGEC`3?7^*KId1(w2NAz~O3g&_c0E{YpEwAMPm znqd@eL|%|RK>o_HEi$ob^8Nf9q0FH^>Tiv#pT!GB@$QPEc9hX7M5msc0wkd5S>mPO zcAgU7YF;YJot^$PWWQq1`$WZ_7qE`(C6RDd`IM4{IH2VTl(Lm#JB1k%9=^?qC

T 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 z%0D))n*GL~dz3@nqSx*ovj)lzed_y_fBg8|krlA+{d-4!Uuzz%Zqe(*z6w3bcf9k0 z7W*CF72wC==N!?m-{Jj^IOD+ZY%gyK&g8ud*rz`9wZK3cQ;wO608 zONS0UkG1IX+dgbI z=&tj7GyqyPX~gTR&AJ^Lts7cZUo((vrQgOg1{JM#=+?Dcr)H&C-fD-g-MenLb!mJE zOFN$Z%$WC|Jv-V^2w2ko)CV8CviXNYpIz8=$8OzwbnCW5%LefoqSB6M|M%?=o;#;g z{Ni!r!Z$`OXmj=r1NZH`uoA8S03ZNKL_t)t!(M0HG^qWzue>>bgNX)O_U_g2yN_r7 zK|X6#Pks-Ed-DkdOoD*6e07a>i41bQ5D_S+8C+K@PD| ziW`mxw-jj^{!CV;U_nYeDkMKAL3B*RD5K@%IcR|sYJ8bq?uvbq$s1MmQu%2}`7dC4U&{hWge^Fg^^-g$WJ#(n#j>5E7NfK7Kl zX;*+%9-p14P|r+;YIW2a87qPuIcU8fdJI#h@VB=^fZkBr^8 zUw@hBZ_}~UHt{dCY#^7XcHy(PkG}1-<4*YJ1)UBY^RK)63?6XEZhP)k3~PQE|H?gA zUHkE>B&@a9f;RlNvhh9_{PVn4jRL4yHsk$!1`QdzJm)P6Mt@zm^s|w(uR44GHcx#2 zLqsG@8#iuqz!mph*0xa)uAKY+eOEs+ZzBNE+Nyg74PN)xtB1UBd1KhPV!`Bho>*R2 zAbMCgYs`d=M<0b_->P04Z>+V`?CU(aybd6@{QaA6+-c}7Z%w*+{nF_leYCi)yS!mA zV;C{JRPB$ijcanr6YuU&zM|^+8*X}gNe&~jyp@$B$8XrL$G9;XNsldw3XS{S{ain& z`E~ABqpm*d(GQn}06?p!+;PQSxBdOvm)>jwYZiQP|K+z&Ton=`)c)|&<>v)A-8A^A zceW|sxU}lE`#!1_tvL|>_UVw@KYIJ_J1_oZz=N}=-FyDvbvN73n^t>`!ruhoL?8q# z@A2pVK66xK0021iq5qx<-#>KBfG57I)$KsVPDkz2Fn|;9eD=iXJHNet_ThI--{6D( zYQKBtnj5#h<1fQUUJ?90W7I8IKDp3by13PWM{PUrmCt|4Id_^N4WUBSX1*=a6m(^2 zP)mZC)VEc1mA2oLAbY06v!+lEyqy?T#X`t zYCKBbH%(+lznBlil(vk5Re3Bplz}QdYRZJ@NW!D(fJ+z`kZBz7yCS#ez(kHoBpD!u zaZiWnhLP1ul0ciM!+?1I2Ne^Rpi)o%%KQsoYIDrC%opnNap=n3v!kv( z7qXK>X^(G?Z{xj(jQ-2A%TE3GoEo-EyuANzT_8o62b~5bQnj;^E)HYYMMkG~jYmsF z#5-oAJ1=g1+VgLmUper&p>sDHHd%C6+vHw})kL4=lFdz^J-(oV6AY2)shL^4nTY;h z_gW1Vn*-OYk>A~7YMxNK)8(%{-v0jMZ~Am4rQCxrO;<5nQW-%==I@j!d#DOUx`INA zgtolAJloEXGa>2xB`371lt%F4?yKasW71qBrk-6@RnESn^8Erq3;GaLQj*Td0HS0O zww~4F)hIzG@>y`C!jL~)>`1V-GDJI?B5Tk$2qKgqG$Vf)bKNABR!G(s5v}(@jvTu( zf+5~JFi5FzESDl6&hZ0_f)`T>lFH zWb%nqj;|90fuTdjsARy~^|g8$e}kz!^C^*0eSI+6f2C=EOI3nw7+$9IMc%evGD%aY zV{NNxYIwlJkyckeeBb14cJEM11X^{9KNmASnNpmjJu^jy&h|Xcap4R!h@#Jq=Wy{t z1!YZ|cj^& zxAB`)m&`>XwdQinPyp86Wof%U%`5-?@K-CzEw1~*f^-0%)FwM(|4G&zlLwV_P*hT? z=SpoI{bvIU9#c~8M5LyqN4oAoW=|dj7{BX!U3P$3hcWO2%wgW_^1ivqwo<*L)O> z?sm%L+MRSq&fHVdGjGf$E1mI{M`7hG6yNkk5ȰSg;YHasG!ta^rfO!cA`UKJow ziWoVXS&IM7R~F-_rpuU}qDoI3(U+d6fDN*tm~;TcZYGbT@hk~?@}2BR24WhZ$A+I0 z$Tg`SB1uLDfrs&JSJLsKH(tMDyX9X!aP_rM&R$D0m1dDUSs<-|KzRU^KyulhOE#+* zj8uW|NYS@EtkS9TlK^s<#awA}4-;DB`*lsNNsOVbF7*|b{yR^)M*ABez-}-4H z_~~b1z--`7Qeljezc38hd=1Xw=4|EyXp95wWDS zB$vyDxiD|i^7EBpJSJy`i&-N+N<%Dj^uz4j7W_Z?GQJt>&0wX&yawt+ z6~jr>7e~Eu*mlxZD=ORLm^oBU2MMzL8Y0MfV{l7i$>Z4Uk&1a$=-zmao&nz`l72~m zxLCl`OBHAIsKt1ic6cGue#SH(>~pkoxq*KK_ks*osxGdq;L(b$t7rAZEI^P{ zH!y`<6N41juHj(ycI23$K&bweo;oYLwXn-f4d0x=2X*{FO{|j?6V=U40z@V!Na6)} zUY5=n5XtuI01&__@n>V4Wj$1#0C-kVh+4$@)>6 z82%xc0oe07HgHs1G6w&o$AsyZio2~S84Sx;F&Uef9rCHUWx62})hraE+@L9S*1xJ5 zr^W*RCnZI8+rJ1>qentc6XX$8Ah2g)L`N`L#Q4gVqJjk*0-Jk|J4>C}IO>-n(X&oe z;N$E!Sx|V_Dy}6sd>$Wnu}?}-1`@#n#&dH_kv5)0Ko;JBY}+DbUs|;!%aNHUEmAWh zbQvJGP~QB%L-(`aVGJ+FPlhZ>^resSw$+n(k^)$WiiI$Zbx2hB5zy@hPD#fwOVf7R ze3o}aM6fzADn&J;Quxf-nt0q=+#ZbR$Jd3-GO0-u$;<_<5f+PygmHVZScmv-M-S?i z$=hgS!C2_`3!fT{<$39vuHN@QfM6yt$3QkOjbKN1&LDYL}1Q#NE?{2}RSh82N< z-9Zuc)>&D*dC@A}E@|Lu+SOgloc}h!X-qFuJJ*u)r$q_E@cX) zTj@le*3`=}Dndt6HA2Ncr6V1MW-mH~%dz4qpE$QcE7QiCPn4x~O3xut5*#NvfW=^A zu|c3cKpgYogB@WZcb2h&MG&tEmw82*I^`SkkttLoN2H>~2~4Db2n1mq$bt^?#DCxr zt-EIw>#N07AfPD-A=Wbx$bNey;$D%MYmM|KL@aEcNDH1tW04qp(0keHTSdwmHxbJ1 zh#JMZ3ttgfV#{d6r5pil+b(*F`66;A(VOdATq5a}>_WdSnn6lRhJph%ZqFs5ubo_x zX@q51cu$`ls(2-(R^>5U^*sfghtxREg25tWg}*u?eE?A=*68F!&a_2380W>XF>TJN zkfJJL7=}sW>!iQrLAyvtRuEabXS74i-XK0pfb}<34D{ylE@;&)^3)4_=N%yk0`X{S zgfHk)tU{MQ4namc4|$cEh*FG~1;u#e?%motDjVDxuE-!pWS85m@-~87u8mb*NHF=Z zuurxI0%e_nv2|Xp!l8O%$f7gmkBwSvA9!8krVof_RdFK6o%25SdIS?#@0^}>S22BJ zA}G|5nKqeCM&Xe>##_Kz=m#?q>KRI5fsmEdZ6rYSq<;!MQeZLwK-vD2Znu-+BrN<6 zt^N+{NO6HFw2(w}ryt1MePS;Gi8v44kzg6BD_r4_)?Y?csOSzF)_cn0DoiMAA=j=z;BN>3t zvbPnCE^!_#$klu{kq}VF!YvF407U^ZWizv?ly2nFN>~jRtc(|-Tcgo8Hwur9%49s6 z4p=Mx2VLwJDP20o3a9n@k5@eb8FR5s4s0y}Isu7N4YMfR44*H#5}U~kr&OO2wOD@U zwSsbhn8{m`B62_(H*;3kD|#YRdfe>xKHR*VK7|U>X&3ijkkUR8Efw?>PsrdZ%v2LG zC58+Uf$_~`jF^^cY1EO*WG9bB6pbdaWDNRbp$Y!Gl=W(qX_X!s#Os8*El)3ws6N=#b7cT5)mI(4RYZkG zQ8xV%OR*usv2BL~YPjmTZ8pA&UIbt7rp&y7oV~1S)yVTDqyp073$hbk&&0f8e9ONe zvK%;x75B80qJ}ep*x%6cq(-PcE;A`Q2Ai9pKXR1OT~Q zj&YPDr78AVYI7px<_UC686-k36n(j5ofclXv&IiovoFa~p~DV@nT`o+MF~@6QV0B` z*t{Z|g%&f2dy2UFt|0IM)yGJ8V)7Gd_mE8JO4iT~0dZz8!r%0A~iQ%m_o*9)y#Pk_CdSOPn8QBPStSd$Z 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%0D0%b&jNPe&bf;jo_%y5r%qJC$&4EUC0B$?`Vg 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

d*`lEqSr9cE6rfP^^Uq&A0<;SK3~Di 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 P00000NkvXXu0mjf>b_!` literal 0 HcmV?d00001 diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index 7a5b016f..2a275c0c 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -77,6 +77,8 @@ class GlancesMain(object): dest='disable_sensors', help=_('disable sensors module')) parser.add_argument('--disable-raid', action='store_true', default=False, dest='disable_raid', help=_('disable RAID module')) + parser.add_argument('--disable-docker', action='store_true', default=False, + dest='disable_docker', help=_('disable Docker module')) parser.add_argument('--disable-left-sidebar', action='store_true', default=False, dest='disable_left_sidebar', help=_('disable network, disk io, FS and sensors modules')) parser.add_argument('--disable-process', action='store_true', default=False, diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 378dc64b..c98b7a5b 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -266,6 +266,9 @@ class _GlancesCurses(object): elif self.pressedkey == ord('d'): # 'd' > Show/hide disk I/O stats self.args.disable_diskio = not self.args.disable_diskio + elif self.pressedkey == ord('D'): + # 'D' > Show/hide Docker stats + self.args.disable_docker = not self.args.disable_docker elif self.pressedkey == ord('e'): # 'e' > Enable/Disable extended stats for top process self.args.enable_process_extended = not self.args.enable_process_extended @@ -432,6 +435,8 @@ class _GlancesCurses(object): stats_sensors = stats.get_plugin( 'sensors').get_stats_display(args=self.args) stats_now = stats.get_plugin('now').get_stats_display() + stats_docker = stats.get_plugin('docker').get_stats_display( + args=self.args) stats_processcount = stats.get_plugin( 'processcount').get_stats_display(args=self.args) stats_monitor = stats.get_plugin( @@ -441,7 +446,8 @@ class _GlancesCurses(object): # Adapt number of processes to the available space max_processes_displayed = screen_y - 11 - \ - self.get_stats_display_height(stats_alert) + self.get_stats_display_height(stats_alert) - \ + self.get_stats_display_height(stats_docker) if self.args.enable_process_extended and not self.args.process_tree: max_processes_displayed -= 4 if max_processes_displayed < 0: @@ -534,9 +540,11 @@ class _GlancesCurses(object): self.next_line = self.saved_line # Display right sidebar - # (PROCESS_COUNT+MONITORED+PROCESS_LIST+ALERT) + # ((DOCKER)+PROCESS_COUNT+(MONITORED)+PROCESS_LIST+ALERT) self.new_column() self.new_line() + self.display_plugin(stats_docker) + self.new_line() self.display_plugin(stats_processcount) if glances_processes.get_process_filter() is None and cs_status == 'None': # Do not display stats monitor list if a filter exist diff --git a/glances/plugins/glances_batpercent.py b/glances/plugins/glances_batpercent.py index ff1deecc..e2ced95c 100644 --- a/glances/plugins/glances_batpercent.py +++ b/glances/plugins/glances_batpercent.py @@ -56,6 +56,7 @@ class Plugin(GlancesPlugin): """Reset/init the stats.""" self.stats = [] + @GlancesPlugin._log_result_decorator def update(self): """Update battery capacity stats using the input method.""" # Reset stats diff --git a/glances/plugins/glances_docker.py b/glances/plugins/glances_docker.py new file mode 100644 index 00000000..edd01081 --- /dev/null +++ b/glances/plugins/glances_docker.py @@ -0,0 +1,201 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""Docker plugin.""" + +# Import Glances libs +from glances.core.glances_logging import logger +from glances.plugins.glances_plugin import GlancesPlugin + +# Docker-py library (optional and Linux-only) +# https://github.com/docker/docker-py +try: + import docker + import requests +except ImportError as e: + logger.debug("Docker library not found (%s). Glances cannot grab Docker info." % e) + docker_tag = False +else: + docker_tag = True + + +class Plugin(GlancesPlugin): + + """Glances' Docker plugin. + + stats is a list + """ + + def __init__(self, args=None): + """Init the plugin.""" + GlancesPlugin.__init__(self, args=args) + + # The plgin can be disable using: args.disable_docker + self.args = args + + # We want to display the stat in the curse interface + self.display_curse = True + + # Init the Docker API + self.docker_client = self.connect() + if self.docker_client is None: + global docker_tag + docker_tag = False + + def connect(self, version=None): + """Connect to the Docker server""" + # Init connection to the Docker API + if version is None: + ret = docker.Client(base_url='unix://var/run/docker.sock') + else: + ret = docker.Client(base_url='unix://var/run/docker.sock', + version=version) + try: + ret.version() + except requests.exceptions.ConnectionError as e: + # Connexion error (Docker not detected) + # Let this message in debug mode + logger.debug("Can't connect to the Docker server (%s)" % e) + ret = None + except docker.errors.APIError as e: + if version is None: + # API error (Version mismatch ?) + logger.debug("Docker API error (%s)" % e) + # Try the connection with the server version + import re + version = re.search('server\:\ (.*)\)\"\)', str(e)) + if version: + logger.debug("Try connection with Docker API version %s" % version.group(1)) + ret = self.connect(version=version.group(1)) + else: + # API error + logger.error("Docker API error (%s)" % e) + ret = None + except Exception as e: + # Others exceptions... + # Connexion error (Docker not detected) + logger.error("Can't connect to the Docker server (%s)" % e) + ret = None + + return ret + + def reset(self): + """Reset/init the stats.""" + self.stats = {} + + @GlancesPlugin._log_result_decorator + def update(self): + """Update Docker stats using the input method. + """ + # Reset stats + self.reset() + + # The Docker-py lib is mandatory + if not docker_tag or self.args.disable_docker: + return self.stats + + if self.get_input() == 'local': + # Update stats + # Exemple: { + # "KernelVersion": "3.16.4-tinycore64", + # "Arch": "amd64", + # "ApiVersion": "1.15", + # "Version": "1.3.0", + # "GitCommit": "c78088f", + # "Os": "linux", + # "GoVersion": "go1.3.3" + # } + self.stats['version'] = self.docker_client.version() + # Example: [{u'Status': u'Up 36 seconds', + # u'Created': 1420378904, + # u'Image': u'nginx:1', + # u'Ports': [{u'Type': u'tcp', u'PrivatePort': 443}, + # {u'IP': u'0.0.0.0', u'Type': u'tcp', u'PublicPort': 8080, u'PrivatePort': 80}], + # u'Command': u"nginx -g 'daemon off;'", + # u'Names': [u'/webstack_nginx_1'], + # u'Id': u'b0da859e84eb4019cf1d965b15e9323006e510352c402d2f442ea632d61faaa5'}] + self.stats['containers'] = self.docker_client.containers() + + elif self.get_input() == 'snmp': + # Update stats using SNMP + # Not available + pass + + return self.stats + + def msg_curse(self, args=None): + """Return the dict to display in the curse interface.""" + # Init the return message + ret = [] + + # Only process if stats exist (and non null) and display plugin enable... + if self.stats == {} or args.disable_docker or len(self.stats['containers']) == 0: + return ret + + # Build the string message + # Title + msg = '{0}'.format(_("CONTAINERS")) + ret.append(self.curse_add_line(msg, "TITLE")) + msg = ' {0}'.format(len(self.stats['containers'])) + ret.append(self.curse_add_line(msg)) + msg = ' ({0} {1})'.format(_("served by Docker"), + self.stats['version']["Version"]) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + # Header + ret.append(self.curse_new_line()) + msg = '{0:>14}'.format(_("Id")) + ret.append(self.curse_add_line(msg)) + msg = ' {0:20}'.format(_("Name")) + ret.append(self.curse_add_line(msg)) + msg = '{0:>26}'.format(_("Status")) + ret.append(self.curse_add_line(msg)) + msg = ' {0:8}'.format(_("Command")) + ret.append(self.curse_add_line(msg)) + # Data + for container in self.stats['containers']: + ret.append(self.curse_new_line()) + # Id + msg = '{0:>14}'.format(container['Id'][0:12]) + ret.append(self.curse_add_line(msg)) + # Name + name = container['Names'][0] + if len(name) > 20: + name = '_' + name[:-19] + else: + name[0:20] + msg = ' {0:20}'.format(name) + ret.append(self.curse_add_line(msg)) + # Status + status = self.container_alert(container['Status']) + msg = container['Status'].replace("minute", "min") + msg = '{0:>26}'.format(msg[0:25]) + ret.append(self.curse_add_line(msg, status)) + # Command + msg = ' {0}'.format(container['Command']) + ret.append(self.curse_add_line(msg)) + + return ret + + def container_alert(self, status): + """Analyse the container status""" + if "Paused" in status: + return 'CAREFUL' + else: + return 'OK' diff --git a/glances/plugins/glances_help.py b/glances/plugins/glances_help.py index 02504b1d..bf1f18f6 100644 --- a/glances/plugins/glances_help.py +++ b/glances/plugins/glances_help.py @@ -139,6 +139,10 @@ class Plugin(GlancesPlugin): ret.append(self.curse_new_line()) msg = msg_col.format("/", _("Enable/disable short processes name")) ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("D", _("Enable/disable Docker stats")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) ret.append(self.curse_new_line()) From 24910a8ee2c8f5be47d4459fc52e6cf96591b500 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sun, 4 Jan 2015 21:17:41 +0100 Subject: [PATCH 023/267] Manage if Docker-py not found --- glances/plugins/glances_docker.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/glances/plugins/glances_docker.py b/glances/plugins/glances_docker.py index edd01081..273adf9d 100644 --- a/glances/plugins/glances_docker.py +++ b/glances/plugins/glances_docker.py @@ -61,11 +61,15 @@ class Plugin(GlancesPlugin): def connect(self, version=None): """Connect to the Docker server""" # Init connection to the Docker API - if version is None: - ret = docker.Client(base_url='unix://var/run/docker.sock') - else: - ret = docker.Client(base_url='unix://var/run/docker.sock', - version=version) + try: + if version is None: + ret = docker.Client(base_url='unix://var/run/docker.sock') + else: + ret = docker.Client(base_url='unix://var/run/docker.sock', + version=version) + except NameError: + # docker lib not found + return None try: ret.version() except requests.exceptions.ConnectionError as e: From 7fc4506846ca5f61d0cfbf6476b17f9a50d4d327 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sun, 4 Jan 2015 23:03:54 +0100 Subject: [PATCH 024/267] Add a new bar class to display bar in curse UI --- glances/outputs/glances_bars.py | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 glances/outputs/glances_bars.py diff --git a/glances/outputs/glances_bars.py b/glances/outputs/glances_bars.py new file mode 100644 index 00000000..729e4a63 --- /dev/null +++ b/glances/outputs/glances_bars.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""Manage bars for Glances output.""" + +# Import system lib +from math import modf + +# Global vars +curses_bars = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"] + + +class Bar(object): + """Manage bar (progression or status) + + import sys + import time + b = Bar(10) + for p in range(0, 100): + b.set_percent(p) + print("\r%s" % b), + time.sleep(0.1) + sys.stdout.flush() + + """ + + def __init__(self, size): + # Bar size + self.__size = size + # Bar current percent + self.__percent = 0 + + def get_size(self): + return self.__size + + def set_size(self, size): + self.__size = size + return self.__size + + def get_percent(self): + return self.__percent + + def set_percent(self, percent): + assert percent >= 0 + assert percent <= 100 + self.__percent = percent + return self.__percent + + def __str__(self): + """Return the bars""" + frac, whole = modf(self.get_size() * self.get_percent() / 100.0) + ret = curses_bars[8] * int(whole) + if frac > 0: + ret += curses_bars[int(frac * 8)] + whole += 1 + ret += '_' * int(self.get_size() - whole) + return ret From ca223a9b8cd2406caae901f0afdc9ba961362b9f Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Mon, 5 Jan 2015 11:33:15 +0100 Subject: [PATCH 025/267] setup.py: add chroot detection Fixes #471. --- setup.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index cf1d40a8..d066869c 100755 --- a/setup.py +++ b/setup.py @@ -6,6 +6,8 @@ import sys from setuptools import setup +is_chroot = os.stat('/').st_ino != 2 + def get_data_files(): data_files = [ @@ -15,15 +17,16 @@ def get_data_files(): ('share/man/man1', ['man/glances.1']) ] - if os.name == 'posix' and os.getuid() == 0: # Unix-like + root privileges + if hasattr(sys, 'real_prefix'): # virtualenv + conf_path = os.path.join(sys.prefix, 'etc', 'glances') + elif os.name == 'posix' and (os.getuid() == 0 or is_chroot): + # Unix-like + root privileges/chroot environment if 'bsd' in sys.platform: conf_path = os.path.join(sys.prefix, 'etc', 'glances') elif 'linux' in sys.platform: conf_path = os.path.join('/etc', 'glances') elif 'darwin' in sys.platform: conf_path = os.path.join('/usr/local', 'etc', 'glances') - elif hasattr(sys, 'real_prefix'): # virtualenv - conf_path = os.path.join(sys.prefix, 'etc', 'glances') elif 'win32' in sys.platform: # windows conf_path = os.path.join(os.environ.get('APPDATA'), 'glances') else: # Unix-like + per-user install From 20879f86eca52c1678299287ad522f2a2175741d Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Mon, 5 Jan 2015 17:40:35 +0100 Subject: [PATCH 026/267] Correct an issue on Curse display if RAID not available --- glances/outputs/glances_curses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index c98b7a5b..fbd1375a 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -431,7 +431,7 @@ class _GlancesCurses(object): stats_fs = stats.get_plugin('fs').get_stats_display( args=self.args, max_width=plugin_max_width) stats_raid = stats.get_plugin('raid').get_stats_display( - args=self.args, max_width=plugin_max_width) + args=self.args) stats_sensors = stats.get_plugin( 'sensors').get_stats_display(args=self.args) stats_now = stats.get_plugin('now').get_stats_display() From bb54d975a07199806a8f58d7809fa4e71541b7ca Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Tue, 6 Jan 2015 21:38:03 +0100 Subject: [PATCH 027/267] R/W error with the glances.log file (issue #474) --- NEWS | 6 ++++++ docs/glances-doc.rst | 2 ++ glances/core/glances_logging.py | 15 ++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 81ee3911..6480042c 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ Glances Version 2.x Version 2.3 =========== +Enhancements and news features: + * Add actions on alerts (issue #132). It is now possible to run action (command line) by triggers. Action could containq {Mustache} {{tag}} (Mustache) with stat value. * Add InfluxDB export module (--export-influxdb) (issue #455) * Add Statsd export module (--export-statsd) (issue #465) @@ -13,6 +15,10 @@ Version 2.3 * Add the RAID plugin (issue #447) * Add the Docker plugin (issue #440) +Bugs corrected: + + * R/W error with the glances.log file (issue #474) + Version 2.2.1 ============= diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index c86b1c7b..0f33a063 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -332,6 +332,8 @@ By default, the log file is under: :Linux, \*BSD and OS X: ``/tmp/glances.log`` :Windows: ``%APPDATA%\Local\temp\glances.log`` +If glances.log is not writable, a new file will be created and returned to the user console. + Anatomy Of The Application ========================== diff --git a/glances/core/glances_logging.py b/glances/core/glances_logging.py index 74518f3e..82a8a9d3 100644 --- a/glances/core/glances_logging.py +++ b/glances/core/glances_logging.py @@ -71,14 +71,27 @@ LOGGING_CFG = { } +def tempfile_name(): + """Return the tempfile name (full path)""" + ret = os.path.join(tempfile.gettempdir(), 'glances.log') + if os.access(ret, os.F_OK) and not os.access(ret, os.W_OK): + print("Warning: can't write logs to file {} (permission denied)".format(ret)) + ret = tempfile.mkstemp(prefix='glances', suffix='.tmp', text=True) + print("Create a new log file: {}".format(ret[1])) + return ret[1] + + def glances_logger(): + """Build and return the logger""" + temp_path = tempfile_name() _logger = logging.getLogger() try: + LOGGING_CFG['handlers']['file']['filename'] = temp_path logging.config.dictConfig(LOGGING_CFG) except AttributeError: # dictConfig is only available for Python 2.7 or higher # Minimal configuration for Python 2.6 - logging.basicConfig(filename=os.path.join(tempfile.gettempdir(), 'glances.log'), + logging.basicConfig(filename=temp_path, level=logging.DEBUG, format='%(asctime)s -- %(levelname)s -- %(message)s') return _logger From c940bae43e97e7c6473ac6498ed34af07478a866 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Tue, 6 Jan 2015 22:15:55 +0100 Subject: [PATCH 028/267] Correct a bug with Docker module and server mode --- glances/plugins/glances_docker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/plugins/glances_docker.py b/glances/plugins/glances_docker.py index 273adf9d..96995c8d 100644 --- a/glances/plugins/glances_docker.py +++ b/glances/plugins/glances_docker.py @@ -111,7 +111,7 @@ class Plugin(GlancesPlugin): self.reset() # The Docker-py lib is mandatory - if not docker_tag or self.args.disable_docker: + if not docker_tag or (self.args is not None and self.args.disable_docker): return self.stats if self.get_input() == 'local': From 8f8ecf7de8435cb0078bf72adba4ac9779a1ff66 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Tue, 6 Jan 2015 22:17:45 +0100 Subject: [PATCH 029/267] Correct bug on default log file --- glances/core/glances_logging.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/glances/core/glances_logging.py b/glances/core/glances_logging.py index 82a8a9d3..c7cb7e94 100644 --- a/glances/core/glances_logging.py +++ b/glances/core/glances_logging.py @@ -78,7 +78,8 @@ def tempfile_name(): print("Warning: can't write logs to file {} (permission denied)".format(ret)) ret = tempfile.mkstemp(prefix='glances', suffix='.tmp', text=True) print("Create a new log file: {}".format(ret[1])) - return ret[1] + return ret[1] + return ret def glances_logger(): From 276d0d1b1ec8e9cf9d0f5041c4038f9949834855 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Tue, 6 Jan 2015 22:30:20 +0100 Subject: [PATCH 030/267] Correct comments --- glances/core/glances_stats.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/core/glances_stats.py b/glances/core/glances_stats.py index b9e98288..93fc310b 100644 --- a/glances/core/glances_stats.py +++ b/glances/core/glances_stats.py @@ -55,7 +55,7 @@ class GlancesStats(object): # Init the export modules list dict self._exports = collections.defaultdict(dict) - # Load the plugins + # Load the exports modules self.load_exports(args=args) # Load the limits From d94d51f506e449f167d09f79ebdc03f5759fa67a Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Wed, 7 Jan 2015 21:10:12 +0100 Subject: [PATCH 031/267] Add NetApp SNMP support --- glances/core/glances_stats.py | 5 +++-- glances/plugins/glances_cpu.py | 5 ++++- glances/plugins/glances_fs.py | 7 ++++++- glances/plugins/glances_system.py | 5 ++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/glances/core/glances_stats.py b/glances/core/glances_stats.py index 93fc310b..6992f1d2 100644 --- a/glances/core/glances_stats.py +++ b/glances/core/glances_stats.py @@ -34,7 +34,8 @@ oid_to_short_system_name = {'.*Linux.*': 'linux', '.*BSD.*': 'bsd', '.*Windows.*': 'windows', '.*Cisco.*': 'cisco', - '.*VMware ESXi.*': 'esxi'} + '.*VMware ESXi.*': 'esxi', + '.*NetApp.*': 'netapp'} class GlancesStats(object): @@ -55,7 +56,7 @@ class GlancesStats(object): # Init the export modules list dict self._exports = collections.defaultdict(dict) - # Load the exports modules + # Load the plugins self.load_exports(args=args) # Load the limits diff --git a/glances/plugins/glances_cpu.py b/glances/plugins/glances_cpu.py index 685f5454..8db1167d 100644 --- a/glances/plugins/glances_cpu.py +++ b/glances/plugins/glances_cpu.py @@ -31,7 +31,10 @@ snmp_oid = {'default': {'user': '1.3.6.1.4.1.2021.11.9.0', 'system': '1.3.6.1.4.1.2021.11.10.0', 'idle': '1.3.6.1.4.1.2021.11.11.0'}, 'windows': {'percent': '1.3.6.1.2.1.25.3.3.1.2'}, - 'esxi': {'percent': '1.3.6.1.2.1.25.3.3.1.2'}} + 'esxi': {'percent': '1.3.6.1.2.1.25.3.3.1.2'}, + 'netapp': {'system': '1.3.6.1.4.1.789.1.2.1.3.0', + 'idle': '1.3.6.1.4.1.789.1.2.1.5.0', + 'nb_log_core': '1.3.6.1.4.1.789.1.2.1.6.0'}} # Define the history items list # - 'name' define the stat identifier diff --git a/glances/plugins/glances_fs.py b/glances/plugins/glances_fs.py index 621ea5bc..b7423a17 100644 --- a/glances/plugins/glances_fs.py +++ b/glances/plugins/glances_fs.py @@ -47,7 +47,12 @@ snmp_oid = {'default': {'mnt_point': '1.3.6.1.4.1.2021.9.1.2', 'windows': {'mnt_point': '1.3.6.1.2.1.25.2.3.1.3', 'alloc_unit': '1.3.6.1.2.1.25.2.3.1.4', 'size': '1.3.6.1.2.1.25.2.3.1.5', - 'used': '1.3.6.1.2.1.25.2.3.1.6'}} + 'used': '1.3.6.1.2.1.25.2.3.1.6'}, + 'netapp': {'mnt_point': '1.3.6.1.4.1.789.1.5.4.1.2', + 'device_name': '1.3.6.1.4.1.789.1.5.4.1.10', + 'size': '1.3.6.1.4.1.789.1.5.4.1.3', + 'used': '1.3.6.1.4.1.789.1.5.4.1.4', + 'percent': '1.3.6.1.4.1.789.1.5.4.1.6'}} snmp_oid['esxi'] = snmp_oid['windows'] # Define the history items list diff --git a/glances/plugins/glances_system.py b/glances/plugins/glances_system.py index e5e1acfa..98c5bab3 100644 --- a/glances/plugins/glances_system.py +++ b/glances/plugins/glances_system.py @@ -29,7 +29,10 @@ from glances.plugins.glances_plugin import GlancesPlugin # SNMP OID snmp_oid = {'default': {'hostname': '1.3.6.1.2.1.1.5.0', - 'system_name': '1.3.6.1.2.1.1.1.0'}} + 'system_name': '1.3.6.1.2.1.1.1.0'}, + 'netapp': {'hostname': '1.3.6.1.2.1.1.5.0', + 'system_name': '1.3.6.1.2.1.1.1.0', + 'platform': '1.3.6.1.4.1.789.1.1.5.0'}} # SNMP to human read # Dict (key: OS short name) of dict (reg exp OID to human) From 147e9c4669917130bc06b049d08644d2b3716b64 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Wed, 7 Jan 2015 22:25:40 +0100 Subject: [PATCH 032/267] Add PGP public key --- AUTHORS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 35ada0bf..bb405e52 100644 --- a/AUTHORS +++ b/AUTHORS @@ -5,7 +5,9 @@ Developers Nicolas Hennion (aka) Nicolargo http://blog.nicolargo.com https://twitter.com/nicolargo -contact@nicolargo.com +nicolashennion@gmail.com +PGP Fingerprint: 835F C447 3BCD 60E9 9200 2778 ABA4 D1AB 9731 6A3C +PGP Public key: gpg --keyserver pgp.mit.edu --recv-keys 0xaba4d1ab97316a3c Alessio Sergi (aka) al3hex https://twitter.com/al3hex From 8b19d1440e73a5324ab3ff4a53be56efe955bb06 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Fri, 9 Jan 2015 22:28:00 +0100 Subject: [PATCH 033/267] Implement get all limits in the RESTFUL API #477 --- glances/core/glances_stats.py | 14 ++++++++++++++ glances/outputs/glances_bottle.py | 18 ++++++++++++++++++ unitest-restful.py | 28 ++++++++++++++++++++-------- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/glances/core/glances_stats.py b/glances/core/glances_stats.py index 6992f1d2..ab6a0b43 100644 --- a/glances/core/glances_stats.py +++ b/glances/core/glances_stats.py @@ -189,6 +189,13 @@ class GlancesStats(object): ret[p] = self._plugins[p].get_raw() return ret + def getAllLimitsAsDict(self): + """Return all the stats limits (dict)""" + ret = {} + for p in self._plugins: + ret[p] = self._plugins[p].get_limits() + return ret + def get_plugin_list(self): """Return the plugin list.""" self._plugins @@ -240,6 +247,13 @@ class GlancesStatsServer(GlancesStats): ret[p] = self.all_stats[p] return ret + def getAllLimitsAsDict(self): + """Return the stats limits as a dict""" + ret = {} + for p in self._plugins: + ret[p] = self._plugins[p].get_limits() + return ret + def getAllPlugins(self): """Return the plugins list.""" return [p for p in self._plugins] diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index ae603208..06363634 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -65,6 +65,7 @@ class GlancesBottle(object): # REST API self._app.route('/api/2/pluginslist', method="GET", callback=self._api_plugins) self._app.route('/api/2/all', method="GET", callback=self._api_all) + self._app.route('/api/2/all/limits', method="GET", callback=self._api_all_limits) self._app.route('/api/2/:plugin', method="GET", callback=self._api) self._app.route('/api/2/:plugin/limits', method="GET", callback=self._api_limits) self._app.route('/api/2/:plugin/:item', method="GET", callback=self._api_item) @@ -147,6 +148,23 @@ class GlancesBottle(object): abort(404, "Cannot get stats (%s)" % str(e)) return statval + def _api_all_limits(self): + """ + Glances API RESTFul implementation + Return the JSON representation of all the plugins limits + HTTP/200 if OK + HTTP/400 if plugin is not found + HTTP/404 if others error + """ + response.content_type = 'application/json' + + try: + # Get the JSON value of the stat ID + limits = json.dumps(self.stats.getAllLimitsAsDict()) + except Exception as e: + abort(404, "Cannot get limits (%s)" % (str(e))) + return limits + def _api(self, plugin): """ Glances API RESTFul implementation diff --git a/unitest-restful.py b/unitest-restful.py index 061cb13e..9b154e34 100755 --- a/unitest-restful.py +++ b/unitest-restful.py @@ -46,7 +46,8 @@ pid = None # Unitary test is only available from a GNU/Linus machine if not is_linux: - print('ERROR: RESTFul API unitaries tests should be ran on GNU/Linux operating system') + print( + 'ERROR: RESTFul API unitaries tests should be ran on GNU/Linux operating system') sys.exit(2) else: print('Unitary tests for {0} {1}'.format(appname, version)) @@ -82,25 +83,25 @@ class TestGlances(unittest.TestCase): def test_000_start_server(self): """Start the Glances Web Server""" print('INFO: [TEST_000] Start the Glances Web Server') - + global pid - + cmdline = "/usr/bin/python -m glances -w -p %s" % SERVER_PORT print("Run the Glances Web Server on port %s" % SERVER_PORT) args = shlex.split(cmdline) pid = subprocess.Popen(args) print("Please wait...") time.sleep(1) - + self.assertTrue(pid is not None) def test_001_all(self): """All""" method = "all" - print('INFO: [TEST_001] Connection test') + print('INFO: [TEST_001] Get all stats') print("HTTP RESTFul request: %s/%s" % (URL, method)) - req = requests.get("%s/%s" % (URL, method)) + req = requests.get("%s/%s" % (URL, method)) self.assertTrue(req.ok) @@ -118,7 +119,7 @@ class TestGlances(unittest.TestCase): def test_003_plugins(self): """Plugins""" - method = "pluginslist" + method = "pluginslist" print('INFO: [TEST_003] Plugins') plist = requests.get("%s/%s" % (URL, method)) @@ -146,7 +147,7 @@ class TestGlances(unittest.TestCase): ilist = requests.get("%s/%s" % (URL, method)) for i in ilist.json(): - print("HTTP RESTFul request: %s/%s/%s" % (URL, method,i)) + print("HTTP RESTFul request: %s/%s/%s" % (URL, method, i)) req = requests.get("%s/%s/%s" % (URL, method, i)) self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) @@ -163,6 +164,17 @@ class TestGlances(unittest.TestCase): self.assertTrue(req.ok) self.assertIsInstance(req.json(), types.DictType) + def test_006_all_limits(self): + """All""" + method = "all/limits" + print('INFO: [TEST_006] Get all limits') + + print("HTTP RESTFul request: %s/%s" % (URL, method)) + req = requests.get("%s/%s" % (URL, method)) + + self.assertTrue(req.ok) + self.assertIsInstance(req.json(), types.DictType) + def test_999_stop_server(self): """Stop the Glances Web Server""" print('INFO: [TEST_999] Stop the Glances Web Server') From c4b79182e5ff20bb957b8149554febb622e7fc45 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 10 Jan 2015 12:57:04 +0100 Subject: [PATCH 034/267] Add Gitter badge --- README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.rst b/README.rst index c1f309cd..64d16764 100644 --- a/README.rst +++ b/README.rst @@ -17,6 +17,8 @@ Glances - An eye on your system :alt: Downloads .. image:: https://d2weczhvl823v0.cloudfront.net/nicolargo/glances/trend.png :target: https://bitdeli.com/nicolargo +.. image:: https://badges.gitter.im/Join%20Chat.svg + :target: https://gitter.im/nicolargo/glances?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge **Glances** is a cross-platform curses-based system monitoring tool written in Python. From e327f73937be4007a2d7871746995215a2031486 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 10 Jan 2015 16:36:53 +0100 Subject: [PATCH 035/267] Update doc --- README.rst | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/README.rst b/README.rst index 64d16764..4db9f2c5 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,3 @@ -Follow Glances on Twitter: `@nicolargo`_ or `@glances_system`_ - =============================== Glances - An eye on your system =============================== @@ -15,11 +13,12 @@ Glances - An eye on your system .. image:: https://pypip.in/d/Glances/badge.png :target: https://pypi.python.org/pypi/Glances/ :alt: Downloads -.. image:: https://d2weczhvl823v0.cloudfront.net/nicolargo/glances/trend.png - :target: https://bitdeli.com/nicolargo .. image:: https://badges.gitter.im/Join%20Chat.svg :target: https://gitter.im/nicolargo/glances?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge + +Follow Glances on Twitter: `@nicolargo`_ or `@glances_system`_ + **Glances** is a cross-platform curses-based system monitoring tool written in Python. @@ -34,7 +33,7 @@ Requirements - ``psutil >= 2.0.0`` - ``setuptools`` -Optional dependencies: +Optionals dependencies: - ``bottle`` (for Web server mode) - ``py3sensors`` (for hardware monitoring support) [Linux-only] @@ -54,8 +53,7 @@ Installation Glances Auto Install script --------------------------- -To install both dependencies and latest Glances version, just enter the -following command line: +To install both dependencies and latest Glances production ready version (aka *master* branch), just enter the following command line: .. code-block:: console @@ -85,12 +83,25 @@ To install, simply use ``pip``: *Note*: Python headers are required to install psutil. For example, on Debian/Ubuntu you need to install first the *python-dev* package. +*Note 2*: You can also install the following libs in order to use optionnal features: + +.. code-block:: console + + pip install bottle batinfo https://bitbucket.org/gleb_zhulik/py3sensors/get/tip.tar.gz zeroconf netifaces pymdstat influxdb statsd pystache + To upgrade Glances to the latest version: .. code-block:: console pip install --upgrade Glances +If you need to install Glances in a specific user location, use: + +.. code-block:: console + + export PYTHONUSERBASE=~/mylocalpath + pip install --user Glances + GNU/Linux --------- @@ -148,7 +159,7 @@ Windows - Install Python for Windows: http://www.python.org/getit/ - Install the psutil library: https://pypi.python.org/pypi?:action=display&name=psutil#downloads - Install the colorconsole library: https://pypi.python.org/pypi/colorconsole -- Download Glances from here: http://nicolargo.github.io/glances/ +- Install Glances Download Glances from here: http://nicolargo.github.io/glances/ Source ------ @@ -179,7 +190,6 @@ For the standalone mode, just run: $ glances - For the Web server mode, run: .. code-block:: console @@ -211,11 +221,6 @@ network or defined in the configuration file: and RTFM, always. -Gateway to other services -========================= - -Glances can export stats to: ``CSV`` file, ``InfluxDB`` and ``StatsD`` server. - Documentation ============= @@ -223,6 +228,11 @@ For complete documentation see `glances-doc`_. If you have any question (after RTFM!), please post it on the official Q&A `forum`_. +Gateway to other services +========================= + +Glances can export stats to: ``CSV`` file, ``InfluxDB`` and ``StatsD`` server. + Author ====== From 7bdbfea67b7965e49d5245bc6d3a19fcc60a840e Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 10 Jan 2015 18:12:25 +0100 Subject: [PATCH 036/267] Add example section in the -h tag --- glances/core/glances_main.py | 45 +++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index 2a275c0c..d8627380 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -51,6 +51,36 @@ class GlancesMain(object): username = "glances" password = "" + # Exemple of use + example_of_use = "\ +Examples of use:\n\ +\n\ +Monitor local machine (standalone mode):\n\ + $ glances\n\ +\n\ +Monitor local machine with the Web interface (Web UI):\n\ + $ glances -w\n\ + Glances web server started on http://0.0.0.0:61208/\n\ +\n\ +Monitor local machine and export stats to a CSV file (standalone mode):\n\ + $ glances --export-csv\n\ +\n\ +Monitor local machine and export stats to a InfluxDB server with 5s refresh time (standalone mode):\n\ + $ glances -t 5 --export-influxdb -t 5\n\ +\n\ +Start a Glances server (server mode):\n\ + $ glances -s\n\ +\n\ +Connect Glances to a Glances server (client mode):\n\ + $ glances -c \n\ +\n\ +Connect Glances to a Glances server and export stats to a StatsD server (client mode):\n\ + $ glances -c --export-statsd\n\ +\n\ +Start the client browser (browser mode):\n\ + $ glances --browser\n\ + " + def __init__(self): """Manage the command line arguments.""" self.args = self.parse_args() @@ -59,7 +89,10 @@ class GlancesMain(object): """Init all the command line arguments.""" _version = "Glances v" + version + " with psutil v" + psutil_version parser = argparse.ArgumentParser( - prog=appname, conflict_handler='resolve') + prog=appname, + conflict_handler='resolve', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=self.example_of_use) parser.add_argument( '-V', '--version', action='version', version=_version) parser.add_argument('-d', '--debug', action='store_true', default=False, @@ -80,7 +113,7 @@ class GlancesMain(object): parser.add_argument('--disable-docker', action='store_true', default=False, dest='disable_docker', help=_('disable Docker module')) parser.add_argument('--disable-left-sidebar', action='store_true', default=False, - dest='disable_left_sidebar', help=_('disable network, disk io, FS and sensors modules')) + dest='disable_left_sidebar', help=_('disable network, disk io, FS and sensors modules (need Py3Sensors lib)')) parser.add_argument('--disable-process', action='store_true', default=False, dest='disable_process', help=_('disable process module')) parser.add_argument('--disable-log', action='store_true', default=False, @@ -90,16 +123,16 @@ class GlancesMain(object): parser.add_argument('--enable-process-extended', action='store_true', default=False, dest='enable_process_extended', help=_('enable extended stats on top process')) parser.add_argument('--enable-history', action='store_true', default=False, - dest='enable_history', help=_('enable the history mode')) + dest='enable_history', help=_('enable the history mode (need MatPlotLib lib)')) parser.add_argument('--path-history', default=tempfile.gettempdir(), dest='path_history', help=_('Set the export path for graph history')) # Export modules feature parser.add_argument('--export-csv', default=None, dest='export_csv', help=_('export stats to a CSV file')) parser.add_argument('--export-influxdb', action='store_true', default=False, - dest='export_influxdb', help=_('export stats to an InfluxDB server')) + dest='export_influxdb', help=_('export stats to an InfluxDB server (need InfluDB lib)')) parser.add_argument('--export-statsd', action='store_true', default=False, - dest='export_statsd', help=_('export stats to a Statsd server')) + dest='export_statsd', help=_('export stats to a Statsd server (need StatsD lib)')) # Client/Server option parser.add_argument('-c', '--client', dest='client', help=_('connect to a Glances server by IPv4/IPv6 address or hostname')) @@ -132,7 +165,7 @@ class GlancesMain(object): parser.add_argument('-t', '--time', default=self.refresh_time, type=float, dest='time', help=_('set refresh time in seconds [default: {0} sec]').format(self.refresh_time)) parser.add_argument('-w', '--webserver', action='store_true', default=False, - dest='webserver', help=_('run Glances in web server mode')) + dest='webserver', help=_('run Glances in web server mode (need Bootle lib)')) # Display options parser.add_argument('-f', '--process-filter', default=None, type=str, dest='process_filter', help=_('set the process filter pattern (regular expression)')) From 75b22d3f266c1caaaf2092308050893c1c10330b Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 10 Jan 2015 22:35:20 +0100 Subject: [PATCH 037/267] Add Glancces responsive design image --- docs/images/glances-responsive-webdesign.png | Bin 0 -> 269830 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/glances-responsive-webdesign.png diff --git a/docs/images/glances-responsive-webdesign.png b/docs/images/glances-responsive-webdesign.png new file mode 100644 index 0000000000000000000000000000000000000000..85090469b56ee8150197a3f6d8adf4af0d902ded GIT binary patch literal 269830 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 xHd?^8+dcIkk0;sN*xmyg_X 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 z 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

g+ix%|EK>yv8Cnt7$S1NX^W0E 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 #tyxxBY#x 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 literal 0 HcmV?d00001 From ca42eb7c9602c9bfe2bf4c0bb40c2c3a7c1fe87f Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sun, 11 Jan 2015 16:03:16 +0100 Subject: [PATCH 038/267] User can force log/alert using the configuration file (issue #437) --- NEWS | 1 + conf/glances-test.conf | 7 ++++++- conf/glances.conf | 6 ++++++ docs/glances-doc.rst | 28 +++++++++++++++++++++++++++ glances/plugins/glances_cpu.py | 2 +- glances/plugins/glances_plugin.py | 32 +++++++++++++++++++++++++------ 6 files changed, 68 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 6480042c..ff3fc4b7 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,7 @@ Enhancements and news features: * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart * Add the RAID plugin (issue #447) * Add the Docker plugin (issue #440) + * It is possible to define (through teh configuration file) if an alarm should be logged or not (using the _log option) (issue #437) Bugs corrected: diff --git a/conf/glances-test.conf b/conf/glances-test.conf index 4a804eea..e850a0f5 100644 --- a/conf/glances-test.conf +++ b/conf/glances-test.conf @@ -3,6 +3,7 @@ user_careful=50 user_warning=70 user_critical=90 +#user_log=False user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert iowait_careful=50 iowait_warning=70 @@ -13,6 +14,7 @@ system_critical=90 steal_careful=50 steal_warning=70 steal_critical=90 +#steal_log=True [percpu] # Default values if not defined: 50/70/90 @@ -34,6 +36,7 @@ system_critical=90 careful=0.7 warning=1.0 critical=5.0 +#log=False [mem] # Default limits for free RAM memory in % @@ -53,14 +56,16 @@ critical=90 # Define the list of hidden network interfaces (comma separeted) hide=lo # WLAN0 alias name -wlan0_alias=Wireless +#wlan0_alias=Wireless # WLAN0 Default limits (in bits per second aka bps) for interface bitrate wlan0_rx_careful=4000000 wlan0_rx_warning=5000000 wlan0_rx_critical=6000000 +wlan0_rx_log=True wlan0_tx_careful=700000 wlan0_tx_warning=900000 wlan0_tx_critical=1000000 +wlan0_tx_log=True [diskio] # Define the list of hidden disks (comma separeted) diff --git a/conf/glances.conf b/conf/glances.conf index f3df2a25..e42123a5 100644 --- a/conf/glances.conf +++ b/conf/glances.conf @@ -3,6 +3,8 @@ user_careful=50 user_warning=70 user_critical=90 +#user_log=False +#user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert iowait_careful=50 iowait_warning=70 iowait_critical=90 @@ -12,6 +14,7 @@ system_critical=90 steal_careful=50 steal_warning=70 steal_critical=90 +#steal_log=True [percpu] # Default values if not defined: 50/70/90 @@ -33,6 +36,7 @@ system_critical=90 careful=0.7 warning=1.0 critical=5.0 +#log=False [mem] # Default limits for free RAM memory in % @@ -57,9 +61,11 @@ critical=90 #wlan0_rx_careful=4000000 #wlan0_rx_warning=5000000 #wlan0_rx_critical=6000000 +#wlan0_rx_log=True #wlan0_tx_careful=700000 #wlan0_tx_warning=900000 #wlan0_tx_critical=1000000 +#wlan0_tx_log=True #[diskio] # Define the list of hidden disks (comma separeted) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 0f33a063..846c4da3 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -320,6 +320,34 @@ e.g., on Linux: On OS X, you should copy the configuration file to ``~/Library/Application Support/glances/``. +*Configuration file description* + +Each plugin and export module can have a section. + +Example for the CPU plugin: + +.. code-block:: + + [cpu] + user_careful=50 + user_warning=70 + user_critical=90 + iowait_careful=50 + iowait_warning=70 + iowait_critical=90 + system_careful=50 + system_warning=70 + system_critical=90 + steal_careful=50 + steal_warning=70 + steal_critical=90 + +By default Steal CPU time alerts aren't logged. If you want to enable log/alert, just add: + +.. code-block:: + + steal_log=True + Logs and debug mode =================== diff --git a/glances/plugins/glances_cpu.py b/glances/plugins/glances_cpu.py index 8db1167d..58e70361 100644 --- a/glances/plugins/glances_cpu.py +++ b/glances/plugins/glances_cpu.py @@ -131,7 +131,7 @@ class Plugin(GlancesPlugin): return self.stats def msg_curse(self, args=None): - """Return the list to display in the curse interface.""" + """Return the list to display in the UI""" # Init the return message ret = [] diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index f7de80eb..ae8f81cd 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -292,7 +292,9 @@ class GlancesPlugin(object): If defined 'header' is added between the plugin name and the status. Only useful for stats with several alert status. - If log=True than return the logged status. + If log=True than add log if necessary + elif log=False than do not log + elig log=None than apply the config given in the conf file """ # Compute the % try: @@ -324,7 +326,7 @@ class GlancesPlugin(object): # Manage log log_str = "" - if log: + if self.__get_limit_log(stat_name=stat_name, default_action=log): # Add _LOG to the return string # So stats will be highlited with a specific color log_str = "_LOG" @@ -376,17 +378,35 @@ class GlancesPlugin(object): def __get_limit_action(self, criticity, stat_name=""): """Return the action for the alert""" - # Get the limit for stat + header + # Get the action for stat + header # Exemple: network_wlan0_rx_careful_action try: - action = self.limits[stat_name + '_' + criticity + '_action'] + ret = self.limits[stat_name + '_' + criticity + '_action'] except KeyError: # Try fallback to plugin default limit # Exemple: network_careful_action - action = self.limits[self.plugin_name + '_' + criticity + '_action'] + ret = self.limits[self.plugin_name + '_' + criticity + '_action'] # Return the action list - return action + return ret + + def __get_limit_log(self, stat_name, default_action=False): + """Return the log tag for the alert""" + # Get the log tag for stat + header + # Exemple: network_wlan0_rx_log + try: + log_tag = self.limits[stat_name + '_log'] + except KeyError: + # Try fallback to plugin default log + # Exemple: network_log + try: + log_tag = self.limits[self.plugin_name + '_log'] + except KeyError: + # By defaukt, log are disabled + return default_action + + # Return the action list + return log_tag[0].lower() == 'true' def get_conf_value(self, value, header="", plugin_name=None): """Return the configuration (header_) value for the current plugin (or the one given by the plugin_name var)""" From 264d11ce270b9aee584d505cc72b924d4ddf2142 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sun, 11 Jan 2015 17:59:02 +0100 Subject: [PATCH 039/267] Update responsive design image --- docs/images/glances-responsive-webdesign.png | Bin 269830 -> 293649 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/glances-responsive-webdesign.png b/docs/images/glances-responsive-webdesign.png index 85090469b56ee8150197a3f6d8adf4af0d902ded..a2b35e23290dc3689ee356ce4114bddbc8bf2b21 100644 GIT binary patch literal 293649 zcmYhj1yoes8!tTckW#`(mx6*Ybc2L6C?ee<-QC>{N|%5F(uj03q?CY^bc29&*SC59 z-@WTD4~yktF*9e!^ZaTP@m5J17mExF0)gPl%1FM0Kv04q5afI)I=J&Xz5@w-LpPF_ zmW13t{QKNe_z~Q}w3pFzf6tKa6T?|n@ioRG5;i_RLCeUOaR`J4A}cBO z-u=&Ri--FMb&rkfa^cKNiftL`>i6%Gihrt7{Y2q0z%hm5V+j0uMV5$9l+K{T;cVt! zpT$_WugI9?{Bg~+^@)HY5shmqA@mnR50L>ykj?J*fpSOO;uk|>PnPp0M+5w^yp2{@t@vfER2H}jO%sSE@yQaB7fxC78d7QTl;^xUjCl5 zRTC-D`xB#AIN#RfE377Xdp4lGHGN$CqbxDmyih1ZalpFDTcECu8~f|%4o8oi>n8@; zcpStlMl{3xPP?X#1x1ubU#%qEpIV`&nj!2%>D$-_HedDk>ZL~ZU9V0@Hm|*J|7H

2QdtwdZ42$R#q!i+ytNIlSIXA!H{D65DV;VP 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%0ArRs<(@rPe_q29F;mEIW3 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

6Qj6@x^n=TD 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 literal 269830 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 xHd?^8+dcIkk0;sN*xmyg_X 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 z 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

g+ix%|EK>yv8Cnt7$S1NX^W0E zQBNOvgT2u|W8-S+2FAvs?t0htZGSQ5YmMdg&;$gUql1r}I)-*EVnE3!SH!WU*dN$k zp3d3xSND7V&e;h&9=FKe{*VH&PtO-9G1kFn{KyeVnm9#YzbY}TVci20$OGRIH!p{^9l^Y98g|uHsc~ZK~tJRQPsAdp&6;AUp zKtn-WlQ^Puz!DG(!rixoWad3S6Y&G{Zb>qLfzE?}%PRUAU;cocdUd#jj0=0_iao*~ zrdFOndkewRZw{jiw#{XwG-XejA_aW6j_qMZC7U@7Nx;SgJL0N~+;Nk~CyERp(gi^5 z`9+KN$s=Ssqn0x3j4>8`;<6T^jHbW&aNdLE6aCR8ZDq`z40 zQD`Vn^>OME@jq2D=`2GxWdKEqa0Cw(nOkmBWIRT2^U=cy90^MtGyJ^b@&xz=I{g8w zJ}zb%@sPS{`(jq?u{?<;+Fw(1_e^ay$rF1v{72g{D4H9tK@M>vcNaSz34!JEDgAtH zPvuL$c`y*J)U{EZ*|+f!l4`n(>lgK*V%IoJqq!X~0FU1rFqNC0Vkn z5|YYqLFi-6!BB>?0IK-`JTt>(1#m=^4>?M>X*dv591_)t_pTYy%D&b@cypy0jvSV%ipFM%Qt>zU}rE6XhU;ciTCX@wmX2wN^ESWuxowQ4Qfmr9T!lEd1wXKMXcSvAb$mLQr9ujzA@p+P z3gwamzY(D(2f{%uV*u+xZ@0ReLSL}TARP?-KCCC%Z)|AfMKo4wCtiQ=5BZnG^QrcS zvEue_^3dQvezphWad`XSM zTI+Jlbx>W&)L}ZO`k0`KFQ4(@13*3W6mQiYHgx}=@ zYHS3REF72u@n~&_L&|tB7&$Ww^xj*rfwcFYa0jD@RNzxhHg?V zt5SLvB&YsSNpiM3>V)*R7!&s->yaFth@#IJ%imK82nIB}&$p;4$e-le!;nI(-Cj-| z=oU5G0KFuM=|(aec-ZnaMjvuVNQ|}T!6ioRiQUh2Zx;b$@0>X9sfB#1GicN&QD~7h zHd#UB*>>Z2I$;W52_p_FM%aeVZsWUGe(OIo6{$SPwif0_5ClUw7^q}aC&RvZlanY% z#a0G$p#D=DZ_n2t(_mYSLv@1?AsKsmVbti&)IDXG(Eg$kP@BHq8lT8$sz`JDR{}$Ed zf7@Bj5f#?ltTi1KIa6Cf{k~^hE!v!i z#Ox!=Ya;P)z$~Z5udQv4@~UJ0Z>c5O$3wUstX=2kDgYfX$1a}#@_L+Fp)#aT3 z;B~rj-@~@bQL2SL)l~7D>7e=VLd}Z>DWE2m>_}ctguj|=zCM;u$LDEUlGI&nE^}=WT>0V1HdopdNK*S09_L8sk zblg>Y8jhog^yCMI53>3;ldBgRs!hnq$2Wt8p!-S<5EKT@gG92<0lvK63k_X#H=BHK zjM77L3uN{oVHfHI`wR&7jhsG~6wk+LHP0p=iOit})gnMR4?%-U6Lw1s1Q>six@}84 zd}w?2{>0R!lDBD@B^QVg2`~1GNdYeNmzUrZt2{cDo}|jRX;nnS5PJtF>YOM#5DK8L z`TpU3pF%MiJ@nfeQiSsEe$I--;(f${^2^mC)Cgp?vTU^Wl4p&h@6GfqX3673iy>g)iUtaC_*YCZSX7Ml;QH# zQ!YN$^E(s>R^QCmV7jjrA`R?7eFaU4>;9x%h|wfyGodA`mdyWt5pe^WLs*m6eA-_s zy;$k|hq;6rhZp#0Z4pi;4OV)j@4DT!PGjD`g(t2Jyz;+P$(RbfdiC*XTX7wbptmD} zhE@27)}K!#zbH9srSS(oZWqvPU&IC7^CR)@bC|I(gjR1D$fn52rO9EJ@|60MPaQhn zJQJqE8-G2W`icDnMo3PpKD*YO|3}j~MrHQ?T|8@=G})Rw*|u#r*-e~mo0IMCY}@u^ z+xAq?`8{j>-}ItZt=75Ex~?zw{_JVy-Afz!+l2TrKzi_g^*w@g@szv`Z~$Q1+eBKq z0H|O^^fa$p(QPCPSM8t}*W<=MVsc}XGy&fj^6MJ{WH}8@Exq1{03dA*9H)Q#U#ok5 z&v2s+bKBVM>SdDr#6--30ov@T^mdI8t#<7_!cqBRvB$^wG+$MtM4# z1xIe{^2q1>UO<_Wb940(>pPzF??hpiHJl2rh9Gh1ly5;d?PL@oS_2z}LaJ}$%8tqP z1ox%R$0+{h-TZ=g{dN4wH8~X*cOR4kZxOf@+_1syHk1WunZN(&Tqyg78A3#2# ztcC#4AuIkOB$S{YSJq}Ai(F%lH-%S23;z}`Do>PTcs$^jK1&kLgh(I{1}7#ZoM4Iq zjV?xvAfF3eNktqH28`^4u|=vhiLoC!1=M!NE4hg}?)XLn_zbA7 e-EfI-Z0K*%Ao|R2a&uURZ`{vN0t6u@CbEq|=_RvPMkZg) z4i6Rgpcvq05eZmoP-2-V$RP%#(upXdGc&8Ksp>i);Ut>n`jy2{wbbMPfK86%mY$ON zG1`);sg0sLnM5JR*nS&=2RgbXRv_#oqT=V**ZVgDa$o~erC6qBe-19PW;(+WA2#a* zE&akPg$N=iBez7#&8H$Ko5NnJb+~}iieS2Rrx?Rv70cVOK@md@$z$Q-3Ks=+Yg8ps zW5^67CbHtLt>fNL@%GndIyw@=@t(hF#Vq`H{xeDW>2P!#x|a`oE*-YMU;KLMClZiY zs{fbsdFg9@IfrrXlhJgdLWh3+%XjkB?5@!wBN{dmoq35G^HxEAU?<@a>d}vsI!|_> z_a%tX(!&#RU!ohC6QgY6@eoE^*F$#d#O=rq?Qq|?L`Sl&Z+%dvfn7Zrzi+fiybgUXGYAoXg$gABnF|D?4$lDb z0}IkPO-me#13+~r2@$%wfY>jTBi|kk>@6lSVxiJvwb7wio15VYAUQZ!S`K;GD__}# z@zG)kRl4Vg&YwpA&`ijp3q>ujFH>ZU&sewuDN3mEb|r(Sr`%9e#&x9C{T=#l!atw# z&;FZS8T0mF-H`BAJBAC7m7cg0c2yhl5Q36PuDx}K4J}qo-tn6(QK3SS5dx?ZCJ$%W z{@9g>p$#2_fNEH@eV-gkY4_9oYO-su?b364n%{U*jcNi4HXfZieBtMK!o{-u+>(@e z(R-Ya)SFpl$K&b8x7&09(rWjsKNa^E>uVh0iI34_GIigz(Zw9H;ZX#^sd9%{klTr- z%7nq8z|mo($!nKD(7EljZ7Hic_a^k0~lSDefU`$|FIv zRBcno$8grs6ft{qcFn}e=(k+A?tiEdELYjHkH~_E;e_#r`&n6oP+DU8t*{M`as985 ze|)@wAo@3~P#$}>l!C5H2^s@!t!ddl);`}9z`WiE=Rdn0jy7q%TuJRVTO1hm+-g4nK9ffci_jrD7==d*}7W?v`njOEPIZI?e7G(^RCZ# zF)dYjciyBikR$(F)zC=DyW75*Z_3Fh-3znUsP159AKo^v*K?Tpd8cNx8p+KVBe)~p z?`8K0PRsUHAPf+E{nbunyuNuynVbn%u?!^O?su`Vii`|0ltdRZLHxGmdIMV!$UIbQ zYxU)es8T+v1ujh2(T;6z*oh{lLiR-bBrtO7$^q+N1i~>as7UiSE&|Z0(qk-7EBY|);kKUQ;dF<0 zM-#P}%_wfriXS3{;UKp5{FdttJg(LmPx3RiV#yfY7GhR+I9L*Uoi;SC`q`Zv9~N0^>LYu_25 z#*ZJlRktqh1pbB7bNQ~F-pY!>SwB7X)mDC;L#s5mNx}c+`obWzUE6e+=ZeTG*Q+38 z+`KmELPQex9`FQ=+b4JIQHnuUMm|J| z6sdawxrg6d=RZ1o%$Af#9uZ+0r#GCRDurvqJ&+07{dXs=h|~m(F1IdI1Vjh7DH=7I zJBa_5rn)Cpl@8|qROg`SFvLbV++0Lf{P@Ah#wWG}KYAQKRS98{#*2KVyC?Mn)t5?x z21No+t>1~yu@yhvPI1g?-ILSP!v6I6goBGsX?yN~_Pt@`WNFID12mCh;1gUgLUU1@ zXwLb$3SXuB5tV#!GxfGLOe{);3x%0drAwxQy#sp%$d(#Mu*SSTP9!*c8TFxhGk)p) z^eP;w7I?piJ6727+$+E`l(;no$9~cgm$ypzw0c5m&AnFzHYgHgf(Zm8d1lgvC5If z1azqvR8fz%*Gh%D+P7I`i|W5US3Muwl+s zU^VjZm*Db1I=P1b(*jt$v$-};p^-pU9o_;o&GtN~r%Zrxr7@5@)7nnvj1h zpczx~t68*}YqZgxgfXLt%&ulupRDg#-ET~s_ws&c4;H3wjgJ^xyXqVdY)5uG>(c?C z*=x2ycfeWcq2PO}xVm3UO#_XgH~;E4Q~N{J1#y1H6)LDmI#@TaXQ9^eUogfH1;vOp zQ@pBTfQfxnOsopsA$4prin5`RSJ3d6c7XZhk`-U;ATHr(;>@Hd2&fRZ->-ZGv4c(OVGMxn z9)1qj)cYGU*z?pI5u-j03G3*sa}&TJ1>L%}gP)|Iv;nz5e+lK=cL`phtx*zA~4W zmjhB;Gx=<@vaY`Kib0*~oP6CfW^QdmA48mJCoMfKA!(r{N&INQ8RkeLQhzpQ$BLp4 z);6{}cKd}33sJm2n=6*Vi9pvTsoM@JIjZ-@;)1NI(e8q=+JB=H{+!Dd!Ej=TLA@ zIlT_gIG9`eADy1qVoEe)KSmB5@p*n%{Gz&YbmN0Wsgi(tGQxk(9-qWp%6awiaqurX zfHrbJTg=Gy+CGE4oQJ6@E|nk)=Rd88oDv8|k(4y)b4Cc8cUpxsSb5JdU~--AK@Ks; z>HIi2T31bM=%2K0WuF%Kw`A%yO(M?N+!7TpP5hiKL6I@&@~zehCls(iW)Md`FIInK zF~W_QBz&6JuZTpmZ+yHmKe5@0u+M6Hr^WidTW9Jm4D+}7hOYjjt2zr%)U5ChsK zLxJIs@YC#L(7?Rb#p<8Ac_%R~F&TKM?%of<{{SDS+P<6i4MbeZx$1vwj#C1I@DkYP z$nlXb%Dvkk<+Vdm@w|mw`U1?^bcg#J+ZQyJ&=Q2uP3W|=w8YgADJZ1Z+Z-^q?u3+P zS-;O3`S@SFO_s%M!CXI(uKr@+BlcPp+?mA|u-aNLBy~OT_fYT5TSpuUibyE-8?a2z z7UCxviCw+( z+H#W)wO@vJr)`?mU!@YHODYVo&o!&*epmMv_<{&FhE#1x*K}pDVjk@{jqCN-2b7@e ziatzbX~LRp)S0ZfgzN(T+yvRz50lj1>I(wpgRGQ~sK1E}Fh-S}8b7Um`t;-)VrQnN z?e-RM0m4l~?EEuaACv+d7%T?;0lP}ay}wx+<_XGDaC-O&>7BSb^#xyD3jC>m(r1y2 z`w723)vv0)zCOX($|s0oUhE**Vv4)jwv7eCBEyFi_Ry!onLp@z> z_TDtX+7HGv$;&G^o*lZ7!Vk-5iKT!G&!Xf__EUy?4c?EkSk%gp>OwVf?g^t zr}Y-Lj;@iF`f4(ho=#Q$e2oMy?MgH^B-`rOD|c~Oj?W?x3Aau@A>EmNqJGHTQR zJPrtrJ=Dh)tZ${a(T z2OOfV-n@%V)E1xIq2J0o#xQ7Q6$s4lmn|u1-I-f?+ z!RSf^tK7i+7$Nb=q$Dci7f_S^*_zC5*!@SH1GFee3QjHr$cer7D!*j%@DI)1GEb_T zmwGdFyd$ZI{h^F(+<;FR#~#1oba*6x*@d&_>XqKJMnMpGzKPXL%P~LPmpU!~Iu?u% zvdbMt0<=`7eaH47xGk?YTlr{=G=mC59{6i~JUmmc!hsFFj;?tY7F}N7^qwnb1D%8Q zm%FG#bgy`lW4fDbsjq6&*S&8tSkJVb9Ln*siR_!R^5&Y#^^QA!7m3f~kRa|2tro6j*NWZ{ zr(!-Gul7B77tTQMB_Of7Tgclo`*e9(1{{uKM9zlg>PnRV2_*i-)oEj_{C6+I+D$Ak zzQhGr>@A-d8++uK-J*wO{`)6#4cTR*JTc~)@9$IJyGK;VVg8(l@HmAlfgbHunLmwm zU#LyH?JgJv+S3e>oIV3zE9xg~|M}dttW9!yjkQQ-d3ToDUbTJg7o;&-o3Npp*HMdQStYr$rd3PVMREN=>0>%qItFYFM3hY&kEO-UVm9nsRjnp_zdEAo=vm2 zP0F0t;74rPnEWtCxTpOrgaSsAiq%TKJgZDDr;x^1M`nIcx`+tj?RGl4>V#1fPJTWi zcN6sXwV|6p5y-&Kv)I0${SVE5|0=SGiA#*}xT44eP(k1%vOS0vaE66J5K(`_oU09Y zP*sZ?-7ig|wGh!BQkLGOl0Cd2$#KFT9-$&>44-#VQ2Q!aqD#Zf#^!IC3Lr06v)J>j z9BsTZd+IINaZT#QC@3hf%VU(NVo^8=Ddn@p;R#No>4Cd9WmI~7oYw~m=Af!%%G2-OgGWJuGSAzsI@Qb%sne`{plrPHSt; z^7U5yaioO^XLTaARmGQKeBhzttxZjDC#010%-A~h$-esP%<$>6;(gD=&n9dDTF4JX z;q@>kqq*lASLwP1b5zu8{CK%1q-zdL&d^@qx1JJ>%U7M+Q*_v-U0S{0kg{`*`?#6{ zRaxn?eSxFQF7H?)ye~`x6x>6A7BUSpZ3aP5tYw)am%zF(d@^nRXZoe5;NDyo4I^qL z5o+jRJg1&lqo@`3qJ=icTbe0_1n##6Cq+TnF!H6~F-!Bk4lnK3N^ug`UmJb3ZC>sN zwCZQHvU2ius^v`l{63|zcc(>L%o_AR+s}~ants@Aw20fbcI|z*{@N;BtEg{jh{~e@ zX3+{%sWenH*&7s580YdCpRb?)AYUqkI%lzQJ%^P>vND$33WtJ3F7aNFG^%~V?=Kpr zrjOB$I#qs4$(=%lB`;tCEQv zv%*96ZmhZLBZTbyGOFaU@w%1UEw8M@b=95Bj-A?W(mAjG%z~Naf7*(US$u>6IzQxq zJfWUAYykves*d-pr?k@juwbF%-!svOO~wT%4hQAsEqU8-0{{39i8lHjA!BlQ!>b0o z9u72Ec@!8}K_F&scKO!0k`;^X7jR)oz$qSKgfK|jYLm=}7?vLtvEg77K)me1j1e$f z>i{AnODz_{h5?|>V1NIrTQ;tig2X9|(VqEz#*EmxwZCUf21JGD!-*{(|6T)#61J^? zVT~*)QcP7&YzQq6E`5>>HySg}?05v5yON^Z+FC>|GsKXQS$S|K zVXz1|_iY+SO`KH6zNbgC;V+RHP$f*8TX5(EDRu1NJmwhVlc`2~u>U>C^z-A53o*NVD$*EZRUqN*eLyoMLB3tCe)c#phcG@=ws%el`?jsB07TPl zx3Qb^agyWq@0sb_w{PBpHxp5=$B#zadDCy00Y**P2@$5hyD=<{@vMTCay4?=olxim=Z{? zWxk6i`?-q1Y8ooID+PDdlHLg4es4<71mB;?&b?aSL&3eeaFVCgodG(qCi}Kkh5gCw zdTIHsS3~{ObCm_bJN?3NZt8pF7oBft4~5w3$qDK0!Orcgb8|bm2M#0J1+6>nJ&kV6 z-8_>ykobD)H9Kx$>-boVM3KxJg(m?>|ZcIuYx zy5)&1lE~|Gy`AP)!_7W*KS0%1yw^f+HuTf9OuT+EkDI;sM1}IWL5DTt2diGeil(V) zt9-*C%RFn=i7|_;ED&nIBqYA1Y0IvJ{zt;~m(%-@T*RV7*JrP*yYnYf^RF$k3;HnF0FS+E){%lloK3me#8A^>tp~k0ak0z;sOVckpCBb~!J^w&bbXyyfZj%)c(k zON0_G;79Mk&wUN0B%eu5io}y|QRtCkF*zR5_2$#J^*QfR&09Y0zKC-3!1!*-g-I@v z81D5J`o*hjD`$N-wbM5Cu=y8BjhydeCe)jY=H(N?G}d?~pLfEcc1GhXsU8P`hQsbp z>@rn*Jy>(%HfAP1k=d};Cn~0d`e0@#B>f6Uua2?vKHiA369gtYLVa|(PG$J*@U*f3#)HmY!(RV62q1y`iZ<6w9RZQnVbtHlw1(F z0v|E8z0KICk0sNJw4+ZYaTwHR!!>Oiu&K@B#gWPvmwQH98~Z=vuxP{zlqY8KWxds1 ziid|awe(5XN$$jFWrskf$tmA{6R{ZdsS3dbbJmK(?FFcW|7D{9F)ju^~D71RA>7b_-#8{AQ@( z5oS4WYU!IVmhe3esrQz|e1k1kM%Q`|1$CeaZ`lN&$3$TJ z({r=$3pCLB>@$4qGCa@5`UH`F3xw1YT5{1{0xpwB->dNHdT5^7BX^7RzXDTAZ-2SXj#?$GkFZik;MRY+!xwN!0376mDL%&Y-pZbN*=aO1nGF9Zt5`o7 z#2ve1iI$#_;p%(vdLVydq*9PXwD$fry5qJFA&+p2EWEsy+vbO#KSsHjeA+z9T2i=) zH2C-BqKa*yYwP_w6uTKW1M5l9jkkzP_c^n%_KXKMTH79WHGxh!2c3;9XD{X>HaCApM!Ih<9qXEeWBLj z@PUJqPwh}Z{kJ}?LKgpIZ1>%Njtp~NE!~6mtL|y%(E&9C&2lGzFnr{<-HF^ieW1X9 z*ca>y*G6!9v9V<>w#fN5)EynV6An9J+x$!Fx^tl8~i znF`pYOGL@Z+FwSyG8GOE6Mcppe@{(`T}374wF*R5oFq1tZC^BU(C>}JFd?_Bs4{9i zUEZJvfpSk^+ROm9n5M4g_H2O`s0cCZ@^6y41NyA4j+hu}0oZs`xRF%m-vU;=@`*`4 z3MAeNJ6HiYC5-H}U94bW|MWB6)ar|Z8(OcXOOSX0{J?RWys=BLOpfo=`5u=Myy5Z9 z@hn+p8MO)eyuO~9g9GZ~On5&dQws;%@THL}E_wu660Iq#9wnStAER)w66tj8j0>cg ziUU3XR5@{OFQvxDfeGTk`^sz;?8UE8VtRj-C7Qs*BB~V0h%jn4ZUK@85_(TosX*fB zgQaaqN^vLx$J_`Bj8Sgcmp}BDnB*YU=3j>&R1}Gz_~8^K=NNIL*|_!a`WX`%rrbC& zCwdovMCuir?3{o5l-@IhP`!fO+3QTgEjl9Yu%`jU$AJTtr`#NP2U4qt9?rGRv3s1( z?Rx2x6rgml5HqJ};1>Cunwum2&wKbE*ZD31&V)T<@NSNqVfbVTUOa=)8C~q`Q)b>a zcC~rrOP2VI=TvYYRT(yU)ynvDw&y==j+xO?MUZTQ5-(;3rk2VuV?A(}24x2yNOW-U z$(79aP9QE+ge2^JQ!|pAIW9c&2kkoR9Ir-ld<4Y>%^A+|hGR9(2D^hLl80vo$A4t6 z^#+`7G1>%uyW5+XkVP9rs2oBdDEGAZiPAH22*>-ycAHeYlA?Ek%6Jj2 z@y~^mLwzuswO)=ezetg8u4>utFwy{h!6Io$)ebC)bu?yMp0SRewg|*867;%a;WA|* zH5}lvB0!p_$d%+G&K)v~taw)fosGt;xZoN~? z!6a#=Rm|sKAQ2GZr{QdqB1|6{Kgq(TFE)NSVoq$Vu81B&(fz_cIf&O7)jUJPkAO@F z-ltIupCH+%(fyXW)&>I#5spgYxb{xrOa_o+=>0|0K9CNgB^#vK84?gu_j! z!rPokRc8(lr)vKiD1gcG;o*@*17PgsuCm?p5Q0!d_dnvx8f$23lSU72@d>)ngo|H* z4N(eOv}EDn2nAIvg$_E9+Ml)4_g7hFpWQz9LY~TK1tmG#QbMZ`$}|FcBJr_Q_3{;k z9a4EeHRK6UI*dcqSsN87q^bk)iwN;h{%DJM)3pU;GZ`jPMVVl~h}bHV`9u zcN0|-wyiEp)APKADSPvrWf(tYqF{K~Iecp2%49pA-!2$as=6@pc8LP(UDc8;6IyxW*Byn`R%}zi# z?HE}c&(HtrjoMFb39Gr_v64~T0||lJRG`xJ2<@R?4##!@>!jjGZn_xh*3Nk=ht|bH z>aP}yfuv0AC9C{niVO9`Y5Y1ikO0b=|KpO8Z>&n)AE;yB}c<9{8b>mKhwsoNO8b2xy%%%K4C)VlTJM zZEb@GSJ4^=aarb7=q9EgwCIqn2iu%3X#Tq44C}e_x5dag*+$Eon{Tr}UGs~d-@4hs zi=leGFJd6HfvHi};H9?mwh-nW0fAxgkgoz*2KyzP!e%I> zk=@_Nuttb;mCI0|kkYe_A7@1({y=17)pckJ#xoVuTf8x;mq({D9XqElsHZse!EMz6 zMH%@$-{~Y0209^crWhG7oJF7I6BhX#`;#uD{vcfdss+Z0D6WL5Kc&~13e~$N#8%On+sPUhWG_b#+{CkEP>E7E4niKwZGDPceea9-bCE;0-`geBp9^#*ou$hqov%jRX) zQt73(Yo(y%g%na$gb^z7d30yJL1gmuzmeDBA6;EnfvWM2<}-8cOMy`Ze7VWfN3E_` zgvdnv`v5dH{P1s2=Q0D;>EiCg>q%B9@Vr^4%(;GhynV&p<-?rK7SA=b;EVy(;K0d# zm-Bh|IV3^kJ@DU?xn40hJ;X}p@_uE#>UyKkk`D#gU?@=DKdI*4X7Ok{Uxjf(VJXt= z7al*m?y(f|9_Kw0N9rAk->+PDup)Amaq`lb$$vq^1m`PLp&vIGkmPC-mtC+(6_Uhw z(K1vPm{pq%=r?m)0VZ*2khBd4dyL)6_2XP5J6sbac=fS$0Lsr)EmmNJhl%|ILrY6X ztdyIK44P0NeeI{oRgtNaI{-0;=M5dyj3Q(6VupKk?N{{(>*!$g5Q zol~nhiLm&q^w=Pqx$;u*Z>Sz<>iA+Sa zy2tzb)FmeRu=Vxf;UXqQ^M6_ZAE_~5C4x^>ZT~(LT@rS{-dtu($?0Mgl40O0wf5+C zcX9PIBB+=9(Y9){L!_9o&y_yAWbGo3A?f)va@wKaumdiD#e7=n$I;8i0YhkqaIov9 zJ1lCbZl_P@6EPzzMxIrvsGDIza{Bl|4MC_df9yevteotOqp-dJ`w(EL?LZ^8;Ak6? zxcCkowDtqU0ELatRExOOspY6=;>|%=wb_)xrU}zYtc(CM-iy+Z$xTK78m;V-Wajj> ze*q<8`3h2!3Pec(mx%-{gM(&Y`wBB~Kn2Ffq{X#uZ9IY&U}P04PC6&MTnP{Yl<)d- zLWUI35tIJ$JoZ`+bku)nMmS|PTa2XgH1oB~lntt8ZP91=$E+_!zocUBetSnOKl8d$H^t9uR{6Fruu_rJPGI?Dh8V}r0t-sc-@Gj2MWF6vS zh9eFxFJs3aDWd=(K3?>p`Ie;-5qZ}8j$DGR!uM;1R;6$CL7G?n8-b)XVge&fr~$WHvNMlW6}|LNdc9lfkN^9}8{Me(G4A^U>+^A!qe6%2fFG(D5oEgb^xDHXTY$*qj3GBk$koyH zeMllUsq{#9h7DRy1s)Q)f4Mc}cga)jQ+-Nb$J)K3pDxMpsdUz8no81FXvC~H4!i5k zt9O#eF}gb$z?kcfU#3EHpdTHI8NcxQM|s%z1PshDIY_M`E1*pYtuK{VX9*Seq^+pf zuLe*IKA7sXOw>h^uzOxs3 zg@m6d$w#5Ldh89+vN2Rw5AzmX(8cS}K-gxhG?T%sQIFd+pWT^-+(vI*EqwaOpy>+> zx-B%_$vnWsNH=mz)3Gu`h(~_kWdu`ugzkO{hgS*;5F}?bPNnCWvb6>-S0Xd=hGi_OkjwRQo@BM zR;M9iWlILX40$5ZeA>Yb8C-mtr%jJ)Te_P&l&bGuPxe?(X-y<(>6S3HwDb-(D>K}( z)Cz;->xG<5{aYz%tN-S6BFloq_C|gyK1)b}kY&(|4X_m~%gL7E-|K#I9}%uoKtb`If#Tdeia5yE|4ODGx}BiNUZJIfhe30Cne9 z6VoJO(*=@Cj05`4GW$l1FbdL>e5jD0E!Q(?E>==Qx*R5+3w_58chlMJY8q2OPyZ$B zO@HdY5x7L-Zxw7AnWgeOP$X7kim#x_X`5aJ`?$x^@`V_%o$;Cv_-oyaKYuU^6`9na zJLd=M+EQ00KEU&mIMq`Qig5FeP;89Q9(Yq;$Czo*rnia^{Uy*Y&cr?%oNI033in4A z#?$4n_UO+VHkdbjf4(!-YoTKR^xxn3;y{Q?L7cX2{O|g-)ArT|?H_fmbZx~?X9Rmx zeW$NMN=AO|0F-qx|Lg@=8bUEuo$>1Nq{&Nmoy}OXz0nmA$6I37iBa&od5*K*voXWYIktl@w&#PB= zE*0!RkP$_MF{arce%i~C^q`|!50|t83;j`b1 z=lz}l>!N6!ofPS1f8O9*h>*5)JZD!h$k=tQf}OvACOU->(Jm={*&}Pql7B;?^YOpo z7y|@86g<$=4@>83NTZ2d;eGhj_~xT8xoD>P1|;36WRLYcmHwcka53+tx5m&zJH6b5 zi_(1R8-k2HJuU9uyEkt^WegVT0eXj=>)yI7A87+@s33M$;h&BE@^F ziN8^5K`3rjfo5jM`)kWtFtO(5Z;sd*mB{0#_E#UBKCcmH%e-kB{dWn23r;qtwD8vE z^+iT2ND(L%f6t(Vz=UUXb>vQO^TD?6kb+s&!wN4a?|6ZkcJ|SOl)i^jTV;a}QvHKq ztYtcoaLtkYdj#*BER%X8 zGPwPzZ$r%?I$jh7dx+9oeyFZUiV-dvPlF08h)x09W58HrcCmlI-f?(g8UqhmVgG9h z1&Y6){xhbNZREBCD(=D0GB%5!*F?C15fP3<&lf$|nLA5wYL+C+&J|L73n9g|UCOuX z>gt5odwS!JjXS3EBrViihxEd`ztxs^5RSu9AAW`f4(5sbiO|1~Oz?RQk8X6}ifGe8 zd85%hEAR?gV{Jy^ZQW~Zw%E2}V?|a88-RVjJr!^`*i{gHamZw>6j^)a=Z=~G)Oire zp5Uj55w;m#Ib0^m`t1ou{MHbdy9KPzMax_ruQdaYcI@Uq4gDAa;e?r`eE>fCm=FDB z6l>jIGVNC2nGtzigSYC^GxdOvpI%?KU(MM#1MfT0$2Dwfam-bFX+*2-R_F$dHN9s= zAzxN6RRmSaIB=EEHR4z4wTIZQ!KW^Mo5S~3@&3i0u>l4bOB%F==2sg`J}>0=(931W zFwLF8;P7!Sb-C^gM?<0IrT{>b7?Do z$ZzuZBh{`!Aw(^@u&eVZmoCnve4%;8oLsLxo!nC>-uAzfhwGcU1 z6Q{_6W+C~koq}c@V=T#u!h=GhyjIv+@a)%}C$Q>Ri4roGBzf9sK-j}KkKjs9B_0+r zgIBq-&(k$+(9KoX8Cdhj=}-hQD$^@v!BbmfU5i$&sau&NSLY1oK{?!^K8L&D&O^4mb$d zDl4%K4U21Pd%Vo`H}7sNM_4+?HG0-hKJeNGk^z-RSNPI?*?nJ>;r1(kx?!9YJojVg z2n~cDN1TH!3KX_ki0lygHD3Ur+J?Xx=f~R<(%-Dvb}NV9)>^AHFi|!<13qpv zOk!f4^9(N=r#Fa zmt)NH=9|Rl3onbq-QN+tf{F`(0T4K$upG4$^Btj2i!8Co(EZ6fWFH;83>A40TVh4x zfX%@;i{CeDH=Bfo@f;E*Rt^S6tp%-@r`Rx8oY4$^ z_jC>kCr-0?o~5=?rriTKyx)x;Imhowlzq0w7@REX&;N{cA_l_HvP0)>@hE_VHHYWN5hh=E1-lVGPKt zpWd&2a$yGBg!I_eXm0Vn#pa)8dhgj%jKPdIy8k1wZ#O&qubayi(@VCJv1lbNiHSCD z2M5;Ql~RqVgR$Q?)Fbz*v&bKPhNbK8 zl&1#qeCuel0}D#GQHj02r=uV!Q^+Q#la3t9L?z46EolfUrQ#DE-4wt&SGt%(k8~L2!gZ>ej=5^5dHf;!3NTWd99%gKNlP5mO^W@1sMp0{DIx!AdEFSgvT=knSbzR|5~#RpEA_@HY(?Mik- z>mhcc-KtP}2Ik1}()g~0PHVYvTliQq3-uj$^(()i7R#g^z1+zFz? z40(L9%`OPMu}QN+;GSYqg*-4)Mu09d#BjTf{=p-www6iwq~MI36hL7CcZGG@k;jLG z?a>XFWZQz%$i2@Nwa7=!7SUQA7avPViu9gaOn)aV@@OnUK`WyIX;x|cG{(pQ;%f5K zoIt%~TLrX&;vd9XLh zV6JZ1e{eUPpn!4Ze+{2@iY0P#eD%c7z%}kt-)a(2o=c$Z=fnp-_7x&I_tQ zx8?1*1ItsCAtN_$C2-+^Qtj9mc_g-BVj%oV1n&BR9;^GU+lT|}rob=5_40O;=W6Dn z!TtG~q##knqD^@FwG_0!a6>&LF`VXWpXE7D`|soP{+pe_TY6CC)d6JSTiST6;12Mb zmFdLZIGGfVEn7gNCkEsxQKghJFeJ{{oooCS?wvTqDT~?V;T|7n>m#NfqK`?U!WuVm zqUf?#(SZx)dNH|Vh4oR_s{W2|W16t~RVx3-K`qGv>$NxV9t@kCh4q14Gj* zpw-_;fF2SrrxM;S9=uIA%twHpRJ`#?}Xxn$rrZ+GxmJ3 zJ;*Pokz08Y3z8|Q9M#^@L|wQ;igZ6NwYw?e2(?U6c|cd)Dv>UH{fJWUp6o8tc8k1d zzvtt~wU;39p8#!3S9YWLcvWVeWj1UoG?mBW9$*OL}%bFyb4buEs#-GV9i66q-@#%NK z?HwyTHGm8iLNCbT_V1b` zFQ_8#7Fdg~C7Uu;2i#q{KfTm}%i3~OA3bu2p67mR`Lx{CBH7t+n{i$6Umg5-!?jQ* zi4l~9hW?{jJWH9DkbbU0rbwI+C7j2sOz=Gc0Y@y3Hi=OcW7s96if0+ERSJG&zvEjT zJbhhk}SKQ)8~kU67_S;c;?&@)53 ztYiYB;Z*VDcxenAXbVt4KAfV9EK6V>{NMDib!5;(LqiVdNct!V;~1kETHNZ8Ta7so zK@k3+GZPjqd_JZ_$Z4|VxJlDv5B@>NwD54LFl9MuwY<3T1g3f@hk?1dZ@OE(6Z=46 zVd5NU!;Ty=P^aA@GsQi#qA|AAc2i~vpO|iWikI&c*r+re=+KbD3~0rOWYdaAfr!A@ zLTKTzl2ZcUE=KJC`cqv^4bWL*sg z@M+i5s3hWKYPcJ~s`Jb5{-M-XpSIIhi0?`QKuy)vaL&HDKJE=Xd2@vkY?IqZ-zDTrY`>Oe`%KxW6a-DT01fZ>4l+ezWN3 zaEc|gbGJ**Djcb@;o)G_A9MAvmp`}0r4;u{81n~b(RCYmMQ`O-jR#BPOzrEBNtIVSq!87|~c&j51|1j|QRZY_`dU zIgK>EiiB)b-I5qhYTpyccR7N7zY6k;N)r;F9Ed|lh_OZ;i<6}fJ!^T^4^kzs+CvRy zGDHV5zPirPB+%3}?DdEgXIU})1(zC1Oay)lBrgd?CEd1y6%%w82+hPIKF(1DqfAUs z1I_oGWbvv2B8*tO=R|BE*v1n4)HGNcAb6$BSiodV^QgG z6DUvl3VdiKWXZF?+T-V(vJs1opEB{<9Y8jeF&!%7`?r~#?1Sg$_)7T3=~}xZ5>&VV z&2A8ldatX;0bk<14X=M9VH$S;ZnY9qWqy7E6I1^mjfhZ!KOnNAy%8BpFD4brFyy11*97!M7oAfrHAe=X=&*Wr39qAyBog!`>*vK zc)*#gwfE+IpXa`>Yg8Jc<8Zn`|1a@QEl?ohlT_Z&r2`iGt-wW_Z;0TdO#upkS6BD$X80;`uDnsMhlUg-E|P~W9s)+VzC-n`2<7~~%(O{V z9WwE-b*PhuJ?||EE_+`vrx)kh>aRvlBSPCFa$!nH;$>1twOv$}*Zvt9SvqOe$;c%9!4V1BDF*NKR``x4<|AEJu?kHB&m369Z`1cDV z6a4ByJyi5~JEazG!>pFGS;@=m`!qbLD}zy-<8$axtia>@w7=V?FG2|3RgicAn%c2L zu~gQ_!-yxMzF25RB0gbV2ML_XrPcgpF|f%iEH9a_*9+jFy)RQ_E4w&pOl#El)X$!y z|21p*jkcOnI{rDomZc^BdYwJ=eQ8^rwD<5j%sSQhZ5yIY++?_UIcls;LAE<6@dRIS zO+KR)I1YV$n?8GT+MogXW9*q?C$*cX4izEX`3T9nU3rD4v$>o*0XZ3Hrm$SlU=JdcHA`0S+Ue~e!RlvOc zcf)UOD)RY@ws;TN%W97kSIaiz(CYHjVg|C2v#(w^bndW#@6Vi=;;DkiJDw~+<$)^Ib+DifSUD9fjCxt>|E9V~ zdM1Mf*+Xy%F+wMw$F$Qfq0h=WSzJK1$mMz2BdvT6$aAB&Lv#KSkrod;9Uafg_b4UydrAvMLs0) zA=psDpw?IY)UxJG4?8WI|jPSJ;V z+=7CUd6>V>?k;1j(*LqC6?2CdOA_|>3s%uvNVjOwU5M@MaN;p149ucbUh)JX?z)|` z_RdHkXn5{?d}}Rcd3hv88Wd!^@j%sTs#T-aeLC$9k<;V?hDh6wFC3jJ9PAu*a^AiP zF6|KnyQO}z`imY5s}!NYIO_55?NDvF(9N0ZRg!OQImissc_aMJdYhuNquV6FVG)4g z17igsJ-^P8kbG|AO67%E!~QKa6d5BFq3STkj&Z!lX-tnrVIgRKE52A@@JCgZRvF}s zLhu{S&R6n-dm4{0u;w)RQc+Qnp*M^mo<;^2ya!SfRRv4jc)=F+{)xp)mA`FAr z*v|`byn$>%U?|{&xeE+ikm9N|36ou-RbkJyHi}U{>jh`6*y44OjOKHDhEy)1rP4sgd5tNdsm~^-rrd6qE8$;6eI+0fZk=E*lWC z)N+FIY98+Jt`pSQRc9X-Rn^AVa2`EPdk(Uk(thadyQ&RLuoOfb%V!LoL2CSkJ3ty9j_78 zy`Fb!NuelbJS&#Tw2@G2KdgnCZ{?D8HguEp}N-y)wC;D_K#pT`NHTc{9xwSqGT} zDQ`0y3>GgQ(pt8fXzL__zH4a|+LEScN6mK9@TQoitE&Dzx6fEHQ3UqDA1bE~8=ap6 zzP1EelK<Q{ZM>PG9kP`vE2rlP2h{QrAke($;kTPvYjJ;0Q271+seU{n zA6G^YttWuL*R#mwA8V}MF5bHC<{KX|@zGL`Pm2Fh2P*Fnj}QKMklK}{2*O< z`rV~dVQ>$Z?A&#H;>8`J-`FOqhaME~_lD5MpUP^*jjUCV(?5nAx@M&6T9lf3G@GP; zPuWiqQfqqAeSWJ2A*&*ip4ce2O_9U4#Rock^^(7NSZ3|6S`A0Gd5ZILuyHX0b=bN2 z#ez?-wCB;uju1i!w6$%d>z4nCiqjC1!TqgApJO0;a)>K_+8R$v5A34J&`_E8pcUCK zkj@i$KP=l2hUMEMBtL*Ytv&5Zo`HpmNcbDjo2Ca@#`kec2bAycr7KrYo4NJ+GaWe~ z+ikjTxILwqIJVpvJJf1h=I}UOvGn#PSDaQEoF{cN93T4V{*T7Pm3aHJKgS>=H}-*q zm!Sn9T|V>mT^(l-_yfPL*Ceeuad<7S_Wg$V$fdzg88Fq^ ztLEZv>{T}ZYaT3yDsP8xqJelfaQfPzfEbk<(v-t&X0#ZW^fY$Wdt5nFn1 zB-r?sr3<%O8@wsg(C}$fv$JU=y<%d!UQ1F+?Bn>8 z<-;i49jftPE3E1*qtmBR{Q%^Bb?4#w5J*~n@5(K<1t1E$UTs5`1L$HG3q5nsz9*Ks zW6U+aPkYziiY$Og3iuopT{Dp>4ST&=PctgaojAQ!fcuh(eEYbjDB5J64sSqHsf4AZ zr~0{2vn!Zs_S<}8#=Nf^qfa}I_4udLj=`G+?J5JG@PP-6!%uI3hJwWXnjb!T%(A(g zTha-9!%m0lJdR&K=+y^b2291FkVMY~U&dQV-^vE6)G#BE z-ccP}5rldYR=)2z>0uuu`B9H~zaL$%@L=0&twnw)AG){C*k&piVzq_aDyhBMR72 z?EwYeoSVW}?t48Tl?g1l0XNYg5ZknET7*>SPz;jI>};=bstYbVYk*1|SGlli+1bor zmLf%WY|GmYc|7Q3ytX)3)pVwyH3jcU3Od4Du8fth-u%`lVve$%03^tD~^e*ilPP|<=hE9 zUoaq8hV`4Tmjq~le9xwF z^gekFY_oklL!^H9b~<6g%DnA-B>m+;rjwn6*Xz?t8~r_Wo=HdC}pNXb0Cy-EC5$sD{ABEvIm-$Jw|{^_po51ij4LY7VT zd+@*2YcF;BrgvrcEO$ggylYwAk!aqvN0(#V)r#Xo{4%ONVQ<+;Hpzw}|XqZ13$wc6U+yRcn@Y1WFXs4uZ~MGBkOM4g_}`t)?^uaor}04FXCH zThwj;Ubo+w6#S%;Qr-}nXAF*+r+kD5MIAE!LN|3ut z;?@Ozvh7K1&0q?4J4eyCX-}g7I;5-tVqVK&4VKBzZe{AKxeR#HY_*LYYVDArD}VKx zqZsorcgc#$wZi#!o&>Bcv=YIg)J39$YxEyO#goTo=_p}L8h^56SKoICVWmc&`b^wz zAjdq?&E3|)72TM(4og6)KPNB@eNoSTR^br+Lr;rpl220Mtax)?bt2e^dSn$p*}c{%P@3!EKfKrmzT!El&79pDF1?SzMHph`;M1zQXb} zYI6-RMd^{r%Xmz?-8GIs81sW443AV)?6cjhDL1h1fyHyc2o{Ww~v4o zF1YjVTW9XvVf2GJuqY}#f-hKgUO;%F$c#Z;a+VaLa$bHkgo5v19_7s57y=^2SVc#9&D-HZ(_` zP@E_~FDf`BE&_*J^^TLiP(7c+{MH9nt`pYyd)Wu42IKQxRj^QBcQQa@J%t8;#<|Xp^7ePhOwIa%pYs&{rJbh5nX4t7j*Zwt<=Sh_n< z!9otn$3>;0#aLEDb(-j=!e&Wg`zg%Kwy9{*SK!m+S%67fnT)Zia=&1&3ZMx>>iTFS7NB+4V{6NLz?<%oO+K&_}A;QEe)h+{EJT2l}&QM3CW}M_@y6w<}lF$@b&!zWe)t zsC=~1y8mA3|8A_HP?yXdiO!X$2Nw~C5U$tg`%}u;pdGyFXS;!m=K=auuZ6N=+dgOS z-@#I`G-qf*CV$mkxM;WUQ{86YG4n4hERZTi6+Rc3q6f#29C`LVhfV`JGq@kbJp_V=*$qkBHg zfxu#MYhN%jSC~66?+{ppe4mnQ$S*^J>M!oJ3bZ@o@T}#%MWGv3{F?Cd&1e#9YaaKW zTijPvxFUK?Jq+WYP8g}c{qHaERDzo%mfo2hCC>Df$!cP>VtjxH>qJ_F9REYB)keK# zP2;|V(pie4oH4XkZF;SMq?1aFytBhC_2@Os(|17qE>5i$*fFZp6h)s=q`p`z*cg2i zqOu$<@ZWR`XF_V>R#T9ma45l9?fE08sL5R{oR|{{( zw6cbpYAJ79_@`HDZ98wHtm=gH%-wt*A>e8|6m0?>^5~tRb~;F~ipu4WDseF_R=LS{ z9Ao2WS9HK|6O8x?>LnU`PF(gcUQlJ44$2n-t1 zo!T#fUH7548--g{fS;mHtP>d03Io#vi%8|>Bh9wU^51if2AW~Rxdar0MoQKGxEYqu zumXjJ#T$_TOQKFD%WW~JZa#5^1rsc=hYq_VA@d7B=lWf)mat# z!zG;k$BX=}#2?SM-xZ`UUFX^hd8BYPK!oy|yP0Q9Xh5pH^0(K;)-amrPVN^5BmW=h z>lCuTK4j*C?mATRG&XjAXFO5A?)n!mJDx@*Q+xDCpoUog8|hl?GB8;OW zmWS8rf*jU6-~bz~!+JT;PnKNR4?8%|SOqG${epLQA3N73dlkl1XY@Y#$>UPKdO;w- zP3_nC6C~~RCHA!s-Cd3s^Jy4WLXHIf^@8(N8SB?$cep`jcJJTy^$QsTW~L|#D-x2H z=WBqS!CUVcnq$yDwD}u_QAJ_$4T4A4(GkMux1S&*a!1gduSFvOE>rD_zSNqEq{yG> z^Cq=7OyiN(Erj|l>64UhYG9{m|J3SWFsq_%+jXtq&#OxYr8IC`7B=!UjgpzPF&*K5 zA^kcVEXi73GpH36exx}z9?G(D{R(8j00l)JQi;O}2P5>EEDR_wSnD}u|dzkJ%fylC)|Fi{_jEI@Ma&9B+h zj;NE+N1xTkmv9h6DicgY3ZM1A;uF^30nH^^cK*@C$zf}ZrCtG=F*Z}IzQ(Qz;Z($@ z1O^Bz5lV138vAzF(fQ_}sP|RG?TU}nl^@5EI5d+YBul{3b!j>kv5^ZaUWD`{1O|Mtimj`T4sO_YIWnSzt&D=v) z^=#3+8M|n$Y(GxXNnaOiwDIQQBWJc+8GL$dFZRo!q_p2a2J;nMy~y|@?MnKsoKC7? zYRNPp2dB-mzP#FJniRhb(s08F`%~}3Rt8JZgC|?}!B*Nkb9Ez1TGLgNkDpV=-==$8i=KC?PeEfhmt0pG@iq|1{R$z7#hR~nCHec^%K~eit zXgmp%M9=H$7!zJvN;)&bFuJ|v0d~Kiqg4rW{&j<=CWh|(J^#QaJ?zkva72gIJ567- zuTC{8dHBm74Ly#aYU+;<|LkwozsActOOu9_Vq{uikVq?`yCi@fLos-HwHay|B1{}j z(G5xMtHiAA+ynRb-#~P@-b;jQvewpE)C%b_!r(teGffjD!r1tIR}1vn;f0A*3O1i= z&_@P_S3N_!j>54p{A<_?I1dLhlP#~>E~9+aNeCF-UD4i51^M}?H(?Bl^VSXXD>ED9 zmD;uz?@rnCv!o)^?N8b^Mo3eGXXN)o0(YnEnrhg2DMJb(KoJr7T;^x^dtouBKEOl| zrD|{~Gpwo{D@>qU{5ljJJ#TmV)Q!xlj3246Op52(XatnhiRQaOQ#iA4b|9Qhq6H!f z2${GfUBIrs5r~Ta_`b4D+e7Ye5RHkudvfPPMW>miWhfAAhXYoTz*H71T!v6CPZ!X* zW0yf#4LYG&tFJG&a8JjpFYo?qAHdyRjB?%&`acbtm)OTReFSO+|5X*}7JZ-2 z0jHsJ@HZ093#Zo`r#|PgY5an{)^O(>>p#_reU z9}&PT5G(n)e*QmYF%ZbbD+5C*@Al)6wec(evAYO3TwHoo^{8Oq`{bu+@J_-A*gn2EMxcHio0a^s-eGerex3=; zdweW7P)dl25=$i^tIMyym;tEALAuDT$4oeD@iH7TqAr)OcwUOoqgx6U1XT>A>DDp!G408 z0zA@qV^4&4FY416W1B{Zl?1IA7QB5?Y_~8aj`~r_u04V8yGpOzsD^?PD1@PB3?0ff z=#t2j5WKR_ekUQxpee5ie00t+>?kx@NcL|wF`$In)k*sTO&VADh@8UyVa8vcU-GdE04Kya#pqu1t%W`@t3Sc&({y{p4ZK5&^q5tp-zkSxfYX zJPBF2QHq##i6PxzB8vCpWEq@;aBYuQOeUCN34OKm3sE3g6ex-&`D@=2F$!%w3=35N z;fulByaUK*jwu&iL*xG1tY=5K7_qhaX(C@v#1QvJnjt;{vAKel_UL2pKAwERpOZSF zx{VWW=#i83WKVQPG`0+R{bv&yn4+ejHhLd+&;^>mZesx6Wpg149!-`FA?(KEi-Av0 zKy4C>E;@i;AH4FqW(_;kerkGsdA+dlixzy@@{^u3_4A|TUsoJxaE?nVNgZ$=1BO+R z`4QIR*|orqrE}HV(GlBFz5N&P)wCu5_U*E?d}L=wfJgcIg-}OMn=hY6mRlyDrf))L zgG(CN~f!_^N;zxeQ6FO#(P4!?>>x2qm7+ zo+lfCziruKhQ-TvG!~h&HN+~inwi6$|43V-%DYmGeMh!r(N`}gAVgU7;KASdQ46{U z$3irePEF^8^Ot*5huq6tXQHuYwGpR}KO}rcnmim`09=6RxD3d4ODr~1g+&4H7!)@5eX(n_&k4jlKqNP*M7GP$I_)MFWUO*aKiycr?i+S1?I!TOSE{NzUTcU zZQ`FDoPJHHAK6!b)wupd3hb_|-^5WuMXYC66knYXuUFz4O4#_)Z4DO}2CQ0-2M)e* z;)PLC;dmJ9RX500H@N+HK89xaJo82EJ-}a~@HNfC|8sS(Gdfv$zJVB8n7af=lPuj1 zCo;FKRExGYIqlBd9X;(peKKBXyC*BbG4q<8s{tHJNC<9_KXo!Ej0$8LgND^PC{M?S z8sg;^Yp_n^4tvvwVCa%FbMZ9YzmJrGK9kR#oJI?$es9)|6qe2chJ}_8aR-^Eqpz>)GgbiOQOv~wbVS!wo zS^`Wa(HlqeiYR1{zso(ea<(sgibWby$XGNm!*cfdV9Z<;iPM1WaZ^Mt&#NS8vf;O(YNa z{vwC<($46=Sv-%=OHo1+lPFGBX0-RQhO#E9cvi($p(C*1^3d$8xdr8yf)MCfG~E!v zIvNQPx}-=Qk4w;gY4}06Td@yKiFM}s$)Tr@oDS?Gqof0s1{|lX=0ao2{XG#Bs7PUX zff{H7I~zbPnU}(h_y@_9yfUNtu;x=rIDeQIFqsgHq*;SDT)KY z1bc{#!i_S4)W_yjwkSlgfQZ58fM`niT`!lSS>$fZkPsP*6q;N&4|qd&-e*{E0dSLm*rc#|YVyax&wXZBLIt};z!K(9Ky7-r7F4Wo_9|ML3c zR|qTkJ1Sq$4UjloTwH`=!t;;zZqRA*^hbE2BFa!W${lGeyCyDc2_wsxZS+-1Z_o+@ z{}M4EfF~!+kmZ8%_xfZNr%JQ($Vgi;=w$JEzEdpVI1+fGq-$uvAVUA9`16IjuMuHb zTw4L3l$8o5NsGc_>SJR@b-yoqc2fDT;FuMQq6V+FUwezOCXIl!ew4EcI<53^VU5fT zYl=A-xnv}QTB=ldK72|iz|2}C`-y*seHOvD_BE8x?J5INGFw?$nm*8J@Wz-HEGX8s z;(clj(^2ws3^X!NESrB{Y)5dX*>(Cd=QMABl1x9r7o79-M4!JxoU{B(CeL79;(6Qn z?Dy|azx~T3W<;2Nyq*v^YP)``@3xhM6At`rI;oa6|b;CD_># zYpcglYw`7j&dJzdtG>F!1VD>8Hpx`#=S{n??4d_~kc{^Gp%pq)qMr7tRkC_HSE9za zc^`mCr5L2KT@JrK-NqBIzdiNs+P+7JzCNyQQo)C;cpg%&bV8#!U+!2A7agG2yZ%!B zxC~KhHcj_AosZvvEz{Gn@k^Bd3-#*&r~f(L>rIA#pP15cR{jMu^%F}yf!xcsU`{6J zf*ukaEB-*r?|z^2`oe-1S~kpD{$Z!&v|~6$(8(mZg0E5Fe}Dr&tlr#tJ8d3*m^3B- zo>o?7|8djao8`;hYh_Vo;%qVutf7Hm3|l%>IH1prtdEccj9}5ZAZ56Qj60XYGK^HGLff(wlM<79UhxzrgH3Bp-l42%*Mz #tyxxBY#x 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 From 4afb0dee0f48226e71ed8f00c8f1c45a25335d95 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sun, 11 Jan 2015 22:05:30 +0100 Subject: [PATCH 040/267] Alarm for DiskIO plugin --- NEWS | 3 ++- conf/glances-test.conf | 14 ++++++++++++-- glances/plugins/glances_diskio.py | 20 ++++++++++++++------ glances/plugins/glances_network.py | 7 ++++--- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/NEWS b/NEWS index ff3fc4b7..b2c1d556 100644 --- a/NEWS +++ b/NEWS @@ -14,7 +14,8 @@ Enhancements and news features: * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart * Add the RAID plugin (issue #447) * Add the Docker plugin (issue #440) - * It is possible to define (through teh configuration file) if an alarm should be logged or not (using the _log option) (issue #437) + * It is possible, through the configuration file, to define if an alarm should be logged or not (using the _log option) (issue #437) + * You can now set alarm for Disk IO Bugs corrected: diff --git a/conf/glances-test.conf b/conf/glances-test.conf index e850a0f5..6e4444bf 100644 --- a/conf/glances-test.conf +++ b/conf/glances-test.conf @@ -56,7 +56,7 @@ critical=90 # Define the list of hidden network interfaces (comma separeted) hide=lo # WLAN0 alias name -#wlan0_alias=Wireless +wlan0_alias=Wireless # WLAN0 Default limits (in bits per second aka bps) for interface bitrate wlan0_rx_careful=4000000 wlan0_rx_warning=5000000 @@ -69,9 +69,19 @@ wlan0_tx_log=True [diskio] # Define the list of hidden disks (comma separeted) -hide=sda2,sda5 +hide=sda5 # Alias for sda1 #sda1_alias=IntDisk +# SDA1 limits (in bytes per second aka Bps) for interface bitrate +sda2_rx_careful=150000000 +sda2_rx_warning=180000000 +sda2_rx_critical=200000000 +#sda2_rx_log=True +sda2_tx_careful=150000000 +sda2_tx_warning=180000000 +sda2_tx_critical=200000000 +#sda2_tx_log=True + [fs] # Default limits for free filesytem space in % diff --git a/glances/plugins/glances_diskio.py b/glances/plugins/glances_diskio.py index 0cf68bec..5291c64d 100644 --- a/glances/plugins/glances_diskio.py +++ b/glances/plugins/glances_diskio.py @@ -43,7 +43,8 @@ class Plugin(GlancesPlugin): def __init__(self, args=None): """Init the plugin.""" - GlancesPlugin.__init__(self, args=args, items_history_list=items_history_list) + GlancesPlugin.__init__( + self, args=args, items_history_list=items_history_list) # We want to display the stat in the curse interface self.display_curse = True @@ -146,9 +147,10 @@ class Plugin(GlancesPlugin): if self.is_hide(i['disk_name']): continue # Is there an alias for the disk name ? + disk_real_name = i['disk_name'] disk_name = self.has_alias(i['disk_name']) if disk_name is None: - disk_name = i['disk_name'] + disk_name = disk_real_name # New line ret.append(self.curse_new_line()) if len(disk_name) > 9: @@ -156,11 +158,17 @@ class Plugin(GlancesPlugin): disk_name = '_' + disk_name[-8:] msg = '{0:9}'.format(disk_name) ret.append(self.curse_add_line(msg)) - txps = self.auto_unit(int(i['read_bytes'] // i['time_since_update'])) - rxps = self.auto_unit(int(i['write_bytes'] // i['time_since_update'])) + txps = self.auto_unit( + int(i['read_bytes'] // i['time_since_update'])) + rxps = self.auto_unit( + int(i['write_bytes'] // i['time_since_update'])) msg = '{0:>7}'.format(txps) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(msg, + self.get_alert(int(i['read_bytes'] // i['time_since_update']), + header=disk_real_name + '_rx'))) msg = '{0:>7}'.format(rxps) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(msg, + self.get_alert(int(i['write_bytes'] // i['time_since_update']), + header=disk_real_name + '_tx'))) return ret diff --git a/glances/plugins/glances_network.py b/glances/plugins/glances_network.py index 9ef8bc89..0b9dda94 100644 --- a/glances/plugins/glances_network.py +++ b/glances/plugins/glances_network.py @@ -236,9 +236,10 @@ class Plugin(GlancesPlugin): continue # Format stats # Is there an alias for the interface name ? + ifrealname = i['interface_name'].split(':')[0] ifname = self.has_alias(i['interface_name']) if ifname is None: - ifname = i['interface_name'].split(':')[0] + ifname = ifrealname if len(ifname) > ifname_max_width: # Cut interface name if it is too long ifname = '_' + ifname[-ifname_max_width + 1:] @@ -277,10 +278,10 @@ class Plugin(GlancesPlugin): msg = '{0:>7}'.format(rx) ret.append(self.curse_add_line( msg, self.get_alert(int(i['rx'] // i['time_since_update'] * 8), - header=ifname + '_rx'))) + header=ifrealname + '_rx'))) msg = '{0:>7}'.format(tx) ret.append(self.curse_add_line( msg, self.get_alert(int(i['tx'] // i['time_since_update'] * 8), - header=ifname + '_tx'))) + header=ifrealname + '_tx'))) return ret From f216d6988fa6ab58247c01e0a7cefaba8883db08 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Wed, 14 Jan 2015 21:38:09 +0100 Subject: [PATCH 041/267] remove python3 encoding argument on open function --- glances/outputs/glances_bottle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index cf80bf17..64e09659 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -247,5 +247,5 @@ class GlancesBottle(object): """ path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "bottle", "index.html") - f = open(path, encoding="utf-8") + f = open(path) return f.read() \ No newline at end of file From c2d2eda6a9acf07bf97dea6b4bbae4078d5889f6 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Wed, 14 Jan 2015 21:53:28 +0100 Subject: [PATCH 042/267] remove additional curly bracket in network plugin labels --- glances/outputs/bottle/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 4dccc9d4..3142d97c 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -123,7 +123,7 @@ Tx/s - {{network.interface_name | min_size}}} + {{network.interface_name | min_size}} {{network.rx | bytes}} {{network.tx | bytes}} From c9d736961fc25963458e923cd1e268c2d6fe31a3 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Wed, 14 Jan 2015 23:14:30 +0100 Subject: [PATCH 043/267] use divs instead of tables --- glances/outputs/bottle/index.html | 442 +++++++++++++-------------- glances/outputs/static/css/style.css | 33 +- 2 files changed, 232 insertions(+), 243 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 3142d97c..d5210224 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -2,241 +2,231 @@ - - -Glances - - - - - - + + + Glances + + + + + + -

-
-
-
-
+
Loading...
+
+
+
+
+
+ Refresh time  {{result["system"].hostname}}  +
+
+
+
+ Uptime: {{result["uptime"]}} +
+
+
+
-
- Refresh time  {{result["system"].hostname}}  -
+
+
+
+
+
+
CPU
+
{{result["cpu"].total}}%
+
+
+
user:
+
+ {{result["cpu"].user}}% +
+
+
+
system:
+
+ {{result["cpu"].system}}% +
+
+
+
idle:
+
{{result["cpu"].idle}}%
+
+
+
+
+
+
+
+
+
+
MEM
+
{{result["mem"].percent}}%
+
+
+
total:
+
{{result["mem"].total | bytes:2}}
+
+
+
used:
+
+ {{result["mem"].used | bytes:2}} +
+
+
+
free:
+
{{result["mem"].free | bytes:2}}
+
+
+
+
+
+
+
+
+
SWAP
+
{{result["memswap"].percent}}%
+
+
+
total:
+
{{result["memswap"].total | bytes:2}}
+
+
+
used:
+
+ {{result["memswap"].used | bytes:2}} +
+
+
+
free:
+
{{result["memswap"].free | bytes:2}}
+
+
+
+
+
+
+
+
+
+
+
NETWORK
+
Rx/s
+
Tx/s
+
+
+
{{network.interface_name | min_size}}
+
{{network.rx | bytes}}
+
{{network.tx | bytes}}
+
+
+
-
-
-
- Uptime: {{result["uptime"]}} -
-
-
-
+
+
+
+
DISK I/O
+
R/s
+
W/s
+
+
+
{{disk.disk_name | min_size}}
+
{{disk.read_bytes | bytes}}
+
{{disk.write_bytes | bytes}}
+
+
+
+
+
+
+
FILE SYS
+
Used
+
Total
+
+
+
{{fs.mnt_point}} ({{fs.device_name}})
+
+ {{fs.size - fs.free | bytes}} +
+
{{fs.size | bytes}}
+
+
+
+ +
+
+
+
+
+
No warning or critical alert detected
+
{{alert}}
+
+
+
-
-
-
- - - - - - - - - - - - - - - - - - - -
CPU{{result["cpu"].total}}%
user:{{result["cpu"].user}}%
system:{{result["cpu"].system}}%
idle:{{result["cpu"].idle}}%
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - -
MEM{{result["mem"].percent}}%
total:{{result["mem"].total | bytes:2}}
used:{{result["mem"].used | bytes:2}}
free:{{result["mem"].free | bytes:2}}
-
-
-
-
- - - - - - - - - - - - - - - - - - - -
SWAP{{result["memswap"].percent}}%
total:{{result["memswap"].total | bytes:2}}
used:{{result["memswap"].used | bytes:2}}
free:{{result["memswap"].free | bytes:2}}
-
-
-
-
-
-
- - - - - - - - - - - - - -
NETWORKRx/sTx/s
{{network.interface_name | min_size}}{{network.rx | bytes}}{{network.tx | bytes}}
-
+
+ TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, + {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view +
-
- - - - - - - - - - - - - -
DISK I/OR/sW/s
{{disk.disk_name | min_size}}{{disk.read_bytes | bytes}}{{disk.write_bytes | bytes}}
-
-
- - - - - - - - - - - - - -
FILE SYSUsedTotal
{{fs.mnt_point}} ({{fs.device_name}}){{fs.size - fs.free | bytes}}{{fs.size | bytes}}
-
- -
-
-
- - - - - - - -
No warning or critical alert detected{{alert}}
-
+
+
+
-
- TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, - {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view -
+ -
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CPU%MEM%PIDUSERNISCommand
{{process.cpu_percent | number:1}}{{process.memory_percent | number:1}}{{process.pid}}{{process.username}}{{process.nice | exclamation}}{{process.status}}{{process.name}}
-
-
-
-
+
+
+
+
CPU%
+
MEM%
+
VIRT
+
RES
+
PID
+
USER
+
NI
+
S
+
TIME+
+
IOR/s
+
IOW/s
+
Command
+
+
+
{{process.cpu_percent | number:1}}
+
{{process.memory_percent | number:1}}
+ + +
{{process.pid}}
+
{{process.username}}
+
{{process.nice | exclamation}}
+
{{process.status}}
+ + + +
{{process.name}}
+
+
+
+
+
+
diff --git a/glances/outputs/static/css/style.css b/glances/outputs/static/css/style.css index 3fcd08d5..cca59ef4 100644 --- a/glances/outputs/static/css/style.css +++ b/glances/outputs/static/css/style.css @@ -3,16 +3,23 @@ body { color: #BBB; font-family: "Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace; } -.plugin { - margin-bottom: 20px; -} -.plugin table { + +.table { + display: table; width: 100%; } -.plugin table tr td:not(:first-child) { +.table-row { + display: table-row; +} +.table-cell { + display: table-cell; text-align: right; } +.plugin { + margin-bottom: 20px; +} + .underline{ text-decoration: underline } @@ -28,6 +35,9 @@ body { .text-right { text-align: right; } +.text-left { + text-align: left; +} /* Theme */ @@ -77,18 +87,7 @@ body { } /* Plugins */ -#cpu table tr td:nth-child(3), -#mem table tr td:nth-child(3), -#monitor table tr td:nth-child(3) { - text-align: left; - padding-left: 20px; -} -#processlist table tr td { +#processlist .table-cell { padding: 0px 5px 0px 5px; white-space: nowrap; - text-align: right; -} -#processlist table tr td:nth-child(6), -#processlist table tr td:nth-child(12) { - text-align: left; } \ No newline at end of file From ef142bd9809f3943586b2b6445678828c61e8835 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Wed, 14 Jan 2015 23:16:34 +0100 Subject: [PATCH 044/267] convert indent to spaces --- glances/outputs/bottle/index.html | 272 +++++++++++++++--------------- 1 file changed, 136 insertions(+), 136 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index d5210224..2dba116b 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -39,146 +39,146 @@
-
-
CPU
-
{{result["cpu"].total}}%
-
-
-
user:
-
- {{result["cpu"].user}}% -
-
-
-
system:
-
- {{result["cpu"].system}}% -
-
-
-
idle:
-
{{result["cpu"].idle}}%
-
-
+
+
CPU
+
{{result["cpu"].total}}%
+
+
+
user:
+
+ {{result["cpu"].user}}% +
+
+
+
system:
+
+ {{result["cpu"].system}}% +
+
+
+
idle:
+
{{result["cpu"].idle}}%
+
+
-
-
MEM
-
{{result["mem"].percent}}%
-
-
-
total:
-
{{result["mem"].total | bytes:2}}
-
-
-
used:
-
- {{result["mem"].used | bytes:2}} -
-
-
-
free:
-
{{result["mem"].free | bytes:2}}
-
-
+
+
MEM
+
{{result["mem"].percent}}%
+
+
+
total:
+
{{result["mem"].total | bytes:2}}
+
+
+
used:
+
+ {{result["mem"].used | bytes:2}} +
+
+
+
free:
+
{{result["mem"].free | bytes:2}}
+
+
-
-
-
SWAP
-
{{result["memswap"].percent}}%
-
-
-
total:
-
{{result["memswap"].total | bytes:2}}
-
-
-
used:
-
- {{result["memswap"].used | bytes:2}} -
-
-
-
free:
-
{{result["memswap"].free | bytes:2}}
-
-
+
+
+
SWAP
+
{{result["memswap"].percent}}%
+
+
+
total:
+
{{result["memswap"].total | bytes:2}}
+
+
+
used:
+
+ {{result["memswap"].used | bytes:2}} +
+
+
+
free:
+
{{result["memswap"].free | bytes:2}}
+
+
-
-
-
NETWORK
-
Rx/s
-
Tx/s
-
-
-
{{network.interface_name | min_size}}
-
{{network.rx | bytes}}
-
{{network.tx | bytes}}
-
-
+
+
+
NETWORK
+
Rx/s
+
Tx/s
+
+
+
{{network.interface_name | min_size}}
+
{{network.rx | bytes}}
+
{{network.tx | bytes}}
+
+
-
-
-
DISK I/O
-
R/s
-
W/s
-
-
-
{{disk.disk_name | min_size}}
-
{{disk.read_bytes | bytes}}
-
{{disk.write_bytes | bytes}}
-
+
+
+
DISK I/O
+
R/s
+
W/s
+
+
+
{{disk.disk_name | min_size}}
+
{{disk.read_bytes | bytes}}
+
{{disk.write_bytes | bytes}}
+
-
-
-
FILE SYS
-
Used
-
Total
-
-
-
{{fs.mnt_point}} ({{fs.device_name}})
-
- {{fs.size - fs.free | bytes}} -
-
{{fs.size | bytes}}
-
+
+
+
FILE SYS
+
Used
+
Total
+
+
+
{{fs.mnt_point}} ({{fs.device_name}})
+
+ {{fs.size - fs.free | bytes}} +
+
{{fs.size | bytes}}
+
-
-
-
No warning or critical alert detected
-
{{alert}}
-
+
+
+
No warning or critical alert detected
+
{{alert}}
+
@@ -194,35 +194,35 @@
-
-
-
CPU%
-
MEM%
-
VIRT
-
RES
-
PID
-
USER
-
NI
-
S
-
TIME+
-
IOR/s
-
IOW/s
-
Command
-
-
-
{{process.cpu_percent | number:1}}
-
{{process.memory_percent | number:1}}
- - -
{{process.pid}}
-
{{process.username}}
-
{{process.nice | exclamation}}
-
{{process.status}}
- - - -
{{process.name}}
-
+
+
+
CPU%
+
MEM%
+
VIRT
+
RES
+
PID
+
USER
+
NI
+
S
+
TIME+
+
IOR/s
+
IOW/s
+
Command
+
+
+
{{process.cpu_percent | number:1}}
+
{{process.memory_percent | number:1}}
+ + +
{{process.pid}}
+
{{process.username}}
+
{{process.nice | exclamation}}
+
{{process.status}}
+ + + +
{{process.name}}
+
From cb398d62b5195d612346f83044996d952d4e4867 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 13:38:29 +0100 Subject: [PATCH 045/267] add show/hide --- glances/outputs/bottle/index.html | 448 ++++++++++++----------- glances/outputs/static/js/app.js | 1 + glances/outputs/static/js/controllers.js | 115 +++++- glances/outputs/static/js/variables.js | 29 ++ 4 files changed, 370 insertions(+), 223 deletions(-) create mode 100644 glances/outputs/static/js/app.js create mode 100644 glances/outputs/static/js/variables.js diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 2dba116b..76e24041 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -2,231 +2,245 @@ - - - Glances - - - - - - + + +Glances + + + + + + + + - + -
Loading...
-
-
-
-
-
- Refresh time  {{result["system"].hostname}}  -
-
-
-
- Uptime: {{result["uptime"]}} -
-
-
-
+
Loading...
+
+
+
+
-
-
-
-
-
-
CPU
-
{{result["cpu"].total}}%
-
-
-
user:
-
- {{result["cpu"].user}}% -
-
-
-
system:
-
- {{result["cpu"].system}}% -
-
-
-
idle:
-
{{result["cpu"].idle}}%
-
-
-
-
-
-
-
-
-
-
MEM
-
{{result["mem"].percent}}%
-
-
-
total:
-
{{result["mem"].total | bytes:2}}
-
-
-
used:
-
- {{result["mem"].used | bytes:2}} -
-
-
-
free:
-
{{result["mem"].free | bytes:2}}
-
-
-
-
-
-
-
-
-
SWAP
-
{{result["memswap"].percent}}%
-
-
-
total:
-
{{result["memswap"].total | bytes:2}}
-
-
-
used:
-
- {{result["memswap"].used | bytes:2}} -
-
-
-
free:
-
{{result["memswap"].free | bytes:2}}
-
-
-
-
-
-
-
-
-
-
-
NETWORK
-
Rx/s
-
Tx/s
-
-
-
{{network.interface_name | min_size}}
-
{{network.rx | bytes}}
-
{{network.tx | bytes}}
-
-
-
+
+ Refresh time  {{result["system"].hostname}}  +
-
-
-
-
DISK I/O
-
R/s
-
W/s
-
-
-
{{disk.disk_name | min_size}}
-
{{disk.read_bytes | bytes}}
-
{{disk.write_bytes | bytes}}
-
-
-
-
-
-
-
FILE SYS
-
Used
-
Total
-
-
-
{{fs.mnt_point}} ({{fs.device_name}})
-
- {{fs.size - fs.free | bytes}} -
-
{{fs.size | bytes}}
-
-
-
- -
-
-
-
-
-
No warning or critical alert detected
-
{{alert}}
-
-
-
+
+
+
+ Uptime: {{result["uptime"]}} +
+
+
+
-
- TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, - {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view -
+
+
+
+ + + + + + + + + + + + + + + + + + + +
CPU{{result["cpu"].total}}%
user:{{result["cpu"].user}}%
system:{{result["cpu"].system}}%
idle:{{result["cpu"].idle}}%
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
MEM{{result["mem"].percent}}%
total:{{result["mem"].total | bytes:2}}
used:{{result["mem"].used | bytes:2}}
free:{{result["mem"].free | bytes:2}}
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
SWAP{{result["memswap"].percent}}%
total:{{result["memswap"].total | bytes:2}}
used:{{result["memswap"].used | bytes:2}}
free:{{result["memswap"].free | bytes:2}}
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
NETWORKRx/sTx/s
{{network.interface_name | min_size}}}{{network.rx | bytes}}{{network.rx | bytes}}{{network.rx | bits}}{{network.rx | bits}}
+
-
-
-
+
+ + + + + + + + + + + + + +
DISK I/OR/sW/s
{{disk.disk_name | min_size}}{{disk.read_bytes | bytes}}{{disk.write_bytes | bytes}}
+
+
+ + + + + + + + + + + + + +
FILE SYSUsedTotal
{{fs.mnt_point}} ({{fs.device_name}}){{fs.size - fs.free | bytes}}{{fs.size | bytes}}
+
+ +
+ + + + + + + + + +
TODO
+
+ +
+
+
+ + + + + + + +
No warning or critical alert detected{{alert}}
+
- +
+ TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, + {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth +
-
-
-
-
CPU%
-
MEM%
-
VIRT
-
RES
-
PID
-
USER
-
NI
-
S
-
TIME+
-
IOR/s
-
IOW/s
-
Command
-
-
-
{{process.cpu_percent | number:1}}
-
{{process.memory_percent | number:1}}
- - -
{{process.pid}}
-
{{process.username}}
-
{{process.nice | exclamation}}
-
{{process.status}}
- - - -
{{process.name}}
-
-
-
-
-
-
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CPU%MEM%PIDUSERNISCommand
{{process.cpu_percent | number:1}}{{process.memory_percent | number:1}}{{process.pid}}{{process.username}}{{process.nice | exclamation}}{{process.status}}{{process.name}}
+
+
+
+
diff --git a/glances/outputs/static/js/app.js b/glances/outputs/static/js/app.js new file mode 100644 index 00000000..ba6acd38 --- /dev/null +++ b/glances/outputs/static/js/app.js @@ -0,0 +1 @@ +var glancesApp = angular.module('glancesApp', []); diff --git a/glances/outputs/static/js/controllers.js b/glances/outputs/static/js/controllers.js index d3d9cd81..f7f25167 100644 --- a/glances/outputs/static/js/controllers.js +++ b/glances/outputs/static/js/controllers.js @@ -1,5 +1,3 @@ -var glancesApp = angular.module('glancesApp', []); - glancesApp.filter('min_size', function() { return function(input) { var max = 8; @@ -18,30 +16,77 @@ glancesApp.filter('exclamation', function() { }; }); + /** * Fork from https://gist.github.com/thomseddon/3511330 *   => \u00A0 * WARNING : kilobyte (kB) != kibibyte (KiB) (more info here : http://en.wikipedia.org/wiki/Byte ) **/ glancesApp.filter('bytes', function() { - return function(bytes, precision) { - if (isNaN(parseFloat(bytes)) || !isFinite(bytes) || bytes == 0) return '0B'; + return function (bytes, precision) { + if (isNaN(parseFloat(bytes)) || !isFinite(bytes) || bytes == 0){ + return '0B'; + } var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'], - number = Math.floor(Math.log(bytes) / Math.log(1000)); + number = Math.floor(Math.log(bytes) / Math.log(1000)); return (bytes / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; } }); +glancesApp.filter('bits', function() { + return function (bits, precision) { + if (isNaN(parseFloat(bits)) || !isFinite(bits) || bits == 0){ + return '0bit'; + } + var units = ['bit', 'kbit', 'Mbit', 'Gbit', 'Tbit', 'Pbit'], + number = Math.floor(Math.log(bits) / Math.log(1000)); + return (bits / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; + } +}); glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', function($scope, $http, $interval, $q) { $scope.limitSuffix = ['critical', 'careful', 'warning'] $scope.refreshTime = 3 $scope.pluginLimits = [] + $scope.sortColumn = 'cpu_percent' + $scope.sortOrderAsc = false + $scope.lastSortColumn = '#column_' + $scope.sortColumn + $scope.show = { + 'diskio' : true, + 'network' : true, + 'fs' : true, + 'sensors' : true, + 'sidebar' : true, + 'alert' : true + } + $scope.networkSortByBytes = false $scope.initLimits = function() { $scope.pluginsList(); } + $scope.showHide = function(bloc) { + $scope.show[bloc] = !$scope.show[bloc] + } + + $scope.sortBy = function(column) { + angular.element(document.querySelector($scope.lastSortColumn)).removeClass('sort sort_asc sort_desc') + + if ($scope.sortColumn == column) { + $scope.sortOrderAsc = !$scope.sortOrderAsc + if ($scope.sortOrderAsc) { + angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_asc') + } else { + angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_desc') + } + } else { + $scope.sortColumn = column + $scope.sortOrderAsc = false + $scope.lastSortColumn = '#column_' + $scope.sortColumn + angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_desc') + } + } + $scope.pluginsList = function() { $http.get('/api/2/pluginslist').success(function(d, status, headers, config) { $scope.plugins = d; @@ -171,5 +216,63 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', // Make sure that the interval is destroyed too $scope.stopRefresh(); }); - + + $scope.onKeyDown = function($event) { + console.log($event) + if ($event.keyCode == keycodes.a) { // a Sort processes automatically + $scope.sortBy('') + } else if ($event.keyCode == keycodes.c) {//c Sort processes by CPU% + $scope.sortBy('cpu_percent') + } else if ($event.keyCode == keycodes.m) {//m Sort processes by MEM% + $scope.sortBy('memory_percent') + } else if ($event.keyCode == keycodes.p) {//p Sort processes by name + $scope.sortBy('name') + } else if ($event.keyCode == keycodes.i) {//i Sort processes by I/O rate + $scope.sortBy('io_read') + } else if ($event.keyCode == keycodes.t) {//t Sort processes by CPU times + $scope.sortBy('timemillis') + } else if ($event.keyCode == keycodes.d) {//d Show/hide disk I/O stats + $scope.showHide('diskio') + } else if ($event.keyCode == keycodes.f) {//f Show/hide filesystem stats + $scope.showHide('fs') + } else if ($event.keyCode == keycodes.n) {//n Show/hide network stats + $scope.showHide('network') + } else if ($event.keyCode == keycodes.s) {//s Show/hide sensors stats + $scope.showHide('sensors') + } else if ($event.keyCode == keycodes.TWO) {//2 Show/hide left sidebar + $scope.showHide('sidebar') + } else if ($event.keyCode == keycodes.z) {//z Enable/disable processes stats + //$scope.enableDisable('processStats') + } else if ($event.keyCode == keycodes.e) {//e Enable/disable top extended stats + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.SLASH) {// SLASH Enable/disable short processes name + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.D) {//D Enable/disable Docker stats + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.b) {//b Bytes or bits for network I/O + $scope.networkSortByBytes = !$scope.networkSortByBytes + } else if ($event.keyCode == keycodes.l) {//l Show/hide alert logs + $scope.showHide('alert') + } else if ($event.keyCode == keycodes.w) {//w Delete warning alerts + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.x) {//x Delete warning and critical alerts + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.ONE) {//1 Global CPU or per-CPU stats + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.h) {//h Show/hide this help screen + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.T) {//T View network I/O as combination + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.u) {//u View cumulative network I/O + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.F) {//F Show filesystem free space + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.g) {//g Generate graphs for current history + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.r) {//r Reset history + //$scope.sortBy('') + } else if ($event.keyCode == keycodes.q) {//q Quit (Esc and Ctrl-C also work) + //$scope.sortBy('') + } + } } ]); \ No newline at end of file diff --git a/glances/outputs/static/js/variables.js b/glances/outputs/static/js/variables.js new file mode 100644 index 00000000..de4513cd --- /dev/null +++ b/glances/outputs/static/js/variables.js @@ -0,0 +1,29 @@ +var keycodes = { + 'a' : '65', + 'c' : '67', + 'm' : '77', + 'p' : '80', + 'i' : '73', + 't' : '84', + 'd' : '68', + 'f' : '70', + 'n' : '78', + 's' : '83', + 'TWO' : '98', + 'z' : '90', + 'e' : '69', + 'SLASH' : '191', + 'D' : '68', + 'b' : '66', + 'l' : '76', + 'w' : '87', + 'x' : '88', + 'ONE' : '97', + 'h' : '72', + 'T' : '84', + 'u' : '', + 'F' : '', + 'g' : '', + 'r' : '', + 'q' : '' +} \ No newline at end of file From 5dee3758f148e0755d0e29048dc8a5b868fa3a1b Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 13:54:35 +0100 Subject: [PATCH 046/267] add sensors --- glances/outputs/bottle/index.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 76e24041..773bfc31 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -172,10 +172,12 @@ - + + - + +
SENSORS°C
TODO{{sensor.label}}{{sensor.value}}
From a7e17083b75765a4b8921a8dff43d6b98b7f2123 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 15:16:12 +0100 Subject: [PATCH 047/267] add mod debug for angularjs --- glances/outputs/bottle/debug.html | 21 ++++++++++++++++ glances/outputs/bottle/index.html | 8 +++--- glances/outputs/glances_bottle.py | 32 +++++++++++++++--------- glances/outputs/static/js/controllers.js | 2 +- 4 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 glances/outputs/bottle/debug.html diff --git a/glances/outputs/bottle/debug.html b/glances/outputs/bottle/debug.html new file mode 100644 index 00000000..1f0cf2f6 --- /dev/null +++ b/glances/outputs/bottle/debug.html @@ -0,0 +1,21 @@ + + + + + + + INSERT YOUR JSON :
+ + + + + + + + \ No newline at end of file diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 773bfc31..7f8d17cc 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -25,7 +25,7 @@
Refresh time  {{result["system"].hostname}} 
@@ -168,16 +168,16 @@ -
+
- + - +
SENSORS°C°C
{{sensor.label}}{{sensor.value}}{{sensor.value}}
diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index 64e09659..4138a8bc 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -16,17 +16,18 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . - """Web interface class.""" +# Import Glances libs +# Import mandatory Bottle lib import json import os import sys -# Import Glances libs +from glances.core.glances_globals import is_windows from glances.core.glances_logging import logger -# Import mandatory Bottle lib + try: from bottle import Bottle, template, static_file, TEMPLATE_PATH, abort, response except ImportError: @@ -137,15 +138,22 @@ class GlancesBottle(object): """ response.content_type = 'application/json' - # Update the stat - self.stats.update() - - try: - # Get the JSON value of the stat ID - statval = json.dumps(self.stats.getAllAsDict()) - except Exception as e: - abort(404, "Cannot get stats (%s)" % str(e)) - return statval + if not self.args.debug: + # Update the stat + self.stats.update() + + try: + # Get the JSON value of the stat ID + statval = json.dumps(self.stats.getAllAsDict()) + except Exception as e: + abort(404, "Cannot get stats (%s)" % str(e)) + return statval + else: + path = "~/glances/" + if is_windows: + path = "D:\\glances\\" + f = open(path + "debug.json") + return f.read() def _api(self, plugin): """ diff --git a/glances/outputs/static/js/controllers.js b/glances/outputs/static/js/controllers.js index f7f25167..c0673477 100644 --- a/glances/outputs/static/js/controllers.js +++ b/glances/outputs/static/js/controllers.js @@ -167,7 +167,7 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', var limitName = limitNamePrefix + $scope.limitSuffix[i] var limit = $scope.pluginLimits[pluginName][limitName] - if (value > limit) { + if (value >= limit) { //console.log("value = " + value + " - limit = " + limit) var pos = limitName.lastIndexOf("_") var className = limitName.substring(pos + 1) From fee8c06d28ab4b4f335ce4ad6f2a7c676fff95d4 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 16:19:05 +0100 Subject: [PATCH 048/267] remove debug.html --- glances/outputs/bottle/debug.html | 21 --------------------- glances/outputs/bottle/index.html | 2 -- glances/outputs/static/js/app.js | 8 ++++++++ glances/outputs/static/js/controllers.js | 19 +++++++++++++++++-- 4 files changed, 25 insertions(+), 25 deletions(-) delete mode 100644 glances/outputs/bottle/debug.html diff --git a/glances/outputs/bottle/debug.html b/glances/outputs/bottle/debug.html deleted file mode 100644 index 1f0cf2f6..00000000 --- a/glances/outputs/bottle/debug.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - INSERT YOUR JSON :
- - - - - - - - \ No newline at end of file diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 7f8d17cc..cf26e4d5 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -205,8 +205,6 @@
- -
diff --git a/glances/outputs/static/js/app.js b/glances/outputs/static/js/app.js index ba6acd38..2dd90bab 100644 --- a/glances/outputs/static/js/app.js +++ b/glances/outputs/static/js/app.js @@ -1 +1,9 @@ var glancesApp = angular.module('glancesApp', []); + +/* +glancesApp.config([ '$routeProvider', function($routeProvider) { + $routeProvider.when('/:refresh_time', { + templateUrl : 'index.html', + controller : 'GlancesStatsController' + }); +} ]);*/ \ No newline at end of file diff --git a/glances/outputs/static/js/controllers.js b/glances/outputs/static/js/controllers.js index c0673477..778fbb52 100644 --- a/glances/outputs/static/js/controllers.js +++ b/glances/outputs/static/js/controllers.js @@ -43,7 +43,7 @@ glancesApp.filter('bits', function() { } }); -glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', function($scope, $http, $interval, $q) { +glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', function($scope, $http, $interval, $q) { //$routeParams $scope.limitSuffix = ['critical', 'careful', 'warning'] $scope.refreshTime = 3 @@ -60,6 +60,17 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', 'alert' : true } $scope.networkSortByBytes = false + + /* + $scope.init_refresh_time = function() { + if ($routeParams != undefined && $routeParams.refresh_time != undefined) { + var new_refresh_time = parseInt($routeParams.refresh_time) + if (new_refres_time >= 1) { + $scope.refreshTime = new_refres_time + } + } + }*/ + $scope.initLimits = function() { $scope.pluginsList(); @@ -70,6 +81,9 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', } $scope.sortBy = function(column) { + if (column == undefined) { + // sort automatically + } angular.element(document.querySelector($scope.lastSortColumn)).removeClass('sort sort_asc sort_desc') if ($scope.sortColumn == column) { @@ -185,6 +199,7 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', return "ok"; } + //$scope.init_refresh_time(); $scope.initLimits(); var stop; @@ -220,7 +235,7 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', $scope.onKeyDown = function($event) { console.log($event) if ($event.keyCode == keycodes.a) { // a Sort processes automatically - $scope.sortBy('') + $scope.sortBy() } else if ($event.keyCode == keycodes.c) {//c Sort processes by CPU% $scope.sortBy('cpu_percent') } else if ($event.keyCode == keycodes.m) {//m Sort processes by MEM% From bcd76e55362febd16e15a6882a103fe459bd664f Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 17:18:40 +0100 Subject: [PATCH 049/267] fix merge div/table --- glances/outputs/bottle/index.html | 452 +++++++++++------------ glances/outputs/glances_bottle.py | 14 +- glances/outputs/static/css/style.css | 5 +- glances/outputs/static/js/controllers.js | 9 +- 4 files changed, 239 insertions(+), 241 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index cf26e4d5..8aee53a1 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -2,245 +2,233 @@ - - -Glances - - - - - - - - + + + Glances + + + + + + + + - + -
Loading...
-
-
-
-
+
Loading...
+
+
+
+
+
+ Refresh time  {{result["system"].hostname}}  +
+
+
+
+ Uptime: {{result["uptime"]}} +
+
+
+
-
- Refresh time  {{result["system"].hostname}}  -
+
+
+
+
+
+
CPU
+
{{result["cpu"].total}}%
+
+
+
user:
+
+ {{result["cpu"].user}}% +
+
+
+
system:
+
+ {{result["cpu"].system}}% +
+
+
+
idle:
+
{{result["cpu"].idle}}%
+
+
+
+
+
+
+
+
+
+
MEM
+
{{result["mem"].percent}}%
+
+
+
total:
+
{{result["mem"].total | bytes:2}}
+
+
+
used:
+
+ {{result["mem"].used | bytes:2}} +
+
+
+
free:
+
{{result["mem"].free | bytes:2}}
+
+
+
+
+
+
+
+
+
SWAP
+
{{result["memswap"].percent}}%
+
+
+
total:
+
{{result["memswap"].total | bytes:2}}
+
+
+
used:
+
+ {{result["memswap"].used | bytes:2}} +
+
+
+
free:
+
{{result["memswap"].free | bytes:2}}
+
+
+
+
+
+
+
+
+
+
+
NETWORK
+
Rx/s
+
Tx/s
+
+
+
{{network.interface_name | min_size}}
+
{{network.rx | bytes}}
+
{{network.tx | bytes}}
+
+
+
-
-
-
- Uptime: {{result["uptime"]}} -
-
-
-
+
+
+
+
DISK I/O
+
R/s
+
W/s
+
+
+
{{disk.disk_name | min_size}}
+
{{disk.read_bytes | bytes}}
+
{{disk.write_bytes | bytes}}
+
+
+
+
+
+
+
FILE SYS
+
Used
+
Total
+
+
+
{{fs.mnt_point}} ({{fs.device_name}})
+
+ {{fs.size - fs.free | bytes}} +
+
{{fs.size | bytes}}
+
+
+
+
+
+
+
SENSORS
+
°C
+
+
+
{{sensor.label}} +
{{sensor.value}} +
+
+
+
+
+
+
+
+
No warning or critical alert detected
+
{{alert}}
+
+
+
-
-
-
-
- - - - - - - - - - - - - - - - - - -
CPU{{result["cpu"].total}}%
user:{{result["cpu"].user}}%
system:{{result["cpu"].system}}%
idle:{{result["cpu"].idle}}%
-
- -
-
-
- - - - - - - - - - - - - - - - - - - -
MEM{{result["mem"].percent}}%
total:{{result["mem"].total | bytes:2}}
used:{{result["mem"].used | bytes:2}}
free:{{result["mem"].free | bytes:2}}
-
-
-
-
- - - - - - - - - - - - - - - - - - - -
SWAP{{result["memswap"].percent}}%
total:{{result["memswap"].total | bytes:2}}
used:{{result["memswap"].used | bytes:2}}
free:{{result["memswap"].free | bytes:2}}
-
-
- -
-
-
- - - - - - - - - - - - - - - -
NETWORKRx/sTx/s
{{network.interface_name | min_size}}}{{network.rx | bytes}}{{network.rx | bytes}}{{network.rx | bits}}{{network.rx | bits}}
-
+
+ TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, + {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view +
-
- - - - - - - - - - - - - -
DISK I/OR/sW/s
{{disk.disk_name | min_size}}{{disk.read_bytes | bytes}}{{disk.write_bytes | bytes}}
-
-
- - - - - - - - - - - - - -
FILE SYSUsedTotal
{{fs.mnt_point}} ({{fs.device_name}}){{fs.size - fs.free | bytes}}{{fs.size | bytes}}
-
- -
- - - - - - - - - - - -
SENSORS°C
{{sensor.label}}{{sensor.value}}
-
- -
-
-
- - - - - - - -
No warning or critical alert detected{{alert}}
-
+
+
+
-
- TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, - {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth -
+ -
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CPU%MEM%PIDUSERNISCommand
{{process.cpu_percent | number:1}}{{process.memory_percent | number:1}}{{process.pid}}{{process.username}}{{process.nice | exclamation}}{{process.status}}{{process.name}}
-
-
-
- +
+
+
+
CPU%
+
MEM%
+ + +
PID
+
USER
+
NI
+
S
+ + + +
Command
+
+
+
{{process.cpu_percent | number:1}}
+
{{process.memory_percent | number:1}}
+ + +
{{process.pid}}
+
{{process.username}}
+
{{process.nice | exclamation}}
+
{{process.status}}
+ + + +
{{process.name}}
+
+
+
+ + + - + \ No newline at end of file diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index 4138a8bc..4f17ad61 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -150,10 +150,18 @@ class GlancesBottle(object): return statval else: path = "~/glances/" - if is_windows: + if is_windows: path = "D:\\glances\\" - f = open(path + "debug.json") - return f.read() + filepath = path + "debug.json" + + if os.path.exists(filepath): + logger.debug("File exists : {0}.".format(filepath)) + + f = open(path + "debug.json") + return f.read() + + logger.warn("File does not exist : {0}.".format(filepath)) + return "" def _api(self, plugin): """ diff --git a/glances/outputs/static/css/style.css b/glances/outputs/static/css/style.css index cca59ef4..130bdb1c 100644 --- a/glances/outputs/static/css/style.css +++ b/glances/outputs/static/css/style.css @@ -29,7 +29,10 @@ body { .sort{ font-weight: bold; } -.sort:after{ +.sort_asc:after { + content: '\25B2' +} +.sort_desc:after { content: '\25BC' } .text-right { diff --git a/glances/outputs/static/js/controllers.js b/glances/outputs/static/js/controllers.js index 778fbb52..db84e6ef 100644 --- a/glances/outputs/static/js/controllers.js +++ b/glances/outputs/static/js/controllers.js @@ -35,15 +35,15 @@ glancesApp.filter('bytes', function() { glancesApp.filter('bits', function() { return function (bits, precision) { if (isNaN(parseFloat(bits)) || !isFinite(bits) || bits == 0){ - return '0bit'; + return '0b'; } - var units = ['bit', 'kbit', 'Mbit', 'Gbit', 'Tbit', 'Pbit'], + var units = ['b', 'kb', 'Mb', 'Gb', 'Tb', 'Pb'], number = Math.floor(Math.log(bits) / Math.log(1000)); return (bits / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; } }); -glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', function($scope, $http, $interval, $q) { //$routeParams +glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', function($scope, $http, $interval, $q) { $scope.limitSuffix = ['critical', 'careful', 'warning'] $scope.refreshTime = 3 @@ -61,8 +61,7 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', } $scope.networkSortByBytes = false - /* - $scope.init_refresh_time = function() { + /*$scope.init_refresh_time = function() { if ($routeParams != undefined && $routeParams.refresh_time != undefined) { var new_refresh_time = parseInt($routeParams.refresh_time) if (new_refres_time >= 1) { From d857e5d6627283024b1ac3130c9b29a5bb68ef1c Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 17:20:39 +0100 Subject: [PATCH 050/267] fix merge div/table --- glances/outputs/bottle/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 8aee53a1..7bf2e8c3 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -168,8 +168,8 @@
°C
-
{{sensor.label}} -
{{sensor.value}} +
{{sensor.label}}
+
{{sensor.value}}
From 6c20fff6169df5bbf0c373bcf8be5560ffc92dfb Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 17:25:30 +0100 Subject: [PATCH 051/267] fix merge div/table --- glances/outputs/bottle/index.html | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 7bf2e8c3..01cefed8 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -193,25 +193,23 @@
- -
-
CPU%
-
MEM%
- - -
PID
-
USER
-
NI
-
S
- - - -
Command
+
CPU%
+
MEM%
+ + +
PID
+
USER
+
NI
+
S
+ + + +
Command
-
+
{{process.cpu_percent | number:1}}
{{process.memory_percent | number:1}}
From d0b9ff2e2d296c31c57fe89724e0cc6dbe69d391 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 17:28:47 +0100 Subject: [PATCH 052/267] network bits default format --- glances/outputs/bottle/index.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index 01cefed8..ae555ab5 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -125,8 +125,10 @@
{{network.interface_name | min_size}}
-
{{network.rx | bytes}}
-
{{network.tx | bytes}}
+
{{network.rx | bytes}}
+
{{network.tx | bytes}}
+
{{network.rx | bits}}
+
{{network.tx | bits}}
From 80638434a4fe2b6efa3f8be4ececab20678a6209 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 17 Jan 2015 17:35:38 +0100 Subject: [PATCH 053/267] fix of the fix --- glances/outputs/bottle/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index ae555ab5..c6c26902 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -15,7 +15,7 @@ - +
Loading...
From 596800a99c6b455aef01fb766043ed929d65dfd2 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 14:40:43 +0100 Subject: [PATCH 054/267] plugin load, mem --- glances/outputs/bottle/index.html | 100 +++++++++++++++++++++-- glances/outputs/glances_bottle.py | 12 +-- glances/outputs/static/js/controllers.js | 4 +- glances/outputs/static/js/variables.js | 4 +- 4 files changed, 99 insertions(+), 21 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index c6c26902..0a3a320d 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -23,10 +23,12 @@
- Refresh time 
@@ -38,7 +40,7 @@
-
+
@@ -64,8 +66,65 @@
-
-
+
+
+
+
+
nice:
+
+ {{result["cpu"].nice}}% +
+
+
+
irq:
+
+ {{result["cpu"].irq}}% +
+
+
+
iowait:
+
+ {{result["cpu"].iowait}}% +
+
+
+
steal:
+
+ {{result["cpu"].steal}}% +
+
+
+
+
+
+
+
+
+
LOAD
+
{{result["load"].cpucore}}-core
+
+
+
1 min:
+
+ {{result["load"].min1}} +
+
+
+
5 min:
+
+ {{result["load"].min5}} +
+
+
+
15 min:
+
+ {{result["load"].min15}} +
+
+
+
+
+
@@ -89,7 +148,29 @@
-
+
+
+
+
+
active:
+
{{result["mem"].active | bytes:2}}
+
+
+
inactive:
+
{{result["mem"].inactive | bytes:2}}
+
+
+
buffers:
+
{{result["mem"].buffers | bytes:2}}
+
+
+
cached:
+
{{result["mem"].cached | bytes:2}}
+
+
+
+
+
@@ -115,7 +196,7 @@
-
+
@@ -177,6 +258,9 @@
+
+ CONTAINERS 1 (served by Docker 1.2.0) +
@@ -231,4 +315,4 @@
- \ No newline at end of file + diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index 4f17ad61..7360a184 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -154,14 +154,8 @@ class GlancesBottle(object): path = "D:\\glances\\" filepath = path + "debug.json" - if os.path.exists(filepath): - logger.debug("File exists : {0}.".format(filepath)) - - f = open(path + "debug.json") - return f.read() - - logger.warn("File does not exist : {0}.".format(filepath)) - return "" + f = open("/home/sylvain/glances/debug.json") + return f.read() def _api(self, plugin): """ @@ -264,4 +258,4 @@ class GlancesBottle(object): path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "bottle", "index.html") f = open(path) - return f.read() \ No newline at end of file + return f.read() diff --git a/glances/outputs/static/js/controllers.js b/glances/outputs/static/js/controllers.js index db84e6ef..fb3777db 100644 --- a/glances/outputs/static/js/controllers.js +++ b/glances/outputs/static/js/controllers.js @@ -253,7 +253,7 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', $scope.showHide('network') } else if ($event.keyCode == keycodes.s) {//s Show/hide sensors stats $scope.showHide('sensors') - } else if ($event.keyCode == keycodes.TWO) {//2 Show/hide left sidebar + } else if ($event.keyCode == keycodes.TWO && $event.shiftKey) {//2 Show/hide left sidebar $scope.showHide('sidebar') } else if ($event.keyCode == keycodes.z) {//z Enable/disable processes stats //$scope.enableDisable('processStats') @@ -289,4 +289,4 @@ glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', //$scope.sortBy('') } } -} ]); \ No newline at end of file +} ]); diff --git a/glances/outputs/static/js/variables.js b/glances/outputs/static/js/variables.js index de4513cd..91f7ce22 100644 --- a/glances/outputs/static/js/variables.js +++ b/glances/outputs/static/js/variables.js @@ -9,7 +9,7 @@ var keycodes = { 'f' : '70', 'n' : '78', 's' : '83', - 'TWO' : '98', + 'TWO' : '50', 'z' : '90', 'e' : '69', 'SLASH' : '191', @@ -26,4 +26,4 @@ var keycodes = { 'g' : '', 'r' : '', 'q' : '' -} \ No newline at end of file +} From 7b77b98bf04d293b536679bdcb54985cc178339c Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 17:38:26 +0100 Subject: [PATCH 055/267] refactoring bottle html files + add refresh_time in url + add help page --- MANIFEST.in | 3 +- glances/outputs/glances_bottle.py | 52 ++- glances/outputs/static/html/help.html | 30 ++ glances/outputs/static/html/index.html | 25 ++ glances/outputs/static/html/stats.html | 298 +++++++++++++ .../outputs/static/js/angular-route.min.js | 15 + .../static/js/angular-route.min.js.map | 8 + glances/outputs/static/js/angular.min.js | 418 +++++++++--------- glances/outputs/static/js/angular.min.js.map | 8 + glances/outputs/static/js/app.js | 9 +- glances/outputs/static/js/help_controller.js | 4 + glances/outputs/static/js/stats_controller.js | 290 ++++++++++++ 12 files changed, 928 insertions(+), 232 deletions(-) create mode 100644 glances/outputs/static/html/help.html create mode 100644 glances/outputs/static/html/index.html create mode 100644 glances/outputs/static/html/stats.html create mode 100644 glances/outputs/static/js/angular-route.min.js create mode 100644 glances/outputs/static/js/angular-route.min.js.map create mode 100644 glances/outputs/static/js/angular.min.js.map create mode 100644 glances/outputs/static/js/help_controller.js create mode 100644 glances/outputs/static/js/stats_controller.js diff --git a/MANIFEST.in b/MANIFEST.in index e976fa45..17120544 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,9 +3,10 @@ include COPYING include NEWS include README.rst include conf/glances.conf -include glances/outputs/bottle/*.html +include glances/outputs/static/html/*.html include glances/outputs/static/css/*.css include glances/outputs/static/js/*.js +include glances/outputs/static/js/*.js.map include man/glances.1 recursive-include docs images/*.png glances-doc.html recursive-include glances *.py diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index 7360a184..c96f7fe7 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -29,7 +29,7 @@ from glances.core.glances_logging import logger try: - from bottle import Bottle, template, static_file, TEMPLATE_PATH, abort, response + from bottle import Bottle, static_file, abort, response except ImportError: logger.critical('Bottle module not found. Glances cannot start in web server mode.') sys.exit(2) @@ -51,9 +51,6 @@ class GlancesBottle(object): self._app = Bottle() self._route() - # Update the template path (glances/outputs/bottle) - TEMPLATE_PATH.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'bottle')) - # Path where the statics files are stored self.STATIC_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'static') @@ -61,10 +58,15 @@ class GlancesBottle(object): """Define route.""" self._app.route('/', method="GET", callback=self._index) self._app.route('/', method=["GET", "POST"], callback=self._index) + self._app.route('/', method="GET", callback=self._css) self._app.route('/', method="GET", callback=self._js) + self._app.route('/', method="GET", callback=self._js_map) + self._app.route('/', method="GET", callback=self._html) + # REST API self._app.route('/api/2/pluginslist', method="GET", callback=self._api_plugins) + self._app.route('/api/2/pluginslimits', method="GET", callback=self._api_plugins_limits) self._app.route('/api/2/all', method="GET", callback=self._api_all) self._app.route('/api/2/:plugin', method="GET", callback=self._api) self._app.route('/api/2/:plugin/limits', method="GET", callback=self._api_limits) @@ -99,8 +101,13 @@ class GlancesBottle(object): self.stats.update() # Display - return self.display(self.stats, refresh_time=refresh_time) + return static_file("index.html", root=os.path.join(self.STATIC_PATH, 'html')) + def _html(self, filename): + """Bottle callback for *.html files.""" + # Return the static file + return static_file(filename, root=os.path.join(self.STATIC_PATH, 'html')) + def _css(self, filename): """Bottle callback for *.css files.""" # Return the static file @@ -111,6 +118,11 @@ class GlancesBottle(object): # Return the static file return static_file(filename, root=os.path.join(self.STATIC_PATH, 'js')) + def _js_map(self, filename): + """Bottle callback for *.js.map files.""" + # Return the static file + return static_file(filename, root=os.path.join(self.STATIC_PATH, 'js')) + def _api_plugins(self): """ Glances API RESTFul implementation @@ -128,6 +140,25 @@ class GlancesBottle(object): abort(404, "Cannot get plugin list (%s)" % str(e)) return plist + def _api_plugins_limits(self): + """ + Glances API RESTFul implementation + Return the limits for each plugins + or 404 error + """ + response.content_type = 'application/json' + + result = {} + for plugin in self.plugins_list: + try: + # Get the JSON value of the stat ID + limits = self.stats.get_plugin(plugin).get_limits() + result[plugin] = limits + except Exception as e: + pass + return result + + def _api_all(self): """ Glances API RESTFul implementation @@ -154,7 +185,7 @@ class GlancesBottle(object): path = "D:\\glances\\" filepath = path + "debug.json" - f = open("/home/sylvain/glances/debug.json") + f = open(filepath) return f.read() def _api(self, plugin): @@ -250,12 +281,3 @@ class GlancesBottle(object): else: return pdict - def display(self, stats, refresh_time=None): - """Display stats on the web page. - - stats: Stats database to display - """ - - path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "bottle", "index.html") - f = open(path) - return f.read() diff --git a/glances/outputs/static/html/help.html b/glances/outputs/static/html/help.html new file mode 100644 index 00000000..04da403f --- /dev/null +++ b/glances/outputs/static/html/help.html @@ -0,0 +1,30 @@ + + + + + + + Glances + + + + + + + + + + + + + + + + +Help window!!! + +message : {{message}} + + + + diff --git a/glances/outputs/static/html/index.html b/glances/outputs/static/html/index.html new file mode 100644 index 00000000..054d5a99 --- /dev/null +++ b/glances/outputs/static/html/index.html @@ -0,0 +1,25 @@ + + + + + + + Glances + + + + + + + + + + + + + + + + + + diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html new file mode 100644 index 00000000..aec1163f --- /dev/null +++ b/glances/outputs/static/html/stats.html @@ -0,0 +1,298 @@ + +
Loading...
+
+
+
+
+
+ Refresh time  + + {{result["system"].hostname}}  +
+
+
+
+ Uptime: {{result["uptime"]}} +
+
+
+
+ +
+
+
+
+
+
CPU
+
{{result["cpu"].total}}%
+
+
+
user:
+
+ {{result["cpu"].user}}% +
+
+
+
system:
+
+ {{result["cpu"].system}}% +
+
+
+
idle:
+
{{result["cpu"].idle}}%
+
+
+
+
+
+
+
+
+
nice:
+
+ {{result["cpu"].nice}}% +
+
+
+
irq:
+
+ {{result["cpu"].irq}}% +
+
+
+
iowait:
+
+ {{result["cpu"].iowait}}% +
+
+
+
steal:
+
+ {{result["cpu"].steal}}% +
+
+
+
+
+
+
+
+
+
LOAD
+
{{result["load"].cpucore}}-core
+
+
+
1 min:
+
+ {{result["load"].min1}} +
+
+
+
5 min:
+
+ {{result["load"].min5}} +
+
+
+
15 min:
+
+ {{result["load"].min15}} +
+
+
+
+
+
+
+
+
+
MEM
+
{{result["mem"].percent}}%
+
+
+
total:
+
{{result["mem"].total | bytes:2}}
+
+
+
used:
+
+ {{result["mem"].used | bytes:2}} +
+
+
+
free:
+
{{result["mem"].free | bytes:2}}
+
+
+
+
+
+
+
+
+
active:
+
{{result["mem"].active | bytes:2}}
+
+
+
inactive:
+
{{result["mem"].inactive | bytes:2}}
+
+
+
buffers:
+
{{result["mem"].buffers | bytes:2}}
+
+
+
cached:
+
{{result["mem"].cached | bytes:2}}
+
+
+
+
+
+
+
+
+
SWAP
+
{{result["memswap"].percent}}%
+
+
+
total:
+
{{result["memswap"].total | bytes:2}}
+
+
+
used:
+
+ {{result["memswap"].used | bytes:2}} +
+
+
+
free:
+
{{result["memswap"].free | bytes:2}}
+
+
+
+
+
+
+
+
+
+
+
NETWORK
+
Rx/s
+
Tx/s
+
+
+
{{network.interface_name | min_size}}
+
{{network.rx | bytes}}
+
{{network.tx | bytes}}
+
{{network.rx | bits}}
+
{{network.tx | bits}}
+
+
+
+ +
+
+
+
DISK I/O
+
R/s
+
W/s
+
+
+
{{disk.disk_name | min_size}}
+
{{disk.read_bytes | bytes}}
+
{{disk.write_bytes | bytes}}
+
+
+
+
+
+
+
FILE SYS
+
Used
+
Total
+
+
+
{{fs.mnt_point}} ({{fs.device_name}})
+
+ {{fs.size - fs.free | bytes}} +
+
{{fs.size | bytes}}
+
+
+
+
+
+
+
SENSORS
+
°C
+
+
+
{{sensor.label}}
+
{{sensor.value}}
+
+
+
+
+
+
+ CONTAINERS 1 (served by Docker 1.2.0) +
+
+
+
+
No warning or critical alert detected
+
{{alert}}
+
+
+
+ +
+ TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, + {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view +
+ +
+
+
+ +
+
+
+
CPU%
+
MEM%
+ + +
PID
+
USER
+
NI
+
S
+ + + +
Command
+
+
+
{{process.cpu_percent | number:1}}
+
{{process.memory_percent | number:1}}
+ + +
{{process.pid}}
+
{{process.username}}
+
{{process.nice | exclamation}}
+
{{process.status}}
+ + + +
{{process.name}}
+
+
+
+
+
+
diff --git a/glances/outputs/static/js/angular-route.min.js b/glances/outputs/static/js/angular-route.min.js new file mode 100644 index 00000000..4e533cd1 --- /dev/null +++ b/glances/outputs/static/js/angular-route.min.js @@ -0,0 +1,15 @@ + +/* + AngularJS v1.2.28 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(n,e,A){'use strict';function x(s,g,h){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,w){function y(){p&&(p.remove(),p=null);k&&(k.$destroy(),k=null);l&&(h.leave(l,function(){p=null}),p=l,l=null)}function v(){var b=s.current&&s.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),d=s.current;l=w(b,function(d){h.enter(d,null,l||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||g()});y()});k=d.scope=b;k.$emit("$viewContentLoaded");k.$eval(u)}else y()} +var k,l,p,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",v);v()}}}function z(e,g,h){return{restrict:"ECA",priority:-400,link:function(a,c){var b=h.current,f=b.locals;c.html(f.$template);var w=e(c.contents());b.controller&&(f.$scope=a,f=g(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));w(a)}}}n=e.module("ngRoute",["ng"]).provider("$route",function(){function s(a,c){return e.extend(new (e.extend(function(){}, +{prototype:a})),c)}function g(a,e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},h=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;h.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var h={};this.when=function(a,c){h[a]=e.extend({reloadOnSearch:!0},c,a&&g(a,c));if(a){var b= +"/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";h[b]=e.extend({redirectTo:a},g(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,g,n,v,k){function l(){var d=p(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!u)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)u=!1,a.$broadcast("$routeChangeStart", +d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(t(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?g.get(d):g.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=k.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl= +b,c=n.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function p(){var a,b;e.forEach(h,function(f,h){var q;if(q=!b){var g=c.path();q=f.keys;var l={};if(f.regexp)if(g=f.regexp.exec(g)){for(var k=1,p=g.length;k").append(b).html();try{return 3===b[0].nodeType?K(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+K(b)})}catch(d){return K(c)}}function dc(b){try{return decodeURIComponent(b)}catch(a){}}function ec(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=dc(c[0]),y(d)&&(b=y(c[1])?dc(c[1]):!0,kb.call(a,d)?J(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Cb(b){var a= -[];r(b,function(b,d){J(b)?r(b,function(b){a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))}):a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))});return a.length?a.join("&"):""}function lb(b){return Ca(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ca(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Xc(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,g=["ng:app","ng-app","x-ng-app", -"data-ng-app"],k=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;r(g,function(a){g[a]=!0;c(X.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(r(b.querySelectorAll("."+a),c),r(b.querySelectorAll("."+a+"\\:"),c),r(b.querySelectorAll("["+a+"]"),c))});r(d,function(a){if(!e){var b=k.exec(" "+a.className+" ");b?(e=a,f=(b[2]||"").replace(/\s+/g,",")):r(a.attributes,function(b){!e&&g[b.name]&&(e=a,f=b.value)})}});e&&a(e,f?[f]:[])}function fc(b,a){var c=function(){b=w(b);if(b.injector()){var c=b[0]===X? -"document":ia(b);throw Ta("btstrpd",c.replace(//,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=gc(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(W&&!d.test(W.name))return c();W.name=W.name.replace(d,"");Va.resumeBootstrap=function(b){r(b,function(b){a.push(b)});c()}}function mb(b,a){a= -a||"_";return b.replace(Yc,function(b,d){return(d?a:"")+b.toLowerCase()})}function Db(b,a,c){if(!b)throw Ta("areq",a||"?",c||"required");return b}function Wa(b,a,c){c&&J(b)&&(b=b[b.length-1]);Db(P(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Da(b,a){if("hasOwnProperty"===b)throw Ta("badname",a);}function hc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g").append(b).html();try{return 3===b[0].nodeType?x(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+x(b)})}catch(d){return x(c)}}function bc(b){try{return decodeURIComponent(b)}catch(a){}}function cc(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=bc(c[0]),D(d)&&(b=D(c[1])?bc(c[1]):!0,lb.call(a,d)?L(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Cb(b){var a= +[];r(b,function(b,d){L(b)?r(b,function(b){a.push(Da(d,!0)+(!0===b?"":"="+Da(b,!0)))}):a.push(Da(d,!0)+(!0===b?"":"="+Da(b,!0)))});return a.length?a.join("&"):""}function mb(b){return Da(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Da(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Wc(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,g=["ng:app","ng-app","x-ng-app", +"data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;r(g,function(a){g[a]=!0;c(X.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(r(b.querySelectorAll("."+a),c),r(b.querySelectorAll("."+a+"\\:"),c),r(b.querySelectorAll("["+a+"]"),c))});r(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,f=(b[2]||"").replace(/\s+/g,",")):r(a.attributes,function(b){!e&&g[b.name]&&(e=a,f=b.value)})}});e&&a(e,f?[f]:[])}function dc(b,a){var c=function(){b=A(b);if(b.injector()){var c=b[0]===X? +"document":ia(b);throw Va("btstrpd",c.replace(//,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=ec(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(W&&!d.test(W.name))return c();W.name=W.name.replace(d,"");Xa.resumeBootstrap=function(b){r(b,function(b){a.push(b)});c()}}function nb(b,a){a= +a||"_";return b.replace(Xc,function(b,d){return(d?a:"")+b.toLowerCase()})}function Db(b,a,c){if(!b)throw Va("areq",a||"?",c||"required");return b}function Ya(b,a,c){c&&L(b)&&(b=b[b.length-1]);Db(N(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ea(b,a){if("hasOwnProperty"===b)throw Va("badname",a);}function fc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g 
"+e[1]+a.replace(me,"<$1>")+e[2];d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a=Q?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ka(b,a){var c=typeof b,d;"function"==c||"object"==c&&null!==b?"function"==typeof(d= -b.$$hashKey)?d=b.$$hashKey():d===t&&(d=b.$$hashKey=(a||hb)()):d=b;return c+":"+d}function bb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function sc(b){var a,c;"function"===typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(pe,""),c=c.match(qe),r(c[1].split(re),function(b){b.replace(se,function(b,c,d){a.push(d)})})),b.$inject=a):J(b)?(c=b.length-1,Wa(b[c],"fn"),a=b.slice(0,c)):Wa(b,"fn",!0);return a}function gc(b){function a(a){return function(b,c){if(T(b))r(b, -$b(a));else return a(b,c)}}function c(a,b){Da(a,"service");if(P(b)||J(b))b=n.instantiate(b);if(!b.$get)throw cb("pget",a);return l[a+k]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,f,k;r(a,function(a){if(!h.get(a)){h.put(a,!0);try{if(v(a))for(c=Ya(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,f=0,k=d.length;f 4096 bytes)!"));else{if(m.cookie!== -da)for(da=m.cookie,d=da.split("; "),O={},f=0;fh&&this.remove(p.key),b},get:function(a){if(h").parent()[0])});var f=L(a,b,a,c,d,e);ca(a,"ng-scope");return function(b,c,d,e){Db(b,"scope");var g=c?La.clone.call(a):a;r(d,function(a,b){g.data("$"+b+"Controller",a)});d=0;for(var m=g.length;darguments.length&& -(b=a,a=t);K&&(c=da);return p(a,b,c)}var u,M,z,O,I,B,da={},rb;u=c===f?d:ha(d,new Ob(w(f),d.$attr));M=u.$$element;if(L){var Na=/^\s*([@=&])(\??)\s*(\w*)\s*$/;B=e.$new(!0);!H||H!==L&&H!==L.$$originalDirective?M.data("$isolateScopeNoTemplate",B):M.data("$isolateScope",B);ca(M,"ng-isolate-scope");r(L.scope,function(a,c){var d=a.match(Na)||[],f=d[3]||c,g="?"==d[2],d=d[1],m,l,n,p;B.$$isolateBindings[c]=d+f;switch(d){case "@":u.$observe(f,function(a){B[c]=a});u.$$observers[f].$$scope=e;u[f]&&(B[c]=b(u[f])(e)); -break;case "=":if(g&&!u[f])break;l=q(u[f]);p=l.literal?Aa:function(a,b){return a===b||a!==a&&b!==b};n=l.assign||function(){m=B[c]=l(e);throw ja("nonassign",u[f],L.name);};m=B[c]=l(e);B.$watch(function(){var a=l(e);p(a,B[c])||(p(a,m)?n(e,a=B[c]):B[c]=a);return m=a},null,l.literal);break;case "&":l=q(u[f]);B[c]=function(a){return l(e,a)};break;default:throw ja("iscp",L.name,c,a);}})}rb=p&&F;R&&r(R,function(a){var b={$scope:a===L||a.$$isolateScope?B:e,$element:M,$attrs:u,$transclude:rb},c;I=a.controller; -"@"==I&&(I=u[a.name]);c=s(I,b);da[a.name]=c;K||M.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});g=0;for(z=m.length;gG.priority)break;if(V=G.scope)O=O||G,G.templateUrl||(db("new/isolated scope",L,G,Z),T(V)&&(L=G));C=G.name;!G.templateUrl&&G.controller&&(V=G.controller,R=R||{},db("'"+C+"' controller",R[C],G,Z),R[C]=G);if(V=G.transclude)x=!0,G.$$tlb|| -(db("transclusion",fa,G,Z),fa=G),"element"==V?(K=!0,u=G.priority,V=Z,Z=d.$$element=w(X.createComment(" "+C+": "+d[C]+" ")),c=Z[0],Na(f,Ba.call(V,0),c),S=z(V,e,u,g&&g.name,{nonTlbTranscludeDirective:fa})):(V=w(Kb(c)).contents(),Z.empty(),S=z(V,e));if(G.template)if(D=!0,db("template",H,G,Z),H=G,V=P(G.template)?G.template(Z,d):G.template,V=W(V),G.replace){g=G;V=Ib.test(V)?w(aa(V)):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",C,"");Na(f,Z,c);qa={$attr:{}};V=da(c,[],qa);var $=a.splice(Fa+ -1,a.length-(Fa+1));L&&y(V);a=a.concat(V).concat($);E(d,qa);qa=a.length}else Z.html(V);if(G.templateUrl)D=!0,db("template",H,G,Z),H=G,G.replace&&(g=G),N=ue(a.splice(Fa,a.length-Fa),Z,d,f,x&&S,m,n,{controllerDirectives:R,newIsolateScopeDirective:L,templateDirective:H,nonTlbTranscludeDirective:fa}),qa=a.length;else if(G.compile)try{Q=G.compile(Z,d,S),P(Q)?F(null,Q,U,Y):Q&&F(Q.pre,Q.post,U,Y)}catch(ve){l(ve,ia(Z))}G.terminal&&(N.terminal=!0,u=Math.max(u,G.priority))}N.scope=O&&!0===O.scope;N.transcludeOnThisElement= -x;N.templateOnThisElement=D;N.transclude=S;p.hasElementTranscludeDirective=K;return N}function y(a){for(var b=0,c=a.length;bp.priority)&&-1!=p.restrict.indexOf(f)&&(q&&(p=bc(p,{$$start:q,$$end:n})),b.push(p),h=p)}catch(F){l(F)}}return h}function E(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!= -e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(ca(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function ue(a,b,c,d,e,f,g,h){var m=[],l,q,s=b[0],u=a.shift(),F=D({},u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),N=P(u.templateUrl)?u.templateUrl(b,c):u.templateUrl; -b.empty();n.get(A.getTrustedResourceUrl(N),{cache:p}).success(function(n){var p,A;n=W(n);if(u.replace){n=Ib.test(n)?w(aa(n)):[];p=n[0];if(1!=n.length||1!==p.nodeType)throw ja("tplrt",u.name,N);n={$attr:{}};Na(d,b,p);var z=da(p,[],n);T(u.scope)&&y(z);a=z.concat(a);E(c,n)}else p=s,b.html(n);a.unshift(F);l=H(a,p,c,e,b,u,f,g,h);r(d,function(a,c){a==p&&(d[c]=b[0])});for(q=L(b[0].childNodes,e);m.length;){n=m.shift();A=m.shift();var R=m.shift(),I=m.shift(),z=b[0];if(A!==s){var B=A.className;h.hasElementTranscludeDirective&& -u.replace||(z=Kb(p));Na(R,w(A),z);ca(w(z),B)}A=l.transcludeOnThisElement?O(n,l.transclude,I):I;l(q,n,z,d,A)}m=null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){a=e;m?(m.push(b),m.push(c),m.push(d),m.push(a)):(l.transcludeOnThisElement&&(a=O(b,l.transclude,e)),l(q,b,c,d,a))}}function x(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?d:n.reject(d)}var c={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},d=function(a){var b=e.headers,c=D({},a.headers),d,f,b=D({},b.common,b[K(a.method)]); -a:for(d in b){a=K(d);for(f in c)if(K(f)===a)continue a;c[d]=b[d]}(function(a){var b;r(a,function(c,d){P(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(c);return c}(a);D(c,a);c.headers=d;c.method=Ia(c.method);var f=[function(a){d=a.headers;var c=xc(a.data,wc(d),a.transformRequest);x(c)&&r(d,function(a,b){"content-type"===K(b)&&delete d[b]});x(a.withCredentials)&&!x(e.withCredentials)&&(a.withCredentials=e.withCredentials);return s(a,c,d).then(b,b)},t],g=n.when(c);for(r(A,function(a){(a.request||a.requestError)&& -f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var m=f.shift(),g=g.then(a,m)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,c)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,c)});return g};return g}function s(c,f,g){function h(a,b,c,e){I&&(200<=a&&300>a?I.put(w,[a,b,vc(c),e]):I.remove(w));p(b,a,c,e);d.$$phase||d.$apply()}function p(a,b,d,e){b=Math.max(b,0);(200<= -b&&300>b?A.resolve:A.reject)({data:a,status:b,headers:wc(d),config:c,statusText:e})}function s(){var a=Ra(q.pendingRequests,c);-1!==a&&q.pendingRequests.splice(a,1)}var A=n.defer(),r=A.promise,I,H,w=F(c.url,c.params);q.pendingRequests.push(c);r.then(s,s);!c.cache&&!e.cache||(!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method)||(I=T(c.cache)?c.cache:T(e.cache)?e.cache:u);if(I)if(H=I.get(w),y(H)){if(H&&P(H.then))return H.then(s,s),H;J(H)?p(H[1],H[0],ha(H[2]),H[3]):p(H,200,{},"OK")}else I.put(w,r);x(H)&& -((H=Pb(c.url)?b.cookies()[c.xsrfCookieName||e.xsrfCookieName]:t)&&(g[c.xsrfHeaderName||e.xsrfHeaderName]=H),a(c.method,w,f,h,g,c.timeout,c.withCredentials,c.responseType));return r}function F(a,b){if(!b)return a;var c=[];Tc(b,function(a,b){null===a||x(a)||(J(a)||(a=[a]),r(a,function(a){T(a)&&(a=ta(a)?a.toISOString():na(a));c.push(Ca(b)+"="+Ca(a))}))});0=Q&&(!b.match(/^(get|post|head|put|delete|options)$/i)|| -!W.XMLHttpRequest))return new W.ActiveXObject("Microsoft.XMLHTTP");if(W.XMLHttpRequest)return new W.XMLHttpRequest;throw C("$httpBackend")("noxhr");}function Vd(){this.$get=["$browser","$window","$document",function(b,a,c){return ye(b,xe,b.defer,a.angular.callbacks,c[0])}]}function ye(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),g=null;f.type="text/javascript";f.src=a;f.async=!0;g=function(a){$a(f,"load",g);$a(f,"error",g);e.body.removeChild(f);f=null;var k=-1,s="unknown";a&&("load"!== -a.type||d[b].called||(a={type:"error"}),s=a.type,k="error"===a.type?404:200);c&&c(k,s)};sb(f,"load",g);sb(f,"error",g);8>=Q&&(f.onreadystatechange=function(){v(f.readyState)&&/loaded|complete/.test(f.readyState)&&(f.onreadystatechange=null,g({type:"load"}))});e.body.appendChild(f);return g}var g=-1;return function(e,m,h,l,n,p,q,s){function F(){A=g;R&&R();z&&z.abort()}function u(a,d,e,f,g){L&&c.cancel(L);R=z=null;0===d&&(d=e?200:"file"==ua(m).protocol?404:0);a(1223===d?204:d,e,f,g||"");b.$$completeOutstandingRequest(E)} -var A;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==K(e)){var N="_"+(d.counter++).toString(36);d[N]=function(a){d[N].data=a;d[N].called=!0};var R=f(m.replace("JSON_CALLBACK","angular.callbacks."+N),N,function(a,b){u(l,a,d[N].data,"",b);d[N]=E})}else{var z=a(e);z.open(e,m,!0);r(n,function(a,b){y(a)&&z.setRequestHeader(b,a)});z.onreadystatechange=function(){if(z&&4==z.readyState){var a=null,b=null,c="";A!==g&&(a=z.getAllResponseHeaders(),b="response"in z?z.response:z.responseText);A===g&& -10>Q||(c=z.statusText);u(l,A||z.status,b,a,c)}};q&&(z.withCredentials=!0);if(s)try{z.responseType=s}catch(ca){if("json"!==s)throw ca;}z.send(h||null)}if(0=k&&(n.resolve(q),l(p.$$intervalId),delete e[p.$$intervalId]);s||b.$apply()},g);e[p.$$intervalId]=n;return p}var e={};d.cancel= -function(b){return b&&b.$$intervalId in e?(e[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete e[b.$$intervalId],!0):!1};return d}]}function bd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "), +function Zc(b){E(b,{bootstrap:dc,copy:Ka,extend:E,equals:Ca,element:A,forEach:r,injector:ec,noop:v,bind:Bb,toJson:oa,fromJson:ac,identity:ga,isUndefined:F,isDefined:D,isString:G,isFunction:N,isObject:T,isNumber:jb,isElement:Tc,isArray:L,version:$c,isDate:va,lowercase:x,uppercase:La,callbacks:{counter:0},$$minErr:z,$$csp:Za});$a=Yc(W);try{$a("ngLocale")}catch(a){$a("ngLocale",[]).provider("$locale",ad)}$a("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:bd});a.provider("$compile", +gc).directive({a:cd,input:hc,textarea:hc,form:dd,script:ed,select:fd,style:gd,option:hd,ngBind:id,ngBindHtml:jd,ngBindTemplate:kd,ngClass:ld,ngClassEven:md,ngClassOdd:nd,ngCloak:od,ngController:pd,ngForm:qd,ngHide:rd,ngIf:sd,ngInclude:td,ngInit:ud,ngNonBindable:vd,ngPluralize:wd,ngRepeat:xd,ngShow:yd,ngStyle:zd,ngSwitch:Ad,ngSwitchWhen:Bd,ngSwitchDefault:Cd,ngOptions:Dd,ngTransclude:Ed,ngModel:Fd,ngList:Gd,ngChange:Hd,required:ic,ngRequired:ic,ngValue:Id}).directive({ngInclude:Jd}).directive(Fb).directive(jc); +a.provider({$anchorScroll:Kd,$animate:Ld,$browser:Md,$cacheFactory:Nd,$controller:Od,$document:Pd,$exceptionHandler:Qd,$filter:kc,$interpolate:Rd,$interval:Sd,$http:Td,$httpBackend:Ud,$location:Vd,$log:Wd,$parse:Xd,$rootScope:Yd,$q:Zd,$sce:$d,$sceDelegate:ae,$sniffer:be,$templateCache:ce,$timeout:de,$window:ee,$$rAF:fe,$$asyncCallback:ge})}])}function ab(b){return b.replace(he,function(a,b,d,e){return e?d.toUpperCase():d}).replace(ie,"Moz$1")}function Gb(b,a,c,d){function e(b){var e=c&&b?[this.filter(b)]: +[this],k=a,m,l,n,q,p,s;if(!d||null!=b)for(;e.length;)for(m=e.shift(),l=0,n=m.length;l 
"+e[1]+a.replace(le,"<$1>")+e[2];d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a=R?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Na(b,a){var c=typeof b,d;"function"==c||"object"==c&&null!==b?"function"==typeof(d= +b.$$hashKey)?d=b.$$hashKey():d===u&&(d=b.$$hashKey=(a||ib)()):d=b;return c+":"+d}function db(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function qc(b){var a,c;"function"===typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(oe,""),c=c.match(pe),r(c[1].split(qe),function(b){b.replace(re,function(b,c,d){a.push(d)})})),b.$inject=a):L(b)?(c=b.length-1,Ya(b[c],"fn"),a=b.slice(0,c)):Ya(b,"fn",!0);return a}function ec(b){function a(a){return function(b,c){if(T(b))r(b, +Yb(a));else return a(b,c)}}function c(a,b){Ea(a,"service");if(N(b)||L(b))b=n.instantiate(b);if(!b.$get)throw eb("pget",a);return l[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,f,h;r(a,function(a){if(!m.get(a)){m.put(a,!0);try{if(G(a))for(c=$a(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,f=0,h=d.length;f 4096 bytes)!"));else{if(k.cookie!== +ca)for(ca=k.cookie,d=ca.split("; "),M={},f=0;fm&&this.remove(q.key),b},get:function(a){if(m").parent()[0])});var f=O(a,b,a,c,d,e);ba(a,"ng-scope");return function(b,c,d,e){Db(b,"scope");var g=c?Oa.clone.call(a):a;r(d,function(a,b){g.data("$"+b+"Controller",a)});d=0;for(var k=g.length;darguments.length&& +(b=a,a=u);Ia&&(c=ca);return n(a,b,c)}var y,Q,B,M,C,P,ca={},ra;y=c===f?d:ha(d,new Ob(A(f),d.$attr));Q=y.$$element;if(K){var ue=/^\s*([@=&])(\??)\s*(\w*)\s*$/;P=e.$new(!0);!I||I!==K&&I!==K.$$originalDirective?Q.data("$isolateScopeNoTemplate",P):Q.data("$isolateScope",P);ba(Q,"ng-isolate-scope");r(K.scope,function(a,c){var d=a.match(ue)||[],f=d[3]||c,g="?"==d[2],d=d[1],k,l,n,q;P.$$isolateBindings[c]=d+f;switch(d){case "@":y.$observe(f,function(a){P[c]=a});y.$$observers[f].$$scope=e;y[f]&&(P[c]=b(y[f])(e)); +break;case "=":if(g&&!y[f])break;l=p(y[f]);q=l.literal?Ca:function(a,b){return a===b||a!==a&&b!==b};n=l.assign||function(){k=P[c]=l(e);throw ja("nonassign",y[f],K.name);};k=P[c]=l(e);P.$watch(function(){var a=l(e);q(a,P[c])||(q(a,k)?n(e,a=P[c]):P[c]=a);return k=a},null,l.literal);break;case "&":l=p(y[f]);P[c]=function(a){return l(e,a)};break;default:throw ja("iscp",K.name,c,a);}})}ra=n&&w;O&&r(O,function(a){var b={$scope:a===K||a.$$isolateScope?P:e,$element:Q,$attrs:y,$transclude:ra},c;C=a.controller; +"@"==C&&(C=y[a.name]);c=s(C,b);ca[a.name]=c;Ia||Q.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});g=0;for(B=k.length;gH.priority)break;if(V=H.scope)M=M||H,H.templateUrl||(fb("new/isolated scope",K,H,x),T(V)&&(K=H));z=H.name;!H.templateUrl&&H.controller&&(V=H.controller,O=O||{},fb("'"+z+"' controller",O[z],H,x),O[z]=H);if(V=H.transclude)F=!0,H.$$tlb|| +(fb("transclusion",ea,H,x),ea=H),"element"==V?(Ia=!0,y=H.priority,V=x,x=d.$$element=A(X.createComment(" "+z+": "+d[z]+" ")),c=x[0],ra(f,wa.call(V,0),c),S=B(V,e,y,g&&g.name,{nonTlbTranscludeDirective:ea})):(V=A(Kb(c)).contents(),x.empty(),S=B(V,e));if(H.template)if(E=!0,fb("template",I,H,x),I=H,V=N(H.template)?H.template(x,d):H.template,V=W(V),H.replace){g=H;V=Ib.test(V)?A($(V)):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",z,"");ra(f,x,c);sa={$attr:{}};V=ca(c,[],sa);var Z=a.splice(Ha+ +1,a.length-(Ha+1));K&&D(V);a=a.concat(V).concat(Z);v(d,sa);sa=a.length}else x.html(V);if(H.templateUrl)E=!0,fb("template",I,H,x),I=H,H.replace&&(g=H),J=te(a.splice(Ha,a.length-Ha),x,d,f,F&&S,k,q,{controllerDirectives:O,newIsolateScopeDirective:K,templateDirective:I,nonTlbTranscludeDirective:ea}),sa=a.length;else if(H.compile)try{R=H.compile(x,d,S),N(R)?w(null,R,U,Y):R&&w(R.pre,R.post,U,Y)}catch(ve){l(ve,ia(x))}H.terminal&&(J.terminal=!0,y=Math.max(y,H.priority))}J.scope=M&&!0===M.scope;J.transcludeOnThisElement= +F;J.templateOnThisElement=E;J.transclude=S;n.hasElementTranscludeDirective=Ia;return J}function D(a){for(var b=0,c=a.length;bq.priority)&&-1!=q.restrict.indexOf(f)&&(m&&(q=$b(q,{$$start:m,$$end:n})),b.push(q),p=q)}catch(y){l(y)}}return p}function v(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!= +e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(ba(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function te(a,b,c,d,e,f,g,k){var p=[],l,m,w=b[0],s=a.shift(),y=E({},s,{templateUrl:null,transclude:null,replace:null,$$originalDirective:s}),J=N(s.templateUrl)?s.templateUrl(b,c):s.templateUrl; +b.empty();n.get(t.getTrustedResourceUrl(J),{cache:q}).success(function(q){var n,t;q=W(q);if(s.replace){q=Ib.test(q)?A($(q)):[];n=q[0];if(1!=q.length||1!==n.nodeType)throw ja("tplrt",s.name,J);q={$attr:{}};ra(d,b,n);var B=ca(n,[],q);T(s.scope)&&D(B);a=B.concat(a);v(c,q)}else n=w,b.html(q);a.unshift(y);l=I(a,n,c,e,b,s,f,g,k);r(d,function(a,c){a==n&&(d[c]=b[0])});for(m=O(b[0].childNodes,e);p.length;){q=p.shift();t=p.shift();var K=p.shift(),C=p.shift(),B=b[0];if(t!==w){var P=t.className;k.hasElementTranscludeDirective&& +s.replace||(B=Kb(n));ra(K,A(t),B);ba(A(B),P)}t=l.transcludeOnThisElement?M(q,l.transclude,C):C;l(m,q,B,d,t)}p=null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){a=e;p?(p.push(b),p.push(c),p.push(d),p.push(a)):(l.transcludeOnThisElement&&(a=M(b,l.transclude,e)),l(m,b,c,d,a))}}function F(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?d:n.reject(d)}var c={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},d=function(a){var b=e.headers,c=E({},a.headers),d,f,b=E({},b.common,b[x(a.method)]); +a:for(d in b){a=x(d);for(f in c)if(x(f)===a)continue a;c[d]=b[d]}(function(a){var b;r(a,function(c,d){N(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(c);return c}(a);E(c,a);c.headers=d;c.method=La(c.method);var f=[function(a){d=a.headers;var c=vc(a.data,uc(d),a.transformRequest);F(c)&&r(d,function(a,b){"content-type"===x(b)&&delete d[b]});F(a.withCredentials)&&!F(e.withCredentials)&&(a.withCredentials=e.withCredentials);return s(a,c,d).then(b,b)},u],g=n.when(c);for(r(t,function(a){(a.request||a.requestError)&& +f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var h=f.shift(),g=g.then(a,h)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,c)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,c)});return g};return g}function s(c,f,g){function m(a,b,c,e){C&&(200<=a&&300>a?C.put(A,[a,b,tc(c),e]):C.remove(A));q(b,a,c,e);d.$$phase||d.$apply()}function q(a,b,d,e){b=Math.max(b,0);(200<= +b&&300>b?t.resolve:t.reject)({data:a,status:b,headers:uc(d),config:c,statusText:e})}function s(){var a=Ta(p.pendingRequests,c);-1!==a&&p.pendingRequests.splice(a,1)}var t=n.defer(),r=t.promise,C,I,A=J(c.url,c.params);p.pendingRequests.push(c);r.then(s,s);!c.cache&&!e.cache||(!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method)||(C=T(c.cache)?c.cache:T(e.cache)?e.cache:w);if(C)if(I=C.get(A),D(I)){if(I&&N(I.then))return I.then(s,s),I;L(I)?q(I[1],I[0],ha(I[2]),I[3]):q(I,200,{},"OK")}else C.put(A,r);F(I)&& +((I=Pb(c.url)?b.cookies()[c.xsrfCookieName||e.xsrfCookieName]:u)&&(g[c.xsrfHeaderName||e.xsrfHeaderName]=I),a(c.method,A,f,m,g,c.timeout,c.withCredentials,c.responseType));return r}function J(a,b){if(!b)return a;var c=[];Sc(b,function(a,b){null===a||F(a)||(L(a)||(a=[a]),r(a,function(a){T(a)&&(a=va(a)?a.toISOString():oa(a));c.push(Da(b)+"="+Da(a))}))});0=R&&(!b.match(/^(get|post|head|put|delete|options)$/i)|| +!W.XMLHttpRequest))return new W.ActiveXObject("Microsoft.XMLHTTP");if(W.XMLHttpRequest)return new W.XMLHttpRequest;throw z("$httpBackend")("noxhr");}function Ud(){this.$get=["$browser","$window","$document",function(b,a,c){return ye(b,xe,b.defer,a.angular.callbacks,c[0])}]}function ye(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),g=null;f.type="text/javascript";f.src=a;f.async=!0;g=function(a){bb(f,"load",g);bb(f,"error",g);e.body.removeChild(f);f=null;var h=-1,s="unknown";a&&("load"!== +a.type||d[b].called||(a={type:"error"}),s=a.type,h="error"===a.type?404:200);c&&c(h,s)};sb(f,"load",g);sb(f,"error",g);8>=R&&(f.onreadystatechange=function(){G(f.readyState)&&/loaded|complete/.test(f.readyState)&&(f.onreadystatechange=null,g({type:"load"}))});e.body.appendChild(f);return g}var g=-1;return function(e,k,m,l,n,q,p,s){function J(){t=g;K&&K();B&&B.abort()}function w(a,d,e,f,g){O&&c.cancel(O);K=B=null;0===d&&(d=e?200:"file"==xa(k).protocol?404:0);a(1223===d?204:d,e,f,g||"");b.$$completeOutstandingRequest(v)} +var t;b.$$incOutstandingRequestCount();k=k||b.url();if("jsonp"==x(e)){var y="_"+(d.counter++).toString(36);d[y]=function(a){d[y].data=a;d[y].called=!0};var K=f(k.replace("JSON_CALLBACK","angular.callbacks."+y),y,function(a,b){w(l,a,d[y].data,"",b);d[y]=v})}else{var B=a(e);B.open(e,k,!0);r(n,function(a,b){D(a)&&B.setRequestHeader(b,a)});B.onreadystatechange=function(){if(B&&4==B.readyState){var a=null,b=null,c="";t!==g&&(a=B.getAllResponseHeaders(),b="response"in B?B.response:B.responseText);t===g&& +10>R||(c=B.statusText);w(l,t||B.status,b,a,c)}};p&&(B.withCredentials=!0);if(s)try{B.responseType=s}catch(ba){if("json"!==s)throw ba;}B.send(m||null)}if(0=h&&(n.resolve(p),l(q.$$intervalId),delete e[q.$$intervalId]);s||b.$apply()},g);e[q.$$intervalId]=n;return q}var e={};d.cancel= +function(b){return b&&b.$$intervalId in e?(e[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete e[b.$$intervalId],!0):!1};return d}]}function ad(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "), SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function Qb(b){b=b.split("/");for(var a=b.length;a--;)b[a]= -lb(b[a]);return b.join("/")}function zc(b,a,c){b=ua(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=U(b.port)||ze[b.protocol]||null}function Ac(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ua(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=ec(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ra(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function eb(b){var a= -b.indexOf("#");return-1==a?b:b.substr(0,a)}function Rb(b){return b.substr(0,eb(b).lastIndexOf("/")+1)}function Bc(b,a){this.$$html5=!0;a=a||"";var c=Rb(b);zc(b,this,b);this.$$parse=function(a){var e=ra(c,a);if(!v(e))throw Sb("ipthprfx",a,c);Ac(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Cb(this.$$search),b=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e; -if((e=ra(b,d))!==t)return d=e,(e=ra(a,e))!==t?c+(ra("/",e)||e):b+d;if((e=ra(c,d))!==t)return c+e;if(c==d+"/")return c}}function Tb(b,a){var c=Rb(b);zc(b,this,b);this.$$parse=function(d){var e=ra(b,d)||ra(c,d),e="#"==e.charAt(0)?ra(a,e):this.$$html5?e:"";if(!v(e))throw Sb("ihshprfx",d,a);Ac(e,this,b);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash? -"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(eb(b)==eb(a))return a}}function Ub(b,a){this.$$html5=!0;Tb.apply(this,arguments);var c=Rb(b);this.$$rewrite=function(d){var e;if(b==eb(d))return d;if(e=ra(c,d))return b+a+e;if(c===d+"/")return c};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function tb(b){return function(){return this[b]}} -function Cc(b,a){return function(c){if(x(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Wd(){var b="",a=!1;this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return y(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess",k.absUrl(),a)}var k,m,h=d.baseHref(),l=d.url(),n;a?(n=l.substring(0,l.indexOf("/",l.indexOf("//")+2))+(h||"/"),m=e.history?Bc:Ub):(n= -eb(l),m=Tb);k=new m(n,"#"+b);k.$$parse(k.$$rewrite(l));var p=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var e=w(a.target);"a"!==K(e[0].nodeName);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href");T(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=ua(g.animVal).href);if(!p.test(g)){if(m===Ub){var h=e.attr("href")||e.attr("xlink:href");if(h&&0>h.indexOf("://"))if(g="#"+b,"/"==h[0])g=n+g+h;else if("#"==h[0])g=n+g+(k.path()||"/")+h; -else{var l=k.path().split("/"),h=h.split("/");2!==l.length||l[1]||(l.length=1);for(var q=0;qe?Dc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var g=0,k;do k=Dc(d[g++],d[g++],d[g++],d[g++],d[g++],c,a)(b,f),f=t,b=k;while(ga)for(b in h++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(r--,delete e[b])}else e!==d&&(e=d,h++);return h},function(){n?(n=!1,b(d,d,c)):b(d,g,c);if(k)if(T(d))if(Pa(d)){g=Array(d.length);for(var a=0;at&&(w=4-t,O[w]||(O[w]=[]),B=P(d.exp)?"fn: "+(d.exp.name||d.exp.toString()): -d.exp,B+="; newVal: "+na(f)+"; oldVal: "+na(k),O[w].push(B));else if(d===c){z=!1;break a}}catch(y){p.$$phase=null,e(y)}if(!(h=L.$$childHead||L!==this&&L.$$nextSibling))for(;L!==this&&!(h=L.$$nextSibling);)L=L.$parent}while(L=h);if((z||l.length)&&!t--)throw p.$$phase=null,a("infdig",b,na(O));}while(z||l.length);for(p.$$phase=null;r.length;)try{r.shift()()}catch(v){e(v)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(r(this.$$listenerCount, -Bb(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=E,this.$on= -this.$watch=function(){return E})}},$eval:function(a,b){return f(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||g.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]= -c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[Ra(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,k={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){k.defaultPrevented=!0},defaultPrevented:!1},h=[k].concat(Ba.call(arguments,1)),l,m;do{d=f.$$listeners[a]||c;k.currentScope=f;l=0;for(m=d.length;lc.msieDocumentMode)throw xa("iequirks");var e=ha(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b}, -e.valueOf=Qa);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,g=e.getTrusted,k=e.trustAs;r(ga,function(a,b){var c=K(b);e[Za("parse_as_"+c)]=function(b){return f(a,b)};e[Za("get_trusted_"+c)]=function(b){return g(a,b)};e[Za("trust_as_"+c)]=function(b){return k(a,b)}});return e}]}function ce(){this.$get=["$window","$document",function(b,a){var c={},d=U((/android (\d+)/.exec(K((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator|| -{}).userAgent),f=a[0]||{},g=f.documentMode,k,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,h=f.body&&f.body.style,l=!1,n=!1;if(h){for(var p in h)if(l=m.exec(p)){k=l[0];k=k.substr(0,1).toUpperCase()+k.substr(1);break}k||(k="WebkitOpacity"in h&&"webkit");l=!!("transition"in h||k+"Transition"in h);n=!!("animation"in h||k+"Animation"in h);!d||l&&n||(l=v(f.body.style.webkitTransition),n=v(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!g||7< -g),hasEvent:function(a){if("input"==a&&9==Q)return!1;if(x(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:Xa(),vendorPrefix:k,transitions:l,animations:n,android:d,msie:Q,msieDocumentMode:g}}]}function ee(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,k,m){var h=c.defer(),l=h.promise,n=y(m)&&!m;k=a.defer(function(){try{h.resolve(e())}catch(a){h.reject(a),d(a)}finally{delete f[l.$$timeoutId]}n||b.$apply()},k);l.$$timeoutId=k;f[k]=h; -return l}var f={};e.cancel=function(b){return b&&b.$$timeoutId in f?(f[b.$$timeoutId].reject("canceled"),delete f[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return e}]}function ua(b,a){var c=b;Q&&(Y.setAttribute("href",c),c=Y.href);Y.setAttribute("href",c);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname: -"/"+Y.pathname}}function Pb(b){b=v(b)?ua(b):b;return b.protocol===Hc.protocol&&b.host===Hc.host}function fe(){this.$get=ba(W)}function mc(b){function a(d,e){if(T(d)){var f={};r(d,function(b,c){f[c]=a(c,b)});return f}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Ic);a("date",Jc);a("filter",Ce);a("json",De);a("limitTo",Ee);a("lowercase",Fe);a("number",Kc);a("orderBy",Lc);a("uppercase",Ge)}function Ce(){return function(b, -a,c){if(!J(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;bb;b=Math.abs(b);var g=b+"",k="",m=[],h=!1;if(-1!==g.indexOf("e")){var l=g.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&& -l[3]>e+1?(g="0",b=0):(k=g,h=!0)}if(h)0b)&&(k=b.toFixed(e));else{g=(g.split(Nc)[1]||"").length;x(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);0===b&&(f=!1);b=(""+b).split(Nc);g=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(g.length>=n+p)for(l=g.length-n,h=0;hb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Xb(e,a,d)}}function vb(b,a){return function(c,d){var e=c["get"+b](),f=Ia(a?"SHORT"+b:b);return d[f][e]}}function Jc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,k=b[8]? -a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=U(b[9]+b[10]),g=U(b[9]+b[11]));k.call(a,U(b[1]),U(b[2])-1,U(b[3]));f=U(b[4]||0)-f;g=U(b[5]||0)-g;k=U(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,f,g,k,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var f="",g=[],k,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;v(c)&&(c=He.test(c)?U(c):a(c));ib(c)&&(c=new Date(c)); -if(!ta(c))return c;for(;e;)(m=Ie.exec(e))?(g=g.concat(Ba.call(m,1)),e=g.pop()):(g.push(e),e=null);r(g,function(a){k=Je[a];f+=k?k(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return f}}function De(){return function(b){return na(b,!0)}}function Ee(){return function(b,a){if(!J(b)&&!v(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):U(a);if(v(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||q()});if(e.hasEvent("paste"))a.on("paste cut",q)}a.on("change",n);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var s=c.ngPattern;s&&((e=s.match(/^\/(.*)\/([gim]*)$/))?(s=RegExp(e[1],e[2]),e=function(a){return sa(d, -"pattern",d.$isEmpty(a)||s.test(a),a)}):e=function(c){var e=b.$eval(s);if(!e||!e.test)throw C("ngPattern")("noregexp",s,e,ia(a));return sa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var r=U(c.ngMinlength);e=function(a){return sa(d,"minlength",d.$isEmpty(a)||a.length>=r,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var u=U(c.ngMaxlength);e=function(a){return sa(d,"maxlength",d.$isEmpty(a)||a.length<=u,a)};d.$parsers.push(e); -d.$formatters.push(e)}}function Yb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;dQ?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Xa=function(){if(y(Xa.isActive_))return Xa.isActive_;var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]")); -if(!b)try{new Function("")}catch(a){b=!0}return Xa.isActive_=b},Yc=/[A-Z]/g,ad={full:"1.2.26",major:1,minor:2,dot:26,codeName:"captivating-disinterest"};S.expando="ng339";var ab=S.cache={},ne=1,sb=W.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},$a=W.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};S._data=function(b){return this.cache[b[this.expando]]||{}};var ie=/([\:\-\_]+(.))/g, -je=/^moz([A-Z])/,Hb=C("jqLite"),ke=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Ib=/<|&#?\w+;/,le=/<([\w:]+)/,me=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th= -ea.td;var La=S.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),S(W).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?w(this[b]):w(this[this.length+b])},length:0,push:Me,sort:[].sort,splice:[].splice},qb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){qb[K(b)]=b});var rc={};r("input select option textarea button form details".split(" "), -function(b){rc[Ia(b)]=!0});r({data:Mb,removeData:Lb},function(b,a){S[a]=b});r({data:Mb,inheritedData:pb,scope:function(b){return w.data(b,"$scope")||pb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return w.data(b,"$isolateScope")||w.data(b,"$isolateScopeNoTemplate")},controller:oc,injector:function(b){return pb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Nb,css:function(b,a,c){a=Za(a);if(y(c))b.style[a]=c;else{var d;8>=Q&&(d=b.currentStyle&&b.currentStyle[a], -""===d&&(d="auto"));d=d||b.style[a];8>=Q&&(d=""===d?t:d);return d}},attr:function(b,a,c){var d=K(a);if(qb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||E).specified?d:t;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(x(d))return e?b[e]:"";b[e]=d}var a=[];9>Q?(a[1]= -"innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(x(a)){if("SELECT"===Ma(b)&&b.multiple){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(x(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Re={n:"\n",f:"\f",r:"\r", -t:"\t",v:"\v","'":"'",'"':'"'},Wb=function(a){this.options=a};Wb.prototype={constructor:Wb,lex:function(a){this.text=a;this.index=0;this.ch=t;this.lastCh=":";for(this.tokens=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+ -this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.indexg?Cc(f[0],f[1],f[2],f[3],f[4],c,a):function(b,d){var e=0,h;do h=Cc(f[e++],f[e++],f[e++],f[e++],f[e++],c,a)(b,d),d=u,b=h;while(eb.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||p()});if(e.hasEvent("paste"))a.on("paste cut",p)}a.on("change",n);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var s=c.ngPattern;s&&((e=s.match(/^\/(.*)\/([gim]*)$/))? +(s=RegExp(e[1],e[2]),e=function(a){return ua(d,"pattern",d.$isEmpty(a)||s.test(a),a)}):e=function(c){var e=b.$eval(s);if(!e||!e.test)throw z("ngPattern")("noregexp",s,e,ia(a));return ua(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var r=U(c.ngMinlength);e=function(a){return ua(d,"minlength",d.$isEmpty(a)||a.length>=r,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var w=U(c.ngMaxlength);e=function(a){return ua(d,"maxlength",d.$isEmpty(a)|| +a.length<=w,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Wb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;dR?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?La(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Za=function(){if(D(Za.isActive_))return Za.isActive_;var b=!(!X.querySelector("[ng-csp]")&& +!X.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return Za.isActive_=b},Xc=/[A-Z]/g,$c={full:"1.2.28",major:1,minor:2,dot:28,codeName:"finnish-disembarkation"};S.expando="ng339";var cb=S.cache={},me=1,sb=W.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},bb=W.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};S._data=function(b){return this.cache[b[this.expando]]|| +{}};var he=/([\:\-\_]+(.))/g,ie=/^moz([A-Z])/,Hb=z("jqLite"),je=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Ib=/<|&#?\w+;/,ke=/<([\w:]+)/,le=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,da={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};da.optgroup=da.option;da.tbody=da.tfoot=da.colgroup= +da.caption=da.thead;da.th=da.td;var Oa=S.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),S(W).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?A(this[b]):A(this[this.length+b])},length:0,push:Pe,sort:[].sort,splice:[].splice},rb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){rb[x(b)]=b}); +var pc={};r("input select option textarea button form details".split(" "),function(b){pc[La(b)]=!0});r({data:Mb,removeData:Lb},function(b,a){S[a]=b});r({data:Mb,inheritedData:qb,scope:function(b){return A.data(b,"$scope")||qb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return A.data(b,"$isolateScope")||A.data(b,"$isolateScopeNoTemplate")},controller:mc,injector:function(b){return qb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Nb,css:function(b, +a,c){a=ab(a);if(D(c))b.style[a]=c;else{var d;8>=R&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=R&&(d=""===d?u:d);return d}},attr:function(b,a,c){var d=x(a);if(rb[d])if(D(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||v).specified?d:u;else if(D(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?u:b},prop:function(b,a,c){if(D(c))b[a]=c;else return b[a]},text:function(){function b(b, +d){var e=a[b.nodeType];if(F(d))return e?b[e]:"";b[e]=d}var a=[];9>R?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(F(a)){if("SELECT"===Pa(b)&&b.multiple){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(F(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a, +c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Ue={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Ub=function(a){this.options=a};Ub.prototype={constructor:Ub,lex:function(a){this.text=a;this.index=0;this.ch=u;this.lastCh=":";for(this.tokens=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)}, +throwError:function(a,c,d){d=d||this.index;c=D(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(fb.ZERO,a.fn, -this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Ec(d,this.options,this.text);return D(function(c,d,k){return e(k||a(c,d))},{assign:function(e,g,k){(k=a(e,k))||a.assign(e,k={});return ub(k,d,g,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,f){var g=a(e,f),k=d(e,f),m;ka(k,c.text);if(!g)return t;(g=va(g[k],c.text))&&(g.then&&c.options.unwrapPromises)&& -(m=g,"$$v"in g||(m.$$v=t,m.then(function(a){m.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var k=ka(d(e,g),c.text);(g=va(a(e,g),c.text))||a.assign(e,g={});return g[k]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var k=[],m=c?c(f,g):f,h=0;ha.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Xb(Math[0< -a?"floor":"ceil"](a/60),2)+Xb(Math.abs(a%60),2))}},Ie=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,He=/^\-?\d+$/;Jc.$inject=["$locale"];var Fe=ba(K),Ge=ba(Ia);Lc.$inject=["$parse"];var dd=ba({restrict:"E",compile:function(a,c){8>=Q&&(c.href||c.name||c.$set("href",""),a.append(X.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===za.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)|| -a.preventDefault()})}}}),Fb={};r(qb,function(a,c){if("multiple"!=a){var d=pa("ng-"+c);Fb[d]=function(){return{priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(["src","srcset","href"],function(a){var c=pa("ng-"+a);Fb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,k=a;"href"===a&&"[object SVGAnimatedString]"===za.call(e.prop("href"))&&(k="xlinkHref",f.$attr[k]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(k,c),Q&&g&&e.prop(g,f[k])):"href"=== -a&&f.$set(k,null)})}}}});var yb={$addControl:E,$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E};Oc.$inject=["$element","$attrs","$scope","$animate"];var Rc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,f,g){if(!f.action){var k=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};sb(e[0],"submit",k);e.on("$destroy",function(){c(function(){$a(e[0],"submit",k)},0,!1)})}var m=e.parent().controller("form"), -h=f.name||f.ngForm;h&&ub(a,h,g,h);if(m)e.on("$destroy",function(){m.$removeControl(g);h&&ub(a,h,t,h);D(g,yb)})}}}}}]},ed=Rc(),rd=Rc(!0),Se=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Te=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Ue=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Sc={text:Ab,number:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Ue.test(a))return e.$setValidity("number", -!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return t});Ke(e,"number",Ve,null,e.$$validityState);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return sa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return sa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return sa(e,"number",e.$isEmpty(a)|| -ib(a),a)})},url:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"url",e.$isEmpty(a)||Se.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"email",e.$isEmpty(a)||Te.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){x(d.name)&&c.attr("name",hb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue}; -d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;v(f)||(f=!0);v(g)||(g=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:g})},hidden:E,button:E,submit:E,reset:E,file:E},Ve=["badInput"],jc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel", -link:function(d,e,f,g){g&&(Sc[K(f.type)]||Sc.text)(d,e,f,g,c,a)}}}],wb="ng-valid",xb="ng-invalid",Oa="ng-pristine",zb="ng-dirty",We=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,f,g){function k(a,c){c=c?"-"+mb(c,"-"):"";g.removeClass(e,(a?xb:wb)+c);g.addClass(e,(a?wb:xb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name= -d.name;var m=f(d.ngModel),h=m.assign;if(!h)throw C("ngModel")("nonassign",d.ngModel,ia(e));this.$render=E;this.$isEmpty=function(a){return x(a)||""===a||null===a||a!==a};var l=e.inheritedData("$formController")||yb,n=0,p=this.$error={};e.addClass(Oa);k(!0);this.$setValidity=function(a,c){p[a]!==!c&&(c?(p[a]&&n--,n||(k(!0),this.$valid=!0,this.$invalid=!1)):(k(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,k(c,a),l.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine= -!0;g.removeClass(e,zb);g.addClass(e,Oa)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,g.removeClass(e,Oa),g.addClass(e,zb),l.$setDirty());r(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,h(a,d),r(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var q=this;a.$watch(function(){var c=m(a);if(q.$modelValue!==c){var d=q.$formatters,e=d.length;for(q.$modelValue=c;e--;)c=d[e](c);q.$viewValue!==c&&(q.$viewValue= -c,q.$render())}return c})}],Gd=function(){return{require:["ngModel","^?form"],controller:We,link:function(a,c,d,e){var f=e[0],g=e[1]||yb;g.$addControl(f);a.$on("$destroy",function(){g.$removeControl(f)})}}},Id=ba({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),kc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required", -!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},Hd=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!x(a)){var c=[];a&&r(a.split(f),function(a){a&&c.push(aa(a))});return c}});e.$formatters.push(function(a){return J(a)?a.join(", "):t});e.$isEmpty=function(a){return!a||!a.length}}}},Xe=/^(true|false|\d+)$/,Jd=function(){return{priority:100, -compile:function(a,c){return Xe.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},jd=ya({compile:function(a){a.addClass("ng-binding");return function(a,d,e){d.data("$binding",e.ngBind);a.$watch(e.ngBind,function(a){d.text(a==t?"":a)})}}}),ld=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}], -kd=["$sce","$parse",function(a,c){return{compile:function(d){d.addClass("ng-binding");return function(d,f,g){f.data("$binding",g.ngBindHtml);var k=c(g.ngBindHtml);d.$watch(function(){return(k(d)||"").toString()},function(c){f.html(a.getTrustedHtml(k(d))||"")})}}}}],md=Yb("",!0),od=Yb("Odd",0),nd=Yb("Even",1),pd=ya({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),qd=[function(){return{scope:!0,controller:"@",priority:500}}],lc={},Ye={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), -function(a){var c=pa("ng-"+a);lc[c]=["$parse","$rootScope",function(d,e){return{compile:function(f,g){var k=d(g[c]);return function(c,d){d.on(a,function(d){var f=function(){k(c,{$event:d})};Ye[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var td=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var k,m,h;c.$watch(e.ngIf,function(f){Ua(f)?m||(m=c.$new(),g(m,function(c){c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+ -" ");k={clone:c};a.enter(c,d.parent(),d)})):(h&&(h.remove(),h=null),m&&(m.$destroy(),m=null),k&&(h=Eb(k.clone),a.leave(h,function(){h=null}),k=null))})}}}],ud=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,f){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Va.noop,compile:function(g,k){var m=k.ngInclude||k.src,h=k.onload||"",l=k.autoscroll;return function(g,k,q,r,F){var u=0,t,w,R,z=function(){w&&(w.remove(),w=null);t&&(t.$destroy(),t=null); -R&&(e.leave(R,function(){w=null}),w=R,R=null)};g.$watch(f.parseAsResourceUrl(m),function(f){var m=function(){!y(l)||l&&!g.$eval(l)||d()},q=++u;f?(a.get(f,{cache:c}).success(function(a){if(q===u){var c=g.$new();r.template=a;a=F(c,function(a){z();e.enter(a,null,k,m)});t=c;R=a;t.$emit("$includeContentLoaded");g.$eval(h)}}).error(function(){q===u&&z()}),g.$emit("$includeContentRequested")):(z(),r.template=null)})}}}}],Kd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude", -link:function(c,d,e,f){d.html(f.template);a(d.contents())(c)}}}],vd=ya({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),wd=ya({terminal:!0,priority:1E3}),xd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var k=g.count,m=g.$attr.when&&f.attr(g.$attr.when),h=g.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),q=c.endSymbol(),s=/^when(Minus)?(.+)$/;r(g,function(a,c){s.test(c)&&(l[K(c.replace("when","").replace("Minus","-"))]= -f.attr(g.$attr[c]))});r(l,function(a,e){n[e]=c(a.replace(d,p+k+"-"+h+q))});e.$watch(function(){var c=parseFloat(e.$eval(k));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-h));return n[c](e,f,!0)},function(a){f.text(a)})}}}],yd=["$parse","$animate",function(a,c){var d=C("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,f,g,k,m){var h=g.ngRepeat,l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,q,s,t,u,A={$id:Ka};if(!l)throw d("iexp", -h);g=l[1];k=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){u&&(A[u]=a);A[t]=c;A.$index=d;return n(e,A)}):(q=function(a,c){return Ka(c)},s=function(a){return a});l=g.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",g);t=l[3]||l[1];u=l[2];var y={};e.$watchCollection(k,function(a){var g,k,l=f[0],n,A={},B,I,H,v,E,C,x,J=[];if(Pa(a))C=a,E=p||q;else{E=p||s;C=[];for(H in a)a.hasOwnProperty(H)&&"$"!=H.charAt(0)&&C.push(H);C.sort()}B=C.length;k=J.length=C.length;for(g=0;gB;)d=t.pop(),p.removeOption(d.label),d.element.remove()}for(;z.length>M;)z.pop()[0].element.remove()}var h;if(!(h=s.match(d)))throw Ze("iexp",s,ia(f));var l=c(h[2]||h[1]),m=h[4]||h[6],n=h[5],r=c(h[3]||""),u=c(h[2]? -h[1]:m),w=c(h[7]),x=h[8]?c(h[8]):null,z=[[{element:f,label:""}]];F&&(a(F)(e),F.removeClass("ng-scope"),F.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=w(e)||[],d={},h,l,p,r,s,v,y;if(q)for(l=[],r=0,v=z.length;r@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}'); +relational:function(){var a=this.additive(),c;if(c=this.expect("<",">","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(gb.ZERO,a.fn, +this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Dc(d,this.options,this.text);return E(function(c,d,h){return e(h||a(c,d))},{assign:function(e,g,h){(h=a(e,h))||a.assign(e,h={});return ub(h,d,g,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return E(function(e,f){var g=a(e,f),h=d(e,f),k;ka(h,c.text);if(!g)return u;(g=ma(g[h],c.text))&&(g.then&&c.options.unwrapPromises)&& +(k=g,"$$v"in g||(k.$$v=u,k.then(function(a){k.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var h=ka(d(e,g),c.text);(g=ma(a(e,g),c.text))||a.assign(e,g={});return g[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var h=[],k=c?c(f,g):f,m=0;ma.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Vb(Math[0< +a?"floor":"ceil"](a/60),2)+Vb(Math.abs(a%60),2))}},Le=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,Ke=/^\-?\d+$/;Ic.$inject=["$locale"];var Ie=aa(x),Je=aa(La);Kc.$inject=["$parse"];var cd=aa({restrict:"E",compile:function(a,c){8>=R&&(c.href||c.name||c.$set("href",""),a.append(X.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===Ba.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)|| +a.preventDefault()})}}}),Fb={};r(rb,function(a,c){if("multiple"!=a){var d=qa("ng-"+c);Fb[d]=function(){return{priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(["src","srcset","href"],function(a){var c=qa("ng-"+a);Fb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Ba.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(h,c),R&&g&&e.prop(g,f[h])):"href"=== +a&&f.$set(h,null)})}}}});var yb={$addControl:v,$removeControl:v,$setValidity:v,$setDirty:v,$setPristine:v};Nc.$inject=["$element","$attrs","$scope","$animate"];var Qc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Nc,compile:function(){return{pre:function(a,e,f,g){if(!f.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};sb(e[0],"submit",h);e.on("$destroy",function(){c(function(){bb(e[0],"submit",h)},0,!1)})}var k=e.parent().controller("form"), +m=f.name||f.ngForm;m&&ub(a,m,g,m);if(k)e.on("$destroy",function(){k.$removeControl(g);m&&ub(a,m,u,m);E(g,yb)})}}}}}]},dd=Qc(),qd=Qc(!0),Ve=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,We=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Xe=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Rc={text:Ab,number:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Xe.test(a))return e.$setValidity("number", +!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return u});Ne(e,"number",Ye,null,e.$$validityState);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return ua(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return ua(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return ua(e,"number",e.$isEmpty(a)|| +jb(a),a)})},url:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return ua(e,"url",e.$isEmpty(a)||Ve.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return ua(e,"email",e.$isEmpty(a)||We.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){F(d.name)&&c.attr("name",ib());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue}; +d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;G(f)||(f=!0);G(g)||(g=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:g})},hidden:v,button:v,submit:v,reset:v,file:v},Ye=["badInput"],hc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel", +link:function(d,e,f,g){g&&(Rc[x(f.type)]||Rc.text)(d,e,f,g,c,a)}}}],wb="ng-valid",xb="ng-invalid",Ra="ng-pristine",zb="ng-dirty",Ze=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,f,g){function h(a,c){c=c?"-"+nb(c,"-"):"";g.removeClass(e,(a?xb:wb)+c);g.addClass(e,(a?wb:xb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name= +d.name;var k=f(d.ngModel),m=k.assign;if(!m)throw z("ngModel")("nonassign",d.ngModel,ia(e));this.$render=v;this.$isEmpty=function(a){return F(a)||""===a||null===a||a!==a};var l=e.inheritedData("$formController")||yb,n=0,q=this.$error={};e.addClass(Ra);h(!0);this.$setValidity=function(a,c){q[a]!==!c&&(c?(q[a]&&n--,n||(h(!0),this.$valid=!0,this.$invalid=!1)):(h(!1),this.$invalid=!0,this.$valid=!1,n++),q[a]=!c,h(c,a),l.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine= +!0;g.removeClass(e,zb);g.addClass(e,Ra)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,g.removeClass(e,Ra),g.addClass(e,zb),l.$setDirty());r(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,m(a,d),r(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var p=this;a.$watch(function(){var c=k(a);if(p.$modelValue!==c){var d=p.$formatters,e=d.length;for(p.$modelValue=c;e--;)c=d[e](c);p.$viewValue!==c&&(p.$viewValue= +c,p.$render())}return c})}],Fd=function(){return{require:["ngModel","^?form"],controller:Ze,link:function(a,c,d,e){var f=e[0],g=e[1]||yb;g.$addControl(f);a.$on("$destroy",function(){g.$removeControl(f)})}}},Hd=aa({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),ic=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required", +!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},Gd=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!F(a)){var c=[];a&&r(a.split(f),function(a){a&&c.push($(a))});return c}});e.$formatters.push(function(a){return L(a)?a.join(", "):u});e.$isEmpty=function(a){return!a||!a.length}}}},$e=/^(true|false|\d+)$/,Id=function(){return{priority:100, +compile:function(a,c){return $e.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},id=Aa({compile:function(a){a.addClass("ng-binding");return function(a,d,e){d.data("$binding",e.ngBind);a.$watch(e.ngBind,function(a){d.text(a==u?"":a)})}}}),kd=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}], +jd=["$sce","$parse",function(a,c){return{compile:function(d){d.addClass("ng-binding");return function(d,f,g){f.data("$binding",g.ngBindHtml);var h=c(g.ngBindHtml);d.$watch(function(){return(h(d)||"").toString()},function(c){f.html(a.getTrustedHtml(h(d))||"")})}}}}],ld=Wb("",!0),nd=Wb("Odd",0),md=Wb("Even",1),od=Aa({compile:function(a,c){c.$set("ngCloak",u);a.removeClass("ng-cloak")}}),pd=[function(){return{scope:!0,controller:"@",priority:500}}],jc={},af={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), +function(a){var c=qa("ng-"+a);jc[c]=["$parse","$rootScope",function(d,e){return{compile:function(f,g){var h=d(g[c],!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};af[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var sd=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,k,m;c.$watch(e.ngIf,function(f){Wa(f)?k||(k=c.$new(),g(k,function(c){c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+ +" ");h={clone:c};a.enter(c,d.parent(),d)})):(m&&(m.remove(),m=null),k&&(k.$destroy(),k=null),h&&(m=Eb(h.clone),a.leave(m,function(){m=null}),h=null))})}}}],td=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,f){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Xa.noop,compile:function(g,h){var k=h.ngInclude||h.src,m=h.onload||"",l=h.autoscroll;return function(g,h,p,r,J){var w=0,t,y,u,B=function(){y&&(y.remove(),y=null);t&&(t.$destroy(),t=null); +u&&(e.leave(u,function(){y=null}),y=u,u=null)};g.$watch(f.parseAsResourceUrl(k),function(f){var k=function(){!D(l)||l&&!g.$eval(l)||d()},p=++w;f?(a.get(f,{cache:c}).success(function(a){if(p===w){var c=g.$new();r.template=a;a=J(c,function(a){B();e.enter(a,null,h,k)});t=c;u=a;t.$emit("$includeContentLoaded");g.$eval(m)}}).error(function(){p===w&&B()}),g.$emit("$includeContentRequested")):(B(),r.template=null)})}}}}],Jd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude", +link:function(c,d,e,f){d.html(f.template);a(d.contents())(c)}}}],ud=Aa({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),vd=Aa({terminal:!0,priority:1E3}),wd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var h=g.count,k=g.$attr.when&&f.attr(g.$attr.when),m=g.offset||0,l=e.$eval(k)||{},n={},q=c.startSymbol(),p=c.endSymbol(),s=/^when(Minus)?(.+)$/;r(g,function(a,c){s.test(c)&&(l[x(c.replace("when","").replace("Minus","-"))]= +f.attr(g.$attr[c]))});r(l,function(a,e){n[e]=c(a.replace(d,q+h+"-"+m+p))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-m));return n[c](e,f,!0)},function(a){f.text(a)})}}}],xd=["$parse","$animate",function(a,c){var d=z("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,f,g,h,k){var m=g.ngRepeat,l=m.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,q,p,s,u,w,t={$id:Na};if(!l)throw d("iexp", +m);g=l[1];h=l[2];(l=l[3])?(n=a(l),q=function(a,c,d){w&&(t[w]=a);t[u]=c;t.$index=d;return n(e,t)}):(p=function(a,c){return Na(c)},s=function(a){return a});l=g.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",g);u=l[3]||l[1];w=l[2];var y={};e.$watchCollection(h,function(a){var g,h,l=f[0],n,t={},D,C,I,x,G,v,z,F=[];if(Sa(a))v=a,G=q||p;else{G=q||s;v=[];for(I in a)a.hasOwnProperty(I)&&"$"!=I.charAt(0)&&v.push(I);v.sort()}D=v.length;h=F.length=v.length;for(g=0;gC;)d=u.pop(),q.removeOption(d.label),d.element.remove()}for(;B.length>Q;)B.pop()[0].element.remove()}var k;if(!(k=s.match(d)))throw bf("iexp",s,ia(f));var l=c(k[2]||k[1]), +m=k[4]||k[6],n=k[5],r=c(k[3]||""),x=c(k[2]?k[1]:m),A=c(k[7]),w=k[8]?c(k[8]):null,B=[[{element:f,label:""}]];z&&(a(z)(e),z.removeClass("ng-scope"),z.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=A(e)||[],d={},k,l,q,r,s,t,v;if(p)for(l=[],r=0,t=B.length;r@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}'); //# sourceMappingURL=angular.min.js.map \ No newline at end of file diff --git a/glances/outputs/static/js/angular.min.js.map b/glances/outputs/static/js/angular.min.js.map new file mode 100644 index 00000000..bf40d3e2 --- /dev/null +++ b/glances/outputs/static/js/angular.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular.min.js", +"lineCount":216, +"mappings":"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", +"sources":["angular.js"], +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","location","alert","setInterval","isElement","node","nodeName","prop","attr","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","stackSource","stackDest","$evalAsync","$watch","ngMinErr","result","Date","getTime","RegExp","match","lastIndex","shallowCopy","src","charAt","equals","o1","o2","t1","t2","isNaN","keySet","bind","self","fn","curryArgs","slice","startIndex","apply","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","empty","e","elemHtml","append","html","TEXT_NODE","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","nodes","startNode","endNode","nextSibling","setupModuleLoader","$injectorMinErr","$$minErr","factory","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","publishExternalAPI","version","uppercase","csp","angularModule","$LocaleProvider","ngModule","$$SanitizeUriProvider","$CompileProvider","directive","htmlAnchorDirective","inputDirective","formDirective","scriptDirective","selectDirective","styleDirective","optionDirective","ngBindDirective","ngBindHtmlDirective","ngBindTemplateDirective","ngClassDirective","ngClassEvenDirective","ngClassOddDirective","ngCloakDirective","ngControllerDirective","ngFormDirective","ngHideDirective","ngIfDirective","ngIncludeDirective","ngInitDirective","ngNonBindableDirective","ngPluralizeDirective","ngRepeatDirective","ngShowDirective","ngStyleDirective","ngSwitchDirective","ngSwitchWhenDirective","ngSwitchDefaultDirective","ngOptionsDirective","ngTranscludeDirective","ngModelDirective","ngListDirective","ngChangeDirective","requiredDirective","ngValueDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$AnchorScrollProvider","$AnimateProvider","$BrowserProvider","$CacheFactoryProvider","$ControllerProvider","$DocumentProvider","$ExceptionHandlerProvider","$FilterProvider","$InterpolateProvider","$IntervalProvider","$HttpProvider","$HttpBackendProvider","$LocationProvider","$LogProvider","$ParseProvider","$RootScopeProvider","$QProvider","$SceProvider","$SceDelegateProvider","$SnifferProvider","$TemplateCacheProvider","$TimeoutProvider","$WindowProvider","$$RAFProvider","$$AsyncCallbackProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","fragment","createDocumentFragment","HTML_REGEXP","tmp","appendChild","createElement","TAG_NAME_REGEXP","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","removeChild","firstChild","lastChild","j","jj","childNodes","textContent","createTextNode","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","ng339","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","documentElement","ii","parentNode","host","jqLiteEmpty","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","eventHandlersCopy","msie","elem","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","$$rAF","$timeout","supported","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","reloadLocation","self.url","sameBase","stripHash","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","on","hashchange","$$checkUrlChange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$document","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$cacheFactory","$$sanitizeUriProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$$sanitizeUri","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","safeAddClass","publicLinkFn","cloneConnectFn","transcludeControllers","parentBoundTranscludeFn","$linkNode","JQLitePrototype","eq","$element","addClass","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","nodeListLength","stableNodeList","Array","linkFns","nodeLinkFn","$new","transcludeOnThisElement","createBoundTranscludeFn","transclude","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","scopeCreated","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","isNgAttr","nAttrs","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","nName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","directiveName","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","optional","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","isolateScope","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","compare","$$isolateBindings","$observe","$$observers","$$scope","literal","a","b","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","oldClasses","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","diff","what","previousDirective","text","interpolateFn","textInterpolateCompileFn","templateNode","hasCompileParent","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","newClasses","toAdd","tokenDifference","toRemove","setClass","writeAttr","booleanKey","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","CNTRL_REG","register","this.register","expression","identifier","exception","cause","parseHeaders","line","headersGetter","headersObj","transformData","fns","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","execHeaders","headerContent","headerFn","header","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","statusText","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","timeout","responseType","toISOString","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","ActiveXObject","createHttpBackend","callbacks","$browserDefer","jsonpReq","callbackId","script","async","body","called","addEventListenerFn","onreadystatechange","script.onreadystatechange","readyState","ABORTED","timeoutRequest","jsonpDone","xhr","abort","completeRequest","urlResolve","protocol","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","newErr","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","IGNORE_URI_REGEXP","ctrlKey","metaKey","which","absHref","animVal","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","Object","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","isPossiblyDangerousMemberName","cspSafeGetterFn","key0","key1","key2","key3","key4","eso","o","expensiveChecks","eso0","eso1","eso2","eso3","eso4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","getterFnWithExtraArgs","s","l","getterFn","getterFnCache","getterFnCacheExpensive","getterFnCacheDefault","pathKeys","pathKeysLength","needsEnsureSafeObject","lookupJs","wrapWithEso","evaledFnGetter","Function","cacheDefault","cacheExpensive","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","$parseOptionsExpensive","promiseWarningCache","parsedExpression","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","createInternalRejectedPromise","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","id","timer","TTL","$rootScopeMinErr","lastDirtyWatch","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","$$listenerCount","beginPhase","phase","compileToFn","decrementListenerCount","current","initWatchVal","isolate","child","$$childScopeClass","this.$$childScopeClass","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","deregisterWatch","$watchCollection","veryOldValue","trackVeryOldValue","changeDetected","objGetter","internalArray","internalObject","initRun","oldLength","$watchCollectionWatch","newLength","bothNaN","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","next","$on","this.$watch","expr","$$postDigest","namedListeners","indexOfListener","$emit","listenerArgs","array1","currentScope","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","enabled","this.enabled","$sceDelegate","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","Infinity","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","v1","v2","predicate","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","VALID_CLASS","INVALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","validate","ctrl","validatorName","validity","testFlags","flags","addNativeHtml5Validators","badFlags","ignoreFlags","$$hasNativeValidators","$parsers","validator","textInputType","VALIDITY_STATE_PROPERTY","placeholder","noevent","$$validityState","composing","ev","ngTrim","revalidate","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","patternValidator","patternObj","$formatters","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","arrayDifference","arrayClasses","classes","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","isActive_","active","querySelector","addEventListener","attachEvent","removeEventListener","detachEvent","_data","JQLite._data","optgroup","option","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","selected","nodeCount","onFn","eventFns","contains","compareDocumentPosition","adown","bup","eventmap","related","relatedTarget","one","off","replaceNode","insertBefore","contentDocument","prepend","wrapNode","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventName","eventFnsCopy","arg3","unbind","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","$$asyncCallback","enter","leave","move","add","PATH_MATCH","paramValue","CALL","APPLY","BIND","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","was","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","statements","primary","expect","filterChain","consume","arrayDeclaration","functionCall","objectIndex","fieldAccess","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","assignment","ternary","logicalOR","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formElement","action","preventDefaultListener","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","numberBadFlags","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ctrls","modelCtrl","formCtrl","ngChange","required","ngList","viewValue","CONSTANT_VALUE_REGEXP","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","templateElement","ngBind","ngBindWatchAction","ngBindTemplate","tElement","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","ngEventHandler","$transclude","previousElements","ngIf","ngIfWatchAction","$anchorScroll","srcExp","ngInclude","onloadExp","onload","autoScrollExp","autoscroll","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","$compile","ngInit","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","trackByIdFn","collectionKeys","nextBlockOrder","trackById","$first","$last","$middle","$odd","$even","ngShow","ngShowWatchAction","ngHide","ngHideWatchAction","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhen","$attrs","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","existingOption","modelValue","valuesFn","keyName","groupIndex","selectedSet","trackFn","trackIndex","valueName","lastElement","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","optionTemplate","optionsExp","track","optionElement","toDisplay","ngOptions","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"] +} diff --git a/glances/outputs/static/js/app.js b/glances/outputs/static/js/app.js index 2dd90bab..3ade4fdc 100644 --- a/glances/outputs/static/js/app.js +++ b/glances/outputs/static/js/app.js @@ -1,9 +1,2 @@ -var glancesApp = angular.module('glancesApp', []); +var glancesApp = angular.module('glancesApp', ['ngRoute']); -/* -glancesApp.config([ '$routeProvider', function($routeProvider) { - $routeProvider.when('/:refresh_time', { - templateUrl : 'index.html', - controller : 'GlancesStatsController' - }); -} ]);*/ \ No newline at end of file diff --git a/glances/outputs/static/js/help_controller.js b/glances/outputs/static/js/help_controller.js new file mode 100644 index 00000000..ae22c77c --- /dev/null +++ b/glances/outputs/static/js/help_controller.js @@ -0,0 +1,4 @@ + +glancesApp.controller('helpController', [ '$scope', function($scope) { + $scope.message = 'help window' +}]); \ No newline at end of file diff --git a/glances/outputs/static/js/stats_controller.js b/glances/outputs/static/js/stats_controller.js new file mode 100644 index 00000000..67b03c66 --- /dev/null +++ b/glances/outputs/static/js/stats_controller.js @@ -0,0 +1,290 @@ +glancesApp.config([ '$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { + $routeProvider.when('/', { + templateUrl : 'stats.html', + controller : 'statsController' + }).when('/:refresh_time', { + templateUrl : 'stats.html', + controller : 'statsController' + }); + + $locationProvider.html5Mode(true); +} ]); + +glancesApp.filter('min_size', function() { + return function(input) { + var max = 8; + if (input.length > max) { + return "_" + input.substring(input.length - max) + } + return input + }; +}); +glancesApp.filter('exclamation', function() { + return function(input) { + if (input == undefined || input =='') { + return '?' + } + return input + }; +}); + + +/** + * Fork from https://gist.github.com/thomseddon/3511330 + *   => \u00A0 + * WARNING : kilobyte (kB) != kibibyte (KiB) (more info here : http://en.wikipedia.org/wiki/Byte ) + **/ +glancesApp.filter('bytes', function() { + return function (bytes, precision) { + if (isNaN(parseFloat(bytes)) || !isFinite(bytes) || bytes == 0){ + return '0B'; + } + var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'], + number = Math.floor(Math.log(bytes) / Math.log(1000)); + return (bytes / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; + } +}); +glancesApp.filter('bits', function() { + return function (bits, precision) { + if (isNaN(parseFloat(bits)) || !isFinite(bits) || bits == 0){ + return '0b'; + } + var units = ['b', 'kb', 'Mb', 'Gb', 'Tb', 'Pb'], + number = Math.floor(Math.log(bits) / Math.log(1000)); + return (bits / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; + } +}); + + +glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', '$routeParams', function($scope, $http, $interval, $q, $routeParams) { + + $scope.limitSuffix = ['critical', 'careful', 'warning'] + $scope.refreshTime = 3 + $scope.pluginLimits = [] + $scope.sortColumn = 'cpu_percent' + $scope.sortOrderAsc = false + $scope.lastSortColumn = '#column_' + $scope.sortColumn + $scope.show = { + 'diskio' : true, + 'network' : true, + 'fs' : true, + 'sensors' : true, + 'sidebar' : true, + 'alert' : true + } + $scope.networksort_byBytes = false + + $scope.init_refresh_time = function() { + if ($routeParams != undefined && $routeParams.refresh_time != undefined) { + var new_refresh_time = parseInt($routeParams.refresh_time) + if (new_refresh_time >= 1) { + $scope.refreshTime = new_refresh_time + } + } + } + + + $scope.init_limits = function() { + $scope.plugins_limits(); + } + + $scope.show_hide = function(bloc) { + $scope.show[bloc] = !$scope.show[bloc] + } + + $scope.sort_by = function(column) { + if (column == undefined) { + // sort automatically + } + angular.element(document.querySelector($scope.lastSortColumn)).removeClass('sort sort_asc sort_desc') + + if ($scope.sortColumn == column) { + $scope.sortOrderAsc = !$scope.sortOrderAsc + if ($scope.sortOrderAsc) { + angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_asc') + } else { + angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_desc') + } + } else { + $scope.sortColumn = column + $scope.sortOrderAsc = false + $scope.lastSortColumn = '#column_' + $scope.sortColumn + angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_desc') + } + } + + $scope.plugins_limits = function() { + $http.get('/api/2/pluginslimits').success(function(response, status, headers, config) { + $scope.limits = response + }).error(function(response, status, headers, config) { + console.log('error : ' + response+ status + headers + config); + }); + } + + var canceler = undefined; + + /** + * Refresh all the data of the view + */ + $scope.refreshData = function() { + canceler = $q.defer(); + $http.get('/api/2/all', {timeout: canceler.promise}).success(function(response, status, headers, config) { + //alert('success'); + + function timemillis(array) { + var sum = 0.0 + for (var i = 0; i < array.length; i++) { + sum += array[i] * 1000.0; + } + return sum; + } + function leftpad(input) { + if (input < 10) { + return "0" + input + } + return input + } + function timedelta(input) { + var sum = timemillis(input); + var d = new Date(sum); + var hour = leftpad(d.getUTCHours()) // TODO : multiple days ( * (d.getDay() * 24))) + var minutes = leftpad(d.getUTCMinutes()) + var seconds = leftpad(d.getUTCSeconds()) + var milliseconds = parseInt("" + d.getUTCMilliseconds() / 10) + var millisecondsStr = leftpad(milliseconds) + return hour +":" + minutes + ":" + seconds + "." + millisecondsStr + }; + + for (var i = 0; i < response['processlist'].length; i++) { + var process = response['processlist'][i] + process.memvirt = process.memory_info[1] + process.memres = process.memory_info[0] + process.timeformatted = timedelta(process.cpu_times) + process.timemillis = timemillis(process.cpu_times) + process.io_read = (process.io_counters[0] - process.io_counters[2]) / process.time_since_update + process.io_write = (process.io_counters[1] - process.io_counters[3]) / process.time_since_update + } + $scope.result = response; + canceler.resolve() + }).error(function(d, status, headers, config) { + console.log('error status:' + status + " - headers = " + headers); + canceler.resolve() + }); + } + + $scope.getClass = function(pluginName, limitNamePrefix, value, num) { + if ($scope.pluginLimits != undefined && $scope.pluginLimits[pluginName] != undefined) { + for (var i = 0; i < $scope.limitSuffix.length; i++) { + var limitName = limitNamePrefix + $scope.limitSuffix[i] + var limit = $scope.pluginLimits[pluginName][limitName] + + if (value >= limit) { + //console.log("value = " + value + " - limit = " + limit) + var pos = limitName.lastIndexOf("_") + var className = limitName.substring(pos + 1) + //console.log("className = " + className) + if (num == 1) { + return className + '_log' + } + return className + } + } + } + if (num == 1) { + return "ok_log" + } + return "ok"; + } + + $scope.init_refresh_time(); + $scope.init_limits(); + + var stop; + $scope.configure_refresh = function () { + if (!angular.isDefined(stop)) { + //$scope.refreshData(); + stop = $interval(function() { + $scope.refreshData(); + }, $scope.refreshTime * 1000); // in milliseconds + } + } + + $scope.$watch( + function() { return $scope.refreshTime; }, + function(newValue, oldValue) { + $scope.stop_refresh(); + $scope.configure_refresh(); + } + ); + + $scope.stop_refresh = function() { + if (angular.isDefined(stop)) { + $interval.cancel(stop); + stop = undefined; + } + }; + + $scope.$on('$destroy', function() { + // Make sure that the interval is destroyed too + $scope.stop_refresh(); + }); + + $scope.onKeyDown = function($event) { + console.log($event) + if ($event.keyCode == keycodes.a) { // a Sort processes automatically + $scope.sort_by() + } else if ($event.keyCode == keycodes.c) {//c Sort processes by CPU% + $scope.sort_by('cpu_percent') + } else if ($event.keyCode == keycodes.m) {//m Sort processes by MEM% + $scope.sort_by('memory_percent') + } else if ($event.keyCode == keycodes.p) {//p Sort processes by name + $scope.sort_by('name') + } else if ($event.keyCode == keycodes.i) {//i Sort processes by I/O rate + $scope.sort_by('io_read') + } else if ($event.keyCode == keycodes.t) {//t Sort processes by CPU times + $scope.sort_by('timemillis') + } else if ($event.keyCode == keycodes.d) {//d Show/hide disk I/O stats + $scope.show_hide('diskio') + } else if ($event.keyCode == keycodes.f) {//f Show/hide filesystem stats + $scope.show_hide('fs') + } else if ($event.keyCode == keycodes.n) {//n Show/hide network stats + $scope.show_hide('network') + } else if ($event.keyCode == keycodes.s) {//s Show/hide sensors stats + $scope.show_hide('sensors') + } else if ($event.keyCode == keycodes.TWO && $event.shiftKey) {//2 Show/hide left sidebar + $scope.show_hide('sidebar') + } else if ($event.keyCode == keycodes.z) {//z Enable/disable processes stats + //$scope.enableDisable('processStats') + } else if ($event.keyCode == keycodes.e) {//e Enable/disable top extended stats + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.SLASH) {// SLASH Enable/disable short processes name + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.D) {//D Enable/disable Docker stats + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.b) {//b Bytes or bits for network I/O + $scope.networksort_byBytes = !$scope.networksort_byBytes + } else if ($event.keyCode == keycodes.l) {//l Show/hide alert logs + $scope.show_hide('alert') + } else if ($event.keyCode == keycodes.w) {//w Delete warning alerts + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.x) {//x Delete warning and critical alerts + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.ONE) {//1 Global CPU or per-CPU stats + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.h) {//h Show/hide this help screen + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.T) {//T View network I/O as combination + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.u) {//u View cumulative network I/O + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.F) {//F Show filesystem free space + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.g) {//g Generate graphs for current history + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.r) {//r Reset history + //$scope.sort_by('') + } else if ($event.keyCode == keycodes.q) {//q Quit (Esc and Ctrl-C also work) + //$scope.sort_by('') + } + } +} ]); From 1cf70cfce9a7cd67f31ff872f80b5787a1dca7de Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 17:38:50 +0100 Subject: [PATCH 056/267] refactoring bottle html files + add refresh_time in url + add help page --- glances/outputs/bottle/index.html | 318 ----------------------- glances/outputs/static/js/controllers.js | 292 --------------------- 2 files changed, 610 deletions(-) delete mode 100644 glances/outputs/bottle/index.html delete mode 100644 glances/outputs/static/js/controllers.js diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html deleted file mode 100644 index 0a3a320d..00000000 --- a/glances/outputs/bottle/index.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - - Glances - - - - - - - - - - - - -
Loading...
-
-
-
-
-
- - {{result["system"].hostname}}  -
-
-
-
- Uptime: {{result["uptime"]}} -
-
-
-
- -
-
-
-
-
-
CPU
-
{{result["cpu"].total}}%
-
-
-
user:
-
- {{result["cpu"].user}}% -
-
-
-
system:
-
- {{result["cpu"].system}}% -
-
-
-
idle:
-
{{result["cpu"].idle}}%
-
-
-
-
-
-
-
-
-
nice:
-
- {{result["cpu"].nice}}% -
-
-
-
irq:
-
- {{result["cpu"].irq}}% -
-
-
-
iowait:
-
- {{result["cpu"].iowait}}% -
-
-
-
steal:
-
- {{result["cpu"].steal}}% -
-
-
-
-
-
-
-
-
-
LOAD
-
{{result["load"].cpucore}}-core
-
-
-
1 min:
-
- {{result["load"].min1}} -
-
-
-
5 min:
-
- {{result["load"].min5}} -
-
-
-
15 min:
-
- {{result["load"].min15}} -
-
-
-
-
-
-
-
-
-
MEM
-
{{result["mem"].percent}}%
-
-
-
total:
-
{{result["mem"].total | bytes:2}}
-
-
-
used:
-
- {{result["mem"].used | bytes:2}} -
-
-
-
free:
-
{{result["mem"].free | bytes:2}}
-
-
-
-
-
-
-
-
-
active:
-
{{result["mem"].active | bytes:2}}
-
-
-
inactive:
-
{{result["mem"].inactive | bytes:2}}
-
-
-
buffers:
-
{{result["mem"].buffers | bytes:2}}
-
-
-
cached:
-
{{result["mem"].cached | bytes:2}}
-
-
-
-
-
-
-
-
-
SWAP
-
{{result["memswap"].percent}}%
-
-
-
total:
-
{{result["memswap"].total | bytes:2}}
-
-
-
used:
-
- {{result["memswap"].used | bytes:2}} -
-
-
-
free:
-
{{result["memswap"].free | bytes:2}}
-
-
-
-
-
-
-
-
-
-
-
NETWORK
-
Rx/s
-
Tx/s
-
-
-
{{network.interface_name | min_size}}
-
{{network.rx | bytes}}
-
{{network.tx | bytes}}
-
{{network.rx | bits}}
-
{{network.tx | bits}}
-
-
-
- -
-
-
-
DISK I/O
-
R/s
-
W/s
-
-
-
{{disk.disk_name | min_size}}
-
{{disk.read_bytes | bytes}}
-
{{disk.write_bytes | bytes}}
-
-
-
-
-
-
-
FILE SYS
-
Used
-
Total
-
-
-
{{fs.mnt_point}} ({{fs.device_name}})
-
- {{fs.size - fs.free | bytes}} -
-
{{fs.size | bytes}}
-
-
-
-
-
-
-
SENSORS
-
°C
-
-
-
{{sensor.label}}
-
{{sensor.value}}
-
-
-
-
-
-
- CONTAINERS 1 (served by Docker 1.2.0) -
-
-
-
-
No warning or critical alert detected
-
{{alert}}
-
-
-
- -
- TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, - {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view -
- -
-
-
- -
-
-
-
CPU%
-
MEM%
- - -
PID
-
USER
-
NI
-
S
- - - -
Command
-
-
-
{{process.cpu_percent | number:1}}
-
{{process.memory_percent | number:1}}
- - -
{{process.pid}}
-
{{process.username}}
-
{{process.nice | exclamation}}
-
{{process.status}}
- - - -
{{process.name}}
-
-
-
-
-
-
- - diff --git a/glances/outputs/static/js/controllers.js b/glances/outputs/static/js/controllers.js deleted file mode 100644 index fb3777db..00000000 --- a/glances/outputs/static/js/controllers.js +++ /dev/null @@ -1,292 +0,0 @@ -glancesApp.filter('min_size', function() { - return function(input) { - var max = 8; - if (input.length > max) { - return "_" + input.substring(input.length - max) - } - return input - }; -}); -glancesApp.filter('exclamation', function() { - return function(input) { - if (input == undefined || input =='') { - return '?' - } - return input - }; -}); - - -/** - * Fork from https://gist.github.com/thomseddon/3511330 - *   => \u00A0 - * WARNING : kilobyte (kB) != kibibyte (KiB) (more info here : http://en.wikipedia.org/wiki/Byte ) - **/ -glancesApp.filter('bytes', function() { - return function (bytes, precision) { - if (isNaN(parseFloat(bytes)) || !isFinite(bytes) || bytes == 0){ - return '0B'; - } - var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'], - number = Math.floor(Math.log(bytes) / Math.log(1000)); - return (bytes / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; - } -}); -glancesApp.filter('bits', function() { - return function (bits, precision) { - if (isNaN(parseFloat(bits)) || !isFinite(bits) || bits == 0){ - return '0b'; - } - var units = ['b', 'kb', 'Mb', 'Gb', 'Tb', 'Pb'], - number = Math.floor(Math.log(bits) / Math.log(1000)); - return (bits / Math.pow(1000, Math.floor(number))).toFixed(precision) + units[number]; - } -}); - -glancesApp.controller('bodyController', [ '$scope', '$http', '$interval', '$q', function($scope, $http, $interval, $q) { - - $scope.limitSuffix = ['critical', 'careful', 'warning'] - $scope.refreshTime = 3 - $scope.pluginLimits = [] - $scope.sortColumn = 'cpu_percent' - $scope.sortOrderAsc = false - $scope.lastSortColumn = '#column_' + $scope.sortColumn - $scope.show = { - 'diskio' : true, - 'network' : true, - 'fs' : true, - 'sensors' : true, - 'sidebar' : true, - 'alert' : true - } - $scope.networkSortByBytes = false - - /*$scope.init_refresh_time = function() { - if ($routeParams != undefined && $routeParams.refresh_time != undefined) { - var new_refresh_time = parseInt($routeParams.refresh_time) - if (new_refres_time >= 1) { - $scope.refreshTime = new_refres_time - } - } - }*/ - - - $scope.initLimits = function() { - $scope.pluginsList(); - } - - $scope.showHide = function(bloc) { - $scope.show[bloc] = !$scope.show[bloc] - } - - $scope.sortBy = function(column) { - if (column == undefined) { - // sort automatically - } - angular.element(document.querySelector($scope.lastSortColumn)).removeClass('sort sort_asc sort_desc') - - if ($scope.sortColumn == column) { - $scope.sortOrderAsc = !$scope.sortOrderAsc - if ($scope.sortOrderAsc) { - angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_asc') - } else { - angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_desc') - } - } else { - $scope.sortColumn = column - $scope.sortOrderAsc = false - $scope.lastSortColumn = '#column_' + $scope.sortColumn - angular.element(document.querySelector($scope.lastSortColumn)).addClass('sort sort_desc') - } - } - - $scope.pluginsList = function() { - $http.get('/api/2/pluginslist').success(function(d, status, headers, config) { - $scope.plugins = d; - - for (var i = 0;i< $scope.plugins.length; i++) { - var pluginName = $scope.plugins[i]; - $scope.limits(pluginName); - } - - }).error(function(d, status, headers, config) { - console.log('error' + d + status + headers + config); - }); - } - $scope.limits = function(pluginName) { - url = "/api/2/" + pluginName + "/limits" - console.log("url = " + url) - $http.get(url).success(function(d, status, headers, config) { - $scope.pluginLimits[pluginName] = d; - }).error(function(d, status, headers, config) { - console.log('error'); - }); - } - - var canceler = undefined; - - /** - * Refresh all the data of the view - */ - $scope.refreshData = function() { - canceler = $q.defer(); - $http.get('/api/2/all', {timeout: canceler.promise}).success(function(response, status, headers, config) { - //alert('success'); - - function timemillis(array) { - var sum = 0.0 - for (var i = 0; i < array.length; i++) { - sum += array[i] * 1000.0; - } - return sum; - } - function leftpad(input) { - if (input < 10) { - return "0" + input - } - return input - } - function timedelta(input) { - var sum = timemillis(input); - var d = new Date(sum); - var hour = leftpad(d.getUTCHours()) // TODO : multiple days ( * (d.getDay() * 24))) - var minutes = leftpad(d.getUTCMinutes()) - var seconds = leftpad(d.getUTCSeconds()) - var milliseconds = parseInt("" + d.getUTCMilliseconds() / 10) - var millisecondsStr = leftpad(milliseconds) - return hour +":" + minutes + ":" + seconds + "." + millisecondsStr - }; - - for (var i = 0; i < response['processlist'].length; i++) { - var process = response['processlist'][i] - process.memvirt = process.memory_info[1] - process.memres = process.memory_info[0] - process.timeformatted = timedelta(process.cpu_times) - process.timemillis = timemillis(process.cpu_times) - process.io_read = (process.io_counters[0] - process.io_counters[2]) / process.time_since_update - process.io_write = (process.io_counters[1] - process.io_counters[3]) / process.time_since_update - } - $scope.result = response; - canceler.resolve() - }).error(function(d, status, headers, config) { - console.log('error status:' + status + " - headers = " + headers); - canceler.resolve() - }); - } - - $scope.getClass = function(pluginName, limitNamePrefix, value, num) { - if ($scope.pluginLimits != undefined && $scope.pluginLimits[pluginName] != undefined) { - for (var i = 0; i < $scope.limitSuffix.length; i++) { - var limitName = limitNamePrefix + $scope.limitSuffix[i] - var limit = $scope.pluginLimits[pluginName][limitName] - - if (value >= limit) { - //console.log("value = " + value + " - limit = " + limit) - var pos = limitName.lastIndexOf("_") - var className = limitName.substring(pos + 1) - //console.log("className = " + className) - if (num == 1) { - return className + '_log' - } - return className - } - } - } - if (num == 1) { - return "ok_log" - } - return "ok"; - } - - //$scope.init_refresh_time(); - $scope.initLimits(); - - var stop; - $scope.configureRefresh = function () { - if (!angular.isDefined(stop)) { - //$scope.refreshData(); - stop = $interval(function() { - $scope.refreshData(); - }, $scope.refreshTime * 1000); // in milliseconds - } - } - - $scope.$watch( - function() { return $scope.refreshTime; }, - function(newValue, oldValue) { - $scope.stopRefresh(); - $scope.configureRefresh(); - } - ); - - $scope.stopRefresh = function() { - if (angular.isDefined(stop)) { - $interval.cancel(stop); - stop = undefined; - } - }; - - $scope.$on('$destroy', function() { - // Make sure that the interval is destroyed too - $scope.stopRefresh(); - }); - - $scope.onKeyDown = function($event) { - console.log($event) - if ($event.keyCode == keycodes.a) { // a Sort processes automatically - $scope.sortBy() - } else if ($event.keyCode == keycodes.c) {//c Sort processes by CPU% - $scope.sortBy('cpu_percent') - } else if ($event.keyCode == keycodes.m) {//m Sort processes by MEM% - $scope.sortBy('memory_percent') - } else if ($event.keyCode == keycodes.p) {//p Sort processes by name - $scope.sortBy('name') - } else if ($event.keyCode == keycodes.i) {//i Sort processes by I/O rate - $scope.sortBy('io_read') - } else if ($event.keyCode == keycodes.t) {//t Sort processes by CPU times - $scope.sortBy('timemillis') - } else if ($event.keyCode == keycodes.d) {//d Show/hide disk I/O stats - $scope.showHide('diskio') - } else if ($event.keyCode == keycodes.f) {//f Show/hide filesystem stats - $scope.showHide('fs') - } else if ($event.keyCode == keycodes.n) {//n Show/hide network stats - $scope.showHide('network') - } else if ($event.keyCode == keycodes.s) {//s Show/hide sensors stats - $scope.showHide('sensors') - } else if ($event.keyCode == keycodes.TWO && $event.shiftKey) {//2 Show/hide left sidebar - $scope.showHide('sidebar') - } else if ($event.keyCode == keycodes.z) {//z Enable/disable processes stats - //$scope.enableDisable('processStats') - } else if ($event.keyCode == keycodes.e) {//e Enable/disable top extended stats - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.SLASH) {// SLASH Enable/disable short processes name - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.D) {//D Enable/disable Docker stats - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.b) {//b Bytes or bits for network I/O - $scope.networkSortByBytes = !$scope.networkSortByBytes - } else if ($event.keyCode == keycodes.l) {//l Show/hide alert logs - $scope.showHide('alert') - } else if ($event.keyCode == keycodes.w) {//w Delete warning alerts - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.x) {//x Delete warning and critical alerts - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.ONE) {//1 Global CPU or per-CPU stats - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.h) {//h Show/hide this help screen - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.T) {//T View network I/O as combination - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.u) {//u View cumulative network I/O - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.F) {//F Show filesystem free space - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.g) {//g Generate graphs for current history - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.r) {//r Reset history - //$scope.sortBy('') - } else if ($event.keyCode == keycodes.q) {//q Quit (Esc and Ctrl-C also work) - //$scope.sortBy('') - } - } -} ]); From b4b534270fe81733e97f862ea299b8ae98164cfe Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 17:59:33 +0100 Subject: [PATCH 057/267] fix renaming --- glances/outputs/glances_bottle.py | 7 ++++- glances/outputs/static/html/stats.html | 26 +++++++++---------- glances/outputs/static/js/stats_controller.js | 8 +++--- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index c96f7fe7..27c87cd5 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -58,7 +58,8 @@ class GlancesBottle(object): """Define route.""" self._app.route('/', method="GET", callback=self._index) self._app.route('/', method=["GET", "POST"], callback=self._index) - + self._app.route('/help', method="GET", callback=self._help) + self._app.route('/', method="GET", callback=self._css) self._app.route('/', method="GET", callback=self._js) self._app.route('/', method="GET", callback=self._js_map) @@ -103,6 +104,10 @@ class GlancesBottle(object): # Display return static_file("index.html", root=os.path.join(self.STATIC_PATH, 'html')) + def _help(self): + """Bottle callback for /help """ + return static_file("help.html", root=os.path.join(self.STATIC_PATH, 'html')) + def _html(self, filename): """Bottle callback for *.html files.""" # Return the static file diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index aec1163f..52ddb7db 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -254,7 +254,7 @@
TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, - {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view + {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view
@@ -264,18 +264,18 @@
-
CPU%
-
MEM%
- - -
PID
-
USER
-
NI
-
S
- - - -
Command
+
CPU%
+
MEM%
+ + +
PID
+
USER
+
NI
+
S
+ + + +
Command
{{process.cpu_percent | number:1}}
diff --git a/glances/outputs/static/js/stats_controller.js b/glances/outputs/static/js/stats_controller.js index 67b03c66..36029f21 100644 --- a/glances/outputs/static/js/stats_controller.js +++ b/glances/outputs/static/js/stats_controller.js @@ -61,7 +61,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', $scope.limitSuffix = ['critical', 'careful', 'warning'] $scope.refreshTime = 3 $scope.pluginLimits = [] - $scope.sortColumn = 'cpu_percent' + $scope.sortColumn = '' $scope.sortOrderAsc = false $scope.lastSortColumn = '#column_' + $scope.sortColumn $scope.show = { @@ -72,7 +72,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', 'sidebar' : true, 'alert' : true } - $scope.networksort_byBytes = false + $scope.networkSortByBytes = false $scope.init_refresh_time = function() { if ($routeParams != undefined && $routeParams.refresh_time != undefined) { @@ -95,6 +95,8 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', $scope.sort_by = function(column) { if (column == undefined) { // sort automatically + $scope.sortColumn = undefined + return } angular.element(document.querySelector($scope.lastSortColumn)).removeClass('sort sort_asc sort_desc') @@ -262,7 +264,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', } else if ($event.keyCode == keycodes.D) {//D Enable/disable Docker stats //$scope.sort_by('') } else if ($event.keyCode == keycodes.b) {//b Bytes or bits for network I/O - $scope.networksort_byBytes = !$scope.networksort_byBytes + $scope.networkSortByBytes = !$scope.networkSortByBytes } else if ($event.keyCode == keycodes.l) {//l Show/hide alert logs $scope.show_hide('alert') } else if ($event.keyCode == keycodes.w) {//w Delete warning alerts From bdc6c43ba95a62816df2f4ebe38c416c26d62d6e Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 20:41:41 +0100 Subject: [PATCH 058/267] message --- glances/outputs/static/html/stats.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index 52ddb7db..766847bd 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -241,7 +241,7 @@
- CONTAINERS 1 (served by Docker 1.2.0) + CONTAINERS 1 (served by 1.2.0)
From e7bf3556587f2a19906e06d649557d2363664aac Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 21:08:46 +0100 Subject: [PATCH 059/267] fix merge --- glances/plugins/glances_load.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/glances/plugins/glances_load.py b/glances/plugins/glances_load.py index 49d971d0..2e066247 100644 --- a/glances/plugins/glances_load.py +++ b/glances/plugins/glances_load.py @@ -121,11 +121,12 @@ class Plugin(GlancesPlugin): # Call the father's method GlancesPlugin.update_views(self) - # Add specifics informations - # Alert and log - self.views['min15']['decoration'] = self.get_alert_log(self.stats['min15'], max=100 * self.stats['cpucore']) - # Alert only - self.views['min5']['decoration'] = self.get_alert(self.stats['min5'], max=100 * self.stats['cpucore']) + if self.views != {}: + # Add specifics informations + # Alert and log + self.views['min15']['decoration'] = self.get_alert_log(self.stats['min15'], max=100 * self.stats['cpucore']) + # Alert only + self.views['min5']['decoration'] = self.get_alert(self.stats['min5'], max=100 * self.stats['cpucore']) def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" From df05c92ad9d3b33dadee55ebe8626d4d14b9d9e2 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 21:12:27 +0100 Subject: [PATCH 060/267] remove doublon --- glances/outputs/glances_bottle.py | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index 31a1e6a3..dd8b4f89 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -72,7 +72,6 @@ class GlancesBottle(object): # REST API self._app.route('/api/2/pluginslist', method="GET", callback=self._api_plugins) - self._app.route('/api/2/pluginslimits', method="GET", callback=self._api_plugins_limits) self._app.route('/api/2/all', method="GET", callback=self._api_all) self._app.route('/api/2/all/limits', method="GET", callback=self._api_all_limits) self._app.route('/api/2/all/views', method="GET", callback=self._api_all_views) @@ -158,25 +157,6 @@ class GlancesBottle(object): abort(404, "Cannot get plugin list (%s)" % str(e)) return plist - def _api_plugins_limits(self): - """ - Glances API RESTFul implementation - Return the limits for each plugins - or 404 error - """ - response.content_type = 'application/json' - - result = {} - for plugin in self.plugins_list: - try: - # Get the JSON value of the stat ID - limits = self.stats.get_plugin(plugin).get_limits() - result[plugin] = limits - except Exception as e: - pass - return result - - def _api_all(self): """ Glances API RESTFul implementation From 47769ca42ba4319ece830f8799c1e5bd90437c30 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 21:14:06 +0100 Subject: [PATCH 061/267] remove doublon --- glances/outputs/static/js/stats_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/outputs/static/js/stats_controller.js b/glances/outputs/static/js/stats_controller.js index 36029f21..57f7b027 100644 --- a/glances/outputs/static/js/stats_controller.js +++ b/glances/outputs/static/js/stats_controller.js @@ -116,7 +116,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', } $scope.plugins_limits = function() { - $http.get('/api/2/pluginslimits').success(function(response, status, headers, config) { + $http.get('/api/2/all/limits').success(function(response, status, headers, config) { $scope.limits = response }).error(function(response, status, headers, config) { console.log('error : ' + response+ status + headers + config); From 45d6673787be2df8cd1ba1f4a19c55a416f55484 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 23:02:27 +0100 Subject: [PATCH 062/267] sort + help --- glances/outputs/static/html/help.html | 2 +- glances/outputs/static/html/index.html | 1 + glances/outputs/static/html/stats.html | 30 +++++++++----- glances/outputs/static/js/help_controller.js | 9 +++- glances/outputs/static/js/stats_controller.js | 41 ++++++++++++++++--- 5 files changed, 66 insertions(+), 17 deletions(-) diff --git a/glances/outputs/static/html/help.html b/glances/outputs/static/html/help.html index 04da403f..957b6e15 100644 --- a/glances/outputs/static/html/help.html +++ b/glances/outputs/static/html/help.html @@ -19,7 +19,7 @@ - + Help window!!! diff --git a/glances/outputs/static/html/index.html b/glances/outputs/static/html/index.html index 054d5a99..c45bd3b4 100644 --- a/glances/outputs/static/html/index.html +++ b/glances/outputs/static/html/index.html @@ -17,6 +17,7 @@ + diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index 766847bd..6bd79192 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -5,12 +5,12 @@
- Refresh time 
@@ -186,7 +186,7 @@
Rx/s
Tx/s
-
+
{{network.interface_name | min_size}}
{{network.rx | bytes}}
{{network.tx | bytes}}
@@ -240,21 +240,30 @@
-
+ +
+ No warning or critical alert detected + Warning or critical alerts (lasts {{result['alert'].length}} entries)
-
-
No warning or critical alert detected
-
{{alert}}
+
+
+{{alert.begin}} ({{(alert[1]-alert[0]) | date : 'h:mm:ss'}}) - {{alert[2]}} on {{alert[3]}} ({{alert[4]}}) +
TASKS {{result["processcount"].total}} ({{result["processcount"].thread}} thr), {{result["processcount"].running}} run, - {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth sorted automatically by cpu_percent, flat view + {{result["processcount"].sleeping}} slp, {{result["processcount"].stopped}} oth + sorted automatically + sorted + by {{sortColumn}}, flat view +
@@ -289,7 +298,8 @@ -
{{process.name}}
+
{{process.name}}
+
{{process.cmdline}}
diff --git a/glances/outputs/static/js/help_controller.js b/glances/outputs/static/js/help_controller.js index ae22c77c..d2d2f3cc 100644 --- a/glances/outputs/static/js/help_controller.js +++ b/glances/outputs/static/js/help_controller.js @@ -1,4 +1,11 @@ glancesApp.controller('helpController', [ '$scope', function($scope) { $scope.message = 'help window' -}]); \ No newline at end of file + + $scope.onKeyDown = function($event) { + console.log($event) + if ($event.keyCode == keycodes.h) {//h Show/hide this help screen + window.location = "/" + } + } +}]); diff --git a/glances/outputs/static/js/stats_controller.js b/glances/outputs/static/js/stats_controller.js index 36029f21..3d84fe91 100644 --- a/glances/outputs/static/js/stats_controller.js +++ b/glances/outputs/static/js/stats_controller.js @@ -5,6 +5,9 @@ glancesApp.config([ '$routeProvider', '$locationProvider', function($routeProvid }).when('/:refresh_time', { templateUrl : 'stats.html', controller : 'statsController' + }).when('/help', { + templateUrl : 'help.html', + controller : 'helpController' }); $locationProvider.html5Mode(true); @@ -56,7 +59,7 @@ glancesApp.filter('bits', function() { }); -glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', '$routeParams', function($scope, $http, $interval, $q, $routeParams) { +glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', '$routeParams', '$location', function($scope, $http, $interval, $q, $routeParams, $location) { $scope.limitSuffix = ['critical', 'careful', 'warning'] $scope.refreshTime = 3 @@ -70,7 +73,8 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', 'fs' : true, 'sensors' : true, 'sidebar' : true, - 'alert' : true + 'alert' : true, + 'short_process_name': false } $scope.networkSortByBytes = false @@ -98,6 +102,9 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', $scope.sortColumn = undefined return } + if (column == 'name' && !$scope.show.short_process_name) { + column = 'cmdline' + } angular.element(document.querySelector($scope.lastSortColumn)).removeClass('sort sort_asc sort_desc') if ($scope.sortColumn == column) { @@ -156,6 +163,24 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', var millisecondsStr = leftpad(milliseconds) return hour +":" + minutes + ":" + seconds + "." + millisecondsStr }; + + function dateformat(input) { + var millis = input * 1000.0; + var d = new Date(millis) + var year = d.getFullYear() + var month = leftpad(d.getMonth() + 1) // JANUARY = 0 + var day = leftpad(d.getDate()) + return year + "-" + month + "-" + day + " " + datetimeformat(input) + + } + function datetimeformat(input) { + var millis = input * 1000.0; + var d = new Date(millis) + var hour = leftpad(d.getUTCHours()) // TODO : multiple days ( * (d.getDay() * 24))) + var minutes = leftpad(d.getUTCMinutes()) + var seconds = leftpad(d.getUTCSeconds()) + return hour + ":" + minutes + ":" + seconds + } for (var i = 0; i < response['processlist'].length; i++) { var process = response['processlist'][i] @@ -166,6 +191,11 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', process.io_read = (process.io_counters[0] - process.io_counters[2]) / process.time_since_update process.io_write = (process.io_counters[1] - process.io_counters[3]) / process.time_since_update } + for (var i = 0; i < response['alert'].length; i++) { + var alert = response['alert'][i] + alert.begin = dateformat(alert[0]) + alert.end = datetimeformat(alert[1] - alert[0]) + } $scope.result = response; canceler.resolve() }).error(function(d, status, headers, config) { @@ -249,7 +279,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', $scope.show_hide('diskio') } else if ($event.keyCode == keycodes.f) {//f Show/hide filesystem stats $scope.show_hide('fs') - } else if ($event.keyCode == keycodes.n) {//n Show/hide network stats + } else if ($event.keyCode == keycodes.n) {//n sort_by Show/hide network stats $scope.show_hide('network') } else if ($event.keyCode == keycodes.s) {//s Show/hide sensors stats $scope.show_hide('sensors') @@ -260,7 +290,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', } else if ($event.keyCode == keycodes.e) {//e Enable/disable top extended stats //$scope.sort_by('') } else if ($event.keyCode == keycodes.SLASH) {// SLASH Enable/disable short processes name - //$scope.sort_by('') + $scope.show_hide('short_process_name') } else if ($event.keyCode == keycodes.D) {//D Enable/disable Docker stats //$scope.sort_by('') } else if ($event.keyCode == keycodes.b) {//b Bytes or bits for network I/O @@ -274,7 +304,8 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', } else if ($event.keyCode == keycodes.ONE) {//1 Global CPU or per-CPU stats //$scope.sort_by('') } else if ($event.keyCode == keycodes.h) {//h Show/hide this help screen - //$scope.sort_by('') + window.location = "/help" + //$location.path("/help") } else if ($event.keyCode == keycodes.T) {//T View network I/O as combination //$scope.sort_by('') } else if ($event.keyCode == keycodes.u) {//u View cumulative network I/O From b025cddfae419ce47c5ec3e038924596f96eebae Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sun, 18 Jan 2015 23:17:56 +0100 Subject: [PATCH 063/267] per cpu --- glances/outputs/static/html/stats.html | 29 +++++++++++++++++-- glances/outputs/static/js/stats_controller.js | 7 +++-- glances/outputs/static/js/variables.js | 2 +- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index 6bd79192..c554af3c 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -24,20 +24,20 @@
-
+
CPU
{{result["cpu"].total}}%
user:
-
+
{{result["cpu"].user}}%
system:
-
+
{{result["cpu"].system}}%
@@ -45,6 +45,29 @@
idle:
{{result["cpu"].idle}}%
+
+ +
+
+
PER CPU
+
{{percpu.total}}%
+
+
+
user:
+
+ {{percpu.user}}% +
+
+
+
system:
+
+ {{percpu.system}}% +
+
+
+
idle:
+
{{percpu.idle}}%
+
diff --git a/glances/outputs/static/js/stats_controller.js b/glances/outputs/static/js/stats_controller.js index 3d84fe91..6d0ed94f 100644 --- a/glances/outputs/static/js/stats_controller.js +++ b/glances/outputs/static/js/stats_controller.js @@ -74,7 +74,8 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', 'sensors' : true, 'sidebar' : true, 'alert' : true, - 'short_process_name': false + 'short_process_name': false, + 'per_cpu': false } $scope.networkSortByBytes = false @@ -301,8 +302,8 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', //$scope.sort_by('') } else if ($event.keyCode == keycodes.x) {//x Delete warning and critical alerts //$scope.sort_by('') - } else if ($event.keyCode == keycodes.ONE) {//1 Global CPU or per-CPU stats - //$scope.sort_by('') + } else if ($event.keyCode == keycodes.ONE && $event.shiftKey) {//1 Global CPU or per-CPU stats + $scope.show_hide('per_cpu') } else if ($event.keyCode == keycodes.h) {//h Show/hide this help screen window.location = "/help" //$location.path("/help") diff --git a/glances/outputs/static/js/variables.js b/glances/outputs/static/js/variables.js index 91f7ce22..49a9294d 100644 --- a/glances/outputs/static/js/variables.js +++ b/glances/outputs/static/js/variables.js @@ -18,7 +18,7 @@ var keycodes = { 'l' : '76', 'w' : '87', 'x' : '88', - 'ONE' : '97', + 'ONE' : '49', 'h' : '72', 'T' : '84', 'u' : '', From bc5561d42ac01ef96cd753e5ab1be9097cfefe78 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Mon, 19 Jan 2015 00:30:54 +0100 Subject: [PATCH 064/267] fix processlist header align --- glances/outputs/bottle/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glances/outputs/bottle/index.html b/glances/outputs/bottle/index.html index c6c26902..94893d91 100644 --- a/glances/outputs/bottle/index.html +++ b/glances/outputs/bottle/index.html @@ -203,13 +203,13 @@
PID
-
USER
+
USER
NI
S
-
Command
+
Command
{{process.cpu_percent | number:1}}
From c125b512911c7b4039c7bd9d412345af3fc6a5c1 Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Mon, 19 Jan 2015 16:25:42 +0100 Subject: [PATCH 065/267] Correct issue if sensors are not available --- glances/plugins/glances_sensors.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glances/plugins/glances_sensors.py b/glances/plugins/glances_sensors.py index 526d0980..a821880f 100644 --- a/glances/plugins/glances_sensors.py +++ b/glances/plugins/glances_sensors.py @@ -136,6 +136,8 @@ class Plugin(GlancesPlugin): # Add specifics informations # Alert for i in self.stats: + if i['value'] == []: + continue if i['type'] == 'battery': self.views[i[self.get_key()]]['value']['decoration'] = self.get_alert(100 - i['value'], header=i['type']) else: From 229d7ff62a8c0766ae0acc17db0d240b43c37768 Mon Sep 17 00:00:00 2001 From: Nicolas Hennion Date: Mon, 19 Jan 2015 16:25:42 +0100 Subject: [PATCH 066/267] Correct issue if sensors are not available From 74ced7a915fe0816585713b79134254f53fbbd6b Mon Sep 17 00:00:00 2001 From: nclsHart Date: Mon, 19 Jan 2015 22:02:32 +0100 Subject: [PATCH 067/267] remove old base.tpl file (probably fix a previous merge conflict) --- glances/outputs/bottle/base.tpl | 60 --------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 glances/outputs/bottle/base.tpl diff --git a/glances/outputs/bottle/base.tpl b/glances/outputs/bottle/base.tpl deleted file mode 100644 index 30f73a35..00000000 --- a/glances/outputs/bottle/base.tpl +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - Glances - - - - - - - -
-
-
-
- % include('plugin_text', plugin_name="system", stats=stats['system']) -
-
- % include('plugin_text', plugin_name="uptime", stats=stats['uptime']) -
-
-
-
-
- % include('plugin_table', plugin_name="cpu", stats=stats['cpu']) -
-
- % include('plugin_table', plugin_name="load", stats=stats['load']) -
-
- % include('plugin_table', plugin_name="mem", stats=stats['mem']) -
-
- % include('plugin_table', plugin_name="memswap", stats=stats['memswap']) -
-
-
-
- % include('plugin_table', plugin_name="network", stats=stats['network']) - % include('plugin_table', plugin_name="diskio", stats=stats['diskio']) - % include('plugin_table', plugin_name="fs", stats=stats['fs']) - % include('plugin_table', plugin_name="sensors", stats=stats['sensors']) -
-
- % include('plugin_table', plugin_name="alert", stats=stats['alert']) - % include('plugin_text', plugin_name="processcount", stats=stats['processcount']) -
-
- % include('plugin_table', plugin_name="monitor", stats=stats['monitor']) -
-
- % include('plugin_table', plugin_name="processlist", stats=stats['processlist']) -
-
-
- - \ No newline at end of file From 7e1e00a0c32015daa6e977d127da0ea216f9651a Mon Sep 17 00:00:00 2001 From: nclsHart Date: Tue, 20 Jan 2015 23:06:52 +0100 Subject: [PATCH 068/267] add glances logo and animation on loading page --- glances/outputs/glances_bottle.py | 6 +++ glances/outputs/static/css/style.css | 52 ++++++++++++++++++++++ glances/outputs/static/html/stats.html | 18 +++++--- glances/outputs/static/images/glances.png | Bin 0 -> 43588 bytes 4 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 glances/outputs/static/images/glances.png diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index f6f3187b..d757ae6e 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -68,6 +68,7 @@ class GlancesBottle(object): self._app.route('/', method="GET", callback=self._js_map) self._app.route('/', method="GET", callback=self._html) + self._app.route('/', method="GET", callback=self._images) self._app.route('/favicon.ico', method="GET", callback=self._favicon) # REST API @@ -135,6 +136,11 @@ class GlancesBottle(object): """Bottle callback for *.js.map files.""" # Return the static file return static_file(filename, root=os.path.join(self.STATIC_PATH, 'js')) + + def _images(self, filename): + """Bottle callback for *.png files.""" + # Return the static file + return static_file(filename, root=os.path.join(self.STATIC_PATH, 'images')) def _favicon(self): """Bottle callback for favicon.""" diff --git a/glances/outputs/static/css/style.css b/glances/outputs/static/css/style.css index 130bdb1c..8f02af5c 100644 --- a/glances/outputs/static/css/style.css +++ b/glances/outputs/static/css/style.css @@ -93,4 +93,56 @@ body { #processlist .table-cell { padding: 0px 5px 0px 5px; white-space: nowrap; +} + +/* Loading page */ + +#loading-page .glances-logo { + background: url('glances.png') no-repeat center center; + background-size: contain; + height: 500px; +} + +#loading-page .loader:before, +#loading-page .loader:after, +#loading-page .loader { + width: 10px; + height: 10px; + border-radius: 50%; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + -webkit-animation: loading 1.8s infinite ease-in-out; + animation: loading 1.8s infinite ease-in-out; +} +#loading-page .loader { + margin: auto; + position: relative; + text-indent: -9999px; + -webkit-animation-delay: 0.16s; + animation-delay: 0.16s; +} +#loading-page .loader:before { left: -40px } +#loading-page .loader:after { + left: 40px; + -webkit-animation-delay: 0.32s; + animation-delay: 0.32s; +} +#loading-page .loader:before, +#loading-page .loader:after { + content: ''; + position: absolute; + top: 0; +} + +@-webkit-keyframes loading { + 0%, + 80%, + 100% { box-shadow: 0 20px 0 -10px #56CA69 } + 40% { box-shadow: 0 20px 0 0 #56CA69 } +} +@keyframes loading { + 0%, + 80%, + 100% { box-shadow: 0 20px 0 -10px #56CA69 } + 40% { box-shadow: 0 20px 0 0 #56CA69 } } \ No newline at end of file diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index 257212fa..1e384f9e 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -1,5 +1,11 @@ - -
Loading...
+
+
+
+ +
Loading...
+
+
+
@@ -47,7 +53,7 @@
-
+
PER CPU
{{percpu.total}}%
@@ -273,9 +279,9 @@
-
-{{alert.begin}} ({{(alert[1]-alert[0]) | date : 'h:mm:ss'}}) - {{alert[2]}} on {{alert[3]}} ({{alert[4]}}) -
+
+ {{alert.begin}} ({{(alert[1]-alert[0]) | date : 'h:mm:ss'}}) - {{alert[2]}} on {{alert[3]}} ({{alert[4]}}) +
diff --git a/glances/outputs/static/images/glances.png b/glances/outputs/static/images/glances.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8e62ba908fdf0edf174f28c3825652743f857d GIT binary patch literal 43588 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%0AiM_!k2L_h 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%0AG41^@AxS@lY3`d{+)>Hk)XbL<9bBUMu|Xw z=hTrI?1;u6@DEEr77q`{ib&KQ)sck@7ZJ47Xvqs zx0_2%l1PdM^X3%=;dqWZ+&>*3Bsq$5ciXliQec?%Hfl~V3$`%jF(vqKKp2?(q)5RG z_P>;;oWBd3L&qLkPW?8;3ge1$@)P`C=?yy#JQ6;P1C4mMQ?uoD3ORK2EPb3D$>Pm3 zk7S~s3p|f0RctG*$RtLtOZ-U3B2Te=CZYDsbzLdA_~+7z$E-v;T=OhnIg2q#!c2Es zeG8SB3U&2|jJBv3^&i_u5sncndV2A}9{Nqt&8nkBAa8)bC3DX+ za_D#n2lPh4SGVA8<(PhNMudWJ-c;vXwAfx6_cC{F8esQrso%zJW=?;xM<%C6Xl8ih!DUUDR1Y%Sei_S^0y6auwpUaom;SQ~Yc^-SD zFc65HYgNw7Z{8?FSJC>wf7(Bep_Un-G&m1g?(3$!JF%ep`Q6~Tp@v%SssjJQq5|=c zG2!`qNJsOZc7W&U`w5kIg;h6RCAjYO>u;Pa7bgDclk{F>wA)~Tr(GHvS2l-E%S5QT zDtmg=VRX7G8qhLnkF#pNkukj51jX?fhvtOKa8HKkA*!<9AsNl~Tu3;%m* z%;P-LXN2^FDe+w}05%tW$Z9>la_%ZRTmdrBjx3u9Xw42qz;xyb^~0J>+aQ+3$bv@( zu=k!K=X+*Qx>7ob(ue=5nPS2}(ii&?5Tm{=u;}C*bs_&Z{%4~Ht{`~FGKWKx+Wg^) z2;xJDJd0#iGtTJE>e|&PHqcX4d2r=lP5C&-dU}mC`U%N(+=n-$OjP9m8)sSYrtxaR zKEXGi_o}7hFXT!qPvyxNzgNr4k$Kd2r7}ukeoj-~R{cYJJ53 literal 0 HcmV?d00001 From fb23e5638959292d577bac8a104f61d2f51d8722 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Sat, 24 Jan 2015 16:13:57 +0100 Subject: [PATCH 069/267] better rendering of Web UI loading page on small devices --- glances/outputs/static/css/style.css | 61 +++++++++++++++++--------- glances/outputs/static/html/stats.html | 8 +--- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/glances/outputs/static/css/style.css b/glances/outputs/static/css/style.css index 8f02af5c..2d852eb8 100644 --- a/glances/outputs/static/css/style.css +++ b/glances/outputs/static/css/style.css @@ -100,30 +100,48 @@ body { #loading-page .glances-logo { background: url('glances.png') no-repeat center center; background-size: contain; - height: 500px; } +@media (max-width: 750px) { + #loading-page .glances-logo { + height: 400px; + } +} +@media (min-width: 750px) { + #loading-page .glances-logo { + height: 500px; + } +} + + +/* +Loading animation +source : https://github.com/lukehaas/css-loaders +*/ #loading-page .loader:before, #loading-page .loader:after, #loading-page .loader { - width: 10px; - height: 10px; border-radius: 50%; + width: 1em; + height: 1em; -webkit-animation-fill-mode: both; animation-fill-mode: both; - -webkit-animation: loading 1.8s infinite ease-in-out; - animation: loading 1.8s infinite ease-in-out; + -webkit-animation: loader 1.8s infinite ease-in-out; + animation: loader 1.8s infinite ease-in-out; } #loading-page .loader { margin: auto; + font-size: 10px; position: relative; - text-indent: -9999px; + text-indent: -9999em; -webkit-animation-delay: 0.16s; animation-delay: 0.16s; } -#loading-page .loader:before { left: -40px } +#loading-page .loader:before { + left: -3.5em; +} #loading-page .loader:after { - left: 40px; + left: 3.5em; -webkit-animation-delay: 0.32s; animation-delay: 0.32s; } @@ -133,16 +151,19 @@ body { position: absolute; top: 0; } - -@-webkit-keyframes loading { - 0%, - 80%, - 100% { box-shadow: 0 20px 0 -10px #56CA69 } - 40% { box-shadow: 0 20px 0 0 #56CA69 } +@-webkit-keyframes loader { + 0%, 80%, 100% { + box-shadow: 0 2.5em 0 -1.3em #56CA69; + } + 40% { + box-shadow: 0 2.5em 0 0 #56CA69; + } +} +@keyframes loader { + 0%, 80%, 100% { + box-shadow: 0 2.5em 0 -1.3em #56CA69; + } + 40% { + box-shadow: 0 2.5em 0 0 #56CA69; + } } -@keyframes loading { - 0%, - 80%, - 100% { box-shadow: 0 20px 0 -10px #56CA69 } - 40% { box-shadow: 0 20px 0 0 #56CA69 } -} \ No newline at end of file diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index 1e384f9e..c2586496 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -1,10 +1,6 @@
-
-
- -
Loading...
-
-
+ +
Loading...
From 6d32061754bf6d5cff8b92e8cb8496f19db8411a Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Mon, 19 Jan 2015 22:47:22 +0100 Subject: [PATCH 070/267] Add per container CPU and MEM monitoring in the Docker plugin (issue #490) --- NEWS | 2 +- glances/plugins/glances_docker.py | 63 +++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 3ee2a671..acc5f9c4 100644 --- a/NEWS +++ b/NEWS @@ -18,7 +18,7 @@ Enhancements and news features: * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463) * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart * Add the RAID plugin (issue #447) - * Add the Docker plugin (issue #440) + * Add the Docker plugin (issue #440) with per container CPU and memory monitoring (issue #490) * It is possible, through the configuration file, to define if an alarm should be logged or not (using the _log option) (issue #437) * You can now set alarm for Disk IO * API: add getAllLimits and getAllViews methods (issue#481) diff --git a/glances/plugins/glances_docker.py b/glances/plugins/glances_docker.py index 55b0f6b1..da96235e 100644 --- a/glances/plugins/glances_docker.py +++ b/glances/plugins/glances_docker.py @@ -33,6 +33,9 @@ except ImportError as e: docker_tag = False else: docker_tag = True +import os +import re +import numbers class Plugin(GlancesPlugin): @@ -140,14 +143,58 @@ class Plugin(GlancesPlugin): # u'Names': [u'/webstack_nginx_1'], # u'Id': u'b0da859e84eb4019cf1d965b15e9323006e510352c402d2f442ea632d61faaa5'}] self.stats['containers'] = self.docker_client.containers() + # Get CPU and MEMORY stats for containers + for c in self.stats['containers']: + c['cpu'] = self.get_docker_cpu(c['Id']) + c['memory'] = self.get_docker_memory(c['Id']) elif self.get_input() == 'snmp': # Update stats using SNMP # Not available pass + logger.info(self.stats) + return self.stats + def get_docker_cpu(self, id): + """Return the container CPU usage by reading /sys/fs/cgroup/... + Input: id is the full container id + Output: a dict {'total': 1.49, 'user': 0.65, 'system': 0.84}""" + ret = {} + # Read the stats + with open('/sys/fs/cgroup/cpuacct/docker/' + id + '/cpuacct.stat', 'r') as f: + for line in f: + m = re.search(r"(system|user)\s+(\d+)", line) + if m: + ret[m.group(1)] = int(m.group(2)) + # Get the user ticks + ticks = self.get_user_ticks() + if isinstance(ret["system"], numbers.Number) and isinstance(ret["user"], numbers.Number): + ret["total"] = ret["system"] + ret["user"] + for k in ret.keys(): + ret[k] = float(ret[k]) / ticks + # Return the stats + return ret + + def get_docker_memory(self, id): + """Return the container MEMORY usage by reading /sys/fs/cgroup/... + Input: id is the full container id + Output: a dict {'rss': 1015808, 'cache': 356352}""" + ret = {} + # Read the stats + with open('/sys/fs/cgroup/memory/docker/' + id + '/memory.stat', 'r') as f: + for line in f: + m = re.search(r"(rss|cache)\s+(\d+)", line) + if m: + ret[m.group(1)] = int(m.group(2)) + # Return the stats + return ret + + def get_user_ticks(self): + """return the user ticks by reading the environment variable""" + return os.sysconf(os.sysconf_names['SC_CLK_TCK']) + def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" # Init the return message @@ -175,6 +222,10 @@ class Plugin(GlancesPlugin): ret.append(self.curse_add_line(msg)) msg = '{0:>26}'.format(_("Status")) ret.append(self.curse_add_line(msg)) + msg = '{0:>6}'.format(_("CPU%")) + ret.append(self.curse_add_line(msg)) + msg = '{0:>6}'.format(_("MEM")) + ret.append(self.curse_add_line(msg)) msg = ' {0:8}'.format(_("Command")) ret.append(self.curse_add_line(msg)) # Data @@ -196,6 +247,18 @@ class Plugin(GlancesPlugin): msg = container['Status'].replace("minute", "min") msg = '{0:>26}'.format(msg[0:25]) ret.append(self.curse_add_line(msg, status)) + # CPU + try: + msg = '{0:>6.1f}'.format(container['cpu']['total']) + except KeyError: + msg = '{0:>6}'.format('?') + ret.append(self.curse_add_line(msg)) + # MEM + try: + msg = '{0:>6}'.format(self.auto_unit(container['memory']['rss'])) + except KeyError: + msg = '{0:>6}'.format('?') + ret.append(self.curse_add_line(msg)) # Command msg = ' {0}'.format(container['Command']) ret.append(self.curse_add_line(msg)) From 628cfcbbc5cca471be13611a3c1581ac3018036a Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Thu, 22 Jan 2015 21:52:15 +0100 Subject: [PATCH 071/267] Resolve merge issue --- NEWS | 18 +++++++----------- docs/glances-doc.rst | 6 +++--- glances/__init__.py | 2 +- setup.py | 4 ++-- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/NEWS b/NEWS index acc5f9c4..9402b5ef 100644 --- a/NEWS +++ b/NEWS @@ -2,26 +2,22 @@ Glances Version 2.x ============================================================================== -<<<<<<< HEAD Version 2.3 =========== -======= -Version 2.2.1 -============= ->>>>>>> f2096d40c3086c062f882d6f115e9dd08ae26b62 Enhancements and news features: - * Add actions on alerts (issue #132). It is now possible to run action (command line) by triggers. Action could containq {Mustache} {{tag}} (Mustache) with stat value. + * Add the Docker plugin (issue #440) with per container CPU and memory monitoring (issue #490) + * Add the RAID plugin (issue #447) + * Add actions on alerts (issue #132). It is now possible to run action (command line) by triggers. Action could contain {{tag}} (Mustache) with stat value. * Add InfluxDB export module (--export-influxdb) (issue #455) - * Add Statsd export module (--export-statsd) (issue #465) + * Add StatsD export module (--export-statsd) (issue #465) * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463) * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart - * Add the RAID plugin (issue #447) - * Add the Docker plugin (issue #440) with per container CPU and memory monitoring (issue #490) - * It is possible, through the configuration file, to define if an alarm should be logged or not (using the _log option) (issue #437) + * It is now possible, through the configuration file, to define if an alarm should be logged or not (using the _log option) (issue #437) * You can now set alarm for Disk IO - * API: add getAllLimits and getAllViews methods (issue#481) + * API: add getAllLimits and getAllViews methods (issue #481) and allow CORS request (issue #479) + * SNMP client support NetApp appliance (issue #394) Bugs corrected: diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index b8d4cfd7..60d7fe40 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -2,11 +2,11 @@ Glances ======= -This manual describes *Glances* version 2.2.1. +This manual describes *Glances* version 2.3. Copyright © 2011-2015 Nicolas Hennion -Junuary 2015 +January 2015 .. contents:: Table of Contents @@ -719,7 +719,7 @@ By action, we mean all shell command line. For example, if you want to execute t critical=5.0 critical_action=python /path/to/foo.py -All the stats are usable in the command line by the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a warning space trigger is reached: +All the stats are available in the command line through the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a space trigger warning is reached: [fs] warning=70 diff --git a/glances/__init__.py b/glances/__init__.py index 6599929f..0d29033a 100644 --- a/glances/__init__.py +++ b/glances/__init__.py @@ -20,7 +20,7 @@ """Init the Glances software.""" __appname__ = 'glances' -__version__ = '2.2.1' +__version__ = '2.3_RC1' __author__ = 'Nicolas Hennion ' __license__ = 'LGPL' diff --git a/setup.py b/setup.py index 0eada109..e46c3484 100755 --- a/setup.py +++ b/setup.py @@ -52,13 +52,13 @@ def get_requires(): setup( name='Glances', - version='2.2.1', + version='2.3RC1', description="A cross-platform curses-based monitoring tool", long_description=open('README.rst').read(), author='Nicolas Hennion', author_email='nicolas@nicolargo.com', url='https://github.com/nicolargo/glances', - # download_url='https://s3.amazonaws.com/glances/glances-2.2.1.tar.gz', + # download_url='https://s3.amazonaws.com/glances/glances-2.3.tar.gz', license="LGPL", keywords="cli curses monitoring system", install_requires=get_requires(), From 7feffee8e39dbd5286015040bc2ecc01773c3641 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Sat, 24 Jan 2015 13:13:22 +0100 Subject: [PATCH 072/267] fix typo --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 9402b5ef..8e32b1f4 100644 --- a/NEWS +++ b/NEWS @@ -13,7 +13,7 @@ Enhancements and news features: * Add InfluxDB export module (--export-influxdb) (issue #455) * Add StatsD export module (--export-statsd) (issue #465) * Refactor export module (CSV export option is now --export-csv). It is now possible to export stats from the Glances client mode (issue #463) - * The Web inteface is now based on BootStarp / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart + * The Web inteface is now based on Bootstrap / RWD grid (issue #417, #366 and #461) Thanks to Nicolas Hart @nclsHart * It is now possible, through the configuration file, to define if an alarm should be logged or not (using the _log option) (issue #437) * You can now set alarm for Disk IO * API: add getAllLimits and getAllViews methods (issue #481) and allow CORS request (issue #479) From b6b5230dcd5ec934afa9c45dec29a79bd812c372 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 24 Jan 2015 16:30:20 +0100 Subject: [PATCH 073/267] Resolve merge issue --- glances/plugins/glances_load.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/glances/plugins/glances_load.py b/glances/plugins/glances_load.py index 2e066247..aa6e8a13 100644 --- a/glances/plugins/glances_load.py +++ b/glances/plugins/glances_load.py @@ -121,12 +121,15 @@ class Plugin(GlancesPlugin): # Call the father's method GlancesPlugin.update_views(self) - if self.views != {}: - # Add specifics informations + # Add specifics informations + try: # Alert and log self.views['min15']['decoration'] = self.get_alert_log(self.stats['min15'], max=100 * self.stats['cpucore']) # Alert only self.views['min5']['decoration'] = self.get_alert(self.stats['min5'], max=100 * self.stats['cpucore']) + except KeyError: + # try/except mandatory for Windows compatibility (no load stats) + pass def msg_curse(self, args=None): """Return the dict to display in the curse interface.""" From 67e21a606eae6a41d023617951f682a020147d64 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sat, 31 Jan 2015 14:02:45 +0100 Subject: [PATCH 074/267] On the road of the version 2.4 --- NEWS | 5 +++++ glances/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 4b4419ef..90d1eddc 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,11 @@ Glances Version 2.x ============================================================================== +Version 2.4 +=========== + + ... + Version 2.3 =========== diff --git a/glances/__init__.py b/glances/__init__.py index 30636edb..e6374f29 100644 --- a/glances/__init__.py +++ b/glances/__init__.py @@ -20,7 +20,7 @@ """Init the Glances software.""" __appname__ = 'glances' -__version__ = '2.3' +__version__ = '2.4beta' __author__ = 'Nicolas Hennion ' __license__ = 'LGPL' diff --git a/setup.py b/setup.py index a7fe0a5a..f598e2bf 100755 --- a/setup.py +++ b/setup.py @@ -52,7 +52,7 @@ def get_requires(): setup( name='Glances', - version='2.3', + version='2.4beta', description="A cross-platform curses-based monitoring tool", long_description=open('README.rst').read(), author='Nicolas Hennion', From e43e6640acfccb5de904899d0a5f78e500157af3 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 31 Jan 2015 14:44:43 +0100 Subject: [PATCH 075/267] add shortcuts --- glances/outputs/static/html/help.html | 30 ----- glances/outputs/static/html/stats.html | 127 ++++++++++++++++-- glances/outputs/static/js/stats_controller.js | 52 +++---- glances/outputs/static/js/variables.js | 10 +- 4 files changed, 152 insertions(+), 67 deletions(-) delete mode 100644 glances/outputs/static/html/help.html diff --git a/glances/outputs/static/html/help.html b/glances/outputs/static/html/help.html deleted file mode 100644 index 957b6e15..00000000 --- a/glances/outputs/static/html/help.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - Glances - - - - - - - - - - - - - - - - -Help window!!! - -message : {{message}} - - - - diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index c554af3c..c6a1b4a9 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -1,6 +1,117 @@ -
Loading...
-
+
+ + +
+ +
{{help.version}} with {{PSUTIL}}
+
Configuration file
+ + + # Build the string message + # Header + msg = '{0} {1}'.format(appname.title(), version) + ret.append(self.curse_add_line(msg, "TITLE")) + msg = _(" with PSutil {0}").format(psutil_version) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + + # Configuration file path + try: + msg = '{0}: {1}'.format(_("Configuration file"), self.config.get_loaded_config_file()) + except AttributeError: + pass + else: + ret.append(self.curse_new_line()) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + + # Keys + msg_col = ' {0:1} {1:35}' + msg_col2 = ' {0:1} {1:35}' + + ret.append(self.curse_new_line()) + msg = msg_col.format("a", _("Sort processes automatically")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("b", _("Bytes or bits for network I/O")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("c", _("Sort processes by CPU%")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("l", _("Show/hide alert logs")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("m", _("Sort processes by MEM%")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("w", _("Delete warning alerts")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("p", _("Sort processes by name")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("x", _("Delete warning and critical alerts")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("i", _("Sort processes by I/O rate")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("1", _("Global CPU or per-CPU stats")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("t", _("Sort processes by CPU times")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("h", _("Show/hide this help screen")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("d", _("Show/hide disk I/O stats")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("T", _("View network I/O as combination")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("f", _("Show/hide filesystem stats")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("u", _("View cumulative network I/O")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("n", _("Show/hide network stats")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("F", _("Show filesystem free space")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("s", _("Show/hide sensors stats")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("g", _("Generate graphs for current history")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("2", _("Show/hide left sidebar")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("r", _("Reset history")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("z", _("Enable/disable processes stats")) + ret.append(self.curse_add_line(msg)) + msg = msg_col2.format("q", _("Quit (Esc and Ctrl-C also work)")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("e", _("Enable/disable top extended stats")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("/", _("Enable/disable short processes name")) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("D", _("Enable/disable Docker stats")) + ret.append(self.curse_add_line(msg)) + + + ret.append(self.curse_new_line()) + ret.append(self.curse_new_line()) + msg = '{0}: {1}'.format("ENTER", _("Edit the process filter pattern")) + ret.append(self.curse_add_line(msg)) +
+ + + +
+
Loading...
+
@@ -31,13 +142,13 @@
user:
-
+
{{result["cpu"].user}}%
system:
-
+
{{result["cpu"].system}}%
@@ -211,10 +322,10 @@
{{network.interface_name | min_size}}
-
{{network.rx | bytes}}
-
{{network.tx | bytes}}
-
{{network.rx | bits}}
-
{{network.tx | bits}}
+
{{network.rx | bytes}}
+
{{network.tx | bytes}}
+
{{network.rx | bits}}
+
{{network.tx | bits}}
diff --git a/glances/outputs/static/js/stats_controller.js b/glances/outputs/static/js/stats_controller.js index d3a74c83..44103ae9 100644 --- a/glances/outputs/static/js/stats_controller.js +++ b/glances/outputs/static/js/stats_controller.js @@ -5,9 +5,6 @@ glancesApp.config([ '$routeProvider', '$locationProvider', function($routeProvid }).when('/:refresh_time', { templateUrl : 'stats.html', controller : 'statsController' - }).when('/help', { - templateUrl : 'help.html', - controller : 'helpController' }); $locationProvider.html5Mode(true); @@ -59,7 +56,7 @@ glancesApp.filter('bits', function() { }); -glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', '$routeParams', '$location', function($scope, $http, $interval, $q, $routeParams, $location) { +glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', '$routeParams', function($scope, $http, $interval, $q, $routeParams) { $scope.limitSuffix = ['critical', 'careful', 'warning'] $scope.refreshTime = 3 @@ -74,10 +71,18 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', 'sensors' : true, 'sidebar' : true, 'alert' : true, - 'short_process_name': false, - 'per_cpu': false + 'short_process_name': true, + 'per_cpu': false, + 'warning_alerts':true, + 'warning_critical_alerts':true, + 'process_stats':true, + 'top_extended_stats':true, + 'docker_stats':true, + 'network_io_combination':false, + 'network_io_cumulative':false, + 'filesystem_freespace':false, + 'network_by_bytes':true } - $scope.networkSortByBytes = false $scope.init_refresh_time = function() { if ($routeParams != undefined && $routeParams.refresh_time != undefined) { @@ -287,38 +292,37 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', } else if ($event.keyCode == keycodes.TWO && $event.shiftKey) {//2 Show/hide left sidebar $scope.show_hide('sidebar') } else if ($event.keyCode == keycodes.z) {//z Enable/disable processes stats - //$scope.enableDisable('processStats') + $scope.show_hide('process_stats') } else if ($event.keyCode == keycodes.e) {//e Enable/disable top extended stats - //$scope.sort_by('') + $scope.show_hide('top_extended_stats') } else if ($event.keyCode == keycodes.SLASH) {// SLASH Enable/disable short processes name $scope.show_hide('short_process_name') - } else if ($event.keyCode == keycodes.D) {//D Enable/disable Docker stats - //$scope.sort_by('') + } else if ($event.keyCode == keycodes.D && $event.shiftKey) {//D Enable/disable Docker stats + $scope.show_hide('docker_stats') } else if ($event.keyCode == keycodes.b) {//b Bytes or bits for network I/O - $scope.networkSortByBytes = !$scope.networkSortByBytes + $scope.show_hide('network_by_bytes') } else if ($event.keyCode == keycodes.l) {//l Show/hide alert logs $scope.show_hide('alert') } else if ($event.keyCode == keycodes.w) {//w Delete warning alerts - //$scope.sort_by('') + $scope.show_hide('warning_alerts') } else if ($event.keyCode == keycodes.x) {//x Delete warning and critical alerts - //$scope.sort_by('') + $scope.show_hide('warning_critical_alerts') } else if ($event.keyCode == keycodes.ONE && $event.shiftKey) {//1 Global CPU or per-CPU stats $scope.show_hide('per_cpu') } else if ($event.keyCode == keycodes.h) {//h Show/hide this help screen - window.location = "/help" - //$location.path("/help") - } else if ($event.keyCode == keycodes.T) {//T View network I/O as combination - //$scope.sort_by('') + $scope.show_hide('help') + } else if ($event.keyCode == keycodes.T && $event.shiftKey) {//T View network I/O as combination + $scope.show_hide('network_io_combination') } else if ($event.keyCode == keycodes.u) {//u View cumulative network I/O - //$scope.sort_by('') - } else if ($event.keyCode == keycodes.F) {//F Show filesystem free space - //$scope.sort_by('') + $scope.show_hide('network_io_cumulative') + } else if ($event.keyCode == keycodes.F && $event.shiftKey) {//F Show filesystem free space + $scope.show_hide('filesystem_freespace') } else if ($event.keyCode == keycodes.g) {//g Generate graphs for current history - //$scope.sort_by('') + // not available } else if ($event.keyCode == keycodes.r) {//r Reset history - //$scope.sort_by('') + // not available } else if ($event.keyCode == keycodes.q) {//q Quit (Esc and Ctrl-C also work) - //$scope.sort_by('') + // not available } } } ]); diff --git a/glances/outputs/static/js/variables.js b/glances/outputs/static/js/variables.js index 49a9294d..f164f485 100644 --- a/glances/outputs/static/js/variables.js +++ b/glances/outputs/static/js/variables.js @@ -21,9 +21,9 @@ var keycodes = { 'ONE' : '49', 'h' : '72', 'T' : '84', - 'u' : '', - 'F' : '', - 'g' : '', - 'r' : '', - 'q' : '' + 'u' : '85', + 'F' : '70', + 'g' : '71', + 'r' : '82', + 'q' : '81' } From 7cda934504b9dbbf3d8a35d06905980edf87a423 Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 31 Jan 2015 16:10:10 +0100 Subject: [PATCH 076/267] add help window --- glances/outputs/glances_bottle.py | 22 ++- glances/outputs/static/html/stats.html | 176 +++++++----------- glances/outputs/static/js/stats_controller.js | 14 +- glances/plugins/glances_help.py | 164 ++++++++-------- 4 files changed, 187 insertions(+), 189 deletions(-) diff --git a/glances/outputs/glances_bottle.py b/glances/outputs/glances_bottle.py index dd8b4f89..d10ba5ff 100644 --- a/glances/outputs/glances_bottle.py +++ b/glances/outputs/glances_bottle.py @@ -61,7 +61,6 @@ class GlancesBottle(object): """Define route.""" self._app.route('/', method="GET", callback=self._index) self._app.route('/', method=["GET", "POST"], callback=self._index) - self._app.route('/help', method="GET", callback=self._help) self._app.route('/', method="GET", callback=self._css) self._app.route('/', method="GET", callback=self._js) @@ -71,6 +70,7 @@ class GlancesBottle(object): self._app.route('/favicon.ico', method="GET", callback=self._favicon) # REST API + self._app.route('/api/2/help', method="GET", callback=self._api_help) self._app.route('/api/2/pluginslist', method="GET", callback=self._api_plugins) self._app.route('/api/2/all', method="GET", callback=self._api_all) self._app.route('/api/2/all/limits', method="GET", callback=self._api_all_limits) @@ -111,10 +111,6 @@ class GlancesBottle(object): # Display return static_file("index.html", root=os.path.join(self.STATIC_PATH, 'html')) - def _help(self): - """Bottle callback for /help """ - return static_file("help.html", root=os.path.join(self.STATIC_PATH, 'html')) - def _html(self, filename): """Bottle callback for *.html files.""" # Return the static file @@ -140,6 +136,22 @@ class GlancesBottle(object): # Return the static file return static_file('favicon.ico', root=self.STATIC_PATH) + def _api_help(self): + """ + Glances API RESTFul implementation + Return the help data + or 404 error + """ + response.content_type = 'application/json' + + # Update the stat + view_data = self.stats.get_plugin("help").get_view_data() + try: + plist = json.dumps(view_data, sort_keys=True) + except Exception as e: + abort(404, "Cannot get help view data (%s)" % str(e)) + return plist + def _api_plugins(self): """ Glances API RESTFul implementation diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index c6a1b4a9..e7f3d399 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -1,117 +1,73 @@ -
+
- -
- -
{{help.version}} with {{PSUTIL}}
-
Configuration file
- - - # Build the string message - # Header - msg = '{0} {1}'.format(appname.title(), version) - ret.append(self.curse_add_line(msg, "TITLE")) - msg = _(" with PSutil {0}").format(psutil_version) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - - # Configuration file path - try: - msg = '{0}: {1}'.format(_("Configuration file"), self.config.get_loaded_config_file()) - except AttributeError: - pass - else: - ret.append(self.curse_new_line()) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - - # Keys - msg_col = ' {0:1} {1:35}' - msg_col2 = ' {0:1} {1:35}' - - ret.append(self.curse_new_line()) - msg = msg_col.format("a", _("Sort processes automatically")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("b", _("Bytes or bits for network I/O")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("c", _("Sort processes by CPU%")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("l", _("Show/hide alert logs")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("m", _("Sort processes by MEM%")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("w", _("Delete warning alerts")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("p", _("Sort processes by name")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("x", _("Delete warning and critical alerts")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("i", _("Sort processes by I/O rate")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("1", _("Global CPU or per-CPU stats")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("t", _("Sort processes by CPU times")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("h", _("Show/hide this help screen")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("d", _("Show/hide disk I/O stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("T", _("View network I/O as combination")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("f", _("Show/hide filesystem stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("u", _("View cumulative network I/O")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("n", _("Show/hide network stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("F", _("Show filesystem free space")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("s", _("Show/hide sensors stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("g", _("Generate graphs for current history")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("2", _("Show/hide left sidebar")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("r", _("Reset history")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("z", _("Enable/disable processes stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("q", _("Quit (Esc and Ctrl-C also work)")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("e", _("Enable/disable top extended stats")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("/", _("Enable/disable short processes name")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("D", _("Enable/disable Docker stats")) - ret.append(self.curse_add_line(msg)) - - - ret.append(self.curse_new_line()) - ret.append(self.curse_new_line()) - msg = '{0}: {1}'.format("ENTER", _("Edit the process filter pattern")) - ret.append(self.curse_add_line(msg)) +
+
{{help.version}} {{help.psutil_version}}
+
+
 
+
+
{{help.configuration_file}}
+
+
 
+
+
{{help.sort_auto}}
+
{{help.sort_network}}
+
+
+
{{help.sort_cpu}}
+
{{help.show_hide_alert}}
+
+
+
{{help.show_mem}}
+
{{help.delete_warning_alerts}}
+
+
+
{{help.sort_proc}}
+
{{help.delete_warning_critical_alerts}}
+
+
+
{{help.sort_io}}
+
{{help.percpu}}
+
+
+
{{help.show_hide_help}}
+
{{help.show_hide_diskio}}
+
+
+
{{help.view_network_io_combination}}
+
{{help.view_cumulative_network}}
+
+
+
{{help.show_hide_network}}
+
{{help.show_hide_filesytem_freespace}}
+
+
+
{{help.show_hide_sensors}}
+
{{help.generate_graphs}}
+
+
+
{{help.show_hide_left_sidebar}}
+
{{help.reset_history}}
+
+
+
{{help.enable_disable_process_stats}}
+
{{help.quit}}
+
+
+
{{help.enable_disable_top_extends_stats}}
+
{{help.enable_disable_short_processname}}
+
+
+
{{help.enable_disable_docker}}
+
+
 
+
+
{{help.edit_pattern_filter}}
- - -
-
Loading...
-
+ +
Loading...
+
diff --git a/glances/outputs/static/js/stats_controller.js b/glances/outputs/static/js/stats_controller.js index 44103ae9..1e477639 100644 --- a/glances/outputs/static/js/stats_controller.js +++ b/glances/outputs/static/js/stats_controller.js @@ -63,6 +63,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', $scope.pluginLimits = [] $scope.sortColumn = '' $scope.sortOrderAsc = false + $scope.help_screen = false $scope.lastSortColumn = '#column_' + $scope.sortColumn $scope.show = { 'diskio' : true, @@ -98,8 +99,18 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', $scope.plugins_limits(); } + $scope.init_help = function() { + $http.get('/api/2/help').success(function(response, status, headers, config) { + $scope.help = response + }); + } + $scope.show_hide = function(bloc) { - $scope.show[bloc] = !$scope.show[bloc] + if(bloc == 'help') { + $scope.help_screen = !$scope.help_screen + } else { + $scope.show[bloc] = !$scope.show[bloc] + } } $scope.sort_by = function(column) { @@ -236,6 +247,7 @@ glancesApp.controller('statsController', [ '$scope', '$http', '$interval', '$q', $scope.init_refresh_time(); $scope.init_limits(); + $scope.init_help(); var stop; $scope.configure_refresh = function () { diff --git a/glances/plugins/glances_help.py b/glances/plugins/glances_help.py index bf1f18f6..6be5d01c 100644 --- a/glances/plugins/glances_help.py +++ b/glances/plugins/glances_help.py @@ -41,113 +41,131 @@ class Plugin(GlancesPlugin): # We want to display the stat in the curse interface self.display_curse = True - + + # init data dictionary + self.view_data = {} + self.generate_view_data() + def update(self): """No stats. It is just a plugin to display the help.""" pass + def generate_view_data(self): + self.view_data['version'] = '{0} {1}'.format(appname.title(), version) + self.view_data['psutil_version'] = _(" with PSutil {0}").format(psutil_version) + + try: + self.view_data['configuration_file'] = '{0}: {1}'.format(_("Configuration file"), self.config.get_loaded_config_file()) + except AttributeError: + pass + + msg_col = ' {0:1} {1:35}' + msg_col2 = ' {0:1} {1:35}' + self.view_data['sort_auto'] = msg_col.format("a", _("Sort processes automatically")) + self.view_data['sort_network'] = msg_col2.format("b", _("Bytes or bits for network I/O")) + self.view_data['sort_cpu'] = msg_col.format("c", _("Sort processes by CPU%")) + self.view_data['show_hide_alert'] = msg_col2.format("l", _("Show/hide alert logs")) + + + self.view_data['show_mem'] = msg_col.format("m", _("Sort processes by MEM%")) + self.view_data['delete_warning_alerts'] = msg_col2.format("w", _("Delete warning alerts")) + self.view_data['sort_proc'] = msg_col.format("p", _("Sort processes by name")) + self.view_data['delete_warning_critical_alerts'] = msg_col2.format("x", _("Delete warning and critical alerts")) + self.view_data['sort_io'] = msg_col.format("i", _("Sort processes by I/O rate")) + self.view_data['percpu'] = msg_col2.format("1", _("Global CPU or per-CPU stats")) + self.view_data['sort_cpu_times'] = msg_col.format("t", _("Sort processes by CPU times")) + self.view_data['show_hide_help'] = msg_col2.format("h", _("Show/hide this help screen")) + self.view_data['show_hide_diskio'] = msg_col.format("d", _("Show/hide disk I/O stats")) + self.view_data['view_network_io_combination'] = msg_col2.format("T", _("View network I/O as combination")) + self.view_data['show_hide_filesystem'] = msg_col.format("f", _("Show/hide filesystem stats")) + self.view_data['view_cumulative_network'] = msg_col2.format("u", _("View cumulative network I/O")) + self.view_data['show_hide_network'] = msg_col.format("n", _("Show/hide network stats")) + self.view_data['show_hide_filesytem_freespace'] = msg_col2.format("F", _("Show filesystem free space")) + self.view_data['show_hide_sensors'] = msg_col.format("s", _("Show/hide sensors stats")) + self.view_data['generate_graphs'] = msg_col2.format("g", _("Generate graphs for current history")) + self.view_data['show_hide_left_sidebar'] = msg_col.format("2", _("Show/hide left sidebar")) + self.view_data['reset_history'] = msg_col2.format("r", _("Reset history")) + self.view_data['enable_disable_process_stats'] = msg_col.format("z", _("Enable/disable processes stats")) + self.view_data['quit'] = msg_col2.format("q", _("Quit (Esc and Ctrl-C also work)")) + self.view_data['enable_disable_top_extends_stats'] = msg_col.format("e", _("Enable/disable top extended stats")) + self.view_data['enable_disable_short_processname'] = msg_col.format("/", _("Enable/disable short processes name")) + self.view_data['enable_disable_docker'] = msg_col.format("D", _("Enable/disable Docker stats")) + self.view_data['edit_pattern_filter'] = '{0}: {1}'.format("ENTER", _("Edit the process filter pattern")) + + + def get_view_data(self, args=None): + return self.view_data + def msg_curse(self, args=None): """Return the list to display in the curse interface.""" # Init the return message ret = [] - + # Build the string message # Header - msg = '{0} {1}'.format(appname.title(), version) - ret.append(self.curse_add_line(msg, "TITLE")) - msg = _(" with PSutil {0}").format(psutil_version) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['version'], "TITLE")) + ret.append(self.curse_add_line(self.view_data['psutil_version'])) ret.append(self.curse_new_line()) # Configuration file path - try: - msg = '{0}: {1}'.format(_("Configuration file"), self.config.get_loaded_config_file()) - except AttributeError: - pass - else: + if 'configuration_file' in self.view_data: ret.append(self.curse_new_line()) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['configuration_file'])) ret.append(self.curse_new_line()) # Keys - msg_col = ' {0:1} {1:35}' - msg_col2 = ' {0:1} {1:35}' + ret.append(self.curse_new_line()) + ret.append(self.curse_add_line(self.view_data['sort_auto'])) + ret.append(self.curse_add_line(self.view_data['sort_network'])) + ret.append(self.curse_new_line()) + ret.append(self.curse_add_line(self.view_data['sort_cpu'])) + ret.append(self.curse_add_line(self.view_data['show_hide_alert'])) + ret.append(self.curse_new_line()) + + + ret.append(self.curse_add_line(self.view_data['show_mem'])) + ret.append(self.curse_add_line(self.view_data['delete_warning_alerts'])) ret.append(self.curse_new_line()) - msg = msg_col.format("a", _("Sort processes automatically")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("b", _("Bytes or bits for network I/O")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['sort_proc'])) + ret.append(self.curse_add_line(self.view_data['delete_warning_critical_alerts'])) ret.append(self.curse_new_line()) - msg = msg_col.format("c", _("Sort processes by CPU%")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("l", _("Show/hide alert logs")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['sort_io'])) + ret.append(self.curse_add_line(self.view_data['percpu'])) ret.append(self.curse_new_line()) - msg = msg_col.format("m", _("Sort processes by MEM%")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("w", _("Delete warning alerts")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['sort_cpu_times'])) + ret.append(self.curse_add_line(self.view_data['show_hide_help'])) ret.append(self.curse_new_line()) - msg = msg_col.format("p", _("Sort processes by name")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("x", _("Delete warning and critical alerts")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['show_hide_diskio'])) + ret.append(self.curse_add_line(self.view_data['view_network_io_combination'])) ret.append(self.curse_new_line()) - msg = msg_col.format("i", _("Sort processes by I/O rate")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("1", _("Global CPU or per-CPU stats")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['show_hide_filesystem'])) + ret.append(self.curse_add_line(self.view_data['view_cumulative_network'])) ret.append(self.curse_new_line()) - msg = msg_col.format("t", _("Sort processes by CPU times")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("h", _("Show/hide this help screen")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['show_hide_network'])) + ret.append(self.curse_add_line(self.view_data['show_hide_filesytem_freespace'])) ret.append(self.curse_new_line()) - msg = msg_col.format("d", _("Show/hide disk I/O stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("T", _("View network I/O as combination")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['show_hide_sensors'])) + ret.append(self.curse_add_line(self.view_data['generate_graphs'])) ret.append(self.curse_new_line()) - msg = msg_col.format("f", _("Show/hide filesystem stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("u", _("View cumulative network I/O")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['show_hide_left_sidebar'])) + ret.append(self.curse_add_line(self.view_data['reset_history'])) ret.append(self.curse_new_line()) - msg = msg_col.format("n", _("Show/hide network stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("F", _("Show filesystem free space")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['enable_disable_process_stats'])) + ret.append(self.curse_add_line(self.view_data['quit'])) ret.append(self.curse_new_line()) - msg = msg_col.format("s", _("Show/hide sensors stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("g", _("Generate graphs for current history")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['enable_disable_top_extends_stats'])) ret.append(self.curse_new_line()) - msg = msg_col.format("2", _("Show/hide left sidebar")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("r", _("Reset history")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(self.view_data['enable_disable_short_processname'])) ret.append(self.curse_new_line()) - msg = msg_col.format("z", _("Enable/disable processes stats")) - ret.append(self.curse_add_line(msg)) - msg = msg_col2.format("q", _("Quit (Esc and Ctrl-C also work)")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("e", _("Enable/disable top extended stats")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("/", _("Enable/disable short processes name")) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - msg = msg_col.format("D", _("Enable/disable Docker stats")) - ret.append(self.curse_add_line(msg)) + + ret.append(self.curse_add_line(self.view_data['enable_disable_docker'])) ret.append(self.curse_new_line()) ret.append(self.curse_new_line()) - msg = '{0}: {1}'.format("ENTER", _("Edit the process filter pattern")) - ret.append(self.curse_add_line(msg)) + + ret.append(self.curse_add_line(self.view_data['edit_pattern_filter'])) # Return the message with decoration return ret From a5b5648a5e86560336e352b4f89995a371e2c1cc Mon Sep 17 00:00:00 2001 From: Sylvain MOUQUET Date: Sat, 31 Jan 2015 16:22:08 +0100 Subject: [PATCH 077/267] remove help controller --- glances/outputs/static/js/help_controller.js | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 glances/outputs/static/js/help_controller.js diff --git a/glances/outputs/static/js/help_controller.js b/glances/outputs/static/js/help_controller.js deleted file mode 100644 index d2d2f3cc..00000000 --- a/glances/outputs/static/js/help_controller.js +++ /dev/null @@ -1,11 +0,0 @@ - -glancesApp.controller('helpController', [ '$scope', function($scope) { - $scope.message = 'help window' - - $scope.onKeyDown = function($event) { - console.log($event) - if ($event.keyCode == keycodes.h) {//h Show/hide this help screen - window.location = "/" - } - } -}]); From ac2c1ba9e0d51a91dffbd975376e5a1767dbd6cc Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Sun, 1 Feb 2015 22:13:01 +0100 Subject: [PATCH 078/267] First try for the quicklook plugin --- glances/core/glances_main.py | 2 + glances/outputs/glances_bars.py | 13 +++- glances/outputs/glances_curses.py | 61 ++++++++++++---- glances/plugins/glances_cpu.py | 3 +- glances/plugins/glances_quicklook.py | 103 +++++++++++++++++++++++++++ 5 files changed, 164 insertions(+), 18 deletions(-) create mode 100644 glances/plugins/glances_quicklook.py diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index fbc17417..b70ee25b 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -118,6 +118,8 @@ Start the client browser (browser mode):\n\ dest='disable_process', help=_('disable process module')) parser.add_argument('--disable-log', action='store_true', default=False, dest='disable_log', help=_('disable log module')) + parser.add_argument('--disable-quicklook', action='store_true', default=False, + dest='disable_quicklook', help=_('disable quicklook module')) parser.add_argument('--disable-bold', action='store_false', default=True, dest='disable_bold', help=_('disable bold mode in the terminal')) parser.add_argument('--enable-process-extended', action='store_true', default=False, diff --git a/glances/outputs/glances_bars.py b/glances/outputs/glances_bars.py index 729e4a63..c83b7692 100644 --- a/glances/outputs/glances_bars.py +++ b/glances/outputs/glances_bars.py @@ -40,11 +40,18 @@ class Bar(object): """ - def __init__(self, size): + def __init__(self, size, + pre_char='[', + post_char=']', + empty_char='_'): # Bar size self.__size = size # Bar current percent self.__percent = 0 + # Char used for the decoration + self.__pre_char = pre_char + self.__post_char = post_char + self.__empty_char = empty_char def get_size(self): return self.__size @@ -69,5 +76,5 @@ class Bar(object): if frac > 0: ret += curses_bars[int(frac * 8)] whole += 1 - ret += '_' * int(self.get_size() - whole) - return ret + ret += self.__empty_char * int(self.get_size() - whole) + return self.__pre_char + ret + self.__post_char diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index fbd1375a..95ecb688 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -36,7 +36,8 @@ if not is_windows: import curses.panel from curses.textpad import Textbox except ImportError: - logger.critical("Curses module not found. Glances cannot start in standalone mode.") + logger.critical( + "Curses module not found. Glances cannot start in standalone mode.") sys.exit(1) else: from glances.outputs.glances_colorconsole import WCurseLight @@ -472,7 +473,9 @@ class _GlancesCurses(object): # ... and exit return False + # ================================== # Display first line (system+uptime) + # ================================== self.new_line() l = self.get_stats_display_width( stats_system) + self.get_stats_display_width(stats_uptime) + self.space_between_column @@ -480,42 +483,68 @@ class _GlancesCurses(object): self.new_column() self.display_plugin(stats_uptime) + # ======================================================== # Display second line (CPU|PERCPU+LOAD+MEM+SWAP+) - # CPU|PERCPU + # ======================================================== self.init_column() self.new_line() + # Init quicklook + stats_quicklook = {'msgdict': []} + # Start with the mandatory stats: + # CPU | PERCPU if self.args.percpu: - l = self.get_stats_display_width(stats_percpu) + cpu_width = self.get_stats_display_width(stats_percpu) else: - l = self.get_stats_display_width(stats_cpu) - l += self.get_stats_display_width(stats_load) + self.get_stats_display_width( - stats_mem) + self.get_stats_display_width(stats_memswap) - # Space between column - space_number = int(stats_load['msgdict'] != [ - ]) + int(stats_mem['msgdict'] != []) + int(stats_memswap['msgdict'] != []) + cpu_width = self.get_stats_display_width(stats_cpu, without_option=(screen_x < 80)) + l = cpu_width + # MEM & SWAP & LOAD + mem_width = self.get_stats_display_width(stats_mem, without_option=(screen_x < 100)) + l += mem_width + l += self.get_stats_display_width(stats_memswap) + l += self.get_stats_display_width(stats_load) + # Quicklook plugin size is dynamic + if screen_x > 126: + # TO be adapted to the screen... + quicklook_width = 16 + try: + stats_quicklook = stats.get_plugin( + 'quicklook').get_stats_display(max_width=quicklook_width, args=self.args) + except AttributeError as e: + logger.debug("Quicklook plugin not available (%s)" % e) + else: + l += self.get_stats_display_width(stats_quicklook) + # Compute space between column + space_number = int(stats_quicklook['msgdict'] != []) + space_number += int(stats_mem['msgdict'] != []) + space_number += int(stats_memswap['msgdict'] != []) + space_number += int(stats_load['msgdict'] != []) if space_number == 0: space_number = 1 if screen_x > (space_number * self.space_between_column + l): self.space_between_column = int((screen_x - l) / space_number) # Display + # logger.info(">>> Screen X: %s / Stats size: %s / Space size: %s / Nb space: %s" % (screen_x, l, self.space_between_column, space_number)) + self.display_plugin(stats_quicklook) + self.new_column() if self.args.percpu: self.display_plugin(stats_percpu) else: self.display_plugin(stats_cpu, display_optional=(screen_x >= 80)) self.new_column() - self.display_plugin(stats_load) - self.new_column() - self.display_plugin(stats_mem, display_optional=( - screen_x >= (space_number * self.space_between_column + l))) + self.display_plugin(stats_mem, display_optional=(screen_x >= 100)) self.new_column() self.display_plugin(stats_memswap) + self.new_column() + self.display_plugin(stats_load) # Space between column self.space_between_column = 3 # Backup line position self.saved_line = self.next_line + # ============================================================= # Display left sidebar (NETWORK+DISKIO+FS+SENSORS+Current time) + # ============================================================= self.init_column() if (not (self.args.disable_network and self.args.disable_diskio and self.args.disable_fs and self.args.disable_raid @@ -534,6 +563,9 @@ class _GlancesCurses(object): self.new_line() self.display_plugin(stats_now) + # ==================================== + # Display right stats (process and co) + # ==================================== # If space available... if screen_x > 52: # Restore line position @@ -753,7 +785,8 @@ class _GlancesCurses(object): x_max = x # Compute the next Glances column/line position - self.next_column = max(self.next_column, x_max + self.space_between_column) + self.next_column = max( + self.next_column, x_max + self.space_between_column) self.next_line = max(self.next_line, y + self.space_between_line) def erase(self): diff --git a/glances/plugins/glances_cpu.py b/glances/plugins/glances_cpu.py index 44d1c824..da5294cd 100644 --- a/glances/plugins/glances_cpu.py +++ b/glances/plugins/glances_cpu.py @@ -22,6 +22,7 @@ import psutil from glances.plugins.glances_plugin import GlancesPlugin +from glances.core.glances_cpu_percent import cpu_percent # from glances.core.glances_logging import logger # SNMP OID @@ -82,7 +83,7 @@ class Plugin(GlancesPlugin): # nice (UNIX), iowait (Linux), irq (Linux, FreeBSD), steal (Linux 2.6.11+) # The following stats are returned by the API but not displayed in the UI: # softirq (Linux), guest (Linux 2.6.24+), guest_nice (Linux 3.2.0+) - self.stats['total'] = psutil.cpu_percent(interval=0.0) + self.stats['total'] = cpu_percent.get() cpu_times_percent = psutil.cpu_times_percent(interval=0.0) for stat in ['user', 'system', 'idle', 'nice', 'iowait', 'irq', 'softirq', 'steal', 'guest', 'guest_nice']: diff --git a/glances/plugins/glances_quicklook.py b/glances/plugins/glances_quicklook.py new file mode 100644 index 00000000..aee0826e --- /dev/null +++ b/glances/plugins/glances_quicklook.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""Quicklook plugin.""" + +import psutil + +from glances.plugins.glances_plugin import GlancesPlugin +from glances.core.glances_cpu_percent import cpu_percent +from glances.outputs.glances_bars import Bar +from glances.core.glances_logging import logger + + +class Plugin(GlancesPlugin): + + """Glances quicklook plugin. + + 'stats' is a dictionary. + """ + + def __init__(self, args=None): + """Init the quicklook plugin.""" + GlancesPlugin.__init__(self, args=args) + + # We want to display the stat in the curse interface + self.display_curse = True + + # Init stats + self.reset() + + def reset(self): + """Reset/init the stats.""" + self.stats = {} + + @GlancesPlugin._log_result_decorator + def update(self): + """Update quicklook stats using the input method.""" + # Reset stats + self.reset() + + # Grab quicklook stats: CPU, MEM and SWAP + if self.get_input() == 'local': + # Get the latest CPU percent value + self.stats['cpu'] = cpu_percent.get() + # Use the PsUtil lib for the memory (virtual and swap) + self.stats['mem'] = psutil.virtual_memory().percent + self.stats['swap'] = psutil.swap_memory().percent + elif self.get_input() == 'snmp': + # Not available + pass + + # Update the view + self.update_views() + + return self.stats + + def update_views(self): + """Update stats views""" + # Call the father's method + GlancesPlugin.update_views(self) + + def msg_curse(self, args=None, max_width=10): + """Return the list to display in the UI""" + # Init the return message + ret = [] + + # Only process if stats exist... + if self.stats == {} or args.disable_quicklook: + return ret + + # Build the string message + bar = Bar(max_width, pre_char='|', post_char='|', empty_char=' ') + bar.set_percent(self.stats['cpu']) + msg = '{0:>4} {1}'.format(_("CPU"), bar) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + bar.set_percent(self.stats['mem']) + msg = '{0:>4} {1}'.format(_("MEM"), bar) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + bar.set_percent(self.stats['swap']) + msg = '{0:>4} {1}'.format(_("SWAP"), bar) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + + # Return the message with decoration + return ret From c66a7a8fd2607a1d3b4d1143a9f757c134c69fe0 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Tue, 3 Feb 2015 16:40:07 +0100 Subject: [PATCH 079/267] Add common class to access to the CPU --- glances/core/glances_cpu_percent.py | 48 +++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 glances/core/glances_cpu_percent.py diff --git a/glances/core/glances_cpu_percent.py b/glances/core/glances_cpu_percent.py new file mode 100644 index 00000000..88882f45 --- /dev/null +++ b/glances/core/glances_cpu_percent.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""CPU percent stats shared between CPU and Quicklook plugins.""" + +import psutil + +from glances.core.glances_timer import Timer + + +class CpuPercent(object): + """Get and strore the CPU percent""" + + def __init__(self, cached_time=1): + self.cpu_percent = 0 + + # cached_time is the minimum time interval between stats updates + # since last update is passed (will retrieve old cached info instead) + self.timer = Timer(0) + self.cached_time = cached_time + + def get(self): + """Update and/or return the CPU using the PSUtil lib""" + # Never update more than 1 time per cached_time + if self.timer.finished(): + self.cpu_percent = psutil.cpu_percent(interval=0.0) + self.timer = Timer(self.cached_time) + return self.cpu_percent + + +# CpuPercent instance shared between plugins +cpu_percent = CpuPercent() From 596d93aa630aeb991aca52c9bd11d8db40bd4db1 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Tue, 3 Feb 2015 17:07:16 +0100 Subject: [PATCH 080/267] Add limits to the quicklook plugin --- conf/glances-test.conf | 11 ++++++++++ conf/glances.conf | 11 ++++++++++ glances/plugins/glances_quicklook.py | 31 ++++++++++++++++------------ 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/conf/glances-test.conf b/conf/glances-test.conf index 6e4444bf..0d82d4cc 100644 --- a/conf/glances-test.conf +++ b/conf/glances-test.conf @@ -1,3 +1,14 @@ +[quicklook] +cpu_careful=50 +cpu_warning=70 +cpu_critical=90 +mem_careful=50 +mem_warning=70 +mem_critical=90 +swap_careful=50 +swap_warning=70 +swap_critical=90 + [cpu] # Default values if not defined: 50/70/90 user_careful=50 diff --git a/conf/glances.conf b/conf/glances.conf index e42123a5..47a0722a 100644 --- a/conf/glances.conf +++ b/conf/glances.conf @@ -1,3 +1,14 @@ +[quicklook] +cpu_careful=50 +cpu_warning=70 +cpu_critical=90 +mem_careful=50 +mem_warning=70 +mem_critical=90 +swap_careful=50 +swap_warning=70 +swap_critical=90 + [cpu] # Default values if not defined: 50/70/90 user_careful=50 diff --git a/glances/plugins/glances_quicklook.py b/glances/plugins/glances_quicklook.py index aee0826e..1c76167c 100644 --- a/glances/plugins/glances_quicklook.py +++ b/glances/plugins/glances_quicklook.py @@ -75,6 +75,12 @@ class Plugin(GlancesPlugin): # Call the father's method GlancesPlugin.update_views(self) + # Add specifics informations + # Alert only + for key in ['cpu', 'mem', 'swap']: + if key in self.stats: + self.views[key]['decoration'] = self.get_alert(self.stats[key], header=key) + def msg_curse(self, args=None, max_width=10): """Return the list to display in the UI""" # Init the return message @@ -84,20 +90,19 @@ class Plugin(GlancesPlugin): if self.stats == {} or args.disable_quicklook: return ret - # Build the string message + # Define the bar bar = Bar(max_width, pre_char='|', post_char='|', empty_char=' ') - bar.set_percent(self.stats['cpu']) - msg = '{0:>4} {1}'.format(_("CPU"), bar) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - bar.set_percent(self.stats['mem']) - msg = '{0:>4} {1}'.format(_("MEM"), bar) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) - bar.set_percent(self.stats['swap']) - msg = '{0:>4} {1}'.format(_("SWAP"), bar) - ret.append(self.curse_add_line(msg)) - ret.append(self.curse_new_line()) + + # Build the string message + for key in ['cpu', 'mem', 'swap']: + bar.set_percent(self.stats[key]) + msg = '{0:>4} '.format(key.upper()) + ret.append(self.curse_add_line(msg)) + msg = '{0}'.format(bar) + ret.append(self.curse_add_line(msg, + self.get_views(key=key, + option='decoration'))) + ret.append(self.curse_new_line()) # Return the message with decoration return ret From a6a8ccbc03e5a30230f9d6cab69d103aa4ecadfb Mon Sep 17 00:00:00 2001 From: nicolargo Date: Tue, 3 Feb 2015 17:33:22 +0100 Subject: [PATCH 081/267] Update look and feel for the Quicklook plugin --- glances/outputs/glances_curses.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 95ecb688..42e3f885 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -494,18 +494,19 @@ class _GlancesCurses(object): # CPU | PERCPU if self.args.percpu: cpu_width = self.get_stats_display_width(stats_percpu) + quicklook_adapt = 116 else: cpu_width = self.get_stats_display_width(stats_cpu, without_option=(screen_x < 80)) + quicklook_adapt = 108 l = cpu_width # MEM & SWAP & LOAD - mem_width = self.get_stats_display_width(stats_mem, without_option=(screen_x < 100)) - l += mem_width + l += self.get_stats_display_width(stats_mem, without_option=(screen_x < 100)) l += self.get_stats_display_width(stats_memswap) l += self.get_stats_display_width(stats_load) # Quicklook plugin size is dynamic if screen_x > 126: - # TO be adapted to the screen... - quicklook_width = 16 + # Limit the size to be align with the process + quicklook_width = min(screen_x - quicklook_adapt, 87) try: stats_quicklook = stats.get_plugin( 'quicklook').get_stats_display(max_width=quicklook_width, args=self.args) @@ -523,7 +524,6 @@ class _GlancesCurses(object): if screen_x > (space_number * self.space_between_column + l): self.space_between_column = int((screen_x - l) / space_number) # Display - # logger.info(">>> Screen X: %s / Stats size: %s / Space size: %s / Nb space: %s" % (screen_x, l, self.space_between_column, space_number)) self.display_plugin(stats_quicklook) self.new_column() if self.args.percpu: From 6fae96954934768c6cf65143469d3c0ecf14579e Mon Sep 17 00:00:00 2001 From: nicolargo Date: Tue, 3 Feb 2015 17:58:39 +0100 Subject: [PATCH 082/267] Manage disable_quicklook command --- docs/glances-doc.rst | 3 +++ glances/outputs/glances_curses.py | 7 +++++-- glances/plugins/glances_help.py | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 65377b34..4f1d4d2e 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -149,6 +149,7 @@ Command-Line Options --disable-log disable log module --enable-process-extended enable extended stats on top process + --disable-quicklook disable the Quicklook module --enable-history enable the history mode --path-history PATH_HISTORY Set the export path for graph history @@ -263,6 +264,8 @@ The following commands (key pressed) are supported while in Glances: Switch between global CPU and per-CPU stats ``2`` Enable/disable left sidebar +``3`` + Enable/disable the Quicklook module ``/`` Switch between short name / command line (processes name) diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 42e3f885..7d7ca514 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -249,6 +249,9 @@ class _GlancesCurses(object): elif self.pressedkey == ord('2'): # '2' > Enable/disable left sidebar self.args.disable_left_sidebar = not self.args.disable_left_sidebar + elif self.pressedkey == ord('3'): + # '3' > Enable/disable quicklook + self.args.disable_quicklook = not self.args.disable_quicklook elif self.pressedkey == ord('/'): # '/' > Switch between short/long name for processes self.args.process_short_name = not self.args.process_short_name @@ -494,7 +497,7 @@ class _GlancesCurses(object): # CPU | PERCPU if self.args.percpu: cpu_width = self.get_stats_display_width(stats_percpu) - quicklook_adapt = 116 + quicklook_adapt = 114 else: cpu_width = self.get_stats_display_width(stats_cpu, without_option=(screen_x < 80)) quicklook_adapt = 108 @@ -504,7 +507,7 @@ class _GlancesCurses(object): l += self.get_stats_display_width(stats_memswap) l += self.get_stats_display_width(stats_load) # Quicklook plugin size is dynamic - if screen_x > 126: + if screen_x > 126 and not self.args.disable_quicklook: # Limit the size to be align with the process quicklook_width = min(screen_x - quicklook_adapt, 87) try: diff --git a/glances/plugins/glances_help.py b/glances/plugins/glances_help.py index bf1f18f6..4bd895ad 100644 --- a/glances/plugins/glances_help.py +++ b/glances/plugins/glances_help.py @@ -141,7 +141,10 @@ class Plugin(GlancesPlugin): ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) msg = msg_col.format("D", _("Enable/disable Docker stats")) - ret.append(self.curse_add_line(msg)) + ret.append(self.curse_add_line(msg)) + ret.append(self.curse_new_line()) + msg = msg_col.format("3", _("Enable/disable Quicklook plugin")) + ret.append(self.curse_add_line(msg)) ret.append(self.curse_new_line()) From 47785422ff8aacf7c3a3bc080ba1ae63048967ff Mon Sep 17 00:00:00 2001 From: nicolargo Date: Tue, 3 Feb 2015 18:01:52 +0100 Subject: [PATCH 083/267] Update doc for the Quicklook plugin --- docs/glances-doc.rst | 10 ++++++++++ docs/images/quicklook.png | Bin 0 -> 7582 bytes 2 files changed, 10 insertions(+) create mode 100644 docs/images/quicklook.png diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 4f1d4d2e..c8ebe5dd 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -398,6 +398,16 @@ Disconnected: .. image:: images/disconnected.png +QUICKLOOK +--------- + +The quicklook plugin is only display on wide screen and propose a bar view for CPU and memory (virtual and swap). + +.. image:: images/quicklook.png + +*Note*: limit values can be overwritten in the configuration file under +the ``[quicklook]`` section. + CPU --- diff --git a/docs/images/quicklook.png b/docs/images/quicklook.png new file mode 100644 index 0000000000000000000000000000000000000000..9606ba181e3b209cb28588e663fdcbbd94353457 GIT binary patch literal 7582 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 A)&Kwi literal 0 HcmV?d00001 From 79373b27637e29721a18bce33147d8b7c6697956 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Fri, 6 Feb 2015 22:52:58 +0100 Subject: [PATCH 084/267] Correct monitor list, all processes are take into account (issue #507) --- glances/core/glances_monitor_list.py | 18 +++++++++--------- glances/core/glances_processes.py | 13 +++++++++++++ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/glances/core/glances_monitor_list.py b/glances/core/glances_monitor_list.py index 98b0604f..0a64098f 100644 --- a/glances/core/glances_monitor_list.py +++ b/glances/core/glances_monitor_list.py @@ -127,18 +127,11 @@ class MonitorList(object): # Iter upon the monitored list for i in range(0, len(self.get())): # Search monitored processes by a regular expression - processlist = glances_processes.getlist() + processlist = glances_processes.getalllist() monitoredlist = [p for p in processlist if re.search(self.regex(i), p['cmdline']) is not None] self.__monitor_list[i]['count'] = len(monitoredlist) - if self.command(i) is None: - # If there is no command specified in the conf file - # then display CPU and MEM % - self.__monitor_list[i]['result'] = 'CPU: {0:.1f}% | MEM: {1:.1f}%'.format( - sum([p['cpu_percent'] for p in monitoredlist]), - sum([p['memory_percent'] for p in monitoredlist])) - continue - else: + if self.command(i) is not None: # Execute the user command line try: self.__monitor_list[i]['result'] = subprocess.check_output(self.command(i), @@ -148,6 +141,13 @@ class MonitorList(object): except Exception: self.__monitor_list[i]['result'] = _("Cannot execute command") + if self.command(i) is None or self.__monitor_list[i]['result'] == '': + # If there is no command specified in the conf file + # then display CPU and MEM % + self.__monitor_list[i]['result'] = 'CPU: {0:.1f}% | MEM: {1:.1f}%'.format( + sum([p['cpu_percent'] for p in monitoredlist]), + sum([p['memory_percent'] for p in monitoredlist])) + return self.__monitor_list def get(self): diff --git a/glances/core/glances_processes.py b/glances/core/glances_processes.py index 6584a3d0..00c386c3 100644 --- a/glances/core/glances_processes.py +++ b/glances/core/glances_processes.py @@ -243,6 +243,7 @@ class GlancesProcesses(object): # Init stats self.resetsort() + self.allprocesslist = [] self.processlist = [] self.processcount = { 'total': 0, 'running': 0, 'sleeping': 0, 'thread': 0} @@ -627,6 +628,7 @@ class GlancesProcesses(object): # Get all processes stats processloop = processdict.items() first = False + for i in processloop: # Already existing mandatory stats procstat = i[1] @@ -647,6 +649,13 @@ class GlancesProcesses(object): # Next... first = False + # Build the all processes list used by the minitored list + self.allprocesslist = processdict.values() + + # logger.info("*"*120) + # logger.info("ALL=%s" % self.allprocesslist) + # logger.info("DIS=%s" % self.processlist) + # Clean internals caches if timeout is reached if self.cache_timer.finished(): self.username_cache = {} @@ -658,6 +667,10 @@ class GlancesProcesses(object): """Get the number of processes.""" return self.processcount + def getalllist(self): + """Get the allprocesslist.""" + return self.allprocesslist + def getlist(self, sortedby=None): """Get the processlist.""" return self.processlist From d390e03a5cc0bcd40d8aba606eeb76cedee93227 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sat, 7 Feb 2015 14:38:12 +0100 Subject: [PATCH 085/267] Correct duplicated --nable-history in the doc (issue #511) --- docs/glances-doc.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index c8ebe5dd..86d07740 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -150,7 +150,6 @@ Command-Line Options --enable-process-extended enable extended stats on top process --disable-quicklook disable the Quicklook module - --enable-history enable the history mode --path-history PATH_HISTORY Set the export path for graph history --export-csv CSV_FILE From 672ff0d977ae5c31a417093ad2df9dd51ff537ec Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sat, 7 Feb 2015 17:46:28 +0100 Subject: [PATCH 086/267] Grab FAN speed in the Glances sensors plugin (issue #501) --- NEWS | 9 +++- glances/plugins/glances_batpercent.py | 2 +- glances/plugins/glances_sensors.py | 69 ++++++++++++++++++++------- 3 files changed, 60 insertions(+), 20 deletions(-) diff --git a/NEWS b/NEWS index 90d1eddc..60dde6d9 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,14 @@ Glances Version 2.x Version 2.4 =========== - ... +Enhancements and news features: + + * Grab FAN speed in the Glances sensors plugin (issue #501) + +Bugs corrected: + + * Correct monitor list, all processes are take into account (issue #507) + * Correct duplicated --enable-history in the doc (issue #511) Version 2.3 =========== diff --git a/glances/plugins/glances_batpercent.py b/glances/plugins/glances_batpercent.py index e2ced95c..ba6ac7da 100644 --- a/glances/plugins/glances_batpercent.py +++ b/glances/plugins/glances_batpercent.py @@ -94,7 +94,7 @@ class GlancesGrabBat(object): """Update the stats.""" if self.initok: self.bat.update() - self.bat_list = [{'label': _("Battery (%)"), 'value': self.getcapacitypercent()}] + self.bat_list = [{'label': _("Battery"), 'value': self.getcapacitypercent(), 'unit': '%'}] else: self.bat_list = [] diff --git a/glances/plugins/glances_sensors.py b/glances/plugins/glances_sensors.py index a821880f..dcac4bc9 100644 --- a/glances/plugins/glances_sensors.py +++ b/glances/plugins/glances_sensors.py @@ -33,6 +33,11 @@ from glances.plugins.glances_batpercent import Plugin as BatPercentPlugin from glances.plugins.glances_hddtemp import Plugin as HddTempPlugin from glances.plugins.glances_plugin import GlancesPlugin +if is_py3: + SENSOR_TEMP_UNIT = _('°C') +else: + SENSOR_TEMP_UNIT = _('°C ') +SENSOR_FAN_UNIT = _('RPM') class Plugin(GlancesPlugin): @@ -80,11 +85,25 @@ class Plugin(GlancesPlugin): if self.get_input() == 'local': # Update stats using the dedicated lib + self.stats = [] + # Get the temperature try: - self.stats = self.__set_type(self.glancesgrabsensors.get(), - 'temperature_core') + temperature = self.__set_type(self.glancesgrabsensors.get('temperature_core'), + 'temperature_core') except Exception as e: logger.error("Cannot grab sensors temperatures (%s)" % e) + else: + # Append temperature + self.stats.extend(temperature) + # Get the FAN speed + try: + fan_speed = self.__set_type(self.glancesgrabsensors.get('fan_speed'), + 'fan_speed') + except Exception as e: + logger.error("Cannot grab FAN speed (%s)" % e) + else: + # Append FAN speed + self.stats.extend(fan_speed) # Update HDDtemp stats try: hddtemp = self.__set_type(self.hddtemp_plugin.update(), @@ -119,10 +138,11 @@ class Plugin(GlancesPlugin): def __set_type(self, stats, sensor_type): """Set the plugin type. - 3 types of stats is possible in the sensors plugin: - - Core temperature - - HDD temperature - - Battery capacity + 4 types of stats is possible in the sensors plugin: + - Core temperature: 'temperature_core' + - Fan speed: 'fan_speed' + - HDD temperature: 'temperature_hdd' + - Battery capacity: 'battery' """ for i in stats: i.update({'type': sensor_type}) @@ -149,18 +169,13 @@ class Plugin(GlancesPlugin): ret = [] # Only process if stats exist and display plugin enable... - if not self.stats or args.disable_sensors: + if not self.stats or args.disable_sensors or self.stats == []: return ret # Build the string message # Header msg = '{0:18}'.format(_("SENSORS")) ret.append(self.curse_add_line(msg, "TITLE")) - if is_py3: - msg = '{0:>5}'.format(_("°C")) - else: - msg = '{0:>6}'.format(_("°C")) - ret.append(self.curse_add_line(msg)) for i in self.stats: if i['value'] is not None and i['value'] != []: @@ -170,10 +185,12 @@ class Plugin(GlancesPlugin): label = self.has_alias(i['label'].lower()) if label is None: label = i['label'] - label = label[:18] - msg = '{0:18}'.format(label) + try: + msg = "{0:12} {1:3}".format(label[:11], i['unit']) + except KeyError: + msg = '{0:16}'.format(label[:15]) ret.append(self.curse_add_line(msg)) - msg = '{0:>5}'.format(i['value']) + msg = '{0:>7}'.format(i['value']) ret.append(self.curse_add_line( msg, self.get_views(item=i[self.get_key()], key='value', @@ -207,22 +224,38 @@ class GlancesGrabSensors(object): # Reset the list self.reset() - # grab only temperature stats if self.initok: for chip in sensors.iter_detected_chips(): for feature in chip: sensors_current = {} if feature.name.startswith(b'temp'): + # Temperature sensor + sensors_current['unit'] = SENSOR_TEMP_UNIT + elif feature.name.startswith(b'fan'): + # Fan speed sensor + sensors_current['unit'] = SENSOR_FAN_UNIT + if sensors_current != {}: sensors_current['label'] = feature.label sensors_current['value'] = int(feature.get_value()) self.sensors_list.append(sensors_current) return self.sensors_list - def get(self): + def get(self, type='temperature_core'): """Get sensors list.""" self.__update__() - return self.sensors_list + if type == 'temperature_core': + logger.info(type) + ret = [s for s in self.sensors_list if s['unit'] == SENSOR_TEMP_UNIT] + elif type == 'fan_speed': + logger.info(type) + ret = [s for s in self.sensors_list if s['unit'] == SENSOR_FAN_UNIT] + else: + # Unknown type + logger.debug("Unknown sensor type %s" % type) + ret = [] + logger.info(ret) + return ret def quit(self): """End of connection.""" From 8fc5bbf9fef7af5e4bf90d08bd7c5bae0a327815 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sat, 7 Feb 2015 17:52:28 +0100 Subject: [PATCH 087/267] Remove forgotten log message --- glances/plugins/glances_sensors.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/glances/plugins/glances_sensors.py b/glances/plugins/glances_sensors.py index dcac4bc9..b43aaf7e 100644 --- a/glances/plugins/glances_sensors.py +++ b/glances/plugins/glances_sensors.py @@ -245,16 +245,13 @@ class GlancesGrabSensors(object): """Get sensors list.""" self.__update__() if type == 'temperature_core': - logger.info(type) ret = [s for s in self.sensors_list if s['unit'] == SENSOR_TEMP_UNIT] elif type == 'fan_speed': - logger.info(type) ret = [s for s in self.sensors_list if s['unit'] == SENSOR_FAN_UNIT] else: # Unknown type logger.debug("Unknown sensor type %s" % type) ret = [] - logger.info(ret) return ret def quit(self): From e6c646c1e2e9eeba0a59f6819918fbf08f8538ec Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sat, 7 Feb 2015 17:55:37 +0100 Subject: [PATCH 088/267] Extended stats for top process are disabled message is now in DEBUG level --- glances/core/glances_standalone.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/core/glances_standalone.py b/glances/core/glances_standalone.py index 50170a97..d2b277cf 100644 --- a/glances/core/glances_standalone.py +++ b/glances/core/glances_standalone.py @@ -40,7 +40,7 @@ class GlancesStandalone(object): # If process extended stats is disabled by user if not args.enable_process_extended: - logger.info("Extended stats for top process are disabled (default behavior)") + logger.debug("Extended stats for top process are disabled") glances_processes.disable_extended() else: logger.debug("Extended stats for top process are enabled") From 0003e0e50a3ceaa666564ae2adc96730ad12a2dd Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 8 Feb 2015 18:00:35 +0100 Subject: [PATCH 089/267] Allow logical mounts points in the FS plugin (issue #448) --- NEWS | 7 ++++--- conf/glances-test.conf | 2 ++ conf/glances.conf | 2 ++ docs/glances-doc.rst | 7 +++++++ glances/plugins/glances_fs.py | 14 +++++++++++++- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 60dde6d9..c67fa49c 100644 --- a/NEWS +++ b/NEWS @@ -7,12 +7,13 @@ Version 2.4 Enhancements and news features: - * Grab FAN speed in the Glances sensors plugin (issue #501) + * Grab FAN speed in the Glances sensors plugin (issue #501) + * Allow logical mounts points in the FS plugin (issue #448) Bugs corrected: - * Correct monitor list, all processes are take into account (issue #507) - * Correct duplicated --enable-history in the doc (issue #511) + * Correct monitor list, all processes are take into account (issue #507) + * Correct duplicated --enable-history in the doc (issue #511) Version 2.3 =========== diff --git a/conf/glances-test.conf b/conf/glances-test.conf index 0d82d4cc..ff740d5a 100644 --- a/conf/glances-test.conf +++ b/conf/glances-test.conf @@ -101,6 +101,8 @@ careful=50 careful_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert warning=70 critical=90 +# Allow additionnals files types (comma-separated FS type) +allow=zfs [sensors] # Sensors core limits diff --git a/conf/glances.conf b/conf/glances.conf index 47a0722a..9a56d565 100644 --- a/conf/glances.conf +++ b/conf/glances.conf @@ -92,6 +92,8 @@ critical=90 careful=50 warning=70 critical=90 +# Allow additionnals files types (comma-separated FS type) +#allow=zfs [sensors] # Sensors core limits diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 86d07740..656bc4bf 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -530,6 +530,13 @@ If a RAID controller is detected on you system, its status will be displayed: .. image:: images/raid.png +By default, the plugin only display physical devices only (hard disks, USB keys) and ignore all others. To allow others FS type, you had to use the following section in the configuration file: + +:: + + [fs] + allow=zfs,misc + Sensors ------- diff --git a/glances/plugins/glances_fs.py b/glances/plugins/glances_fs.py index 57719ced..d1b6c207 100644 --- a/glances/plugins/glances_fs.py +++ b/glances/plugins/glances_fs.py @@ -105,6 +105,17 @@ class Plugin(GlancesPlugin): except UnicodeDecodeError: return self.stats + # Optionnal hack to allow logicals mounts points (issue #448) + # Ex: Had to put 'allow=zfs' in the [fs] section of the conf file + # to allow zfs monitoring + for fstype in self.get_conf_value('allow'): + try: + fs_stat += [f for f in psutil.disk_partitions(all=True) if f.fstype.find(fstype) >= 0] + except UnicodeDecodeError: + return self.stats + + logger.info(fs_stat) + # Loop over fs for fs in fs_stat: fs_current = {} @@ -182,7 +193,8 @@ class Plugin(GlancesPlugin): # Add specifics informations # Alert for i in self.stats: - self.views[i[self.get_key()]]['used']['decoration'] = self.get_alert(i['used'], max=i['size'], header=i['mnt_point']) + self.views[i[self.get_key()]]['used']['decoration'] = self.get_alert( + i['used'], max=i['size'], header=i['mnt_point']) def msg_curse(self, args=None, max_width=None): """Return the dict to display in the curse interface.""" From 6b131205034c35b25535c39c0d7d4b550a485c10 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 8 Feb 2015 18:07:47 +0100 Subject: [PATCH 090/267] Remove dev log --- glances/plugins/glances_fs.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/glances/plugins/glances_fs.py b/glances/plugins/glances_fs.py index d1b6c207..942a9ad4 100644 --- a/glances/plugins/glances_fs.py +++ b/glances/plugins/glances_fs.py @@ -114,8 +114,6 @@ class Plugin(GlancesPlugin): except UnicodeDecodeError: return self.stats - logger.info(fs_stat) - # Loop over fs for fs in fs_stat: fs_current = {} From f069d8107118f407fa2cffa6fc096dc3d086f339 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Fri, 13 Feb 2015 22:44:55 +0100 Subject: [PATCH 091/267] Improve PEP8 (S1721) --- glances/core/glances_client_browser.py | 2 +- glances/core/glances_logs.py | 2 +- glances/core/glances_processes.py | 50 +++++++++++++++----------- glances/core/glances_webserver.py | 2 +- glances/plugins/glances_processlist.py | 6 ++-- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/glances/core/glances_client_browser.py b/glances/core/glances_client_browser.py index a198399b..d0725c3d 100644 --- a/glances/core/glances_client_browser.py +++ b/glances/core/glances_client_browser.py @@ -84,7 +84,7 @@ class GlancesClientBrowser(object): # Do not retreive stats for statics server # Why ? Because for each offline servers, the timeout will be reached # So ? The curse interface freezes - if (v['type'] == 'STATIC' and v['status'] in ['UNKNOWN', 'SNMP', 'OFFLINE']): + if v['type'] == 'STATIC' and v['status'] in ['UNKNOWN', 'SNMP', 'OFFLINE']: continue # Select the connection mode (with or without password) diff --git a/glances/core/glances_logs.py b/glances/core/glances_logs.py index f2f9a3d4..c795e17b 100644 --- a/glances/core/glances_logs.py +++ b/glances/core/glances_logs.py @@ -195,7 +195,7 @@ class GlancesLogs(object): """ # Create a new clean list clean_logs_list = [] - while (self.len() > 0): + while self.len() > 0: item = self.logs_list.pop() if item[1] < 0 or (not critical and item[2].startswith("CRITICAL")): clean_logs_list.insert(0, item) diff --git a/glances/core/glances_processes.py b/glances/core/glances_processes.py index 00c386c3..a8571cb1 100644 --- a/glances/core/glances_processes.py +++ b/glances/core/glances_processes.py @@ -36,7 +36,8 @@ def is_kernel_thread(proc): """ Return True if proc is a kernel thread, False instead. """ try: return os.getpgid(proc.pid) == 0 - except OSError: # Python >= 3.3 raises ProcessLookupError, which inherits OSError + # Python >= 3.3 raises ProcessLookupError, which inherits OSError + except OSError: # return False is process is dead return False @@ -69,7 +70,8 @@ class ProcessTreeNode(object): if current_node.is_root: lines.append(indent_str) else: - lines.append("%s[%s]" % (indent_str, current_node.process.name())) + lines.append("%s[%s]" % + (indent_str, current_node.process.name())) indent_str = " " * (len(lines[-1]) - 1) children_nodes_to_print = collections.deque() for child in current_node.children: @@ -77,14 +79,15 @@ class ProcessTreeNode(object): tree_char = "└─" else: tree_char = "├─" - children_nodes_to_print.appendleft((indent_str + tree_char, child)) + children_nodes_to_print.appendleft( + (indent_str + tree_char, child)) if children_nodes_to_print: nodes_to_print.append(children_nodes_to_print) return "\n".join(lines) def set_sorting(self, key, reverse): """ Set sorting key or func for user with __iter__ (affects the whole tree from this node). """ - if (self.sort_key != key) or (self.reverse_sorting != reverse): + if self.sort_key != key or self.reverse_sorting != reverse: nodes_to_flag_unsorted = collections.deque([self]) while nodes_to_flag_unsorted: current_node = nodes_to_flag_unsorted.pop() @@ -134,7 +137,8 @@ class ProcessTreeNode(object): if not self.children_sorted: # optimization to avoid sorting twice (once when limiting the maximum processes to grab stats for, # and once before displaying) - self.children.sort(key=self.__class__.get_weight, reverse=self.reverse_sorting) + self.children.sort( + key=self.__class__.get_weight, reverse=self.reverse_sorting) self.children_sorted = True for child in self.children: for n in iter(child): @@ -151,10 +155,11 @@ class ProcessTreeNode(object): if not self.children_sorted: # optimization to avoid sorting twice (once when limiting the maximum processes to grab stats for, # and once before displaying) - self.children.sort(key=self.__class__.get_weight, reverse=self.reverse_sorting) + self.children.sort( + key=self.__class__.get_weight, reverse=self.reverse_sorting) self.children_sorted = True for child in self.children: - if (not exclude_incomplete_stats) or ("time_since_update" in child.stats): + if not exclude_incomplete_stats or "time_since_update" in child.stats: yield child def find_process(self, process): @@ -162,7 +167,7 @@ class ProcessTreeNode(object): nodes_to_search = collections.deque([self]) while nodes_to_search: current_node = nodes_to_search.pop() - if (not current_node.is_root) and (current_node.process.pid == process.pid): + if not current_node.is_root and current_node.process.pid == process.pid: return current_node nodes_to_search.extend(current_node.children) @@ -192,13 +197,16 @@ class ProcessTreeNode(object): # parent is not in tree, add this node later nodes_to_add_last.append(new_node) - # next pass(es): add nodes to their parents if it could not be done in previous pass + # next pass(es): add nodes to their parents if it could not be done in + # previous pass while nodes_to_add_last: - node_to_add = nodes_to_add_last.popleft() # pop from left and append to right to avoid infinite loop + # pop from left and append to right to avoid infinite loop + node_to_add = nodes_to_add_last.popleft() try: parent_process = node_to_add.process.parent() except psutil.NoSuchProcess: - # parent is dead, consider no parent, add this node at the top level + # parent is dead, consider no parent, add this node at the top + # level tree_root.children.append(node_to_add) else: if parent_process is None: @@ -300,9 +308,11 @@ class GlancesProcesses(object): if value is not None: try: self.process_filter_re = re.compile(value) - logger.debug("Process filter regex compilation OK: {0}".format(self.get_process_filter())) + logger.debug( + "Process filter regex compilation OK: {0}".format(self.get_process_filter())) except Exception: - logger.error("Cannot compile process filter regex: {0}".format(value)) + logger.error( + "Cannot compile process filter regex: {0}".format(value)) self.process_filter_re = None else: self.process_filter_re = None @@ -545,8 +555,7 @@ class GlancesProcesses(object): processdict = {} for proc in psutil.process_iter(): # Ignore kernel threads if needed - if (self.no_kernel_threads and (not is_windows) - and is_kernel_thread(proc)): + if self.no_kernel_threads and not is_windows and is_kernel_thread(proc): continue # If self.get_max_processes() is None: Only retreive mandatory stats @@ -562,10 +571,8 @@ class GlancesProcesses(object): # ignore the 'idle' process on Windows and *BSD # ignore the 'kernel_task' process on OS X # waiting for upstream patch from psutil - if (is_bsd and processdict[proc]['name'] == 'idle' or - is_windows and processdict[proc]['name'] == 'System Idle Process' or - is_mac and processdict[proc]['name'] == 'kernel_task'): - continue + if is_bsd and processdict[proc]['name'] == 'idle' or is_windows and processdict[proc]['name'] == 'System Idle Process' or is_mac and processdict[proc]['name'] == 'kernel_task': + continue # Update processcount (global statistics) try: self.processcount[str(proc.status())] += 1 @@ -592,7 +599,7 @@ class GlancesProcesses(object): for i, node in enumerate(self.process_tree): # Only retreive stats for visible processes (get_max_processes) - if (self.get_max_processes() is not None) and (i >= self.get_max_processes()): + if self.get_max_processes() is not None and i >= self.get_max_processes(): break # add standard stats @@ -616,7 +623,8 @@ class GlancesProcesses(object): processiter = sorted( processdict.items(), key=lambda x: x[1][self.getsortkey()], reverse=True) except (KeyError, TypeError) as e: - logger.error("Cannot sort process list by %s (%s)" % (self.getsortkey(), e)) + logger.error( + "Cannot sort process list by %s (%s)" % (self.getsortkey(), e)) logger.error("%s" % str(processdict.items()[0])) # Fallback to all process (issue #423) processloop = processdict.items() diff --git a/glances/core/glances_webserver.py b/glances/core/glances_webserver.py index 39c477cc..49bc4744 100644 --- a/glances/core/glances_webserver.py +++ b/glances/core/glances_webserver.py @@ -34,7 +34,7 @@ class GlancesWebServer(object): # Init stats self.stats = GlancesStats(config) - if (not is_windows) and args.no_kernel_threads: + if not is_windows and args.no_kernel_threads: # Ignore kernel threads in process list glances_processes.disable_kernel_threads() diff --git a/glances/plugins/glances_processlist.py b/glances/plugins/glances_processlist.py index 50aec76b..86999226 100644 --- a/glances/plugins/glances_processlist.py +++ b/glances/plugins/glances_processlist.py @@ -77,13 +77,13 @@ class Plugin(GlancesPlugin): """ Get curses data to display for a process tree. """ ret = [] node_count = 0 - if (not node.is_root) and ((max_node_count is None) or (max_node_count > 0)): + if not node.is_root and ((max_node_count is None) or (max_node_count > 0)): node_data = self.get_process_curses_data(node.stats, False, args) node_count += 1 ret.extend(node_data) for child in node.iter_children(): # stop if we have enough nodes to display - if (max_node_count is not None) and (node_count >= max_node_count): + if max_node_count is not None and node_count >= max_node_count: break if max_node_count is None: @@ -109,7 +109,7 @@ class Plugin(GlancesPlugin): # find process command indices in messages pos = [] for i, m in enumerate(child_data): - if (m["msg"] == "\n") and (m is not child_data[-1]): + if m["msg"] == "\n" and m is not child_data[-1]: # new line pos + 12 # TODO find a way to get rid of hardcoded 12 value pos.append(i + 12) From d34cde590ee4b14a6fd10d27a1efa7475a68ce5a Mon Sep 17 00:00:00 2001 From: nicolargo Date: Fri, 13 Feb 2015 22:49:30 +0100 Subject: [PATCH 092/267] Improve PEP8 (S1066) --- glances/plugins/glances_system.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/glances/plugins/glances_system.py b/glances/plugins/glances_system.py index 217a1d0e..2af66bcf 100644 --- a/glances/plugins/glances_system.py +++ b/glances/plugins/glances_system.py @@ -124,9 +124,8 @@ class Plugin(GlancesPlugin): self.stats['os_version'] = ' '.join(os_version[::2]) # if the python version is 32 bit perhaps the windows operating # system is 64bit - if self.stats['platform'] == '32bit': - if 'PROCESSOR_ARCHITEW6432' in os.environ: - self.stats['platform'] = '64bit' + if self.stats['platform'] == '32bit' and 'PROCESSOR_ARCHITEW6432' in os.environ: + self.stats['platform'] = '64bit' else: self.stats['os_version'] = "" # Add human readable name From a5b6eb9dab397d632e9945437496f3b421585ba5 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 15 Feb 2015 22:17:55 +0100 Subject: [PATCH 093/267] Add a new IP information plugin (issue #509) --- glances/core/glances_main.py | 2 + glances/outputs/glances_curses.py | 32 ++++++-- glances/plugins/glances_ip.py | 120 ++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 glances/plugins/glances_ip.py diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index b70ee25b..eb68f663 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -102,6 +102,8 @@ Start the client browser (browser mode):\n\ # Enable or disable option on startup parser.add_argument('--disable-network', action='store_true', default=False, dest='disable_network', help=_('disable network module')) + parser.add_argument('--disable-ip', action='store_true', default=False, + dest='disable_ip', help=_('disable IP module')) parser.add_argument('--disable-diskio', action='store_true', default=False, dest='disable_diskio', help=_('disable disk I/O module')) parser.add_argument('--disable-fs', action='store_true', default=False, diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 7d7ca514..b5969f0b 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -296,6 +296,9 @@ class _GlancesCurses(object): # 'i' > Sort processes by IO rate (not available on OS X) self.args.process_sorted_by = 'io_counters' glances_processes.setmanualsortkey(self.args.process_sorted_by) + elif self.pressedkey == ord('I'): + # 'I' > Show/hide IP module + self.args.disable_ip = not self.args.disable_ip elif self.pressedkey == ord('l'): # 'l' > Show/hide log messages self.args.disable_log = not self.args.disable_log @@ -430,6 +433,10 @@ class _GlancesCurses(object): stats_memswap = stats.get_plugin('memswap').get_stats_display() stats_network = stats.get_plugin('network').get_stats_display( args=self.args, max_width=plugin_max_width) + try: + stats_ip = stats.get_plugin('ip').get_stats_display(args=self.args) + except AttributeError: + stats_ip = None stats_diskio = stats.get_plugin( 'diskio').get_stats_display(args=self.args) stats_fs = stats.get_plugin('fs').get_stats_display( @@ -479,10 +486,17 @@ class _GlancesCurses(object): # ================================== # Display first line (system+uptime) # ================================== + # Space between column + self.space_between_column = 0 self.new_line() - l = self.get_stats_display_width( - stats_system) + self.get_stats_display_width(stats_uptime) + self.space_between_column - self.display_plugin(stats_system, display_optional=(screen_x >= l)) + l_uptime = self.get_stats_display_width( + stats_system) + self.space_between_column + self.get_stats_display_width(stats_ip) + 3 + self.get_stats_display_width(stats_uptime) + self.display_plugin( + stats_system, display_optional=(screen_x >= l_uptime)) + self.new_column() + self.display_plugin(stats_ip) + # Space between column + self.space_between_column = 3 self.new_column() self.display_plugin(stats_uptime) @@ -499,11 +513,13 @@ class _GlancesCurses(object): cpu_width = self.get_stats_display_width(stats_percpu) quicklook_adapt = 114 else: - cpu_width = self.get_stats_display_width(stats_cpu, without_option=(screen_x < 80)) + cpu_width = self.get_stats_display_width( + stats_cpu, without_option=(screen_x < 80)) quicklook_adapt = 108 l = cpu_width # MEM & SWAP & LOAD - l += self.get_stats_display_width(stats_mem, without_option=(screen_x < 100)) + l += self.get_stats_display_width(stats_mem, + without_option=(screen_x < 100)) l += self.get_stats_display_width(stats_memswap) l += self.get_stats_display_width(stats_load) # Quicklook plugin size is dynamic @@ -545,9 +561,9 @@ class _GlancesCurses(object): # Backup line position self.saved_line = self.next_line - # ============================================================= + # ================================================================== # Display left sidebar (NETWORK+DISKIO+FS+SENSORS+Current time) - # ============================================================= + # ================================================================== self.init_column() if (not (self.args.disable_network and self.args.disable_diskio and self.args.disable_fs and self.args.disable_raid @@ -718,7 +734,7 @@ class _GlancesCurses(object): # Exit if: # - the plugin_stats message is empty # - the display tag = False - if not plugin_stats['msgdict'] or not plugin_stats['display']: + if plugin_stats is None or not plugin_stats['msgdict'] or not plugin_stats['display']: # Exit return 0 diff --git a/glances/plugins/glances_ip.py b/glances/plugins/glances_ip.py new file mode 100644 index 00000000..200723f9 --- /dev/null +++ b/glances/plugins/glances_ip.py @@ -0,0 +1,120 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""IP plugin.""" + +# Import system libs +try: + import netifaces + netifaces_tag = True +except ImportError: + netifaces_tag = False + +# Import Glances libs +from glances.core.glances_logging import logger +from glances.plugins.glances_plugin import GlancesPlugin + + +class Plugin(GlancesPlugin): + + """Glances' IP Plugin. + + stats is a dict + """ + + def __init__(self, args=None): + """Init the plugin.""" + GlancesPlugin.__init__(self, args=args) + + # We want to display the stat in the curse interface + self.display_curse = True + + # Init the stats + self.reset() + + def reset(self): + """Reset/init the stats.""" + self.stats = {} + + @GlancesPlugin._log_result_decorator + def update(self): + """Update IP stats using the input method. + + Stats is dict + """ + # Reset stats + self.reset() + + if self.get_input() == 'local' and netifaces_tag: + # Update stats using the netifaces lib + try: + default_gw = netifaces.gateways()['default'][netifaces.AF_INET] + except KeyError: + logger.debug("Can not grab the default gateway") + else: + try: + self.stats['address'] = netifaces.ifaddresses(default_gw[1])[netifaces.AF_INET][0]['addr'] + self.stats['mask'] = netifaces.ifaddresses(default_gw[1])[netifaces.AF_INET][0]['netmask'] + self.stats['mask_cidr'] = self.ip_to_cidr(self.stats['mask']) + self.stats['gateway'] = netifaces.gateways()['default'][netifaces.AF_INET][0] + except KeyError as e: + logger.debug("Can not grab IP information (%s)".format(e)) + + elif self.get_input() == 'snmp': + # Not implemented yet + pass + + # Update the view + self.update_views() + + return self.stats + + def update_views(self): + """Update stats views""" + # Call the father's method + GlancesPlugin.update_views(self) + + # Add specifics informations + # Optional + for key in self.stats.keys(): + self.views[key]['optional'] = True + + def msg_curse(self, args=None): + """Return the dict to display in the curse interface.""" + + # Init the return message + ret = [] + + # Only process if stats exist and display plugin enable... + if not self.stats or args.disable_ip: + return ret + + # Build the string message + msg = _(' - IP') + ret.append(self.curse_add_line(msg, 'TITLE')) + msg = ' {0:}/{1}'.format(self.stats['address'], self.stats['mask_cidr']) + ret.append(self.curse_add_line(msg)) + + return ret + + @staticmethod + def ip_to_cidr(ip): + # Convert IP address to CIDR + # Exemple: '255.255.255.0' will return 24 + return sum(map(lambda x: int(x) << 8, ip.split('.'))) / 8128 From 183cbce7aa5107617204acbdd4ef41e98d117567 Mon Sep 17 00:00:00 2001 From: Nicolargo Date: Mon, 16 Feb 2015 18:12:16 +0100 Subject: [PATCH 094/267] Enhance Quicklook display --- glances/outputs/glances_curses.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index b5969f0b..cc7f10f6 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -21,6 +21,7 @@ # Import system lib import sys +import re # Import Glances lib from glances.core.glances_globals import is_mac, is_windows @@ -490,7 +491,7 @@ class _GlancesCurses(object): self.space_between_column = 0 self.new_line() l_uptime = self.get_stats_display_width( - stats_system) + self.space_between_column + self.get_stats_display_width(stats_ip) + 3 + self.get_stats_display_width(stats_uptime) + stats_system) + self.space_between_column + self.get_stats_display_width(stats_ip) + 3 + self.get_stats_display_width(stats_uptime) self.display_plugin( stats_system, display_optional=(screen_x >= l_uptime)) self.new_column() @@ -501,7 +502,7 @@ class _GlancesCurses(object): self.display_plugin(stats_uptime) # ======================================================== - # Display second line (CPU|PERCPU+LOAD+MEM+SWAP+) + # Display second line (+CPU|PERCPU+LOAD+MEM+SWAP) # ======================================================== self.init_column() self.new_line() @@ -523,6 +524,7 @@ class _GlancesCurses(object): l += self.get_stats_display_width(stats_memswap) l += self.get_stats_display_width(stats_load) # Quicklook plugin size is dynamic + l_ql = 0 if screen_x > 126 and not self.args.disable_quicklook: # Limit the size to be align with the process quicklook_width = min(screen_x - quicklook_adapt, 87) @@ -532,19 +534,20 @@ class _GlancesCurses(object): except AttributeError as e: logger.debug("Quicklook plugin not available (%s)" % e) else: - l += self.get_stats_display_width(stats_quicklook) + l_ql = self.get_stats_display_width(stats_quicklook) + # Display Quicklook + self.display_plugin(stats_quicklook) + self.new_column() # Compute space between column space_number = int(stats_quicklook['msgdict'] != []) space_number += int(stats_mem['msgdict'] != []) space_number += int(stats_memswap['msgdict'] != []) space_number += int(stats_load['msgdict'] != []) - if space_number == 0: + if space_number < 1: space_number = 1 if screen_x > (space_number * self.space_between_column + l): - self.space_between_column = int((screen_x - l) / space_number) - # Display - self.display_plugin(stats_quicklook) - self.new_column() + self.space_between_column = int((screen_x - l_ql - l) / space_number) + # Display others stats if self.args.percpu: self.display_plugin(stats_percpu) else: @@ -870,11 +873,11 @@ class _GlancesCurses(object): try: if without_option: # Size without options - c = len(max(''.join([(i['msg'] if not i['optional'] else "") + c = len(max(''.join([(re.sub(r'[^\x00-\x7F]+',' ', i['msg']) if not i['optional'] else "") for i in curse_msg['msgdict']]).split('\n'), key=len)) else: # Size with all options - c = len(max(''.join([i['msg'] + c = len(max(''.join([re.sub(r'[^\x00-\x7F]+',' ', i['msg']) for i in curse_msg['msgdict']]).split('\n'), key=len)) except Exception: return 0 From 583e24a50ff2a6f3e9ce4b811005e0d975cc9f02 Mon Sep 17 00:00:00 2001 From: nclsHart Date: Tue, 17 Feb 2015 01:02:20 +0100 Subject: [PATCH 095/267] align plugin content in web ui sidebar --- glances/outputs/static/css/style.css | 29 +++++--------------- glances/outputs/static/html/stats.html | 37 +++++++++++--------------- 2 files changed, 21 insertions(+), 45 deletions(-) diff --git a/glances/outputs/static/css/style.css b/glances/outputs/static/css/style.css index 13c3ab2c..c094ed08 100644 --- a/glances/outputs/static/css/style.css +++ b/glances/outputs/static/css/style.css @@ -8,6 +8,9 @@ body { display: table; width: 100%; } +.table-row-group { + display: table-row-group +} .table-row { display: table-row; } @@ -19,6 +22,9 @@ body { .plugin { margin-bottom: 20px; } +.plugin.table-row-group .table-row:last-child .table-cell { + padding-bottom: 20px; +} .underline{ text-decoration: underline @@ -167,26 +173,3 @@ source : https://github.com/lukehaas/css-loaders box-shadow: 0 2.5em 0 0 #56CA69; } } - -#cpu table tr td:nth-child(3), -#mem table tr td:nth-child(3), -#monitor table tr td:nth-child(3) { - text-align: left; - padding-left: 20px; -} -#processlist table tr td { - text-align: right; -} -#processlist table tr td, -#docker table tr td { - padding: 0px 5px 0px 5px; - white-space: nowrap; -} -#processlist table tr td:nth-child(6), -#processlist table tr td:nth-child(12) { - text-align: left; -} -#docker table tr td:nth-child(2), -#docker table tr td:nth-child(6) { - text-align: left; -} diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index d29db457..fad70465 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -4,7 +4,7 @@
- +
{{help.version}} {{help.psutil_version}}
@@ -69,7 +69,7 @@
{{help.edit_pattern_filter}}
- +
@@ -79,7 +79,7 @@ --> - + {{result["system"].hostname}} 
@@ -272,8 +272,8 @@
-
-
+
+
NETWORK
Rx/s
@@ -286,11 +286,8 @@
{{network.rx | bits}}
{{network.tx | bits}}
-
-
- -
-
+
+
DISK I/O
R/s
@@ -301,10 +298,8 @@
{{disk.read_bytes | bytes}}
{{disk.write_bytes | bytes}}
-
- -
-
+
+
FILE SYS
Used
@@ -317,10 +312,8 @@
{{fs.size | bytes}}
-
- -
-
+
+
SENSORS
°C
@@ -329,8 +322,8 @@
{{sensor.label}}
{{sensor.value}}
-
- + +
+
No warning or critical alert detected Warning or critical alerts (lasts {{result['alert'].length}} entries) From 5464948acc1c0fd4238f6bf4dc0731f14fe5b905 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Fri, 3 Apr 2015 22:03:37 +0200 Subject: [PATCH 153/267] Some code refactoring --- glances/core/glances_client_browser.py | 17 +- glances/core/glances_processes.py | 356 +++++++++++++------------ 2 files changed, 196 insertions(+), 177 deletions(-) diff --git a/glances/core/glances_client_browser.py b/glances/core/glances_client_browser.py index 66f131d2..fd199ac9 100644 --- a/glances/core/glances_client_browser.py +++ b/glances/core/glances_client_browser.py @@ -71,6 +71,15 @@ class GlancesClientBrowser(object): return ret + def __get_uri(self, server): + """Return the URI for the given server dict""" + # Select the connection mode (with or without password) + if server['password'] != "": + return 'http://{0}:{1}@{2}:{3}'.format(server['username'], server['password'], + server['ip'], server['port']) + else: + return 'http://{0}:{1}'.format(server['ip'], server['port']) + def serve_forever(self): """Main client loop.""" while True: @@ -87,12 +96,8 @@ class GlancesClientBrowser(object): if v['type'] == 'STATIC' and v['status'] in ['UNKNOWN', 'SNMP', 'OFFLINE']: continue - # Select the connection mode (with or without password) - if v['password'] != "": - uri = 'http://{0}:{1}@{2}:{3}'.format(v['username'], v['password'], - v['ip'], v['port']) - else: - uri = 'http://{0}:{1}'.format(v['ip'], v['port']) + # Get the server URI + uri = self.__get_uri(v) # Try to connect to the server t = GlancesClientTransport() diff --git a/glances/core/glances_processes.py b/glances/core/glances_processes.py index 7095e213..ba7eef14 100644 --- a/glances/core/glances_processes.py +++ b/glances/core/glances_processes.py @@ -347,191 +347,209 @@ class GlancesProcesses(object): """ Return True if process tree is enabled, False instead. """ return self._enable_tree + def __get_mandatory_stats(self, proc, procstat): + """ + Get mandatory_stats: need for the sorting/filter step + => cpu_percent, memory_percent, io_counters, name, cmdline + """ + procstat['mandatory_stats'] = True + + # Process CPU, MEM percent and name + procstat.update( + proc.as_dict(attrs=['cpu_percent', 'memory_percent', 'name', 'cpu_times'], ad_value='')) + if procstat['cpu_percent'] == '' or procstat['memory_percent'] == '': + # Do not display process if we cannot get the basic + # cpu_percent or memory_percent stats + raise psutil.NoSuchProcess + + # Process command line (cached with internal cache) + try: + self.cmdline_cache[procstat['pid']] + except KeyError: + # Patch for issue #391 + try: + self.cmdline_cache[ + procstat['pid']] = ' '.join(proc.cmdline()) + except (AttributeError, UnicodeDecodeError, psutil.AccessDenied, psutil.NoSuchProcess): + self.cmdline_cache[procstat['pid']] = "" + procstat['cmdline'] = self.cmdline_cache[procstat['pid']] + + # Process IO + # procstat['io_counters'] is a list: + # [read_bytes, write_bytes, read_bytes_old, write_bytes_old, io_tag] + # If io_tag = 0 > Access denied (display "?") + # If io_tag = 1 > No access denied (display the IO rate) + # Note Disk IO stat not available on Mac OS + if not is_mac: + try: + # Get the process IO counters + proc_io = proc.io_counters() + io_new = [proc_io.read_bytes, proc_io.write_bytes] + except (psutil.AccessDenied, psutil.NoSuchProcess, NotImplementedError): + # Access denied to process IO (no root account) + # NoSuchProcess (process die between first and second grab) + # Put 0 in all values (for sort) and io_tag = 0 (for + # display) + procstat['io_counters'] = [0, 0] + [0, 0] + io_tag = 0 + else: + # For IO rate computation + # Append saved IO r/w bytes + try: + procstat['io_counters'] = io_new + \ + self.io_old[procstat['pid']] + except KeyError: + procstat['io_counters'] = io_new + [0, 0] + # then save the IO r/w bytes + self.io_old[procstat['pid']] = io_new + io_tag = 1 + + # Append the IO tag (for display) + procstat['io_counters'] += [io_tag] + + return procstat + + def __get_standard_stats(self, proc, procstat): + """ + Get standard_stats: for all the displayed processes + => username, status, memory_info, cpu_times + """ + procstat['standard_stats'] = True + + # Process username (cached with internal cache) + try: + self.username_cache[procstat['pid']] + except KeyError: + try: + self.username_cache[procstat['pid']] = proc.username() + except psutil.NoSuchProcess: + self.username_cache[procstat['pid']] = "?" + except (KeyError, psutil.AccessDenied): + try: + self.username_cache[procstat['pid']] = proc.uids().real + except (KeyError, AttributeError, psutil.AccessDenied): + self.username_cache[procstat['pid']] = "?" + procstat['username'] = self.username_cache[procstat['pid']] + + # Process status, nice, memory_info and cpu_times + try: + procstat.update( + proc.as_dict(attrs=['status', 'nice', 'memory_info', 'cpu_times'])) + except psutil.NoSuchProcess: + pass + else: + procstat['status'] = str(procstat['status'])[:1].upper() + + return procstat + + def __get_extended_stats(self, proc, procstat): + """ + Get extended_stats: only for top processes (see issue #403) + => connections (UDP/TCP), memory_swap... + """ + procstat['extended_stats'] = True + + # CPU affinity (Windows and Linux only) + try: + procstat.update(proc.as_dict(attrs=['cpu_affinity'])) + except psutil.NoSuchProcess: + pass + except AttributeError: + procstat['cpu_affinity'] = None + # Memory extended + try: + procstat.update(proc.as_dict(attrs=['memory_info_ex'])) + except psutil.NoSuchProcess: + pass + except AttributeError: + procstat['memory_info_ex'] = None + # Number of context switch + try: + procstat.update(proc.as_dict(attrs=['num_ctx_switches'])) + except psutil.NoSuchProcess: + pass + except AttributeError: + procstat['num_ctx_switches'] = None + # Number of file descriptors (Unix only) + try: + procstat.update(proc.as_dict(attrs=['num_fds'])) + except psutil.NoSuchProcess: + pass + except AttributeError: + procstat['num_fds'] = None + # Threads number + try: + procstat.update(proc.as_dict(attrs=['num_threads'])) + except psutil.NoSuchProcess: + pass + except AttributeError: + procstat['num_threads'] = None + + # Number of handles (Windows only) + if is_windows: + try: + procstat.update(proc.as_dict(attrs=['num_handles'])) + except psutil.NoSuchProcess: + pass + else: + procstat['num_handles'] = None + + # SWAP memory (Only on Linux based OS) + # http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/ + if is_linux: + try: + procstat['memory_swap'] = sum( + [v.swap for v in proc.memory_maps()]) + except psutil.NoSuchProcess: + pass + except psutil.AccessDenied: + procstat['memory_swap'] = None + except Exception: + # Add a dirty except to handle the PsUtil issue #413 + procstat['memory_swap'] = None + + # Process network connections (TCP and UDP) + try: + procstat['tcp'] = len(proc.connections(kind="tcp")) + procstat['udp'] = len(proc.connections(kind="udp")) + except Exception: + procstat['tcp'] = None + procstat['udp'] = None + + # IO Nice + # http://pythonhosted.org/psutil/#psutil.Process.ionice + if is_linux or is_windows: + try: + procstat.update(proc.as_dict(attrs=['ionice'])) + except psutil.NoSuchProcess: + pass + else: + procstat['ionice'] = None + + return procstat + def __get_process_stats(self, proc, mandatory_stats=True, standard_stats=True, extended_stats=False): """ Get process stats of the proc processes (proc is returned psutil.process_iter()) - mandatory_stats: need for the sorting/filter step - => cpu_percent, memory_percent, io_counters, name, cmdline - standard_stats: for all the displayed processes - => username, status, memory_info, cpu_times - extended_stats: only for top processes (see issue #403) - => connections (UDP/TCP), memory_swap... """ # Process ID (always) procstat = proc.as_dict(attrs=['pid']) if mandatory_stats: - procstat['mandatory_stats'] = True - - # Process CPU, MEM percent and name try: - procstat.update( - proc.as_dict(attrs=['cpu_percent', 'memory_percent', 'name', 'cpu_times'], ad_value='')) + procstat = self.__get_mandatory_stats(proc, procstat) except psutil.NoSuchProcess: - # Correct issue #414 return None - if procstat['cpu_percent'] == '' or procstat['memory_percent'] == '': - # Do not display process if we cannot get the basic - # cpu_percent or memory_percent stats - return None - - # Process command line (cached with internal cache) - try: - self.cmdline_cache[procstat['pid']] - except KeyError: - # Patch for issue #391 - try: - self.cmdline_cache[ - procstat['pid']] = ' '.join(proc.cmdline()) - except (AttributeError, UnicodeDecodeError, psutil.AccessDenied, psutil.NoSuchProcess): - self.cmdline_cache[procstat['pid']] = "" - procstat['cmdline'] = self.cmdline_cache[procstat['pid']] - - # Process IO - # procstat['io_counters'] is a list: - # [read_bytes, write_bytes, read_bytes_old, write_bytes_old, io_tag] - # If io_tag = 0 > Access denied (display "?") - # If io_tag = 1 > No access denied (display the IO rate) - # Note Disk IO stat not available on Mac OS - if not is_mac: - try: - # Get the process IO counters - proc_io = proc.io_counters() - io_new = [proc_io.read_bytes, proc_io.write_bytes] - except (psutil.AccessDenied, psutil.NoSuchProcess, NotImplementedError): - # Access denied to process IO (no root account) - # NoSuchProcess (process die between first and second grab) - # Put 0 in all values (for sort) and io_tag = 0 (for - # display) - procstat['io_counters'] = [0, 0] + [0, 0] - io_tag = 0 - else: - # For IO rate computation - # Append saved IO r/w bytes - try: - procstat['io_counters'] = io_new + \ - self.io_old[procstat['pid']] - except KeyError: - procstat['io_counters'] = io_new + [0, 0] - # then save the IO r/w bytes - self.io_old[procstat['pid']] = io_new - io_tag = 1 - - # Append the IO tag (for display) - procstat['io_counters'] += [io_tag] if standard_stats: - procstat['standard_stats'] = True - - # Process username (cached with internal cache) - try: - self.username_cache[procstat['pid']] - except KeyError: - try: - self.username_cache[procstat['pid']] = proc.username() - except psutil.NoSuchProcess: - self.username_cache[procstat['pid']] = "?" - except (KeyError, psutil.AccessDenied): - try: - self.username_cache[procstat['pid']] = proc.uids().real - except (KeyError, AttributeError, psutil.AccessDenied): - self.username_cache[procstat['pid']] = "?" - procstat['username'] = self.username_cache[procstat['pid']] - - # Process status, nice, memory_info and cpu_times - try: - procstat.update( - proc.as_dict(attrs=['status', 'nice', 'memory_info', 'cpu_times'])) - except psutil.NoSuchProcess: - pass - else: - procstat['status'] = str(procstat['status'])[:1].upper() + procstat = self.__get_standard_stats(proc, procstat) if extended_stats and not self.disable_extended_tag: - procstat['extended_stats'] = True - - # CPU affinity (Windows and Linux only) - try: - procstat.update(proc.as_dict(attrs=['cpu_affinity'])) - except psutil.NoSuchProcess: - pass - except AttributeError: - procstat['cpu_affinity'] = None - # Memory extended - try: - procstat.update(proc.as_dict(attrs=['memory_info_ex'])) - except psutil.NoSuchProcess: - pass - except AttributeError: - procstat['memory_info_ex'] = None - # Number of context switch - try: - procstat.update(proc.as_dict(attrs=['num_ctx_switches'])) - except psutil.NoSuchProcess: - pass - except AttributeError: - procstat['num_ctx_switches'] = None - # Number of file descriptors (Unix only) - try: - procstat.update(proc.as_dict(attrs=['num_fds'])) - except psutil.NoSuchProcess: - pass - except AttributeError: - procstat['num_fds'] = None - # Threads number - try: - procstat.update(proc.as_dict(attrs=['num_threads'])) - except psutil.NoSuchProcess: - pass - except AttributeError: - procstat['num_threads'] = None - - # Number of handles (Windows only) - if is_windows: - try: - procstat.update(proc.as_dict(attrs=['num_handles'])) - except psutil.NoSuchProcess: - pass - else: - procstat['num_handles'] = None - - # SWAP memory (Only on Linux based OS) - # http://www.cyberciti.biz/faq/linux-which-process-is-using-swap/ - if is_linux: - try: - procstat['memory_swap'] = sum( - [v.swap for v in proc.memory_maps()]) - except psutil.NoSuchProcess: - pass - except psutil.AccessDenied: - procstat['memory_swap'] = None - except Exception: - # Add a dirty except to handle the PsUtil issue #413 - procstat['memory_swap'] = None - - # Process network connections (TCP and UDP) - try: - procstat['tcp'] = len(proc.connections(kind="tcp")) - procstat['udp'] = len(proc.connections(kind="udp")) - except Exception: - procstat['tcp'] = None - procstat['udp'] = None - - # IO Nice - # http://pythonhosted.org/psutil/#psutil.Process.ionice - if is_linux or is_windows: - try: - procstat.update(proc.as_dict(attrs=['ionice'])) - except psutil.NoSuchProcess: - pass - else: - procstat['ionice'] = None - - # logger.debug(procstat) + procstat = self.__get_extended_stats(proc, procstat) return procstat @@ -657,13 +675,9 @@ class GlancesProcesses(object): # Next... first = False - # Build the all processes list used by the minitored list + # Build the all processes list used by the monitored list self.allprocesslist = processdict.values() - # logger.info("*"*120) - # logger.info("ALL=%s" % self.allprocesslist) - # logger.info("DIS=%s" % self.processlist) - # Clean internals caches if timeout is reached if self.cache_timer.finished(): self.username_cache = {} From b4ce3c7fae13b2f8cf378f4b3e4608528858f8c7 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sat, 4 Apr 2015 15:35:47 +0200 Subject: [PATCH 154/267] Correct server mode issue when no network interface is available (issue #528) --- glances/core/glances_autodiscover.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/glances/core/glances_autodiscover.py b/glances/core/glances_autodiscover.py index f9659f08..bc783932 100644 --- a/glances/core/glances_autodiscover.py +++ b/glances/core/glances_autodiscover.py @@ -204,6 +204,10 @@ class GlancesAutoDiscoverClient(object): else: logger.error("Couldn't find the active IP address: netifaces library not found.") + # Correct issue #528 (no network interface available) + if zeroconf_bind_address is None: + zeroconf_bind_address == '0.0.0.0' + logger.info("Announce the Glances server on the LAN (using {0} IP address)".format(zeroconf_bind_address)) print("Announce the Glances server on the LAN (using {0} IP address)".format(zeroconf_bind_address)) From 56f8340950477e3c1540142b5f955642c7d1c11f Mon Sep 17 00:00:00 2001 From: Nicolas Hart Date: Sat, 4 Apr 2015 18:21:32 +0200 Subject: [PATCH 155/267] show docker plugin only if there is a running container --- glances/outputs/static/html/stats.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/outputs/static/html/stats.html b/glances/outputs/static/html/stats.html index 6c9b45ca..71c9b13c 100644 --- a/glances/outputs/static/html/stats.html +++ b/glances/outputs/static/html/stats.html @@ -326,7 +326,7 @@
-
+
No warning or critical alert detected Warning or critical alerts (lasts {{result['alert'].length}} entries) From 98956610760b09dc42111a60005e89d54dc5965a Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 5 Apr 2015 10:27:43 +0200 Subject: [PATCH 156/267] If the Curses application raises an exception, restore the terminal correctly (issue #537) --- glances/core/glances_client.py | 21 ++++++++++++--------- glances/core/glances_client_browser.py | 11 ++++++++++- glances/core/glances_standalone.py | 11 ++++++++++- glances/outputs/glances_curses.py | 6 ++---- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/glances/core/glances_client.py b/glances/core/glances_client.py index 2c35570a..fe86433f 100644 --- a/glances/core/glances_client.py +++ b/glances/core/glances_client.py @@ -219,17 +219,20 @@ class GlancesClient(object): exitkey = False - while True and not exitkey: - # Update the stats - cs_status = self.update() + try: + while True and not exitkey: + # Update the stats + cs_status = self.update() - # Update the screen - exitkey = self.screen.update(self.stats, - cs_status=cs_status, - return_to_browser=self.return_to_browser) + # Update the screen + exitkey = self.screen.update(self.stats, + cs_status=cs_status, + return_to_browser=self.return_to_browser) - # Export stats using export modules - self.stats.export(self.stats) + # Export stats using export modules + self.stats.export(self.stats) + finally: + self.end return self.client_mode diff --git a/glances/core/glances_client_browser.py b/glances/core/glances_client_browser.py index fd199ac9..818b52e8 100644 --- a/glances/core/glances_client_browser.py +++ b/glances/core/glances_client_browser.py @@ -80,7 +80,7 @@ class GlancesClientBrowser(object): else: return 'http://{0}:{1}'.format(server['ip'], server['port']) - def serve_forever(self): + def __serve_forever(self): """Main client loop.""" while True: # No need to update the server list @@ -213,6 +213,15 @@ class GlancesClientBrowser(object): # Return to the browser (no server selected) self.screen.active_server = None + def serve_forever(self): + """Wrapper to the serve_forever function + this function will restore the terminal to a sane state + before re-raising the exception and generating a traceback""" + try: + return self.__serve_forever() + finally: + self.end() + def set_in_selected(self, key, value): """Set the (key, value) for the selected server in the list.""" # Static list then dynamic one diff --git a/glances/core/glances_standalone.py b/glances/core/glances_standalone.py index e4d43034..305adec0 100644 --- a/glances/core/glances_standalone.py +++ b/glances/core/glances_standalone.py @@ -79,7 +79,7 @@ class GlancesStandalone(object): def quiet(self): return self._quiet - def serve_forever(self): + def __serve_forever(self): """Main loop for the CLI.""" while True: # Update system informations @@ -95,6 +95,15 @@ class GlancesStandalone(object): # Export stats using export modules self.stats.export(self.stats) + def serve_forever(self): + """Wrapper to the serve_forever function + this function will restore the terminal to a sane state + before re-raising the exception and generating a traceback""" + try: + return self.__serve_forever() + finally: + self.end() + def end(self): """End of the standalone CLI.""" if not self.quiet: diff --git a/glances/outputs/glances_curses.py b/glances/outputs/glances_curses.py index 6c7c03fd..1df10eca 100644 --- a/glances/outputs/glances_curses.py +++ b/glances/outputs/glances_curses.py @@ -363,10 +363,8 @@ class _GlancesCurses(object): def init_line_column(self): """Init the line and column position for the curses inteface""" - self.line = 0 - self.column = 0 - self.next_line = 0 - self.next_column = 0 + self.init_line() + self.init_column() def init_line(self): """Init the line position for the curses inteface""" From 8a3c2e29bf40411cc7cafba02cc92a295599fbfc Mon Sep 17 00:00:00 2001 From: root Date: Mon, 6 Apr 2015 21:54:46 +0200 Subject: [PATCH 157/267] RabbitMQ export from Sylvain Luce / Katyucha --- conf/glances.conf | 7 +++++++ glances/core/glances_main.py | 1 + 2 files changed, 8 insertions(+) diff --git a/conf/glances.conf b/conf/glances.conf index b1e720a4..8f3ef4ce 100644 --- a/conf/glances.conf +++ b/conf/glances.conf @@ -177,3 +177,10 @@ db=glances host=localhost port=8125 #prefix=glances + +[rabbitmq] +host=localhost +port=5672 +user=glances +password=glances +queue=glances_queue diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index 8bdc7c18..9637df82 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -139,6 +139,7 @@ Start the client browser (browser mode):\n\ dest='export_influxdb', help=_('export stats to an InfluxDB server (need InfluDB lib)')) parser.add_argument('--export-statsd', action='store_true', default=False, dest='export_statsd', help=_('export stats to a Statsd server (need StatsD lib)')) + parser.add_argument('--export-rabbitmq', action='store_true', default=False, dest='export_rabbitmq', help=_('export stats to rabbitmq broker (need pika lib)')) # Client/Server option parser.add_argument('-c', '--client', dest='client', help=_('connect to a Glances server by IPv4/IPv6 address or hostname')) From 553de758d56ff09d29e5167167dc04bba236a13e Mon Sep 17 00:00:00 2001 From: Katyucha Date: Mon, 6 Apr 2015 22:03:11 +0200 Subject: [PATCH 158/267] Add RabbitMQ export for glances --- glances/exports/glances_rabbitmq.py | 104 ++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 glances/exports/glances_rabbitmq.py diff --git a/glances/exports/glances_rabbitmq.py b/glances/exports/glances_rabbitmq.py new file mode 100644 index 00000000..40f9713e --- /dev/null +++ b/glances/exports/glances_rabbitmq.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# Copyright (C) 2015 Nicolargo +# +# Glances is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Glances is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +"""JMS interface class.""" + +# Import sys libs +import sys, socket, datetime +from numbers import Number + +# Import Glances lib +from glances.core.glances_logging import logger +from ConfigParser import NoSectionError, NoOptionError +from glances.exports.glances_export import GlancesExport + +# Import pika for RabbitMQ +import pika + + +class Export(GlancesExport): + + """This class manages the rabbitMQ export module.""" + + def __init__(self, config=None, args=None): + """Init the RabbitMQ export IF.""" + GlancesExport.__init__(self, config=config, args=args) + + # Load the rabbitMQ configuration file + self.rabbitmq_host = None + self.rabbitmq_port = None + self.rabbitmq_user = None + self.rabbitmq_password = None + self.rabbitmq_queue = None + self.hostname = socket.gethostname() + self.export_enable = self.load_conf() + if not self.export_enable: + sys.exit(2) + + # Init the rabbitmq client + self.client = self.init() + + def load_conf(self, section="rabbitmq"): + """Load the rabbitmq configuration in the Glances configuration file""" + if self.config is None: + return False + try: + self.rabbitmq_host = self.config.get_raw_option(section, "host") + self.rabbitmq_port = self.config.get_raw_option(section, "port") + self.rabbitmq_user = self.config.get_raw_option(section, "user") + self.rabbitmq_password = self.config.get_raw_option(section, "password") + self.rabbitmq_queue = self.config.get_raw_option(section, "queue") + except NoSectionError: + logger.critical("No rabbitmq configuration found") + return False + except NoOptionError as e: + logger.critical("Error in the RabbitM configuration (%s)" % e) + return False + else: + logger.debug("Load RabbitMQ from the Glances configuration file") + return True + + def init(self): + """Init the connection to the rabbitmq server""" + if not self.export_enable: + return None + try: + parameters = pika.URLParameters("amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/") + connection = pika.BlockingConnection(parameters) + channel = connection.channel() + return channel + except Exception as e: + logger.critical("Connection to rabbitMQ failed : %s" % e) + return None + + def export(self, name, columns, points): + """Write the points in RabbitMQ""" + if self.client.is_open: + logger.error ("ouvert") + data = "hostname="+self.hostname+", name="+name+", dateinfo="+datetime.datetime.utcnow().isoformat() + for i in range(0, len(columns)): + if not isinstance(points[i], Number): + continue + else: + data += ", "+columns[i]+"="+str(points[i]) + logger.debug(data) + try: + self.client.basic_publish(exchange='', routing_key="glances_queue", body=data) + except Exception as e: + logger.error("Can not export stats to RabbitMQ (%s)" % e) From 26bea1ac91142ad7a0152d7dccd2c246fa7b0bdd Mon Sep 17 00:00:00 2001 From: Katyucha Date: Tue, 7 Apr 2015 06:41:32 +0200 Subject: [PATCH 159/267] Modification pour python 3 --- glances/core/glances_main.py | 2 +- glances/exports/glances_rabbitmq.py | 28 +++++++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index 9637df82..a13a6cc5 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -139,7 +139,7 @@ Start the client browser (browser mode):\n\ dest='export_influxdb', help=_('export stats to an InfluxDB server (need InfluDB lib)')) parser.add_argument('--export-statsd', action='store_true', default=False, dest='export_statsd', help=_('export stats to a Statsd server (need StatsD lib)')) - parser.add_argument('--export-rabbitmq', action='store_true', default=False, dest='export_rabbitmq', help=_('export stats to rabbitmq broker (need pika lib)')) + parser.add_argument('--export-rabbitmq', action='store_true', default=False, dest='export_rabbitmq', help=_('export stats to rabbitmq broker (need pika lib)')) # Client/Server option parser.add_argument('-c', '--client', dest='client', help=_('connect to a Glances server by IPv4/IPv6 address or hostname')) diff --git a/glances/exports/glances_rabbitmq.py b/glances/exports/glances_rabbitmq.py index 40f9713e..f6bef7d7 100644 --- a/glances/exports/glances_rabbitmq.py +++ b/glances/exports/glances_rabbitmq.py @@ -25,7 +25,7 @@ from numbers import Number # Import Glances lib from glances.core.glances_logging import logger -from ConfigParser import NoSectionError, NoOptionError +from configparser import NoSectionError, NoOptionError from glances.exports.glances_export import GlancesExport # Import pika for RabbitMQ @@ -46,7 +46,7 @@ class Export(GlancesExport): self.rabbitmq_user = None self.rabbitmq_password = None self.rabbitmq_queue = None - self.hostname = socket.gethostname() + self.hostname = socket.gethostname() self.export_enable = self.load_conf() if not self.export_enable: sys.exit(2) @@ -79,25 +79,23 @@ class Export(GlancesExport): if not self.export_enable: return None try: - parameters = pika.URLParameters("amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/") - connection = pika.BlockingConnection(parameters) - channel = connection.channel() - return channel - except Exception as e: - logger.critical("Connection to rabbitMQ failed : %s" % e) - return None + parameters = pika.URLParameters("amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/") + connection = pika.BlockingConnection(parameters) + channel = connection.channel() + return channel + except Exception as e: + logger.critical("Connection to rabbitMQ failed : %s" % e) + return None def export(self, name, columns, points): """Write the points in RabbitMQ""" - if self.client.is_open: - logger.error ("ouvert") - data = "hostname="+self.hostname+", name="+name+", dateinfo="+datetime.datetime.utcnow().isoformat() - for i in range(0, len(columns)): + data = "hostname="+self.hostname+", name="+name+", dateinfo="+datetime.datetime.utcnow().isoformat() + for i in range(0, len(columns)): if not isinstance(points[i], Number): continue - else: + else: data += ", "+columns[i]+"="+str(points[i]) - logger.debug(data) + logger.debug(data) try: self.client.basic_publish(exchange='', routing_key="glances_queue", body=data) except Exception as e: From bcc7e49b521b8557baef5f23fa5d012c4f4344bb Mon Sep 17 00:00:00 2001 From: Katyucha Date: Tue, 7 Apr 2015 18:24:21 +0200 Subject: [PATCH 160/267] Update glances_rabbitmq.py --- glances/exports/glances_rabbitmq.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/glances/exports/glances_rabbitmq.py b/glances/exports/glances_rabbitmq.py index f6bef7d7..361aded2 100644 --- a/glances/exports/glances_rabbitmq.py +++ b/glances/exports/glances_rabbitmq.py @@ -25,7 +25,10 @@ from numbers import Number # Import Glances lib from glances.core.glances_logging import logger -from configparser import NoSectionError, NoOptionError +try: + from configparser import NoOptionError, NoSectionError +except ImportError: # Python 2 + from ConfigParser import NoOptionError, NoSectionError from glances.exports.glances_export import GlancesExport # Import pika for RabbitMQ From 36c2f7d8c99407523741c34c415fb8467ea84b5e Mon Sep 17 00:00:00 2001 From: Katyucha Date: Tue, 7 Apr 2015 20:29:03 +0200 Subject: [PATCH 161/267] Update for python3. Need package python3-pika --- docs/glances-doc.rst | 21 +++++++++++++++++++++ glances/exports/glances_rabbitmq.py | 10 +++++++--- man/glances.1 | 6 ++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 343425ab..b280232c 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -159,6 +159,8 @@ Command-Line Options export stats to an InfluxDB server --export-statsd export stats to a Statsd server + --export-rabbitmq + export stats to a RabbitMQ server -c CLIENT, --client CLIENT connect to a Glances server by IPv4/IPv6 address or hostname @@ -824,6 +826,25 @@ Glances will generate stats as: 'glances.load.min1': 0.19, ... +*RabbitMQ* + +You can export statistics to an RabbitMQ server (AMQP Broker). The connection should be defined in the Glances configuration file as following: + +.. code-block:: + + [rabbitmq] + host=localhost + port=5672 + user=glances + password=glances + queue=glances_queue + +and run Glances with: + +.. code-block:: console + + $ glances --export-rabbitmq + APIs Documentations =================== diff --git a/glances/exports/glances_rabbitmq.py b/glances/exports/glances_rabbitmq.py index f6bef7d7..53809307 100644 --- a/glances/exports/glances_rabbitmq.py +++ b/glances/exports/glances_rabbitmq.py @@ -25,7 +25,10 @@ from numbers import Number # Import Glances lib from glances.core.glances_logging import logger -from configparser import NoSectionError, NoOptionError +try: + from configparser import NoOptionError, NoSectionError +except ImportError: # Python 2 + from ConfigParser import NoOptionError, NoSectionError from glances.exports.glances_export import GlancesExport # Import pika for RabbitMQ @@ -78,13 +81,14 @@ class Export(GlancesExport): """Init the connection to the rabbitmq server""" if not self.export_enable: return None + sparameters = "amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/" try: - parameters = pika.URLParameters("amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/") + parameters = pika.URLParameters(sparameters) connection = pika.BlockingConnection(parameters) channel = connection.channel() return channel except Exception as e: - logger.critical("Connection to rabbitMQ failed : %s" % e) + logger.critical("Connection to rabbitMQ failed : %s " % e) return None def export(self, name, columns, points): diff --git a/man/glances.1 b/man/glances.1 index 6f980503..90a2b2d6 100644 --- a/man/glances.1 +++ b/man/glances.1 @@ -80,6 +80,9 @@ export stats to an InfluxDB server .B \-\-export-statsd export stats to a Statsd server .TP +.B \-\-export-rabbitmq +export stats to a RabbitMQ server +.TP .B \-s, \-\-server run Glances in server mode .TP @@ -234,6 +237,9 @@ Monitor local machine and export stats to a CSV file (standalone mode): Monitor local machine and export stats to a InfluxDB server with 5s refresh time (standalone mode): .B $ glances -t 5 --export-influxdb .PP +Monitor local machine and export stats to a RabbitMQ server with 5s refresh time (standalone mode): +.B $ glances -t 5 --export-rabbitmq +.PP Start a Glances server (server mode): .B $ glances -s .PP From 5c0403a05e89469f85c992a726e87ad5365418e6 Mon Sep 17 00:00:00 2001 From: Katyucha Date: Tue, 7 Apr 2015 20:40:08 +0200 Subject: [PATCH 162/267] Update for Pika Python3 --- glances/core/glances_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glances/core/glances_main.py b/glances/core/glances_main.py index a13a6cc5..f75d17bb 100644 --- a/glances/core/glances_main.py +++ b/glances/core/glances_main.py @@ -139,7 +139,7 @@ Start the client browser (browser mode):\n\ dest='export_influxdb', help=_('export stats to an InfluxDB server (need InfluDB lib)')) parser.add_argument('--export-statsd', action='store_true', default=False, dest='export_statsd', help=_('export stats to a Statsd server (need StatsD lib)')) - parser.add_argument('--export-rabbitmq', action='store_true', default=False, dest='export_rabbitmq', help=_('export stats to rabbitmq broker (need pika lib)')) + parser.add_argument('--export-rabbitmq', action='store_true', default=False, dest='export_rabbitmq', help=_('export stats to rabbitmq broker (need pika lib or python3-pika lib)')) # Client/Server option parser.add_argument('-c', '--client', dest='client', help=_('connect to a Glances server by IPv4/IPv6 address or hostname')) From 3b8785968c9cf6be74a3b525b74285668bffad95 Mon Sep 17 00:00:00 2001 From: Katyucha Date: Tue, 7 Apr 2015 20:43:47 +0200 Subject: [PATCH 163/267] RabbitMQ export : delete debug info --- glances/exports/glances_rabbitmq.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/glances/exports/glances_rabbitmq.py b/glances/exports/glances_rabbitmq.py index 53809307..2f2c4468 100644 --- a/glances/exports/glances_rabbitmq.py +++ b/glances/exports/glances_rabbitmq.py @@ -81,9 +81,8 @@ class Export(GlancesExport): """Init the connection to the rabbitmq server""" if not self.export_enable: return None - sparameters = "amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/" try: - parameters = pika.URLParameters(sparameters) + parameters = pika.URLParameters("amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/") connection = pika.BlockingConnection(parameters) channel = connection.channel() return channel From 49a579d6d12308c4ba3dd38f0231a0350993dfba Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 12 Apr 2015 21:40:46 +0200 Subject: [PATCH 164/267] Correct some PEP on the brand new RabbitMQ export module --- NEWS | 3 ++- conf/glances-test.conf | 7 +++++++ conf/glances.conf | 4 ++-- glances/exports/glances_rabbitmq.py | 6 +++--- setup.py | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index 2228d9b4..32e11302 100644 --- a/NEWS +++ b/NEWS @@ -10,7 +10,8 @@ Enhancements and news features: * Grab FAN speed in the Glances sensors plugin (issue #501) * Allow logical mounts points in the FS plugin (issue #448) * Add a --disable-hddtemp to disable HDD temperature module at startup (issue #515) - * Add a quiet mode (-q). Can be usefull if you need a Statsd or Influxdb provider only. + * Add a quiet mode (-q). Can be usefull if you need a Statsd or Influxdb provider only + * Add RabbitMQ export module (issue #540 Thk to @Katyucha) Bugs corrected: diff --git a/conf/glances-test.conf b/conf/glances-test.conf index f68813af..e9369b1c 100644 --- a/conf/glances-test.conf +++ b/conf/glances-test.conf @@ -186,3 +186,10 @@ db=glances host=localhost port=8125 #prefix=glances + +[rabbitmq] +host=localhost +port=5672 +user=guest +password=guest +queue=glances_queue diff --git a/conf/glances.conf b/conf/glances.conf index 8f3ef4ce..69331dde 100644 --- a/conf/glances.conf +++ b/conf/glances.conf @@ -181,6 +181,6 @@ port=8125 [rabbitmq] host=localhost port=5672 -user=glances -password=glances +user=guest +password=guest queue=glances_queue diff --git a/glances/exports/glances_rabbitmq.py b/glances/exports/glances_rabbitmq.py index 2f2c4468..83b7b0be 100644 --- a/glances/exports/glances_rabbitmq.py +++ b/glances/exports/glances_rabbitmq.py @@ -81,7 +81,7 @@ class Export(GlancesExport): """Init the connection to the rabbitmq server""" if not self.export_enable: return None - try: + try: parameters = pika.URLParameters("amqp://"+self.rabbitmq_user+":"+self.rabbitmq_password+"@"+self.rabbitmq_host+":"+self.rabbitmq_port+"/") connection = pika.BlockingConnection(parameters) channel = connection.channel() @@ -97,9 +97,9 @@ class Export(GlancesExport): if not isinstance(points[i], Number): continue else: - data += ", "+columns[i]+"="+str(points[i]) + data += ", " + columns[i] + "=" + str(points[i]) logger.debug(data) try: - self.client.basic_publish(exchange='', routing_key="glances_queue", body=data) + self.client.basic_publish(exchange='', routing_key=self.rabbitmq_queue, body=data) except Exception as e: logger.error("Can not export stats to RabbitMQ (%s)" % e) diff --git a/setup.py b/setup.py index 78192091..72daabda 100755 --- a/setup.py +++ b/setup.py @@ -73,7 +73,7 @@ setup( 'BROWSER': ['zeroconf>=0.16', 'netifaces'], 'RAID': ['pymdstat'], 'DOCKER': ['docker-py'], - 'EXPORT': ['influxdb>=1.0.0', 'statsd'], + 'EXPORT': ['influxdb>=1.0.0', 'statsd', 'pika'], 'ACTION': ['pystache'] }, packages=['glances'], From e288c01ebf34a6efd94ec77334bd973620bc0f9d Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 12 Apr 2015 22:15:23 +0200 Subject: [PATCH 165/267] Update NEWS file --- NEWS | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 32e11302..13703e85 100644 --- a/NEWS +++ b/NEWS @@ -7,16 +7,23 @@ Version 2.4 Enhancements and news features: + * Implement a 'quick look' plugin (issue #505) + * Add a new IP information plugin (issue #509) + * Add RabbitMQ export module (issue #540 Thk to @Katyucha) + * Add a quiet mode (-q), can be useful using with export module * Grab FAN speed in the Glances sensors plugin (issue #501) * Allow logical mounts points in the FS plugin (issue #448) * Add a --disable-hddtemp to disable HDD temperature module at startup (issue #515) - * Add a quiet mode (-q). Can be usefull if you need a Statsd or Influxdb provider only - * Add RabbitMQ export module (issue #540 Thk to @Katyucha) + * Increase alert minimal delay to 6 seconds (issue #522) + * If the Curses application raises an exception, restore the terminal correctly (issue #537) Bugs corrected: - * Correct monitor list, all processes are take into account (issue #507) - * Correct duplicated --enable-history in the doc (issue #511) + * Monitor list, all processes are take into account (issue #507) + * Duplicated --enable-history in the doc (issue #511) + * Sensors title is displayed if no sensors are detected (issue #510) + * Server mode issue when no network interface is available (issue #528) + * DEBUG mode activated by default with Python 2.6 (issue #512) Version 2.3 =========== From 9a8792459663d1a95560df7ea953667fd84faa21 Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Mon, 13 Apr 2015 15:33:33 +0200 Subject: [PATCH 166/267] NEWS: spelling: s/news/new/g --- NEWS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 13703e85..93ebb886 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,7 @@ Glances Version 2.x Version 2.4 =========== -Enhancements and news features: +Enhancements and new features: * Implement a 'quick look' plugin (issue #505) * Add a new IP information plugin (issue #509) @@ -28,7 +28,7 @@ Bugs corrected: Version 2.3 =========== -Enhancements and news features: +Enhancements and new features: * Add the Docker plugin (issue #440) with per container CPU and memory monitoring (issue #490) * Add the RAID plugin (issue #447) @@ -60,7 +60,7 @@ Version 2.2.1 Version 2.2 =========== -Enhancements and news features: +Enhancements and new features: * Add centralized curse interface with a Glances servers list to monitor (issue #418) * Add processes tree view (--tree) (issue #444) @@ -165,7 +165,7 @@ Version 2.0 =========== Glances v2.0 is not a simple upgrade of the version 1.x but a complete code refactoring. - Based on a plugins system, it aims at providing an easy way to add news features. + Based on a plugins system, it aims at providing an easy way to add new features. - Core defines the basics and commons functions. - all stats are grabbed through plugins (see the glances/plugins source folder). - also outputs methods (Curse, Web mode, CSV) are managed as plugins. @@ -371,7 +371,7 @@ Version 1.4.2.1 Version 1.4.2 ============= - * Use the news virtual_memory() and virtual_swap() fct (PsUtil) + * Use the new virtual_memory() and virtual_swap() fct (PsUtil) * Display "Top process" in logs * Minor patch on man page for Debian packaging * Code optimization (less try and except) From 43183615175d44cd9f05a05a24f6297f3853f29b Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Thu, 16 Apr 2015 12:36:16 +0200 Subject: [PATCH 167/267] No more system-wide configuration file by default Support remains there, but no system-wide configuration file will be provided anymore. Default configuration settings are initialized by code which may be overridden by a configuration file. --- NEWS | 6 + conf/glances-test.conf | 195 ----------------------- docs/glances-doc.rst | 42 +++-- glances/core/glances_config.py | 228 ++++++++++++++++++--------- glances/core/glances_globals.py | 3 +- glances/core/glances_monitor_list.py | 13 +- glances/core/glances_staticlist.py | 2 +- glances/exports/glances_influxdb.py | 12 +- glances/exports/glances_rabbitmq.py | 10 +- glances/exports/glances_statsd.py | 6 +- glances/plugins/glances_help.py | 2 +- glances/plugins/glances_monitor.py | 3 +- glances/plugins/glances_plugin.py | 6 +- setup.py | 21 +-- 14 files changed, 206 insertions(+), 343 deletions(-) delete mode 100644 conf/glances-test.conf diff --git a/NEWS b/NEWS index 93ebb886..86322185 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,12 @@ Glances Version 2.x Version 2.4 =========== +Changes: + + * Glances doesn't provide a system-wide configuration file by default anymore. + Just copy it in any of the supported locations. See glances-doc.html for + more information. + Enhancements and new features: * Implement a 'quick look' plugin (issue #505) diff --git a/conf/glances-test.conf b/conf/glances-test.conf deleted file mode 100644 index e9369b1c..00000000 --- a/conf/glances-test.conf +++ /dev/null @@ -1,195 +0,0 @@ -[quicklook] -cpu_careful=50 -cpu_warning=70 -cpu_critical=90 -mem_careful=50 -mem_warning=70 -mem_critical=90 -swap_careful=50 -swap_warning=70 -swap_critical=90 - -[cpu] -# Default values if not defined: 50/70/90 -user_careful=50 -user_warning=70 -user_critical=90 -#user_log=False -user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert -iowait_careful=50 -iowait_warning=70 -iowait_critical=90 -system_careful=50 -system_warning=70 -system_critical=90 -steal_careful=50 -steal_warning=70 -steal_critical=90 -#steal_log=True - -[percpu] -# Default values if not defined: 50/70/90 -user_careful=50 -user_warning=70 -user_critical=90 -iowait_careful=50 -iowait_warning=70 -iowait_critical=90 -system_careful=50 -system_warning=70 -system_critical=90 - -[load] -# Value * number of cores -# Default values if not defined: 0.7/1.0/5.0 per number of cores -# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages -# http://www.linuxjournal.com/article/9001 -careful=0.7 -warning=1.0 -critical=5.0 -#log=False - -[mem] -# Default limits for free RAM memory in % -# Default values if not defined: 50/70/90 -careful=50 -warning=70 -critical=90 - -[memswap] -# Default limits for free swap memory in % -# Default values if not defined: 50/70/90 -careful=50 -warning=70 -critical=90 - -[network] -# Define the list of hidden network interfaces (comma separeted) -hide=lo -# WLAN0 alias name -wlan0_alias=Wireless -# WLAN0 Default limits (in bits per second aka bps) for interface bitrate -wlan0_rx_careful=4000000 -wlan0_rx_warning=5000000 -wlan0_rx_critical=6000000 -wlan0_rx_log=True -wlan0_tx_careful=700000 -wlan0_tx_warning=900000 -wlan0_tx_critical=1000000 -wlan0_tx_log=True - -[diskio] -# Define the list of hidden disks (comma separeted) -hide=sda5 -# Alias for sda1 -#sda1_alias=IntDisk -# SDA1 limits (in bytes per second aka Bps) for interface bitrate -sda2_rx_careful=150000000 -sda2_rx_warning=180000000 -sda2_rx_critical=200000000 -#sda2_rx_log=True -sda2_tx_careful=150000000 -sda2_tx_warning=180000000 -sda2_tx_critical=200000000 -#sda2_tx_log=True - - -[fs] -# Default limits for free filesytem space in % -# Default values if not defined: 50/70/90 -careful=50 -careful_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert -warning=70 -critical=90 -# Allow additionnals files types (comma-separated FS type) -allow=zfs - -[sensors] -# Sensors core limits -# Default values if not defined: 60/70/80 -temperature_core_careful=50 -temperature_core_warning=70 -temperature_core_critical=80 -# Temperatures in °C for hddtemp -# Default values if not defined: 45/52/60 -temperature_hdd_careful=45 -temperature_hdd_warning=52 -temperature_hdd_critical=60 -# Battery % limits -battery_careful=80 -battery_warning=90 -battery_critical=95 -# Sensors alias -temp1_alias=Motherboard 0 -temp2_alias=Motherboard 1 -core 0_alias=CPU Core 0 -core 1_alias=CPU Core 1 - -[processlist] -# Limit values for CPU/MEM per process in % -# Default values if not defined: 50/70/90 -cpu_careful=50 -cpu_warning=70 -cpu_critical=90 -mem_careful=50 -mem_warning=70 -mem_critical=90 - -[monitor] -# Define the list of processes to monitor -# *** This section is optional *** -# The list is composed of items (list_#nb <= 10) -# An item is defined: -# * description: Description of the processes (max 16 chars) -# * regex: regular expression of the processes to monitor -# * command: (optional) full path to shell command/script for extended stat -# Use with caution. Should return a single line string. -# Only execute when at least one process is running -# By default display CPU and MEM % -# Limitation: Do not use in client / server mode -# * countmin: (optional) minimal number of processes -# A warning will be displayed if number of process < count -# * countmax: (optional) maximum number of processes -# A warning will be displayed if number of process > count -#list_1_description=Dropbox -#list_1_regex=.*dropbox.* -#list_1_countmin=1 -#list_1_command=dropbox status | head -1 -list_1_description=Python programs -list_1_regex=.*python.* -list_2_description=Famous Xeyes -list_2_regex=.*xeyes.* -list_2_countmin=1 - -[serverlist] -# Define the static server list -server_1_name=localhost -server_1_alias=My local PC -server_1_port=61209 -server_2_name=localhost -server_2_port=61235 -server_3_name=192.168.0.17 -server_3_alias=Another PC on my network -server_3_port=61209 -server_4_name=pasbon -server_4_port=61237 - -[influxdb] -host=localhost -port=8086 -user=root -password=root -db=glances -#prefix=localhost - -[statsd] -host=localhost -port=8125 -#prefix=glances - -[rabbitmq] -host=localhost -port=5672 -user=guest -password=guest -queue=glances_queue diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index b280232c..6859b001 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -288,15 +288,20 @@ Configuration No configuration file is mandatory to use Glances. -Furthermore a configuration file is needed to set up limits, disks or -network interfaces to hide and/or monitored processes list or to define -alias. +Furthermore a configuration file is needed to modify limit alerts, to +set up monitored processes list, to hide disks or network interfaces or +to define alias. -By default, the configuration file is under: +Location +-------- -:Linux: ``/etc/glances/glances.conf`` -:\*BSD and OS X: ``/usr/local/etc/glances/glances.conf`` -:Windows: ``%APPDATA%\glances\glances.conf`` +You can put the configuration file ``glances.conf`` in the following +locations: + +:Linux: ``~/.config/glances, /etc/glances`` +:\*BSD: ``~/.config/glances, /usr/local/etc/glances`` +:OS X: ``~/Library/Application Support/glances, /usr/local/etc/glances`` +:Windows: ``%APPDATA%\glances`` On Windows XP, the ``%APPDATA%`` path is: @@ -309,24 +314,12 @@ Since Windows Vista and newer versions: :: C:\Users\\AppData\Roaming - or - %userprofile%\AppData\Roaming -You can override the default configuration, located in one of the above -directories on your system, except for Windows. +User-specific options override system-wide options and options given on +the command line override either. -Just copy the ``glances.conf`` file to your ``$XDG_CONFIG_HOME`` directory, -e.g., on Linux: - -.. code-block:: console - - mkdir -p $XDG_CONFIG_HOME/glances - cp /usr/share/doc/glances/glances.conf $XDG_CONFIG_HOME/glances/ - -On OS X, you should copy the configuration file to -``~/Library/Application Support/glances/``. - -*Configuration file description* +Syntax +------ Each plugin and export module can have a section. @@ -348,7 +341,8 @@ Example for the CPU plugin: steal_warning=70 steal_critical=90 -By default Steal CPU time alerts aren't logged. If you want to enable log/alert, just add: +By default the ``steal`` CPU time alerts aren't logged. If you want to +enable log/alert, just add: .. code-block:: diff --git a/glances/core/glances_config.py b/glances/core/glances_config.py index 935f08e3..9ad475a5 100644 --- a/glances/core/glances_config.py +++ b/glances/core/glances_config.py @@ -23,10 +23,10 @@ import os import sys try: - from configparser import RawConfigParser + from configparser import ConfigParser from configparser import NoOptionError except ImportError: # Python 2 - from ConfigParser import RawConfigParser + from ConfigParser import SafeConfigParser as ConfigParser from ConfigParser import NoOptionError # Import Glances lib @@ -37,8 +37,7 @@ from glances.core.glances_globals import ( is_mac, is_py3, is_windows, - sys_prefix, - work_path + sys_prefix ) from glances.core.glances_logging import logger @@ -47,96 +46,177 @@ class Config(object): """This class is used to access/read config file, if it exists. - :param location: the custom path to search for config file - :type location: str or None + :param config_dir: the path to search for config file + :type config_dir: str or None """ - def __init__(self, location=None): - self.location = location - + def __init__(self, config_dir=None): + self.config_dir = config_dir self.config_filename = 'glances.conf' - - self.parser = RawConfigParser() - self._loaded_config_file = None - self.load() - def load(self): - """Load a config file from the list of paths, if it exists.""" - for config_file in self.get_config_paths(): - if os.path.isfile(config_file) and os.path.getsize(config_file) > 0: - try: - if is_py3: - self.parser.read(config_file, encoding='utf-8') - else: - self.parser.read(config_file) - logger.info("Read configuration file '{0}'".format(config_file)) - except UnicodeDecodeError as e: - logger.error("Cannot decode configuration file '{0}': {1}".format(config_file, e)) - sys.exit(1) - # Save the loaded configuration file path (issue #374) - self._loaded_config_file = config_file - break + self.parser = ConfigParser() + self.read() - def get_loaded_config_file(self): - """Return the loaded configuration file""" - return self._loaded_config_file - - def get_config_paths(self): + def config_file_paths(self): r"""Get a list of config file paths. The list is built taking into account of the OS, priority and location. - * running from source: /path/to/glances/conf - * per-user install: ~/.local/etc/glances (Unix-like only) + * custom path: /path/to/glances * Linux: ~/.config/glances, /etc/glances * BSD: ~/.config/glances, /usr/local/etc/glances - * Mac: ~/Library/Application Support/glances, /usr/local/etc/glances + * OS X: ~/Library/Application Support/glances, /usr/local/etc/glances * Windows: %APPDATA%\glances The config file will be searched in the following order of priority: * /path/to/file (via -C flag) - * /path/to/glances/conf - * user's local directory (per-user install settings) * user's home directory (per-user settings) - * {/usr/local,}/etc directory (system-wide settings) + * system-wide directory (system-wide settings) """ paths = [] - conf_path = os.path.realpath( - os.path.join(work_path, '..', '..', 'conf')) - if self.location is not None: - paths.append(self.location) - - if os.path.exists(conf_path): - paths.append(os.path.join(conf_path, self.config_filename)) - - if not is_windows: - paths.append(os.path.join(os.path.expanduser('~/.local'), 'etc', appname, self.config_filename)) + if self.config_dir: + paths.append(self.config_dir) if is_linux or is_bsd: - paths.append(os.path.join( - os.environ.get('XDG_CONFIG_HOME') or os.path.expanduser( - '~/.config'), - appname, self.config_filename)) - if hasattr(sys, 'real_prefix') or is_bsd: + paths.append( + os.path.join(os.environ.get('XDG_CONFIG_HOME') or + os.path.expanduser('~/.config'), + appname, self.config_filename)) + if is_bsd: paths.append( os.path.join(sys.prefix, 'etc', appname, self.config_filename)) else: paths.append( os.path.join('/etc', appname, self.config_filename)) elif is_mac: - paths.append(os.path.join( - os.path.expanduser('~/Library/Application Support/'), - appname, self.config_filename)) - paths.append(os.path.join( - sys_prefix, 'etc', appname, self.config_filename)) + paths.append( + os.path.join(os.path.expanduser('~/Library/Application Support/'), + appname, self.config_filename)) + paths.append( + os.path.join(sys_prefix, 'etc', appname, self.config_filename)) elif is_windows: - paths.append(os.path.join( - os.environ.get('APPDATA'), appname, self.config_filename)) + paths.append( + os.path.join(os.environ.get('APPDATA'), appname, self.config_filename)) return paths + def read(self): + """Read the config file, if it exists. Using defaults otherwise.""" + for config_file in self.config_file_paths(): + if os.path.exists(config_file): + try: + if is_py3: + self.parser.read(config_file, encoding='utf-8') + else: + self.parser.read(config_file) + logger.info("Read configuration file '{0}'".format(config_file)) + except UnicodeDecodeError as err: + logger.error("Cannot decode configuration file '{0}': {1}".format(config_file, err)) + sys.exit(1) + # Save the loaded configuration file path (issue #374) + self._loaded_config_file = config_file + break + + # Quicklook + if not self.parser.has_section('quicklook'): + self.parser.add_section('quicklook') + self.parser.set('quicklook', 'cpu_careful', '50') + self.parser.set('quicklook', 'cpu_warning', '70') + self.parser.set('quicklook', 'cpu_critical', '90') + self.parser.set('quicklook', 'mem_careful', '50') + self.parser.set('quicklook', 'mem_warning', '70') + self.parser.set('quicklook', 'mem_critical', '90') + self.parser.set('quicklook', 'swap_careful', '50') + self.parser.set('quicklook', 'swap_warning', '70') + self.parser.set('quicklook', 'swap_critical', '90') + + # CPU + if not self.parser.has_section('cpu'): + self.parser.add_section('cpu') + self.parser.set('cpu', 'user_careful', '50') + self.parser.set('cpu', 'user_warning', '70') + self.parser.set('cpu', 'user_critical', '90') + self.parser.set('cpu', 'iowait_careful', '50') + self.parser.set('cpu', 'iowait_warning', '70') + self.parser.set('cpu', 'iowait_critical', '90') + self.parser.set('cpu', 'system_careful', '50') + self.parser.set('cpu', 'system_warning', '70') + self.parser.set('cpu', 'system_critical', '90') + self.parser.set('cpu', 'steal_careful', '50') + self.parser.set('cpu', 'steal_warning', '70') + self.parser.set('cpu', 'steal_critical', '90') + + # Per-CPU + if not self.parser.has_section('percpu'): + self.parser.add_section('percpu') + self.parser.set('percpu', 'user_careful', '50') + self.parser.set('percpu', 'user_warning', '70') + self.parser.set('percpu', 'user_critical', '90') + self.parser.set('percpu', 'iowait_careful', '50') + self.parser.set('percpu', 'iowait_warning', '70') + self.parser.set('percpu', 'iowait_critical', '90') + self.parser.set('percpu', 'system_careful', '50') + self.parser.set('percpu', 'system_warning', '70') + self.parser.set('percpu', 'system_critical', '90') + + # Load + if not self.parser.has_section('load'): + self.parser.add_section('load') + self.parser.set('load', 'careful', '0.7') + self.parser.set('load', 'warning', '1.0') + self.parser.set('load', 'critical', '5.0') + + # Mem + if not self.parser.has_section('mem'): + self.parser.add_section('mem') + self.parser.set('mem', 'careful', '50') + self.parser.set('mem', 'warning', '70') + self.parser.set('mem', 'critical', '90') + + # Swap + if not self.parser.has_section('memswap'): + self.parser.add_section('memswap') + self.parser.set('memswap', 'careful', '50') + self.parser.set('memswap', 'warning', '70') + self.parser.set('memswap', 'critical', '90') + + # FS + if not self.parser.has_section('fs'): + self.parser.add_section('fs') + self.parser.set('fs', 'careful', '50') + self.parser.set('fs', 'warning', '70') + self.parser.set('fs', 'critical', '90') + + # Sensors + if not self.parser.has_section('sensors'): + self.parser.add_section('sensors') + self.parser.set('sensors', 'temperature_core_careful', '60') + self.parser.set('sensors', 'temperature_core_warning', '70') + self.parser.set('sensors', 'temperature_core_critical', '80') + self.parser.set('sensors', 'temperature_hdd_careful', '45') + self.parser.set('sensors', 'temperature_hdd_warning', '52') + self.parser.set('sensors', 'temperature_hdd_critical', '60') + self.parser.set('sensors', 'battery_careful', '80') + self.parser.set('sensors', 'battery_warning', '90') + self.parser.set('sensors', 'battery_critical', '95') + + # Process list + if not self.parser.has_section('processlist'): + self.parser.add_section('processlist') + self.parser.set('cpu', 'careful', '50') + self.parser.set('cpu', 'warning', '70') + self.parser.set('cpu', 'critical', '90') + self.parser.set('mem', 'careful', '50') + self.parser.set('mem', 'warning', '70') + self.parser.set('mem', 'critical', '90') + + @property + def loaded_config_file(self): + """Return the loaded configuration file.""" + return self._loaded_config_file + def items(self, section): """Return the items list of a section.""" return self.parser.items(section) @@ -145,20 +225,16 @@ class Config(object): """Return info about the existence of a section.""" return self.parser.has_section(section) - def get_option(self, section, option): + def get_value(self, section, option, default=None): + """Get the value of an option, if it exists.""" + try: + return self.parser.get(section, option) + except NoOptionError: + return default + + def get_float_value(self, section, option, default=0.0): """Get the float value of an option, if it exists.""" try: - value = self.parser.getfloat(section, option) + return self.parser.getfloat(section, option) except NoOptionError: - return - else: - return value - - def get_raw_option(self, section, option): - """Get the raw value of an option, if it exists.""" - try: - value = self.parser.get(section, option) - except NoOptionError: - return - else: - return value + return float(default) diff --git a/glances/core/glances_globals.py b/glances/core/glances_globals.py index 3cf9fa51..8d9003eb 100644 --- a/glances/core/glances_globals.py +++ b/glances/core/glances_globals.py @@ -60,6 +60,5 @@ def get_locale_path(paths): # i18n gettext_domain = appname i18n_path = os.path.realpath(os.path.join(work_path, '..', '..', 'i18n')) -user_i18n_path = os.path.join(os.path.expanduser('~/.local'), 'share', 'locale') sys_i18n_path = os.path.join(sys_prefix, 'share', 'locale') -locale_dir = get_locale_path([i18n_path, user_i18n_path, sys_i18n_path]) +locale_dir = get_locale_path([i18n_path, sys_i18n_path]) diff --git a/glances/core/glances_monitor_list.py b/glances/core/glances_monitor_list.py index 04ab35c1..90419eb4 100644 --- a/glances/core/glances_monitor_list.py +++ b/glances/core/glances_monitor_list.py @@ -49,11 +49,12 @@ class MonitorList(object): __monitor_list = [] def __init__(self, config): - """Init the monitoring list from the configuration file.""" + """Init the monitoring list from the configuration file, if it exists.""" self.config = config if self.config is not None and self.config.has_section('monitor'): # Process monitoring list + logger.debug("Monitor list configuration detected") self.__set_monitor_list('monitor', 'list') else: self.__monitor_list = [] @@ -67,11 +68,11 @@ class MonitorList(object): value = {} key = "list_" + str(l) + "_" try: - description = self.config.get_raw_option(section, key + "description") - regex = self.config.get_raw_option(section, key + "regex") - command = self.config.get_raw_option(section, key + "command") - countmin = self.config.get_raw_option(section, key + "countmin") - countmax = self.config.get_raw_option(section, key + "countmax") + description = self.config.get_value(section, key + 'description') + regex = self.config.get_value(section, key + 'regex') + command = self.config.get_value(section, key + 'command') + countmin = self.config.get_value(section, key + 'countmin') + countmax = self.config.get_value(section, key + 'countmax') except Exception as e: logger.error("Cannot read monitored list: {0}".format(e)) else: diff --git a/glances/core/glances_staticlist.py b/glances/core/glances_staticlist.py index 1ff942a7..58db7eb9 100644 --- a/glances/core/glances_staticlist.py +++ b/glances/core/glances_staticlist.py @@ -54,7 +54,7 @@ class GlancesStaticServer(object): postfix = 'server_%s_' % str(i) # Read the server name (mandatory) for s in ['name', 'port', 'alias']: - new_server[s] = config.get_raw_option(self._section, '%s%s' % (postfix, s)) + new_server[s] = config.get_value(self._section, '%s%s' % (postfix, s)) if new_server['name'] is not None: # Manage optionnal information if new_server['port'] is None: diff --git a/glances/exports/glances_influxdb.py b/glances/exports/glances_influxdb.py index 416872ec..4b0ab60b 100644 --- a/glances/exports/glances_influxdb.py +++ b/glances/exports/glances_influxdb.py @@ -61,11 +61,11 @@ class Export(GlancesExport): if self.config is None: return False try: - self.host = self.config.get_raw_option(section, "host") - self.port = self.config.get_raw_option(section, "port") - self.user = self.config.get_raw_option(section, "user") - self.password = self.config.get_raw_option(section, "password") - self.db = self.config.get_raw_option(section, "db") + self.host = self.config.get_value(section, 'host') + self.port = self.config.get_value(section, 'port') + self.user = self.config.get_value(section, 'user') + self.password = self.config.get_value(section, 'password') + self.db = self.config.get_value(section, 'db') except NoSectionError: logger.critical("No InfluxDB configuration found") return False @@ -76,7 +76,7 @@ class Export(GlancesExport): logger.debug("Load InfluxDB from the Glances configuration file") # Prefix is optional try: - self.prefix = self.config.get_raw_option(section, "prefix") + self.prefix = self.config.get_value(section, 'prefix') except NoOptionError as e: pass return True diff --git a/glances/exports/glances_rabbitmq.py b/glances/exports/glances_rabbitmq.py index 83b7b0be..c4280080 100644 --- a/glances/exports/glances_rabbitmq.py +++ b/glances/exports/glances_rabbitmq.py @@ -62,11 +62,11 @@ class Export(GlancesExport): if self.config is None: return False try: - self.rabbitmq_host = self.config.get_raw_option(section, "host") - self.rabbitmq_port = self.config.get_raw_option(section, "port") - self.rabbitmq_user = self.config.get_raw_option(section, "user") - self.rabbitmq_password = self.config.get_raw_option(section, "password") - self.rabbitmq_queue = self.config.get_raw_option(section, "queue") + self.rabbitmq_host = self.config.get_value(section, 'host') + self.rabbitmq_port = self.config.get_value(section, 'port') + self.rabbitmq_user = self.config.get_value(section, 'user') + self.rabbitmq_password = self.config.get_value(section, 'password') + self.rabbitmq_queue = self.config.get_value(section, 'queue') except NoSectionError: logger.critical("No rabbitmq configuration found") return False diff --git a/glances/exports/glances_statsd.py b/glances/exports/glances_statsd.py index 7a29548e..c83fc254 100644 --- a/glances/exports/glances_statsd.py +++ b/glances/exports/glances_statsd.py @@ -64,8 +64,8 @@ class Export(GlancesExport): if self.config is None: return False try: - self.host = self.config.get_raw_option(section, "host") - self.port = self.config.get_raw_option(section, "port") + self.host = self.config.get_value(section, 'host') + self.port = self.config.get_value(section, 'port') except NoSectionError: logger.critical("No Statsd configuration found") return False @@ -76,7 +76,7 @@ class Export(GlancesExport): logger.debug("Load Statsd from the Glances configuration file") # Prefix is optional try: - self.prefix = self.config.get_raw_option(section, "prefix") + self.prefix = self.config.get_value(section, 'prefix') except NoOptionError as e: pass return True diff --git a/glances/plugins/glances_help.py b/glances/plugins/glances_help.py index 4bd895ad..0144b123 100644 --- a/glances/plugins/glances_help.py +++ b/glances/plugins/glances_help.py @@ -61,7 +61,7 @@ class Plugin(GlancesPlugin): # Configuration file path try: - msg = '{0}: {1}'.format(_("Configuration file"), self.config.get_loaded_config_file()) + msg = '{0}: {1}'.format(_("Configuration file"), self.config.loaded_config_file) except AttributeError: pass else: diff --git a/glances/plugins/glances_monitor.py b/glances/plugins/glances_monitor.py index 2213ca67..4bb64714 100644 --- a/glances/plugins/glances_monitor.py +++ b/glances/plugins/glances_monitor.py @@ -41,8 +41,7 @@ class Plugin(GlancesPlugin): self.stats = [] def load_limits(self, config): - """Load the monitored list from the conf file.""" - logger.debug("Monitor plugin configuration detected in the configuration file") + """Load the monitored list from the config file, if it exists.""" self.glances_monitors = glancesMonitorList(config) def update(self): diff --git a/glances/plugins/glances_plugin.py b/glances/plugins/glances_plugin.py index 205df2d9..ffd4b85b 100644 --- a/glances/plugins/glances_plugin.py +++ b/glances/plugins/glances_plugin.py @@ -327,16 +327,16 @@ class GlancesPlugin(object): return item_views[key][option] def load_limits(self, config): - """Load the limits from the configuration file.""" + """Load limits from the configuration file, if it exists.""" if (hasattr(config, 'has_section') and config.has_section(self.plugin_name)): for level, v in config.items(self.plugin_name): # Read limits limit = '_'.join([self.plugin_name, level]) try: - self._limits[limit] = config.get_option(self.plugin_name, level) + self._limits[limit] = config.get_float_value(self.plugin_name, level) except ValueError: - self._limits[limit] = config.get_raw_option(self.plugin_name, level).split(",") + self._limits[limit] = config.get_value(self.plugin_name, level).split(",") logger.debug("Load limit: {0} = {1}".format(limit, self._limits[limit])) @property diff --git a/setup.py b/setup.py index 72daabda..d41078f9 100755 --- a/setup.py +++ b/setup.py @@ -6,12 +6,12 @@ import sys from setuptools import setup -is_chroot = os.stat('/').st_ino != 2 if sys.version_info < (2, 6) or (3, 0) <= sys.version_info < (3, 3): print('Glances requires at least Python 2.6 or 3.3 to run.') sys.exit(1) + def get_data_files(): data_files = [ ('share/doc/glances', ['AUTHORS', 'COPYING', 'NEWS', 'README.rst', @@ -20,25 +20,8 @@ def get_data_files(): ('share/man/man1', ['man/glances.1']) ] - if hasattr(sys, 'real_prefix'): # virtualenv - conf_path = os.path.join(sys.prefix, 'etc', 'glances') - elif os.name == 'posix' and (os.getuid() == 0 or is_chroot): - # Unix-like + root privileges/chroot environment - if 'bsd' in sys.platform: - conf_path = os.path.join(sys.prefix, 'etc', 'glances') - elif 'linux' in sys.platform: - conf_path = os.path.join('/etc', 'glances') - elif 'darwin' in sys.platform: - conf_path = os.path.join('/usr/local', 'etc', 'glances') - elif 'win32' in sys.platform: # windows - conf_path = os.path.join(os.environ.get('APPDATA'), 'glances') - else: # Unix-like + per-user install - conf_path = os.path.join('etc', 'glances') - data_files.append((conf_path, ['conf/glances.conf'])) - for mo in glob.glob('i18n/*/LC_MESSAGES/*.mo'): - data_files.append( - (os.path.dirname(mo).replace('i18n/', 'share/locale/'), [mo])) + data_files.append((os.path.dirname(mo).replace('i18n/', 'share/locale/'), [mo])) return data_files From 4d07670c8d8976b7a2a5b584c5237b6b8e3fb683 Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Thu, 16 Apr 2015 15:38:16 +0200 Subject: [PATCH 168/267] glances-doc.rst: fix broken target name --- docs/glances-doc.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index 6859b001..a8b2831a 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -868,4 +868,4 @@ Feel free to contribute ! .. _XML-RPC server: http://docs.python.org/2/library/simplexmlrpcserver.html .. _RESTFUL-JSON: http://jsonapi.org/ .. _forum: https://groups.google.com/forum/?hl=en#!forum/glances-users -.. _forum: https://github.com/nicolargo/glances/blob/master/conf/glances-grafana.json +.. _dashboard: https://github.com/nicolargo/glances/blob/master/conf/glances-grafana.json From 1d509f471e3373e3c44d407d2a6488c294a95b3a Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Thu, 16 Apr 2015 16:36:16 +0200 Subject: [PATCH 169/267] glances-doc.rst: wrap source lines to 72 characters (where possible) - Fix various typos and misspelling - TOC improvements --- docs/glances-doc.rst | 103 +++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 34 deletions(-) diff --git a/docs/glances-doc.rst b/docs/glances-doc.rst index a8b2831a..8b4f2770 100644 --- a/docs/glances-doc.rst +++ b/docs/glances-doc.rst @@ -67,7 +67,13 @@ and on the client: where ``@server`` is the IP address or hostname of the server. -Glances can centralize available Glances servers using the ``--browser`` option. The server list can be staticaly defined in the Glances configuration file (section [serverlist]). Glances can also detect and display all Glances servers available on you network (auto discover mode is based on the the Zeroconf protocol only available on GNU/Linux and Mac OS X): +Glances can centralize available Glances servers using the ``--browser`` +option. The server list can be statically defined in the Glances +configuration file (section ``[serverlist]``). + +Glances can also detect and display all Glances servers available on your +network (auto-discover mode is based on the the ``zeroconf`` protocol, +which is only available on GNU/Linux and OS X): .. code-block:: console @@ -97,7 +103,7 @@ client, the latter will try to grab stats using the ``SNMP`` protocol: client$ glances -c @snmpserver -Note: Stats grabbed by SNMP request are limited (operating system dependent). +*Note*: stats grabbed by SNMP request are limited (OS dependent). Web Server Mode --------------- @@ -117,7 +123,12 @@ and on the client enter the following URL in your favorite web browser: where ``@server`` is the IP address or hostname of the server. -To change the refresh rate of the page, just add the period in seconds between refreshes at the end of the URL, ie. to refresh every 10s, use ``http://@server:61208/10``. +To change the refresh rate of the page, just add the period in seconds +at the end of the URL. For example, to refresh the page every 10s: + +:: + + http://@server:61208/10 The Glances web interface follows responsive web design principles. @@ -125,7 +136,6 @@ Screenshot from Chrome on Android .. image:: images/screenshot-web2.png - Command Reference ================= @@ -272,7 +282,8 @@ The following commands (key pressed) are supported while in Glances: ``/`` Switch between short name / command line (processes name) -In the Glances client browser (accessible through the --browser command line argument): +In the Glances client browser (accessible through the ``--browser`` +command line argument): ``ENTER`` Run Glances client to the selected server @@ -357,10 +368,11 @@ can ben logged using the -d option on the command line. By default, the log file is under: -:Linux, \*BSD and OS X: ``/tmp/glances.log`` +:Linux, \*BSD, OS X: ``/tmp/glances.log`` :Windows: ``%APPDATA%\Local\temp\glances.log`` -If glances.log is not writable, a new file will be created and returned to the user console. +If ``glances.log`` is not writable, a new file will be created and +returned to the user console. Anatomy Of The Application ========================== @@ -398,7 +410,8 @@ Disconnected: QuickLook --------- -The quicklook plugin is only display on wide screen and propose a bar view for CPU and memory (virtual and swap). +The ``quicklook`` plugin is only displayed on wide screen and propose a +bar view for CPU and memory (virtual and swap). .. image:: images/quicklook.png @@ -528,7 +541,9 @@ If a RAID controller is detected on you system, its status will be displayed: .. image:: images/raid.png -By default, the plugin only display physical devices only (hard disks, USB keys) and ignore all others. To allow others FS type, you had to use the following section in the configuration file: +By default, the plugin only displays physical devices (hard disks, USB +keys) and ignore all others. To allow others FS type, you have to use the +following section in the configuration file: :: @@ -550,8 +565,8 @@ temperature only. There is no alert on this information. -*Note*: limit values and sensors alias names can be defined in the configuration -file under the ``[sensors]`` section. +*Note*: limit values and sensors alias names can be defined in the +configuration file under the ``[sensors]`` section. Processes List -------------- @@ -628,7 +643,8 @@ Process status legend: ``Z`` Zombie -In standalone mode, additionals informations are provided for the top process: +In standalone mode, additional informations are provided for the top +process: .. image:: images/processlist-top.png @@ -637,7 +653,8 @@ In standalone mode, additionals informations are provided for the top process: * Open threads, files and network sessions (TCP and UDP) * IO nice level -The extended stats feature could be enabled using the --enable-process-extended option (command line) or the ``e`` key (curses interface). +The extended stats feature could be enabled using the ``--enable-process-extended`` +option (command line) or the ``e`` key (curses interface). *Note*: limit values can be overwritten in the configuration file under the ``[process]`` section. @@ -725,16 +742,19 @@ Each alert message displays the following information: Docker ------ -If you use Docker, Glances can help you to monitor your container. Glances uses the Docker API through the Docker-Py library. +If you use ``Docker``, Glances can help you to monitor your container. +Glances uses the Docker API through the ``docker-py`` library. .. image:: images/docker.png Actions ------- -Glances can trigger actions on events. +Glances can trigger actions on events. -By action, we mean all shell command line. For example, if you want to execute the foo.py script if the last 5 minutes load are critical then add the action line to the Glances configuration file: +By ``action``, we mean all shell command line. For example, if you want +to execute the ``foo.py`` script if the last 5 minutes load are critical +then add the action line to the Glances configuration file: .. code-block:: @@ -742,7 +762,9 @@ By action, we mean all shell command line. For example, if you want to execute t critical=5.0 critical_action=python /path/to/foo.py -All the stats are available in the command line through the use of the {{mustache}} syntax. Another example to create a log file containing used vs total disk space if a space trigger warning is reached: +All the stats are available in the command line through the use of the +``{{mustache}}`` syntax. Another example would be to create a log file +containing used vs total disk space if a space trigger warning is reached: .. code-block:: @@ -750,13 +772,15 @@ All the stats are available in the command line through the use of the {{mustach warning=70 warning_action=echo {{mnt_point}} {{used}}/{{size}} > /tmp/fs.alert -*Note*: You can use all the stats for the current plugin (see https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for the stats list) - +*Note*: you can use all the stats for the current plugin (see +https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to for +the stats list) Gateway to others services ========================== -*CSV* +CSV +--- It is possible to export statistics to CSV file. @@ -768,9 +792,12 @@ CSV file description: - Stats description (first line) - Stats (others lines) -*InfluxDB* +InfluxDB +-------- -You can export statistics to an InfluxDB server (time series server). The connection should be defined in the Glances configuration file as following: +You can export statistics to an ``InfluxDB`` server (time series server). +The connection should be defined in the Glances configuration file as +following: .. code-block:: @@ -787,13 +814,17 @@ and run Glances with: $ glances --export-influxdb -For Grafana users', Glances provides a dedicated `dashboard`_. Just import the file in your Grafana Web interface. +For Grafana users, Glances provides a dedicated `dashboard`_. Just import +the file in your ``Grafana`` web interface. .. image:: images/grafana.png -*Statsd* +Statsd +------ -You can export statistics to a Statsd server (welcome to Graphite !). The connection should be defined in the Glances configuration file as following: +You can export statistics to a ``Statsd`` server (welcome to Graphite!). +The connection should be defined in the Glances configuration file as +following: .. code-block:: @@ -802,7 +833,7 @@ You can export statistics to a Statsd server (welcome to Graphite !). The connec port=8125 prefix=glances -Note: the prefix option is optionnal ('glances by default') +*Note*: the prefix option is optional ('glances by default') and run Glances with: @@ -820,9 +851,12 @@ Glances will generate stats as: 'glances.load.min1': 0.19, ... -*RabbitMQ* +RabbitMQ +-------- -You can export statistics to an RabbitMQ server (AMQP Broker). The connection should be defined in the Glances configuration file as following: +You can export statistics to an ``RabbitMQ`` server (AMQP Broker). +The connection should be defined in the Glances configuration file as +following: .. code-block:: @@ -839,13 +873,13 @@ and run Glances with: $ glances --export-rabbitmq +APIs documentation +================== -APIs Documentations -=================== +Glances includes a `XML-RPC server`_ and a `RESTFUL-JSON`_ API which can +be used by another client software. -Glances includes a `XML-RPC server`_ and a `RESTFUL-JSON`_ API which and can be used by another client software. - -APIs documentations are available at: +APIs documentation is available at: - XML-RPC: https://github.com/nicolargo/glances/wiki/The-Glances-2.x-API-How-to - RESTFUL-JSON: https://github.com/nicolargo/glances/wiki/The-Glances-RESTFULL-JSON-API @@ -853,7 +887,8 @@ APIs documentations are available at: Support ======= -To post a question about Glances use case, please post it to the offical Q&A `forum`_. +To post a question about Glances use cases, please post it to the +official Q&A `forum`_. To report a bug or a feature request use the bug tracking system at https://github.com/nicolargo/glances/issues. From f54a32f07bb3a29d17663c1e0e28c5b81e5b211d Mon Sep 17 00:00:00 2001 From: Alessio Sergi Date: Thu, 16 Apr 2015 16:46:16 +0200 Subject: [PATCH 170/267] glances-doc.html: update to reflect recent changes --- docs/glances-doc.html | 271 ++++++++++++++++++++++++++++-------------- 1 file changed, 181 insertions(+), 90 deletions(-) diff --git a/docs/glances-doc.html b/docs/glances-doc.html index 35f786b0..a86837ba 100644 --- a/docs/glances-doc.html +++ b/docs/glances-doc.html @@ -3,7 +3,7 @@ - + Glances