Commit e2bf0e29 authored by Alain Takoudjou's avatar Alain Takoudjou

slapos_monitoring: improve user interface and offline mode

parent d62fa8e3
(function(e){typeof define=="function"&&define.amd?define(["jquery"],e):typeof module=="object"&&module.exports?module.exports=function(t,n){return n===undefined&&(typeof window!="undefined"?n=require("jquery"):n=require("jquery")(t)),e(n),n}:e(jQuery)})(function(e){function L(t,n,i){typeof i=="string"&&(i={className:i}),this.options=w(b,e.isPlainObject(i)?i:{}),this.loadHTML(),this.wrapper=e(h.html),this.options.clickToHide&&this.wrapper.addClass(r+"-hidable"),this.wrapper.data(r,this),this.arrow=this.wrapper.find("."+r+"-arrow"),this.container=this.wrapper.find("."+r+"-container"),this.container.append(this.userContainer),t&&t.length&&(this.elementType=t.attr("type"),this.originalElement=t,this.elem=T(t),this.elem.data(r,this),this.elem.before(this.wrapper)),this.container.hide(),this.run(n)}var t=[].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1},n="notify",r=n+"js",i=n+"!blank",s={t:"top",m:"middle",b:"bottom",l:"left",c:"center",r:"right"},o=["l","c","r"],u=["t","m","b"],a=["t","b","l","r"],f={t:"b",m:null,b:"t",l:"r",c:null,r:"l"},l=function(t){var n;return n=[],e.each(t.split(/\W+/),function(e,t){var r;r=t.toLowerCase().charAt(0);if(s[r])return n.push(r)}),n},c={},h={name:"core",html:'<div class="'+r+'-wrapper">\n <div class="'+r+'-arrow"></div>\n <div class="'+r+'-container"></div>\n</div>',css:"."+r+"-corner {\n position: fixed;\n margin: 5px;\n z-index: 1050;\n}\n\n."+r+"-corner ."+r+"-wrapper,\n."+r+"-corner ."+r+"-container {\n position: relative;\n display: block;\n height: inherit;\n width: inherit;\n margin: 3px;\n}\n\n."+r+"-wrapper {\n z-index: 1;\n position: absolute;\n display: inline-block;\n height: 0;\n width: 0;\n}\n\n."+r+"-container {\n display: none;\n z-index: 1;\n position: absolute;\n}\n\n."+r+"-hidable {\n cursor: pointer;\n}\n\n[data-notify-text],[data-notify-html] {\n position: relative;\n}\n\n."+r+"-arrow {\n position: absolute;\n z-index: 2;\n width: 0;\n height: 0;\n}"},p={"border-radius":["-webkit-","-moz-"]},d=function(e){return c[e]},v=function(t,i){if(!t)throw"Missing Style name";if(!i)throw"Missing Style definition";if(!i.html)throw"Missing Style HTML";var s=c[t];s&&s.cssElem&&(window.console&&console.warn(n+": overwriting style '"+t+"'"),c[t].cssElem.remove()),i.name=t,c[t]=i;var o="";i.classes&&e.each(i.classes,function(t,n){return o+="."+r+"-"+i.name+"-"+t+" {\n",e.each(n,function(t,n){return p[t]&&e.each(p[t],function(e,r){return o+=" "+r+t+": "+n+";\n"}),o+=" "+t+": "+n+";\n"}),o+="}\n"}),i.css&&(o+="/* styles for "+i.name+" */\n"+i.css),o&&(i.cssElem=m(o),i.cssElem.attr("id","notify-"+i.name));var u={},a=e(i.html);g("html",a,u),g("text",a,u),i.fields=u},m=function(t){var n,r,i;r=S("style"),r.attr("type","text/css"),e("head").append(r);try{r.html(t)}catch(s){r[0].styleSheet.cssText=t}return r},g=function(t,n,r){var s;return t!=="html"&&(t="text"),s="data-notify-"+t,y(n,"["+s+"]").each(function(){var n;n=e(this).attr(s),n||(n=i),r[n]=t})},y=function(e,t){return e.is(t)?e:e.find(t)},b={clickToHide:!0,autoHide:!0,autoHideDelay:5e3,arrowShow:!0,arrowSize:5,breakNewLines:!0,elementPosition:"bottom",globalPosition:"top right",style:"bootstrap",className:"error",showAnimation:"slideDown",showDuration:400,hideAnimation:"slideUp",hideDuration:200,gap:5},w=function(t,n){var r;return r=function(){},r.prototype=t,e.extend(!0,new r,n)},E=function(t){return e.extend(b,t)},S=function(t){return e("<"+t+"></"+t+">")},x={},T=function(t){var n;return t.is("[type=radio]")&&(n=t.parents("form:first").find("[type=radio]").filter(function(n,r){return e(r).attr("name")===t.attr("name")}),t=n.first()),t},N=function(e,t,n){var r,i;if(typeof n=="string")n=parseInt(n,10);else if(typeof n!="number")return;if(isNaN(n))return;return r=s[f[t.charAt(0)]],i=t,e[r]!==undefined&&(t=s[r.charAt(0)],n=-n),e[t]===undefined?e[t]=n:e[t]+=n,null},C=function(e,t,n){if(e==="l"||e==="t")return 0;if(e==="c"||e==="m")return n/2-t/2;if(e==="r"||e==="b")return n-t;throw"Invalid alignment"},k=function(e){return k.e=k.e||S("div"),k.e.text(e).html()};L.prototype.loadHTML=function(){var t;t=this.getStyle(),this.userContainer=e(t.html),this.userFields=t.fields},L.prototype.show=function(e,t){var n,r,i,s,o;r=function(n){return function(){!e&&!n.elem&&n.destroy();if(t)return t()}}(this),o=this.container.parent().parents(":hidden").length>0,i=this.container.add(this.arrow),n=[];if(o&&e)s="show";else if(o&&!e)s="hide";else if(!o&&e)s=this.options.showAnimation,n.push(this.options.showDuration);else{if(!!o||!!e)return r();s=this.options.hideAnimation,n.push(this.options.hideDuration)}return n.push(r),i[s].apply(i,n)},L.prototype.setGlobalPosition=function(){var t=this.getPosition(),n=t[0],i=t[1],o=s[n],u=s[i],a=n+"|"+i,f=x[a];if(!f){f=x[a]=S("div");var l={};l[o]=0,u==="middle"?l.top="45%":u==="center"?l.left="45%":l[u]=0,f.css(l).addClass(r+"-corner"),e("body").append(f)}return f.prepend(this.wrapper)},L.prototype.setElementPosition=function(){var n,r,i,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,k,L,A,O,M,_,D,P,H,B,j;H=this.getPosition(),_=H[0],O=H[1],M=H[2],g=this.elem.position(),d=this.elem.outerHeight(),y=this.elem.outerWidth(),v=this.elem.innerHeight(),m=this.elem.innerWidth(),j=this.wrapper.position(),c=this.container.height(),h=this.container.width(),T=s[_],L=f[_],A=s[L],p={},p[A]=_==="b"?d:_==="r"?y:0,N(p,"top",g.top-j.top),N(p,"left",g.left-j.left),B=["top","left"];for(w=0,S=B.length;w<S;w++)D=B[w],k=parseInt(this.elem.css("margin-"+D),10),k&&N(p,D,k);b=Math.max(0,this.options.gap-(this.options.arrowShow?i:0)),N(p,A,b);if(!this.options.arrowShow)this.arrow.hide();else{i=this.options.arrowSize,r=e.extend({},p),n=this.userContainer.css("border-color")||this.userContainer.css("border-top-color")||this.userContainer.css("background-color")||"white";for(E=0,x=a.length;E<x;E++){D=a[E],P=s[D];if(D===L)continue;l=P===T?n:"transparent",r["border-"+P]=i+"px solid "+l}N(p,s[L],i),t.call(a,O)>=0&&N(r,s[O],i*2)}t.call(u,_)>=0?(N(p,"left",C(O,h,y)),r&&N(r,"left",C(O,i,m))):t.call(o,_)>=0&&(N(p,"top",C(O,c,d)),r&&N(r,"top",C(O,i,v))),this.container.is(":visible")&&(p.display="block"),this.container.removeAttr("style").css(p);if(r)return this.arrow.removeAttr("style").css(r)},L.prototype.getPosition=function(){var e,n,r,i,s,f,c,h;h=this.options.position||(this.elem?this.options.elementPosition:this.options.globalPosition),e=l(h),e.length===0&&(e[0]="b");if(n=e[0],t.call(a,n)<0)throw"Must be one of ["+a+"]";if(e.length===1||(r=e[0],t.call(u,r)>=0)&&(i=e[1],t.call(o,i)<0)||(s=e[0],t.call(o,s)>=0)&&(f=e[1],t.call(u,f)<0))e[1]=(c=e[0],t.call(o,c)>=0)?"m":"l";return e.length===2&&(e[2]=e[1]),e},L.prototype.getStyle=function(e){var t;e||(e=this.options.style),e||(e="default"),t=c[e];if(!t)throw"Missing style: "+e;return t},L.prototype.updateClasses=function(){var t,n;return t=["base"],e.isArray(this.options.className)?t=t.concat(this.options.className):this.options.className&&t.push(this.options.className),n=this.getStyle(),t=e.map(t,function(e){return r+"-"+n.name+"-"+e}).join(" "),this.userContainer.attr("class",t)},L.prototype.run=function(t,n){var r,s,o,u,a;e.isPlainObject(n)?e.extend(this.options,n):e.type(n)==="string"&&(this.options.className=n);if(this.container&&!t){this.show(!1);return}if(!this.container&&!t)return;s={},e.isPlainObject(t)?s=t:s[i]=t;for(o in s){r=s[o],u=this.userFields[o];if(!u)continue;u==="text"&&(r=k(r),this.options.breakNewLines&&(r=r.replace(/\n/g,"<br/>"))),a=o===i?"":"="+o,y(this.userContainer,"[data-notify-"+u+a+"]").html(r)}this.updateClasses(),this.elem?this.setElementPosition():this.setGlobalPosition(),this.show(!0),this.options.autoHide&&(clearTimeout(this.autohideTimer),this.autohideTimer=setTimeout(this.show.bind(this,!1),this.options.autoHideDelay))},L.prototype.destroy=function(){this.wrapper.data(r,null),this.wrapper.remove()},e[n]=function(t,r,i){return t&&t.nodeName||t.jquery?e(t)[n](r,i):(i=r,r=t,new L(null,r,i)),t},e.fn[n]=function(t,n){return e(this).each(function(){var i=T(e(this)).data(r);i&&i.destroy();var s=new L(e(this),t,n)}),this},e.extend(e[n],{defaults:E,addStyle:v,pluginOptions:b,getStyle:d,insertCSS:m}),v("bootstrap",{html:"<div>\n<span data-notify-text></span>\n</div>",classes:{base:{"font-weight":"bold",padding:"8px 15px 8px 14px","text-shadow":"0 1px 0 rgba(255, 255, 255, 0.5)","background-color":"#fcf8e3",border:"1px solid #fbeed5","border-radius":"4px","white-space":"nowrap","padding-left":"25px","background-repeat":"no-repeat","background-position":"3px 7px"},error:{color:"#B94A48","background-color":"#F2DEDE","border-color":"#EED3D7","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtRJREFUeNqkVc1u00AQHq+dOD+0poIQfkIjalW0SEGqRMuRnHos3DjwAH0ArlyQeANOOSMeAA5VjyBxKBQhgSpVUKKQNGloFdw4cWw2jtfMOna6JOUArDTazXi/b3dm55socPqQhFka++aHBsI8GsopRJERNFlY88FCEk9Yiwf8RhgRyaHFQpPHCDmZG5oX2ui2yilkcTT1AcDsbYC1NMAyOi7zTX2Agx7A9luAl88BauiiQ/cJaZQfIpAlngDcvZZMrl8vFPK5+XktrWlx3/ehZ5r9+t6e+WVnp1pxnNIjgBe4/6dAysQc8dsmHwPcW9C0h3fW1hans1ltwJhy0GxK7XZbUlMp5Ww2eyan6+ft/f2FAqXGK4CvQk5HueFz7D6GOZtIrK+srupdx1GRBBqNBtzc2AiMr7nPplRdKhb1q6q6zjFhrklEFOUutoQ50xcX86ZlqaZpQrfbBdu2R6/G19zX6XSgh6RX5ubyHCM8nqSID6ICrGiZjGYYxojEsiw4PDwMSL5VKsC8Yf4VRYFzMzMaxwjlJSlCyAQ9l0CW44PBADzXhe7xMdi9HtTrdYjFYkDQL0cn4Xdq2/EAE+InCnvADTf2eah4Sx9vExQjkqXT6aAERICMewd/UAp/IeYANM2joxt+q5VI+ieq2i0Wg3l6DNzHwTERPgo1ko7XBXj3vdlsT2F+UuhIhYkp7u7CarkcrFOCtR3H5JiwbAIeImjT/YQKKBtGjRFCU5IUgFRe7fF4cCNVIPMYo3VKqxwjyNAXNepuopyqnld602qVsfRpEkkz+GFL1wPj6ySXBpJtWVa5xlhpcyhBNwpZHmtX8AGgfIExo0ZpzkWVTBGiXCSEaHh62/PoR0p/vHaczxXGnj4bSo+G78lELU80h1uogBwWLf5YlsPmgDEd4M236xjm+8nm4IuE/9u+/PH2JXZfbwz4zw1WbO+SQPpXfwG/BBgAhCNZiSb/pOQAAAAASUVORK5CYII=)"},success:{color:"#468847","background-color":"#DFF0D8","border-color":"#D6E9C6","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNq0lctPE0Ecx38zu/RFS1EryqtgJFA08YCiMZIAQQ4eRG8eDGdPJiYeTIwHTfwPiAcvXIwXLwoXPaDxkWgQ6islKlJLSQWLUraPLTv7Gme32zoF9KSTfLO7v53vZ3d/M7/fIth+IO6INt2jjoA7bjHCJoAlzCRw59YwHYjBnfMPqAKWQYKjGkfCJqAF0xwZjipQtA3MxeSG87VhOOYegVrUCy7UZM9S6TLIdAamySTclZdYhFhRHloGYg7mgZv1Zzztvgud7V1tbQ2twYA34LJmF4p5dXF1KTufnE+SxeJtuCZNsLDCQU0+RyKTF27Unw101l8e6hns3u0PBalORVVVkcaEKBJDgV3+cGM4tKKmI+ohlIGnygKX00rSBfszz/n2uXv81wd6+rt1orsZCHRdr1Imk2F2Kob3hutSxW8thsd8AXNaln9D7CTfA6O+0UgkMuwVvEFFUbbAcrkcTA8+AtOk8E6KiQiDmMFSDqZItAzEVQviRkdDdaFgPp8HSZKAEAL5Qh7Sq2lIJBJwv2scUqkUnKoZgNhcDKhKg5aH+1IkcouCAdFGAQsuWZYhOjwFHQ96oagWgRoUov1T9kRBEODAwxM2QtEUl+Wp+Ln9VRo6BcMw4ErHRYjH4/B26AlQoQQTRdHWwcd9AH57+UAXddvDD37DmrBBV34WfqiXPl61g+vr6xA9zsGeM9gOdsNXkgpEtTwVvwOklXLKm6+/p5ezwk4B+j6droBs2CsGa/gNs6RIxazl4Tc25mpTgw/apPR1LYlNRFAzgsOxkyXYLIM1V8NMwyAkJSctD1eGVKiq5wWjSPdjmeTkiKvVW4f2YPHWl3GAVq6ymcyCTgovM3FzyRiDe2TaKcEKsLpJvNHjZgPNqEtyi6mZIm4SRFyLMUsONSSdkPeFtY1n0mczoY3BHTLhwPRy9/lzcziCw9ACI+yql0VLzcGAZbYSM5CCSZg1/9oc/nn7+i8N9p/8An4JMADxhH+xHfuiKwAAAABJRU5ErkJggg==)"},info:{color:"#3A87AD","background-color":"#D9EDF7","border-color":"#BCE8F1","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYFAhkSsdes/QAAA8dJREFUOMvVlGtMW2UYx//POaWHXg6lLaW0ypAtw1UCgbniNOLcVOLmAjHZolOYlxmTGXVZdAnRfXQm+7SoU4mXaOaiZsEpC9FkiQs6Z6bdCnNYruM6KNBw6YWewzl9z+sHImEWv+vz7XmT95f/+3/+7wP814v+efDOV3/SoX3lHAA+6ODeUFfMfjOWMADgdk+eEKz0pF7aQdMAcOKLLjrcVMVX3xdWN29/GhYP7SvnP0cWfS8caSkfHZsPE9Fgnt02JNutQ0QYHB2dDz9/pKX8QjjuO9xUxd/66HdxTeCHZ3rojQObGQBcuNjfplkD3b19Y/6MrimSaKgSMmpGU5WevmE/swa6Oy73tQHA0Rdr2Mmv/6A1n9w9suQ7097Z9lM4FlTgTDrzZTu4StXVfpiI48rVcUDM5cmEksrFnHxfpTtU/3BFQzCQF/2bYVoNbH7zmItbSoMj40JSzmMyX5qDvriA7QdrIIpA+3cdsMpu0nXI8cV0MtKXCPZev+gCEM1S2NHPvWfP/hL+7FSr3+0p5RBEyhEN5JCKYr8XnASMT0xBNyzQGQeI8fjsGD39RMPk7se2bd5ZtTyoFYXftF6y37gx7NeUtJJOTFlAHDZLDuILU3j3+H5oOrD3yWbIztugaAzgnBKJuBLpGfQrS8wO4FZgV+c1IxaLgWVU0tMLEETCos4xMzEIv9cJXQcyagIwigDGwJgOAtHAwAhisQUjy0ORGERiELgG4iakkzo4MYAxcM5hAMi1WWG1yYCJIcMUaBkVRLdGeSU2995TLWzcUAzONJ7J6FBVBYIggMzmFbvdBV44Corg8vjhzC+EJEl8U1kJtgYrhCzgc/vvTwXKSib1paRFVRVORDAJAsw5FuTaJEhWM2SHB3mOAlhkNxwuLzeJsGwqWzf5TFNdKgtY5qHp6ZFf67Y/sAVadCaVY5YACDDb3Oi4NIjLnWMw2QthCBIsVhsUTU9tvXsjeq9+X1d75/KEs4LNOfcdf/+HthMnvwxOD0wmHaXr7ZItn2wuH2SnBzbZAbPJwpPx+VQuzcm7dgRCB57a1uBzUDRL4bfnI0RE0eaXd9W89mpjqHZnUI5Hh2l2dkZZUhOqpi2qSmpOmZ64Tuu9qlz/SEXo6MEHa3wOip46F1n7633eekV8ds8Wxjn37Wl63VVa+ej5oeEZ/82ZBETJjpJ1Rbij2D3Z/1trXUvLsblCK0XfOx0SX2kMsn9dX+d+7Kf6h8o4AIykuffjT8L20LU+w4AZd5VvEPY+XpWqLV327HR7DzXuDnD8r+ovkBehJ8i+y8YAAAAASUVORK5CYII=)"},warn:{color:"#C09853","background-color":"#FCF8E3","border-color":"#FBEED5","background-image":"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABJlBMVEXr6eb/2oD/wi7/xjr/0mP/ykf/tQD/vBj/3o7/uQ//vyL/twebhgD/4pzX1K3z8e349vK6tHCilCWbiQymn0jGworr6dXQza3HxcKkn1vWvV/5uRfk4dXZ1bD18+/52YebiAmyr5S9mhCzrWq5t6ufjRH54aLs0oS+qD751XqPhAybhwXsujG3sm+Zk0PTwG6Shg+PhhObhwOPgQL4zV2nlyrf27uLfgCPhRHu7OmLgAafkyiWkD3l49ibiAfTs0C+lgCniwD4sgDJxqOilzDWowWFfAH08uebig6qpFHBvH/aw26FfQTQzsvy8OyEfz20r3jAvaKbhgG9q0nc2LbZxXanoUu/u5WSggCtp1anpJKdmFz/zlX/1nGJiYmuq5Dx7+sAAADoPUZSAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfdBgUBGhh4aah5AAAAlklEQVQY02NgoBIIE8EUcwn1FkIXM1Tj5dDUQhPU502Mi7XXQxGz5uVIjGOJUUUW81HnYEyMi2HVcUOICQZzMMYmxrEyMylJwgUt5BljWRLjmJm4pI1hYp5SQLGYxDgmLnZOVxuooClIDKgXKMbN5ggV1ACLJcaBxNgcoiGCBiZwdWxOETBDrTyEFey0jYJ4eHjMGWgEAIpRFRCUt08qAAAAAElFTkSuQmCC)"}}}),e(function(){m(h.css).attr("id","core-notify"),e(document).on("click","."+r+"-hidable",function(t){e(this).trigger("notify-hide")}),e(document).on("notify-hide","."+r+"-wrapper",function(t){var n=e(this).data(r);n&&n.show(!1)})})})
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Web Script" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Change_local_roles_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Anonymous</string>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>classification/collaborative/public</string>
</tuple>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>notify.min.js</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Notify_min_js</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value> <string>en</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Web Script</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Notify.js</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>001</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>document_publication_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>publish_alive</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1464108139.95</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>published_alive</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>951.26740.47877.20855</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1464108132.22</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>detect_converted_file</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>converted</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1464102882.33</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
<value> <string encoding="cdata"><![CDATA[ <value> <string encoding="cdata"><![CDATA[
CACHE MANIFEST\n CACHE MANIFEST\n
# generated on Fri, 20 Mai 2016 15:47:33 +0000\n # generated on Fri, 25 Mai 2016 15:47:33 +0000\n
# XXX + fonts\n # XXX + fonts\n
# images/ajax-loader.gif\n # images/ajax-loader.gif\n
CACHE:\n CACHE:\n
...@@ -137,6 +137,7 @@ jquerymobile.css\n ...@@ -137,6 +137,7 @@ jquerymobile.css\n
jquerymobile.js\n jquerymobile.js\n
jsen.min.js\n jsen.min.js\n
magnific-popup.css\n magnific-popup.css\n
notify.min.js\n
renderjs.js\n renderjs.js\n
rsvp.js\n rsvp.js\n
# gadget_officejs_page_sync.html\n # gadget_officejs_page_sync.html\n
...@@ -329,7 +330,7 @@ NETWORK:\n ...@@ -329,7 +330,7 @@ NETWORK:\n
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.21023.1861.15223</string> </value> <value> <string>951.21023.22440.29593</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -347,7 +348,7 @@ NETWORK:\n ...@@ -347,7 +348,7 @@ NETWORK:\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463759960.49</float> <float>1464194710.25</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -41,8 +41,8 @@ ...@@ -41,8 +41,8 @@
<script id="panel-template-body" type="text/x-handlebars-template"> <script id="panel-template-body" type="text/x-handlebars-template">
<div class="ui-content"> <div class="ui-content">
<ul data-role="listview" class="ui-listview"> <ul data-role="listview" class="ui-listview">
<li><a href="#page=hosting_overview"><i class="fa fa-globe"></i><span data-i18n="Applications Overview">Applications Overview</span></a></li> <li><a href="#page=hosting_overview"><i class="fa fa-globe"></i><span data-i18n="Hosting Subscriptions">Hosting Subscriptions</span></a></li>
<li><a href="#page=overview"><i class="fa fa-cube"></i><span data-i18n="Instances Overview">Instances Overview</span></a></li> <li><a href="#page=overview"><i class="fa fa-cube"></i><span data-i18n="Software Instances">Software Instances</span></a></li>
<li><a href="#page=status_list"><i class="fa fa-th-list"></i><span data-i18n="Promises Overview">Promises Overview</span></a></li> <li><a href="#page=status_list"><i class="fa fa-th-list"></i><span data-i18n="Promises Overview">Promises Overview</span></a></li>
<li><a href="#page=settings_configurator"><i class="fa fa-cog"></i><span data-i18n="Monitoring Configuration">Monitoring Configuration</span></a></li> <li><a href="#page=settings_configurator"><i class="fa fa-cog"></i><span data-i18n="Monitoring Configuration">Monitoring Configuration</span></a></li>
<li><a href="#page=import_export"><i class="fa fa-exchange"></i><span data-i18n="Import / Export">Import / Export</span></a></li> <li><a href="#page=import_export"><i class="fa fa-exchange"></i><span data-i18n="Import / Export">Import / Export</span></a></li>
......
...@@ -237,7 +237,7 @@ ...@@ -237,7 +237,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>950.11404.26472.10461</string> </value> <value> <string>951.17777.16093.25088</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -255,7 +255,7 @@ ...@@ -255,7 +255,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1459508166.41</float> <float>1464107507.78</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -777,16 +777,17 @@ margin-top: 5px; ...@@ -777,16 +777,17 @@ margin-top: 5px;
border: 4px solid #024352; border: 4px solid #024352;
border-radius: 50px; border-radius: 50px;
height: 50px; height: 50px;
left: 50%; left: 75%;
margin: -15px 0 0 -15px; margin: -15px 0 0 -15px;
/*opacity: 0;*/ /*opacity: 0;*/
position: absolute; position: fixed;
top: 90px; top: 200px;
width: 50px; width: 50px;
/*animation: pulsate .5s ease-out; /*animation: pulsate .5s ease-out;
animation-iteration-count: infinite;*/ animation-iteration-count: infinite;*/
animation: rotate 0.8s infinite linear; animation: rotate 0.8s infinite linear;
border-right-color: transparent; border-right-color: transparent;
z-index: 100;
} }
@keyframes rotate { @keyframes rotate {
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.7640.35673.52906</string> </value> <value> <string>951.7641.18647.23022</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1462957037.05</float> <float>1464100990.73</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
<!--div data-role="header" data-theme="a" class="ui-header ui-bar-a" data-position="fixed" data-tap-toggle="false"--> <!--div data-role="header" data-theme="a" class="ui-header ui-bar-a" data-position="fixed" data-tap-toggle="false"-->
<div data-role="header" data-position="fixed" data-theme="a" class="ui-header ui-bar-a" data-tap-toggle="false"> <div data-role="header" data-position="fixed" data-theme="a" class="ui-header ui-bar-a" data-tap-toggle="false">
<div data-gadget-url="gadget_monitoring_sync.html" data-gadget-scope="sync_gadget" data-gadget-sandbox="public"></div>
<div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-left"> <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-left">
<div class="ui-controlgroup-controls"> <div class="ui-controlgroup-controls">
</div> </div>
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.17777.16093.25088</string> </value> <value> <string>951.20770.48030.58606</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463744803.95</float> <float>1464184576.96</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -44,13 +44,6 @@ ...@@ -44,13 +44,6 @@
}; };
}) })
.ready(function (g) {
return g.getDeclaredGadget("sync_gadget")
.push(function (sync_gadget) {
g.props.sync_gadget = sync_gadget;
});
})
// Assign the element to a variable // Assign the element to a variable
.ready(function (g) { .ready(function (g) {
return g.getElement() return g.getElement()
...@@ -104,7 +97,7 @@ ...@@ -104,7 +97,7 @@
return this.render(this.stats.options); return this.render(this.stats.options);
} }
}) })
/*
.declareMethod('notifyChange', function () { .declareMethod('notifyChange', function () {
if (!this.stats.modified) { if (!this.stats.modified) {
this.stats.modified = true; this.stats.modified = true;
...@@ -125,7 +118,7 @@ ...@@ -125,7 +118,7 @@
return this.render(this.stats.options); return this.render(this.stats.options);
} }
}) })
*/
.declareMethod('render', function (options) { .declareMethod('render', function (options) {
var gadget = this, var gadget = this,
possible_left_link_list = [ possible_left_link_list = [
...@@ -273,10 +266,6 @@ ...@@ -273,10 +266,6 @@
gadget.props.title_element.innerHTML = my_translated_html_list[0]; gadget.props.title_element.innerHTML = my_translated_html_list[0];
gadget.props.left_link.innerHTML = my_translated_html_list[1]; gadget.props.left_link.innerHTML = my_translated_html_list[1];
gadget.props.right_link.innerHTML = my_translated_html_list[2]; gadget.props.right_link.innerHTML = my_translated_html_list[2];
})
.push(function () {
// set auto sync timer
return gadget.props.sync_gadget.startSync();
}); });
}) })
......
...@@ -235,7 +235,7 @@ ...@@ -235,7 +235,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.20773.60158.51182</string> </value> <value> <string>951.28063.61835.56814</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -253,7 +253,7 @@ ...@@ -253,7 +253,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463745210.1</float> <float>1464184478.05</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -29,9 +29,9 @@ ...@@ -29,9 +29,9 @@
<script id="instance-details-widget-overview" type="text/x-handlebars-template"> <script id="instance-details-widget-overview" type="text/x-handlebars-template">
{{#if status_list_url}} {{#if status_list_url}}
<div data-role="controlgroup"> <!--<div data-role="controlgroup">
<a class="ui-btn ui-corner-all" href="{{status_list_url}}" title="Public"><i class="fa fa-check-square"></i> View Promises Status</a> <a class="ui-btn ui-corner-all" href="{{status_list_url}}" title="Public"><i class="fa fa-check-square"></i> Promises</a>
</div> </div>-->
{{/if}} {{/if}}
<div class="ui-listview-container"> <div class="ui-listview-container">
<ul data-role="listview" class="ui-listview-outer" data-inset="true"> <ul data-role="listview" class="ui-listview-outer" data-inset="true">
...@@ -45,11 +45,14 @@ ...@@ -45,11 +45,14 @@
<fieldset> <fieldset>
<div class="ui-field-contain"> <div class="ui-field-contain">
<fieldset data-role="controlgroup" data-type="horizontal"> <fieldset data-role="controlgroup" data-type="horizontal">
{{#if ../status_list_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" href="{{../status_list_url}}" title="Instance Promises List"><i class="fa fa-check-square"></i> Promises</a>
{{/if}}
{{#if resource_url }} {{#if resource_url }}
<a href="{{resource_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini"><i class="fa fa-pie-chart"></i> Resources</a> <a href="{{resource_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Instance Resource comsumption"><i class="fa fa-pie-chart"></i> Resources</a>
{{/if}} {{/if}}
{{#if process_url }} {{#if process_url }}
<a href="{{process_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini"><i class="fa fa-list-alt"></i> Processes</a> <a href="{{process_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Processes usage"><i class="fa fa-list-alt"></i> Processes</a>
{{/if}} {{/if}}
{{#if rss_url}} {{#if rss_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i> RSS</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i> RSS</a>
...@@ -59,7 +62,7 @@ ...@@ -59,7 +62,7 @@
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public"><i class="fa fa-folder-open-o"></i> Public</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public"><i class="fa fa-folder-open-o"></i> Public</a>
{{/if}} {{/if}}
{{#if private_url}} {{#if private_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Private"><i class="fa fa-lock"></i> Private</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Browse Private Directory"><i class="fa fa-lock"></i> Private</a>
{{/if}} {{/if}}
--> -->
</fieldset> </fieldset>
...@@ -74,13 +77,18 @@ ...@@ -74,13 +77,18 @@
{{#with instance}} {{#with instance}}
<tr> <tr>
<th><i class="fa fa-desktop"></i> <strong>Computer</strong></th> <th><i class="fa fa-desktop"></i> <strong>Computer</strong></th>
<td>{{computer}}</td> <td title="Computer Reference">{{computer}}</td>
<td>{{partition}}</td> <td title="Partition Reference">{{partition}}</td>
</tr>
<tr>
<th><i class="fa fa-globe"></i> <strong>IP Addresses</strong></th>
<td title="IPv4">{{ipv4}}</td>
<td title="IPv6">{{ipv6}}</td>
</tr> </tr>
<tr> <tr>
<th><i class="fa fa-globe"></i> <strong>IP Address</strong></th> <th><i class="fa fa-square-o" aria-hidden="true"></i> <strong>Software Type</strong></th>
<td>{{ipv4}}</td> <td title="Software type">{{software-type}}</td>
<td>{{ipv6}}</td> <td><a style="padding: 0; min-height: initial;" href="{{software-release}}" title="{{software-release}}" target='_blank'>Click to open <i class="fa fa-external-link"></i></a></td>
</tr> </tr>
{{/with}} {{/with}}
</table> </table>
...@@ -139,7 +147,7 @@ ...@@ -139,7 +147,7 @@
<div class="overview-header"> <div class="overview-header">
<div class='content-title ui-instance-title'> <div class='content-title ui-instance-title'>
<div class="overview-title"> <div class="overview-title">
<i class="fa fa-globe"></i> <span>Monitoring Applications</span> <i class="fa fa-globe"></i> <span>Hosting Subscriptions</span>
</div> </div>
<div class="commands"> <div class="commands">
</div> </div>
...@@ -151,7 +159,7 @@ ...@@ -151,7 +159,7 @@
<table class="ui-responsive ui-body-c ui-table-inset instance-overview"> <table class="ui-responsive ui-body-c ui-table-inset instance-overview">
<thead class="ui-bar-inherit"> <thead class="ui-bar-inherit">
<tr> <tr>
<th class="padding-10"></th> <th class="padding-10">Status</th>
<th>Name</th> <th>Name</th>
<th>Status Date</th> <th>Status Date</th>
</tr> </tr>
...@@ -184,7 +192,7 @@ ...@@ -184,7 +192,7 @@
<div style="overflow: auto;" class="padding-lr-10 instances-parameters"> <div style="overflow: auto;" class="padding-lr-10 instances-parameters">
</div> </div>
<div class="padding-5"></div> <div class="padding-5"></div>
<h2><i class="fa fa-cubes"></i> <strong>Instances State List</strong></h2> <h2><i class="fa fa-cubes"></i> <strong>Instances Status</strong></h2>
<div class="instances-status"> <div class="instances-status">
</div> </div>
</div> </div>
......
...@@ -243,7 +243,7 @@ ...@@ -243,7 +243,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.10932.20107.12578</string> </value> <value> <string>951.27801.5339.60876</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -261,7 +261,7 @@ ...@@ -261,7 +261,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463154501.48</float> <float>1464166945.92</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
gadget.props = {}; gadget.props = {};
gadget.props.hosting_list = []; gadget.props.hosting_list = [];
gadget.props.opml_key_list = []; gadget.props.opml_key_list = [];
gadget.props.title = 'Monitoring Registered Applications'; gadget.props.title = 'Monitoring Hosting Subscriptions';
return gadget.getDeclaredGadget("login_gadget") return gadget.getDeclaredGadget("login_gadget")
.push(function (login_gadget) { .push(function (login_gadget) {
gadget.props.login_gadget = login_gadget; gadget.props.login_gadget = login_gadget;
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.17698.39476.46574</string> </value> <value> <string>951.17701.12410.54528</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463560631.34</float> <float>1464106260.69</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
.declareMethod('render', function (options) { .declareMethod('render', function (options) {
var gadget = this, var gadget = this,
header = { header = {
"title": 'Instances Status Overview' "title": 'Software Instances List'
}, },
listview_options = { listview_options = {
search_page: 'overview', search_page: 'overview',
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.9443.43477.54732</string> </value> <value> <string>951.9445.6535.55671</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463065265.96</float> <float>1464107170.21</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -23,20 +23,22 @@ ...@@ -23,20 +23,22 @@
</tr> </tr>
<tr> <tr>
<th><i class="fa fa-calendar"></i> Status Date</th> <th><i class="fa fa-calendar"></i> Status Date</th>
<td>{{status_date}}</td> <td title="The date of this status.">{{status_date}}</td>
</tr> </tr>
<tr> <tr>
<th><i class="fa fa-clock-o"></i> Report Date</th> <th><i class="fa fa-clock-o"></i> Report Date</th>
<td>{{start-date}}</td> <td title="The date when the promise result was collected.">{{start-date}}</td>
</tr> </tr>
</table> </table>
{{#if message}}
<div style="border: 1px solid rgba(0,0,0,0.1); margin-top: 10px;"> <div style="border: 1px solid rgba(0,0,0,0.1); margin-top: 10px;">
<div class="ui-body"> <div class="ui-body">
{{#if message}}
<p><strong>{{status}}</strong>: {{message}}</p> <p><strong>{{status}}</strong>: {{message}}</p>
{{else}}
<p><strong>No output message!</strong></p>
{{/if}}
</div> </div>
</div> </div>
{{/if}}
<br/> <br/>
{{/with}} {{/with}}
</script> </script>
...@@ -54,13 +56,13 @@ ...@@ -54,13 +56,13 @@
</fieldset> </fieldset>
</div> </div>
<table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke"> <table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke">
<tr> <tr title="Hosting Subscription">
<th><i class="fa fa-puzzle-piece"></i> App Title</th> <th><i class="fa fa-puzzle-piece"></i> H. Subscription</th>
<td>{{root_title}}</td> <td title="Hosting Subscription title">{{root_title}}</td>
</tr> </tr>
<tr> <tr>
<th><i class="fa fa-cube"></i> Instance</th> <th><i class="fa fa-cube"></i> Instance</th>
<td>{{title}}</td> <td title="Software Instance title">{{title}}</td>
</tr> </tr>
<tr> <tr>
<th><i class="fa fa-tachometer"></i> Status</th> <th><i class="fa fa-tachometer"></i> Status</th>
...@@ -68,19 +70,15 @@ ...@@ -68,19 +70,15 @@
</tr> </tr>
<tr> <tr>
<th><i class="fa fa-clock-o"></i> Report Date</th> <th><i class="fa fa-clock-o"></i> Report Date</th>
<td>{{date}}</td> <td title="The date when the instance status was collected.">{{date}}</td>
</tr> </tr>
<tr> <tr>
<th>Errors Ratio</th> <th>Errors Ratio</th>
<td>{{errors}} %</td> <td title="Percentage of promises errors in Software Instance">{{errors}} %</td>
</tr> </tr>
<tr> <tr>
<th>Success Ratio</th> <th>Success Ratio</th>
<td>{{success}} %</td> <td title="Percentage of promises success in Software Instance">{{success}} %</td>
</tr>
<tr>
<th>Warning Ratio</th>
<td>{{warning}} %</td>
</tr> </tr>
</table> </table>
{{#with instance}} {{#with instance}}
...@@ -120,10 +118,10 @@ ...@@ -120,10 +118,10 @@
<div class="ui-field-contain"> <div class="ui-field-contain">
<fieldset data-role="controlgroup" data-type="horizontal"> <fieldset data-role="controlgroup" data-type="horizontal">
{{#if public_url}} {{#if public_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public"><i class="fa fa-folder-open-o"></i> Public</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public Directory"><i class="fa fa-folder-open-o"></i> Public</a>
{{/if}} {{/if}}
{{#if private_url}} {{#if private_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Private"><i class="fa fa-lock"></i> Private</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Private Directory"><i class="fa fa-lock"></i> Private</a>
{{/if}} {{/if}}
{{#if rss_url}} {{#if rss_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i> RSS</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i> RSS</a>
...@@ -133,9 +131,9 @@ ...@@ -133,9 +131,9 @@
</script> </script>
<script id="phistory-widget-template" type="text/x-handlebars-template"> <script id="phistory-widget-template" type="text/x-handlebars-template">
{{#if history_list}}
<h2><i class="fa fa-history"></i> <strong>Promise Status History</strong></h2> <h2><i class="fa fa-history"></i> <strong>Promise Status History</strong></h2>
<div style="max-height: 200px; overflow: auto;"> <div style="max-height: 200px; overflow: auto;">
{{#if history_list}}
<table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke"> <table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke">
{{#each history_list}} {{#each history_list}}
<tr title="{{message}}"> <tr title="{{message}}">
...@@ -145,8 +143,10 @@ ...@@ -145,8 +143,10 @@
</tr> </tr>
{{/each}} {{/each}}
</table> </table>
</div> {{else}}
History not found!
{{/if}} {{/if}}
</div>
</script> </script>
</head> </head>
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
<div data-gadget-url="gadget_monitoring_chart.html" data-gadget-scope="chart0"></div> <div data-gadget-url="gadget_monitoring_chart.html" data-gadget-scope="chart0"></div>
</div> </div>
<br/><br/> <br/><br/>
<h2><i class="fa fa-line-chart"></i> <strong>Instance Promises Status History</strong></h2> <h2><i class="fa fa-line-chart"></i> <strong>Instance Promises Result History</strong></h2>
<div data-gadget-url="gadget_monitoring_chart.html" data-gadget-scope="chart1"></div> <div data-gadget-url="gadget_monitoring_chart.html" data-gadget-scope="chart1"></div>
</div> </div>
</div> </div>
......
...@@ -243,7 +243,7 @@ ...@@ -243,7 +243,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>949.26772.37443.60825</string> </value> <value> <string>951.27884.45406.55586</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -261,7 +261,7 @@ ...@@ -261,7 +261,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1456500574.55</float> <float>1464171822.28</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -128,7 +128,7 @@ ...@@ -128,7 +128,7 @@
element: element element: element
}); });
gadget.property_dict.element.querySelector(".ui-promise-content .ui-promise-title h2") gadget.property_dict.element.querySelector(".ui-promise-content .ui-promise-title h2")
.innerHTML += 'Promise ' + element.title; .innerHTML += element.hosting_subscription + ' > ' + element.instance + ' > ' + element.title;
gadget.property_dict.element.querySelector("#promise-overview .ui-block-a") gadget.property_dict.element.querySelector("#promise-overview .ui-block-a")
.innerHTML += content; .innerHTML += content;
if (element.hasOwnProperty('_links') && element._links.hasOwnProperty('monitor') && element._links.monitor.href) { if (element.hasOwnProperty('_links') && element._links.hasOwnProperty('monitor') && element._links.monitor.href) {
...@@ -213,20 +213,26 @@ ...@@ -213,20 +213,26 @@
} }
}; };
gadget.property_dict.jio_gadget.createJio(jio_options, false); gadget.property_dict.jio_gadget.createJio(jio_options, false);
return gadget.property_dict.jio_gadget.allDocs({ return gadget.property_dict.jio_gadget.get(title+'.history')
select_list: ['title', 'message', 'start-date', 'status'], .push(undefined, function (error) {
query: '_id: "%.history.status"', console.log(error);
limit: [0, 30], return undefined;
sort_on: [["start-date", "descending"]]
}) })
.push(function (result_list) { .push(function (status_history) {
var i, var i,
start_index = 0,
history_size,
history_list = []; history_list = [];
if (result_list) { if (status_history && status_history.hasOwnProperty('data')) {
for (i = 0; i < result_list.data.rows.length; i += 1) { if (history_size > 200) {
history_list.push(result_list.data.rows[i].value); start_index = history_size - 200;
} }
history_size = status_history.data.length;
for (i = start_index; i < history_size; i += 1) {
history_list.push(status_history.data[i]);
}
history_list.reverse();
} }
history_content = history_widget_template({history_list: history_list}); history_content = history_widget_template({history_list: history_list});
gadget.property_dict.element.querySelector("#promise-overview .ui-block-a") gadget.property_dict.element.querySelector("#promise-overview .ui-block-a")
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.10830.35453.12458</string> </value> <value> <string>951.26579.32109.21009</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463152445.63</float> <float>1464105558.24</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -197,6 +197,37 @@ ...@@ -197,6 +197,37 @@
}); });
} }
function updateIOData() {
var i,
element,
prev_element,
date_diff,
io_data = "";
function convertElement(element) {
var element_list = element.split(',');
return [
element_list[0],
parseFloat(element_list[1].trim()),
parseFloat(element_list[2].trim()),
element_list[3].trim()
];
}
if (gadget.property_dict.io_data.data.length > 1) {
prev_element = convertElement(gadget.property_dict.io_data.data[1]);
io_data = gadget.property_dict.io_data.data[0];
for (i = 2; i < gadget.property_dict.io_data.data.length; i += 1) {
element = convertElement(gadget.property_dict.io_data.data[i]);
date_diff = (new Date(element[0]).getTime() - new Date(prev_element[0]).getTime())/1000;
io_data += "\n" + element[0] + "," +
(element[1] - prev_element[1])/(1024*date_diff) +
"," + (element[2] - prev_element[2])/1000 + "," + element[3];
prev_element = element;
}
}
gadget.property_dict.io_data_csv = io_data;
}
function formatDateToString(d) { function formatDateToString(d) {
return d.toISOString().slice(0,10) + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); return d.toISOString().slice(0,10) + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
} }
...@@ -270,20 +301,21 @@ ...@@ -270,20 +301,21 @@
}); });
}) })
.push(function () { .push(function () {
updateIOData();
return gadget.property_dict.graph_io_rw.updateOptions({ return gadget.property_dict.graph_io_rw.updateOptions({
file: gadget.property_dict.io_data.data.join('\n'), file: gadget.property_dict.io_data_csv,
dateWindow: date_window dateWindow: date_window
}); });
}) })
.push(function () { .push(function () {
return gadget.property_dict.graph_io_counter.updateOptions({ return gadget.property_dict.graph_io_counter.updateOptions({
file: gadget.property_dict.io_data.data.join('\n'), file: gadget.property_dict.io_data_csv,
dateWindow: date_window dateWindow: date_window
}); });
}) })
.push(function () { .push(function () {
return gadget.property_dict.graph_disk_used.updateOptions({ return gadget.property_dict.graph_disk_used.updateOptions({
file: gadget.property_dict.io_data.data.join('\n'), file: gadget.property_dict.io_data_csv,
dateWindow: date_window dateWindow: date_window
}); });
}) })
...@@ -339,10 +371,11 @@ ...@@ -339,10 +371,11 @@
); );
}) })
.push(function () { .push(function () {
updateIOData();
return gadget.property_dict.graph_io_rw.render( return gadget.property_dict.graph_io_rw.render(
gadget.property_dict.io_data.data.join('\n'), gadget.property_dict.io_data_csv,
{ {
xlabel: '<span class="graph-label"><i class="fa fa-bar-chart"></i> IO RW Bytes</span>', xlabel: '<span class="graph-label"><i class="fa fa-bar-chart"></i> IO RW KBytes/s</span>',
labelsDivStyles: { 'textAlign': 'right' }, labelsDivStyles: { 'textAlign': 'right' },
legend: 'always', legend: 'always',
visibility: [true, false, false], visibility: [true, false, false],
...@@ -354,9 +387,9 @@ ...@@ -354,9 +387,9 @@
}) })
.push(function () { .push(function () {
return gadget.property_dict.graph_io_counter.render( return gadget.property_dict.graph_io_counter.render(
gadget.property_dict.io_data.data.join('\n'), gadget.property_dict.io_data_csv,
{ {
xlabel: '<span class="graph-label"><i class="fa fa-bar-chart"></i> IO RW counter</span>', xlabel: '<span class="graph-label"><i class="fa fa-bar-chart"></i> IO RW counter/1000</span>',
labelsDivStyles: { 'textAlign': 'right' }, labelsDivStyles: { 'textAlign': 'right' },
legend: 'always', legend: 'always',
visibility: [false, true, false], visibility: [false, true, false],
...@@ -368,7 +401,7 @@ ...@@ -368,7 +401,7 @@
}) })
.push(function () { .push(function () {
return gadget.property_dict.graph_disk_used.render( return gadget.property_dict.graph_disk_used.render(
gadget.property_dict.io_data.data.join('\n'), gadget.property_dict.io_data_csv,
{ {
xlabel: '<span class="graph-label"><i class="fa fa-pie-chart"></i> Disk Used (Mo)</span>', xlabel: '<span class="graph-label"><i class="fa fa-pie-chart"></i> Disk Used (Mo)</span>',
labelsDivStyles: { 'textAlign': 'right' }, labelsDivStyles: { 'textAlign': 'right' },
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>950.63263.62080.55091</string> </value> <value> <string>951.26681.53491.34628</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463147612.98</float> <float>1464099522.87</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -14,6 +14,6 @@ ...@@ -14,6 +14,6 @@
</head> </head>
<body> <body>
<div data-gadget-url="gadget_monitoring_login_widget.html" data-gadget-scope="login_gadget" data-gadget-sandbox="public"></div> <div data-gadget-url="gadget_monitoring_sync.html" data-gadget-scope="sync_gadget" data-gadget-sandbox="public"></div>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>948.31897.52316.17715</string> </value> <value> <string>951.17777.16093.25088</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1455106483.86</float> <float>1464184595.79</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -54,6 +54,13 @@ ...@@ -54,6 +54,13 @@
}; };
}) })
.ready(function (g) {
return g.getDeclaredGadget("sync_gadget")
.push(function (sync_gadget) {
g.props.sync_gadget = sync_gadget;
});
})
.declareMethod("getCommandUrlFor", function (options) { .declareMethod("getCommandUrlFor", function (options) {
var prefix = '', var prefix = '',
result, result,
...@@ -112,14 +119,11 @@ ...@@ -112,14 +119,11 @@
return gadget.props.start_deferred.promise; return gadget.props.start_deferred.promise;
}) })
.push(function () { .push(function () {
return listenHashChange(gadget); // set auto sync timer
}); return gadget.props.sync_gadget.startSync();
}) })
.push(function () {
.allowPublicAcquisition("loginRedirect", function (param_list) { return listenHashChange(gadget);
return gadget.getDeclaredGadget('login_gadget')
.push(function (login_gadget) {
return login_gadget.loginRedirect.apply(login_gadget, param_list);
}); });
}); });
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>949.3559.49397.5563</string> </value> <value> <string>951.28098.61294.47240</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1455107074.45</float> <float>1464184505.26</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -130,7 +130,7 @@ ...@@ -130,7 +130,7 @@
<div class="overview-header"> <div class="overview-header">
<div class='content-title ui-instance-title'> <div class='content-title ui-instance-title'>
<div class="overview-title"> <div class="overview-title">
<i class="fa fa-link"></i><span>Monitoring Instances list</span> <i class="fa fa-link"></i><span>Monitoring OPML List</span>
</div> </div>
<div class="commands"> <div class="commands">
</div> </div>
...@@ -175,11 +175,12 @@ ...@@ -175,11 +175,12 @@
<input type="radio" name="sync-data-timer" id="sync-data-1h" value="3600000"> <input type="radio" name="sync-data-timer" id="sync-data-1h" value="3600000">
<label for="sync-data-1h">1 h</label> <label for="sync-data-1h">1 h</label>
</fieldset> </fieldset>
<p>Last sync date: <span class="last-sync"></span></p>
<button class="ui-btn ui-corner-all ui-btn-inline sync-all"><i class="fa fa-download"></i> Sync Data Now</button> <button class="ui-btn ui-corner-all ui-btn-inline sync-all"><i class="fa fa-download"></i> Sync Data Now</button>
</div> </div>
<div class="padding-5"> <div class="padding-5">
<h2><strong>Access links:</strong></h2> <h2><strong>Access links:</strong></h2>
<a href="#page=hosting_overview">Access Applications</a> <a href="#page=hosting_overview">Access Hosting Subscriptions</a>
<a href="#page=import_export">Export Settings</a> <a href="#page=import_export">Export Settings</a>
</div> </div>
</div> </div>
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.21014.7809.37444</string> </value> <value> <string>951.27941.44029.13363</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463759407.22</float> <float>1464175062.51</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -18,6 +18,16 @@ ...@@ -18,6 +18,16 @@
return false; return false;
} }
function formatDate(d){
function addZero(n){
return n < 10 ? '0' + n : '' + n;
}
return d.getFullYear() + "-" + addZero(d.getMonth()+1)
+ "-" + addZero(d.getDate()) + " " + addZero(d.getHours())
+ ":" + addZero(d.getMinutes()) + ":" + addZero(d.getMinutes());
}
function setjIODAVConfiguration(gadget, options) { function setjIODAVConfiguration(gadget, options) {
var url = "", var url = "",
//login_input = gadget.props.element.querySelector("input[name='dav_username']").value, //login_input = gadget.props.element.querySelector("input[name='dav_username']").value,
...@@ -98,7 +108,7 @@ ...@@ -98,7 +108,7 @@
enable_search: false, enable_search: false,
disable_href: true, disable_href: true,
column_list: [{ column_list: [{
title: 'Title', title: 'Instance',
select: 'title' select: 'title'
}, { }, {
title: 'Hosting Subscription', title: 'Hosting Subscription',
...@@ -237,7 +247,7 @@ ...@@ -237,7 +247,7 @@
} }
).push(function(new_gadget) { ).push(function(new_gadget) {
jio_gadget = new_gadget; jio_gadget = new_gadget;
jio_gadget.createJio(jio_options); jio_gadget.createJio(jio_options, false);
return jio_gadget.get('config'); return jio_gadget.get('config');
}) })
.push(function (doc) { .push(function (doc) {
...@@ -328,7 +338,7 @@ ...@@ -328,7 +338,7 @@
.declareMethod("render", function (options) { .declareMethod("render", function (options) {
var gadget = this; var gadget = this;
return gadget.updateHeader({ return gadget.updateHeader({
title: "Configure monitoring instances URLs"/*, title: "Configure monitoring Instances"/*,
back_url: "#page=main", back_url: "#page=main",
panel_action: false*/ panel_action: false*/
}) })
...@@ -358,6 +368,16 @@ ...@@ -358,6 +368,16 @@
content = opml_url_template({opml_list: opml_list}); content = opml_url_template({opml_list: opml_list});
gadget.props.element.querySelector("#config-manage .opml-tablelinks > tbody") gadget.props.element.querySelector("#config-manage .opml-tablelinks > tbody")
.innerHTML = content; .innerHTML = content;
return gadget.getSetting('latest_sync_time');
})
.push(function (latest_sync_time) {
if (latest_sync_time !== undefined) {
gadget.props.element.querySelector(".last-sync")
.innerHTML = formatDate(new Date(latest_sync_time));
} else {
gadget.props.element.querySelector(".last-sync")
.innerHTML = '--';
}
}) })
.push(function () { .push(function () {
if (!options.tab || options.tab !== 'manage') { if (!options.tab || options.tab !== 'manage') {
...@@ -478,6 +498,16 @@ ...@@ -478,6 +498,16 @@
.innerHTML = title; .innerHTML = title;
gadget.props.element.querySelector('.sync-all') gadget.props.element.querySelector('.sync-all')
.disabled = false; .disabled = false;
return gadget.getSetting('latest_sync_time');
})
.push(function (latest_sync_time) {
if (latest_sync_time !== undefined) {
gadget.props.element.querySelector(".last-sync")
.innerHTML = formatDate(new Date(latest_sync_time));
} else {
gadget.props.element.querySelector(".last-sync")
.innerHTML = '--';
}
}); });
} }
)); ));
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.21015.25528.41881</string> </value> <value> <string>951.27964.58076.47957</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463759548.44</float> <float>1464176559.4</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -20,10 +20,6 @@ ...@@ -20,10 +20,6 @@
return gadget.getDeclaredGadget("listbox") return gadget.getDeclaredGadget("listbox")
.push(function (listbox_gadget) { .push(function (listbox_gadget) {
gadget.property_dict.listbox = listbox_gadget; gadget.property_dict.listbox = listbox_gadget;
return gadget.getSetting('monitoring_display_style');
})
.push(function (display_option) {
gadget.property_dict.display_option = display_option || 'list';
}); });
}) })
.declareMethod('render', function (options) { .declareMethod('render', function (options) {
...@@ -38,7 +34,7 @@ ...@@ -38,7 +34,7 @@
column_link: {select: 'source'}, column_link: {select: 'source'},
column_id: {select: 'title'}, column_id: {select: 'title'},
column_list: [{ column_list: [{
title: 'Title', title: 'Promise',
select: 'title' select: 'title'
}, { }, {
title: 'Instance', title: 'Instance',
...@@ -47,11 +43,12 @@ ...@@ -47,11 +43,12 @@
title: 'Hosting Subscription', title: 'Hosting Subscription',
select: 'reference' select: 'reference'
}, { }, {
select: 'date', select: 'lastBuildDate',
title: 'Date' title: 'Report Date',
convertDate: true
}, { }, {
select: 'message', select: 'message',
title: 'Output', title: 'Message',
css_class: 'text-overview' css_class: 'text-overview'
}, { }, {
select: 'category', select: 'category',
...@@ -65,13 +62,34 @@ ...@@ -65,13 +62,34 @@
], ],
query: { query: {
select_list: ['title', 'siteTitle', 'reference', 'category', select_list: ['title', 'siteTitle', 'reference', 'category',
'date', 'message', 'link', 'source'], 'date', 'message', 'link', 'source', 'lastBuildDate'],
query: '_id: (NOT "_replicate_%")', query: '_id: (NOT "_replicate_%")',
sort_on: [["category", "ascending"]] sort_on: [["category", "ascending"]]
} }
}; };
return gadget.updateHeader(header) return gadget.updateHeader(header)
.push(function () {
if (!options.hasOwnProperty('search') || !options.hasOwnProperty('filter')) {
return gadget.getSetting('status_list_selection_key')
.push(function (selection) {
if (selection) {
return gadget.redirect({
page: 'status_list',
filter: options.filter || selection.filter,
search: options.search || selection.search
});
}
});
}
})
.push(function () {
var selection = {
filter: options.filter || '',
search: options.search || ''
};
return gadget.setSetting('status_list_selection_key', selection);
})
.push(function () { .push(function () {
if (options.root_title) { if (options.root_title) {
return gadget.property_dict.jio_gadget.getFeedUrlList({ return gadget.property_dict.jio_gadget.getFeedUrlList({
...@@ -99,13 +117,43 @@ ...@@ -99,13 +117,43 @@
} }
} }
listbox_configuration.storage_list = listbox_storage_list; listbox_configuration.storage_list = listbox_storage_list;
gadget.property_dict.options = options;
return gadget.property_dict.listbox.render(listbox_configuration); return gadget.property_dict.listbox.render(listbox_configuration);
}); });
}) })
.declareAcquiredMethod("getSetting", "getSetting") .declareAcquiredMethod("getSetting", "getSetting")
.declareAcquiredMethod("setSetting", "setSetting")
.declareAcquiredMethod("redirect", "redirect")
.declareAcquiredMethod("renderApplication", "renderApplication")
.declareAcquiredMethod("updateHeader", "updateHeader") .declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod("jio_get", "jio_get") .declareAcquiredMethod("jio_get", "jio_get")
.declareAcquiredMethod("jio_allDocs", "jio_allDocs"); .declareAcquiredMethod("jio_allDocs", "jio_allDocs")
.declareService(function () {
var gadget = this;
return gadget.getSetting('status_list_refresh_id')
.push(function (timer_id) {
var new_timer_id;
if (timer_id) {
clearTimeout(timer_id);
}
new_timer_id = setTimeout(function(){
var hash = window.location.toString().split('#')[1],
scroll_position,
doc = document.documentElement;
if (hash.indexOf('page=status_list') >= 0) {
scroll_position = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
return gadget.renderApplication({args: gadget.property_dict.options})
.push(function () {
$(document).scrollTop(scroll_position);
});
}
}, 120000);
return gadget.setSetting('status_list_refresh_id', new_timer_id);
});
});
}(window, rJS, $)); }(window, rJS, $));
\ No newline at end of file
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.16713.3981.39628</string> </value> <value> <string>951.28233.17496.1826</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463501364.68</float> <float>1464193389.51</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<script src="renderjs.js"></script> <script src="renderjs.js"></script>
<script src="gadget_monitoring_sync.js"></script> <script src="gadget_monitoring_sync.js"></script>
<script src="notify.min.js"></script>
</head> </head>
......
...@@ -246,7 +246,7 @@ ...@@ -246,7 +246,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.15435.34499.18483</string> </value> <value> <string>951.15436.10786.58709</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -264,7 +264,7 @@ ...@@ -264,7 +264,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463424729.85</float> <float>1464108182.16</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -29,6 +29,16 @@ ...@@ -29,6 +29,16 @@
monitor_cred_dict = {}, monitor_cred_dict = {},
sync_lock = false; sync_lock = false;
function formatDate(d){
function addZero(n){
return n < 10 ? '0' + n : '' + n;
}
return d.getFullYear() + "-" + addZero(d.getMonth()+1)
+ "-" + addZero(d.getDate()) + " " + addZero(d.getHours())
+ ":" + addZero(d.getMinutes()) + ":" + addZero(d.getMinutes());
}
function syncStorage(gadget, storage_dict, query) { function syncStorage(gadget, storage_dict, query) {
gadget.props.jio_gadget.createJio(storage_dict, true, query); gadget.props.jio_gadget.createJio(storage_dict, true, query);
return gadget.props.jio_gadget.repair() return gadget.props.jio_gadget.repair()
...@@ -104,14 +114,29 @@ ...@@ -104,14 +114,29 @@
} }
function syncAllStorage() { function syncAllStorage() {
var monitor_storage_list = []; var monitor_storage_list = [],
last_sync_time;
if (sync_lock === true) { if (sync_lock === true) {
return []; return [];
} }
if (options.now) { if (options.now) {
sync_lock = true; sync_lock = true;
} }
return gadget.props.login_gadget.getUrlDict() return new RSVP.Queue()
.push(function () {
$(".notifyjs-wrapper").remove();
return $.notify(
"Synchronizing Data...",
{
position:"bottom right",
autoHide: false,
className: "info"
}
);
})
.push(function () {
return gadget.props.login_gadget.getUrlDict();
})
.push(function(url_dict) { .push(function(url_dict) {
monitor_cred_dict = url_dict; monitor_cred_dict = url_dict;
...@@ -131,15 +156,38 @@ ...@@ -131,15 +156,38 @@
return RSVP.all(promise_list); return RSVP.all(promise_list);
}) })
.push(function () { .push(function () {
var sync_time = new Date().getTime(); last_sync_time = new Date().getTime();
sync_lock = false; sync_lock = false;
return gadget.setSetting('latest_sync_time', sync_time); return gadget.setSetting('latest_sync_time', last_sync_time);
})
.push(function () {
$(".notifyjs-wrapper").remove();
return $.notify(
"Synchronisation finished.",
{
position:"bottom right",
autoHide: true,
className: "info",
autoHideDelay: 3000
}
);
})
.push(function () {
return $.notify(
"Last Sync: " + formatDate(new Date(last_sync_time)),
{
position:"bottom right",
autoHide: true,
className: "success",
autoHideDelay: 30000
}
);
}); });
} }
function syncDataTimer() { function syncDataTimer() {
if (gadget.props.timer) { if (gadget.props.timer) {
clearInterval(gadget.props.timer); clearTimeout(gadget.props.timer);
} }
gadget.props.timer = setTimeout(function(){ gadget.props.timer = setTimeout(function(){
return new RSVP.Queue() return new RSVP.Queue()
...@@ -190,8 +238,8 @@ ...@@ -190,8 +238,8 @@
if (latest_sync_time !== undefined) { if (latest_sync_time !== undefined) {
time_diff = current_time - latest_sync_time; time_diff = current_time - latest_sync_time;
if ((time_diff - 10000) >= gadget.props.timer_interval) { if ((time_diff - 10000) >= gadget.props.timer_interval) {
// sync in after 5 second // sync in after 10 second
gadget.props.timer_interval = 5000; gadget.props.timer_interval = 10000;
} else { } else {
gadget.props.timer_interval = gadget.props.timer_interval - time_diff; gadget.props.timer_interval = gadget.props.timer_interval - time_diff;
} }
......
...@@ -242,7 +242,7 @@ ...@@ -242,7 +242,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.20979.34222.27938</string> </value> <value> <string>951.28202.20258.49390</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -260,7 +260,7 @@ ...@@ -260,7 +260,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463759827.91</float> <float>1464194624.26</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -201,6 +201,16 @@ ...@@ -201,6 +201,16 @@
j, j,
k; k;
function formatDate(d){
function addZero(n){
return n < 10 ? '0' + n : '' + n;
}
return d.getFullYear() + "-" + addZero(d.getMonth()+1)
+ "-" + addZero(d.getDate()) + " " + addZero(d.getHours())
+ ":" + addZero(d.getMinutes()) + ":" + addZero(d.getMinutes());
}
gadget.property_dict.data_result = []; gadget.property_dict.data_result = [];
// build handlebars object // build handlebars object
for (k = 0; k < all_docs_result_list.length; k += 1) { for (k = 0; k < all_docs_result_list.length; k += 1) {
...@@ -212,6 +222,9 @@ ...@@ -212,6 +222,9 @@
cell_list = []; cell_list = [];
for (i = 0, i_len = option_dict.column_list.length; i < i_len; i += 1) { for (i = 0, i_len = option_dict.column_list.length; i < i_len; i += 1) {
current_value = all_docs_result_list[k].data.rows[j].value[option_dict.column_list[i].select]; current_value = all_docs_result_list[k].data.rows[j].value[option_dict.column_list[i].select];
if (option_dict.column_list[i].convertDate) {
current_value = formatDate(new Date(current_value));
}
cell_list.push({ cell_list.push({
"href": (option_dict.disable_href) ? '' : link_list[k][j], "href": (option_dict.disable_href) ? '' : link_list[k][j],
"value": current_value, "value": current_value,
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.9258.8411.9847</string> </value> <value> <string>951.28151.1724.37000</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463055528.9</float> <float>1464187692.31</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -67,10 +67,10 @@ ...@@ -67,10 +67,10 @@
<div class='content-title ui-instance-title'> <div class='content-title ui-instance-title'>
<div class="overview-title"> <div class="overview-title">
<i class="fa fa-cubes"></i><span> <i class="fa fa-cubes"></i><span>
{{title}}
{{#if root_title}} {{#if root_title}}
&nbsp; [{{root_title}}] {{root_title}} >&nbsp;
{{/if}} {{/if}}
{{title}}
</span> </span>
</div> </div>
<div class="commands"> <div class="commands">
...@@ -80,16 +80,16 @@ ...@@ -80,16 +80,16 @@
</div> </div>
<div class="content-details"> <div class="content-details">
<div class="ui-text-left" style="padding-bottom: 15px;"> <div class="ui-text-left" style="padding-bottom: 15px;">
<h2><i class="fa fa-info-circle"></i> <strong>Instance Current State</strong></h2> <h2><i class="fa fa-info-circle"></i> <strong>Instance State Information</strong></h2>
<div class="padding-10"> <div class="padding-10">
<div class="ui-grid-a ui-responsive"> <div class="ui-grid-a ui-responsive">
<div class="ui-block-a"> <div class="ui-block-a">
<fieldset data-role="controlgroup" data-type="horizontal"> <fieldset data-role="controlgroup" data-type="horizontal">
{{#if resource_url }} {{#if resource_url }}
<a href="{{resource_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini"><i class="fa fa-pie-chart"></i> Resources</a> <a href="{{resource_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Instance Resource comsumption"><i class="fa fa-pie-chart"></i> Resources</a>
{{/if}} {{/if}}
{{#if process_url }} {{#if process_url }}
<a href="{{process_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini"><i class="fa fa-list-alt"></i> Processes</a> <a href="{{process_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Processes usage"><i class="fa fa-list-alt"></i> Processes</a>
{{/if}} {{/if}}
</fieldset> </fieldset>
</div> </div>
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
<!--<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public"><i class="fa fa-folder-open-o"></i> Public</a>--> <!--<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public"><i class="fa fa-folder-open-o"></i> Public</a>-->
{{/if}} {{/if}}
{{#if private_url}} {{#if private_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Private"><i class="fa fa-lock"></i> Private</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Browse Private Directory"><i class="fa fa-lock"></i> Private</a>
{{/if}} {{/if}}
{{#if rss_url}} {{#if rss_url}}
<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i> RSS</a> <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i> RSS</a>
...@@ -111,19 +111,24 @@ ...@@ -111,19 +111,24 @@
<tr> <tr>
<th><i class="fa fa-tachometer"></i> <strong>Status</strong></th> <th><i class="fa fa-tachometer"></i> <strong>Status</strong></th>
<td><span class="label label-{{status}}">{{status}}</span></td> <td><span class="label label-{{status}}">{{status}}</span></td>
<td>{{date}}</td> <td title="Report Date">{{date}}</td>
</tr> </tr>
{{#with instance}} {{#with instance}}
<tr> <tr>
<th><i class="fa fa-desktop"></i> <strong>Computer</strong></th> <th><i class="fa fa-desktop"></i> <strong>Computer</strong></th>
<td>{{computer}}</td> <td title="Computer Reference">{{computer}}</td>
<td>{{partition}}</td> <td title="Partition Reference">{{partition}}</td>
</tr> </tr>
<tr> <tr>
<th><i class="fa fa-globe"></i> <strong>IP Address</strong></th> <th><i class="fa fa-globe"></i> <strong>IP Addresses</strong></th>
<td>{{ipv4}}</td> <td title="IPv4">{{ipv4}}</td>
<td>{{ipv6}}</td> <td title="IPv6">{{ipv6}}</td>
</tr>
<tr>
<th><i class="fa fa-square-o" aria-hidden="true"></i> <strong>Software Type</strong></th>
<td title="Software type">{{software-type}}</td>
<td><a style="padding: 0; min-height: initial;" href="{{software-release}}" title="{{software-release}}" target='_blank'>Click to open <i class="fa fa-external-link"></i></a></td>
</tr> </tr>
{{/with}} {{/with}}
</table> </table>
...@@ -134,11 +139,11 @@ ...@@ -134,11 +139,11 @@
<script id="promiselist-widget-template" type="text/x-handlebars-template"> <script id="promiselist-widget-template" type="text/x-handlebars-template">
{{#if promise_list}} {{#if promise_list}}
<h2><i class="fa fa-th-list"></i> <strong>Instance Promise List</strong></h2> <h2><i class="fa fa-th-list"></i> <strong>Instance Promises List</strong></h2>
<div style="overflow: auto;" class="padding-lr-10"> <div style="overflow: auto;" class="padding-lr-10">
<table data-role="table" data-mode="columntoggle" class="table-stroke"> <table data-role="table" data-mode="columntoggle" class="table-stroke">
{{#each promise_list}} {{#each promise_list}}
<tr> <tr title="Promise reported at {{../date}}">
<td><a href="{{href}}">{{title}}</a></td> <td><a href="{{href}}">{{title}}</a></td>
<td style="text-align: center;">{{time}}</td> <td style="text-align: center;">{{time}}</td>
<td style="text-align: center;"><span class="label label-{{status}}">{{status}}</span></td> <td style="text-align: center;"><span class="label label-{{status}}">{{status}}</span></td>
...@@ -180,7 +185,7 @@ ...@@ -180,7 +185,7 @@
<div class="overview-header"> <div class="overview-header">
<div class='content-title ui-instance-title'> <div class='content-title ui-instance-title'>
<div class="overview-title"> <div class="overview-title">
<i class="fa fa-desktop"></i><span>Instances Status Overview</span> <i class="fa fa-desktop"></i><span>Software Instances List</span>
</div> </div>
<div class="commands"> <div class="commands">
</div> </div>
......
...@@ -243,7 +243,7 @@ ...@@ -243,7 +243,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.7643.51909.61422</string> </value> <value> <string>951.27817.37423.50688</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -261,7 +261,7 @@ ...@@ -261,7 +261,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1462957858.82</float> <float>1464168027.07</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -205,7 +205,7 @@ ...@@ -205,7 +205,7 @@
}*/ }*/
return RSVP.all([ return RSVP.all([
row_list, row_list,
[{title: 'Status'}, {title: 'Instance'}, {title: 'Root Instance'}] [{title: 'Status'}, {title: 'Instance'}, {title: 'Hosting Subscription'}]
]); ]);
}) })
.push(function (result_list) { .push(function (result_list) {
...@@ -320,7 +320,7 @@ ...@@ -320,7 +320,7 @@
return gadget.property_dict.graph.render( return gadget.property_dict.graph.render(
data, data,
{ {
ylabel: '<span class="graph-label"><i class="fa fa-bar-chart"></i> Promises Result</span>', xlabel: '<span class="graph-label"><i class="fa fa-bar-chart"></i> Promises Success/Failure Result</span>',
legend: 'always', legend: 'always',
labelsDivStyles: { 'textAlign': 'right' } labelsDivStyles: { 'textAlign': 'right' }
}, },
...@@ -366,7 +366,8 @@ ...@@ -366,7 +366,8 @@
} }
} }
promise_content = promise_list_template({ promise_content = promise_list_template({
promise_list: promise_list promise_list: promise_list,
date: current_document.date
}); });
$(element.querySelector('td:first-child > a')).addClass('selected'); $(element.querySelector('td:first-child > a')).addClass('selected');
gadget.property_dict.element.querySelector(".overview-details") gadget.property_dict.element.querySelector(".overview-details")
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>951.10827.14939.1501</string> </value> <value> <string>951.26805.9745.42530</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1463501917.46</float> <float>1464168098.17</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -416,7 +416,7 @@ ...@@ -416,7 +416,7 @@
</item> </item>
<item> <item>
<key> <string>configuration_content_security_policy</string> </key> <key> <string>configuration_content_security_policy</string> </key>
<value> <string>default-src \'none\'; img-src \'self\' data:; media-src \'self\' blob:; connect-src \'self\' mail.tiolive.com data: *.host.vifib.net; script-src \'self\' \'unsafe-eval\'; font-src netdna.bootstrapcdn.com; style-src \'self\' netdna.bootstrapcdn.com \'unsafe-inline\' data:; frame-src \'self\' data:</string> </value> <value> <string>default-src \'none\'; img-src \'self\' data:; media-src \'self\' blob:; connect-src \'self\' mail.tiolive.com data: *; script-src \'self\' \'unsafe-eval\'; font-src netdna.bootstrapcdn.com; style-src \'self\' netdna.bootstrapcdn.com \'unsafe-inline\' data:; frame-src \'self\' data:</string> </value>
</item> </item>
<item> <item>
<key> <string>configuration_default_view_action_reference</string> </key> <key> <string>configuration_default_view_action_reference</string> </key>
...@@ -755,7 +755,7 @@ ...@@ -755,7 +755,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>950.28816.4646.59630</string> </value> <value> <string>950.63263.62080.55091</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -773,7 +773,7 @@ ...@@ -773,7 +773,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1460382495.34</float> <float>1464081494.16</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -4,6 +4,7 @@ web_site_module/monitoring_render_js/** ...@@ -4,6 +4,7 @@ web_site_module/monitoring_render_js/**
web_page_module/gadget_erp5_graph_* web_page_module/gadget_erp5_graph_*
web_page_module/jio_dev_rssfeed_storage_js web_page_module/jio_dev_rssfeed_storage_js
web_page_module/chart_min_js web_page_module/chart_min_js
web_page_module/Notify_min_js
web_page_module/jquery.magnific-popup.min.js web_page_module/jquery.magnific-popup.min.js
web_page_module/magnific-popup.css web_page_module/magnific-popup.css
web_page_module/jsen_json_validator_js web_page_module/jsen_json_validator_js
......
...@@ -4,6 +4,7 @@ web_site_module/monitoring_render_js/** ...@@ -4,6 +4,7 @@ web_site_module/monitoring_render_js/**
web_page_module/gadget_erp5_graph_* web_page_module/gadget_erp5_graph_*
web_page_module/jio_dev_rssfeed_storage_js web_page_module/jio_dev_rssfeed_storage_js
web_page_module/chart_min_js web_page_module/chart_min_js
web_page_module/Notify_min_js
web_page_module/jquery.magnific-popup.min.js web_page_module/jquery.magnific-popup.min.js
web_page_module/magnific-popup.css web_page_module/magnific-popup.css
web_page_module/jsen_json_validator_js web_page_module/jsen_json_validator_js
......
web_page_module/Notify_min_js
web_page_module/chart_min_js web_page_module/chart_min_js
web_page_module/gadget_erp5_graph_* web_page_module/gadget_erp5_graph_*
web_page_module/gadget_monitoring_* web_page_module/gadget_monitoring_*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment