nofxx-god_web 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. data/.gitignore +1 -0
  2. data/Rakefile +50 -0
  3. data/Readme.textile +82 -0
  4. data/VERSION +1 -0
  5. data/bin/god_web +11 -0
  6. data/bugs/issue-28789de6ef59a981f26031fdf68030a1474251e8.yaml +18 -0
  7. data/bugs/issue-949b87d1535bd55950daf2ec197a25ce2a0de13f.yaml +18 -0
  8. data/bugs/issue-9579e138eec0aee906895eefa1cc546bd7d54b0d.yaml +18 -0
  9. data/bugs/issue-b13b98759d3cf194cfee1bc00f0245f4b19f6cd2.yaml +18 -0
  10. data/bugs/issue-cf27fa73c85d2b7a389cbdcfe669b9703380667c.yaml +18 -0
  11. data/bugs/project.yaml +16 -0
  12. data/god_web.gemspec +109 -0
  13. data/lib/app.rb +56 -0
  14. data/lib/environment.rb +28 -0
  15. data/lib/god_web.rb +197 -0
  16. data/lib/sinatra_http_auth.rb +53 -0
  17. data/public/.DS_Store +0 -0
  18. data/public/app.css +30 -0
  19. data/public/icons/databases.png +0 -0
  20. data/public/icons/gear.png +0 -0
  21. data/public/icons/groups.png +0 -0
  22. data/public/icons/key.png +0 -0
  23. data/public/icons/monitor.png +0 -0
  24. data/public/icons/restart.png +0 -0
  25. data/public/icons/ruby.png +0 -0
  26. data/public/icons/server.png +0 -0
  27. data/public/icons/start.png +0 -0
  28. data/public/icons/stop.png +0 -0
  29. data/public/icons/terminal.png +0 -0
  30. data/public/icons/unmonitor.png +0 -0
  31. data/public/icons/unmonitored.png +0 -0
  32. data/public/icons/unmonitored_old.png +0 -0
  33. data/public/icons/up.png +0 -0
  34. data/public/icons/warn.png +0 -0
  35. data/public/icons/wrench.png +0 -0
  36. data/public/iui/backButton.png +0 -0
  37. data/public/iui/blueButton.png +0 -0
  38. data/public/iui/cancel.png +0 -0
  39. data/public/iui/grayButton.png +0 -0
  40. data/public/iui/iui-logo-touch-icon.png +0 -0
  41. data/public/iui/iui.css +396 -0
  42. data/public/iui/iui.js +510 -0
  43. data/public/iui/iuix.css +1 -0
  44. data/public/iui/iuix.js +1 -0
  45. data/public/iui/listArrow.png +0 -0
  46. data/public/iui/listArrowSel.png +0 -0
  47. data/public/iui/listGroup.png +0 -0
  48. data/public/iui/loading.gif +0 -0
  49. data/public/iui/pinstripes.png +0 -0
  50. data/public/iui/redButton.png +0 -0
  51. data/public/iui/selection.png +0 -0
  52. data/public/iui/thumb.png +0 -0
  53. data/public/iui/toggle.png +0 -0
  54. data/public/iui/toggleOn.png +0 -0
  55. data/public/iui/toolButton.png +0 -0
  56. data/public/iui/toolbar.png +0 -0
  57. data/public/iui/whiteButton.png +0 -0
  58. data/spec/god_web_spec.rb +46 -0
  59. data/spec/spec_helper.rb +11 -0
  60. data/views/command.erb +4 -0
  61. data/views/status.erb +30 -0
  62. data/views/watch.erb +10 -0
  63. metadata +146 -0
@@ -0,0 +1 @@
1
+ body{margin:0;font-family:Helvetica;background:#FFF;color:#000;overflow-x:hidden;-webkit-user-select:none;-webkit-text-size-adjust:none;}body>*:not(.toolbar){display:none;position:absolute;margin:0;padding:0;left:0;top:45px;width:100%;min-height:372px;-webkit-transition-duration:300ms;-webkit-transition-property:-webkit-transform;-webkit-transform:translateX(0%);}body[orient="landscape"]>*:not(.toolbar){min-height:268px;}body>*[selected="true"]{display:block;}a[selected],a:active{background-color:#194fdb!important;background-image:url(listArrowSel.png),url(selection.png)!important;background-repeat:no-repeat,repeat-x;background-position:right center,left top;color:#FFF!important;}a[selected="progress"]{background-image:url(loading.gif),url(selection.png)!important;}body>.toolbar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-bottom:1px solid #2d3642;border-top:1px solid #6d84a2;padding:10px;height:45px;background:url(toolbar.png) #6d84a2 repeat-x;}.toolbar>h1{position:absolute;overflow:hidden;left:50%;margin:1px 0 0 -75px;height:45px;font-size:20px;width:150px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;text-overflow:ellipsis;white-space:nowrap;color:#FFF;}body[orient="landscape"]>.toolbar>h1{margin-left:-125px;width:250px;}.button{position:absolute;overflow:hidden;top:8px;right:6px;margin:0;border-width:0 5px;padding:0 3px;width:auto;height:30px;line-height:30px;font-family:inherit;font-size:12px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.6) 0 -1px 0;text-overflow:ellipsis;text-decoration:none;white-space:nowrap;background:none;-webkit-border-image:url(toolButton.png) 0 5 0 5;}.blueButton{-webkit-border-image:url(blueButton.png) 0 5 0 5;border-width:0 5px;}.leftButton{left:6px;right:auto;}#backButton{display:none;left:6px;right:auto;padding:0;max-width:55px;border-width:0 8px 0 14px;-webkit-border-image:url(backButton.png) 0 8 0 14;}.whiteButton,.redButton,.grayButton{display:block;border-width:0 12px;padding:10px;text-align:center;font-size:20px;font-weight:bold;text-decoration:inherit;color:inherit;}.whiteButton{-webkit-border-image:url(whiteButton.png) 0 12 0 12;text-shadow:rgba(255,255,255,0.7) 0 1px 0;}.redButton{-webkit-border-image:url(redButton.png) 0 12 0 12;color:#fff;text-shadow:#7a0001 0 -1px 0;}.grayButton{-webkit-border-image:url(grayButton.png) 0 12 0 12;color:#FFF;}body>ul>li{position:relative;margin:0;border-bottom:1px solid #E0E0E0;padding:8px 0 8px 10px;font-size:20px;font-weight:bold;list-style:none;}body>ul>li.group{position:relative;top:-1px;margin-bottom:-2px;border-top:1px solid #7d7d7d;border-bottom:1px solid #999;padding:1px 10px;background:url(listGroup.png) repeat-x;font-size:17px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 1px 0;color:#FFF;}body>ul>li.group:first-child{top:0;border-top:none;}body>ul>li>a{display:block;margin:-8px 0 -8px -10px;padding:8px 32px 8px 10px;text-decoration:none;color:inherit;background:url(listArrow.png) no-repeat right center;}a[target="_replace"]{box-sizing:border-box;-webkit-box-sizing:border-box;padding-top:25px;padding-bottom:25px;font-size:18px;color:cornflowerblue;background-color:#FFF;background-image:none;}body>.dialog{top:0;width:100%;min-height:417px;z-index:2;background:rgba(0,0,0,0.8);padding:0;text-align:right;}.dialog>fieldset{box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:0;border:none;border-top:1px solid #6d84a2;padding:10px 6px;background:url(toolbar.png) #7388a5 repeat-x;}.dialog>fieldset>h1{margin:0 10px 0 10px;padding:0;font-size:20px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;}.dialog>fieldset>label{position:absolute;margin:16px 0 0 6px;font-size:14px;color:#999;}input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:8px 0 0 0;padding:6px 6px 6px 44px;font-size:16px;font-weight:normal;}body>.panel{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:10px;background:#c8c8c8 url(pinstripes.png);}.panel>fieldset{position:relative;margin:0 0 20px 0;padding:0;background:#FFF;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid #999;text-align:right;font-size:16px;}.row{position:relative;min-height:42px;border-bottom:1px solid #999;-webkit-border-radius:0;text-align:right;}fieldset>.row:last-child{border-bottom:none!important;}.row>input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin:0;border:none;padding:12px 10px 0 110px;height:42px;background:none;}.row>input[type|=radio],.row>input[type|=checkbox]{margin:7px 7px 0 0;height:25px;width:25px;}.row>label{position:absolute;margin:0 0 0 14px;line-height:42px;font-weight:bold;}.row>span{position:absolute;padding:12px 10px 0 110px;margin:0;}.row>.toggle{position:absolute;top:6px;right:6px;width:100px;height:28px;}.toggle{border:1px solid #888;-webkit-border-radius:6px;background:#FFF url(toggle.png) repeat-x;font-size:19px;font-weight:bold;line-height:30px;}.toggle[toggled="true"]{border:1px solid #143fae;background:#194fdb url(toggleOn.png) repeat-x;}.toggleOn{display:none;position:absolute;width:60px;text-align:center;left:0;top:0;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;}.toggleOff{position:absolute;width:60px;text-align:center;right:0;top:0;color:#666;}.toggle[toggled="true"]>.toggleOn{display:block;}.toggle[toggled="true"]>.toggleOff{display:none;}.thumb{position:absolute;top:-1px;left:-1px;width:40px;height:28px;border:1px solid #888;-webkit-border-radius:6px;background:#fff url(thumb.png) repeat-x;}.toggle[toggled="true"]>.thumb{left:auto;right:-1px;}.panel>h2{margin:0 0 8px 14px;font-size:inherit;font-weight:bold;color:#4d4d70;text-shadow:rgba(255,255,255,0.75) 2px 2px 0;}#preloader{display:none;background-image:url(loading.gif),url(selection.png),url(blueButton.png),url(listArrowSel.png),url(listGroup.png);}
@@ -0,0 +1 @@
1
+ (function(){var _1=20;var _2=0;var _3=null;var _4=null;var _5=0;var _6=location.hash;var _7="#_";var _8=[];var _9=0;var _a;var _b=false;var _c="portrait";var _d="landscape";window.iui={animOn:false,showPage:function(_e,_f){if(_e){if(_4){_4.removeAttribute("selected");_4=null;}if(hasClass(_e,"dialog")){showDialog(_e);}else{var _10=_3;_3=_e;if(_10){setTimeout(slidePages,0,_10,_e,_f);}else{updatePage(_e,_10);}}}},showPageById:function(_11){var _12=$(_11);if(_12){var _13=_8.indexOf(_11);var _14=_13!=-1;if(_14){_8.splice(_13,_8.length);}iui.showPage(_12,_14);}},showPageByHref:function(_15,_16,_17,_18,cb){var req=new XMLHttpRequest();req.onerror=function(){if(cb){cb(false);}};req.onreadystatechange=function(){if(req.readyState==4){if(_18){replaceElementWithSource(_18,req.responseText);}else{var _1b=document.createElement("div");_1b.innerHTML=req.responseText;iui.insertPages(_1b.childNodes);}if(cb){setTimeout(cb,1000,true);}}};if(_16){req.open(_17||"GET",_15,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.setRequestHeader("Content-Length",_16.length);req.send(_16.join("&"));}else{req.open(_17||"GET",_15,true);req.send(null);}},insertPages:function(_1c){var _1d;for(var i=0;i<_1c.length;++i){var _1f=_1c[i];if(_1f.nodeType==1){if(!_1f.id){_1f.id="__"+(++_9)+"__";}var _20=$(_1f.id);if(_20){_20.parentNode.replaceChild(_1f,_20);}else{document.body.appendChild(_1f);}if(_1f.getAttribute("selected")=="true"||!_1d){_1d=_1f;}--i;}}if(_1d){iui.showPage(_1d);}},getSelectedPage:function(){for(var _21=document.body.firstChild;_21;_21=_21.nextSibling){if(_21.nodeType==1&&_21.getAttribute("selected")=="true"){return _21;}}},isNativeUrl:function(_22){for(var i=0;i<iui.nativeUrlPatterns.length;i++){if(_22.match(iui.nativeUrlPatterns[i])){return true;}}return false;},nativeUrlPatterns:[new RegExp("^http://maps.google.com/maps?"),new RegExp("^mailto:"),new RegExp("^tel:"),new RegExp("^http://www.youtube.com/watch\\?v="),new RegExp("^http://www.youtube.com/v/"),new RegExp("^javascript:"),]};addEventListener("load",function(_24){var _25=iui.getSelectedPage();var _26=getPageFromLoc();if(_25){iui.showPage(_25);}if(_26&&(_26!=_25)){iui.showPage(_26);}setTimeout(preloadImages,0);if(typeof window.onorientationchange=="object"){window.onorientationchange=orientChangeHandler;_b=true;setTimeout(orientChangeHandler,0);}setTimeout(checkOrientAndLocation,0);_a=setInterval(checkOrientAndLocation,300);},false);addEventListener("unload",function(_27){return;},false);addEventListener("click",function(_28){var _29=findParent(_28.target,"a");if(_29){function unselect(){_29.removeAttribute("selected");}if(_29.href&&_29.hash&&_29.hash!="#"&&!_29.target){_29.setAttribute("selected","true");iui.showPage($(_29.hash.substr(1)));setTimeout(unselect,500);}else{if(_29==$("backButton")){history.back();}else{if(_29.getAttribute("type")=="submit"){submitForm(findParent(_29,"form"));}else{if(_29.getAttribute("type")=="cancel"){cancelDialog(findParent(_29,"form"));}else{if(_29.target=="_replace"){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,_29,unselect);}else{if(iui.isNativeUrl(_29.href)){return;}else{if(_29.target=="_webapp"){location.href=_29.href;}else{if(!_29.target){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,null,unselect);}else{return;}}}}}}}}_28.preventDefault();}},true);addEventListener("click",function(_2a){var div=findParent(_2a.target,"div");if(div&&hasClass(div,"toggle")){div.setAttribute("toggled",div.getAttribute("toggled")!="true");_2a.preventDefault();}},true);function getPageFromLoc(){var _2c;var _2d=location.hash.match(/#_([^\?_]+)/);if(_2d){_2c=_2d[1];}if(_2c){_2c=$(_2c);}return _2c;}function orientChangeHandler(){var _2e=window.orientation;switch(_2e){case 0:setOrientation(_c);break;case 90:case -90:setOrientation(_d);break;}}function checkOrientAndLocation(){if(!_b){if(window.innerWidth!=_5){_5=window.innerWidth;var _2f=_5==320?_c:_d;setOrientation(_2f);}}if(location.hash!=_6){var _30=location.hash.substr(_7.length);iui.showPageById(_30);}}function setOrientation(_31){document.body.setAttribute("orient",_31);setTimeout(scrollTo,100,0,1);}function showDialog(_32){_4=_32;_32.setAttribute("selected","true");if(hasClass(_32,"dialog")&&!_32.target){showForm(_32);}}function showForm(_33){_33.onsubmit=function(_34){_34.preventDefault();submitForm(_33);};_33.onclick=function(_35){if(_35.target==_33&&hasClass(_33,"dialog")){cancelDialog(_33);}};}function cancelDialog(_36){_36.removeAttribute("selected");}function updatePage(_37,_38){if(!_37.id){_37.id="__"+(++_9)+"__";}location.hash=_6=_7+_37.id;_8.push(_37.id);var _39=$("pageTitle");if(_37.title){_39.innerHTML=_37.title;}if(_37.localName.toLowerCase()=="form"&&!_37.target){showForm(_37);}var _3a=$("backButton");if(_3a){var _3b=$(_8[_8.length-2]);if(_3b&&!_37.getAttribute("hideBackButton")){_3a.style.display="inline";_3a.innerHTML=_3b.title?_3b.title:"Back";}else{_3a.style.display="none";}}}function slidePages(_3c,_3d,_3e){var _3f=(_3e?_3c:_3d).getAttribute("axis");clearInterval(_a);if(canDoSlideAnim()&&_3f!="y"){slide2(_3c,_3d,_3e,slideDone);}else{slide1(_3c,_3d,_3e,_3f,slideDone);}function slideDone(){if(!hasClass(_3d,"dialog")){_3c.removeAttribute("selected");}_a=setInterval(checkOrientAndLocation,300);setTimeout(updatePage,0,_3d,_3c);_3c.removeEventListener("webkitTransitionEnd",slideDone,false);}}function canDoSlideAnim(){return (iui.animOn)&&(typeof WebKitCSSMatrix=="object");}function slide1(_40,_41,_42,_43,cb){if(_43=="y"){(_42?_40:_41).style.top="100%";}else{_41.style.left="100%";}scrollTo(0,1);_41.setAttribute("selected","true");var _45=100;slide();var _46=setInterval(slide,_2);function slide(){_45-=_1;if(_45<=0){_45=0;clearInterval(_46);cb();}if(_43=="y"){_42?_40.style.top=(100-_45)+"%":_41.style.top=_45+"%";}else{_40.style.left=(_42?(100-_45):(_45-100))+"%";_41.style.left=(_42?-_45:_45)+"%";}}}function slide2(_47,_48,_49,cb){_48.style.webkitTransitionDuration="0ms";var _4b="translateX("+(_49?"-":"")+window.innerWidth+"px)";var _4c="translateX("+(_49?"100%":"-100%")+")";_48.style.webkitTransform=_4b;_48.setAttribute("selected","true");_48.style.webkitTransitionDuration="";function startTrans(){_47.style.webkitTransform=_4c;_48.style.webkitTransform="translateX(0%)";}_47.addEventListener("webkitTransitionEnd",cb,false);setTimeout(startTrans,0);}function preloadImages(){var _4d=document.createElement("div");_4d.id="preloader";document.body.appendChild(_4d);}function submitForm(_4e){iui.showPageByHref(_4e.action||"POST",encodeForm(_4e),_4e.method);}function encodeForm(_4f){function encode(_50){for(var i=0;i<_50.length;++i){if(_50[i].name){args.push(_50[i].name+"="+escape(_50[i].value));}}}var _52=[];encode(_4f.getElementsByTagName("input"));encode(_4f.getElementsByTagName("textarea"));encode(_4f.getElementsByTagName("select"));return _52;}function findParent(_53,_54){while(_53&&(_53.nodeType!=1||_53.localName.toLowerCase()!=_54)){_53=_53.parentNode;}return _53;}function hasClass(_55,_56){var re=new RegExp("(^|\\s)"+_56+"($|\\s)");return re.exec(_55.getAttribute("class"))!=null;}function replaceElementWithSource(_58,_59){var _5a=_58.parentNode;var _5b=_58;while(_5a.parentNode!=document.body){_5a=_5a.parentNode;_5b=_5b.parentNode;}var _5c=document.createElement(_5b.localName);_5c.innerHTML=_59;_5a.removeChild(_5b);while(_5c.firstChild){_5a.appendChild(_5c.firstChild);}}function $(id){return document.getElementById(id);}function ddd(){console.log.apply(console,arguments);}})();
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,46 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ GOD_RUN = "I [2009-09-08 02:50:33] INFO: integra [ok] process is running (ProcessRunning)\n"
4
+ GOD_MEM = "I [2009-09-08 02:50:42] INFO: integra [ok] memory within bounds [23600kb, 23600kb, 23600kb, 23604kb, 23604kb] (MemoryUsage)"
5
+ GOD_MOV = "I [2009-09-08 05:06:19] INFO: nginx move 'up' to 'restart'"
6
+ GOD_ACT = "I [2009-09-08 05:06:19] INFO: nginx restart: /etc/rc.d/nginx restart"
7
+
8
+ describe "GodWeb" do
9
+
10
+ it "should find possible statuses" do
11
+ GodWeb.possible_statuses(:up).should eql(["stop", "restart", "unmonitor"])
12
+ end
13
+
14
+ describe "Log formatter" do
15
+ before do
16
+ DRb.stub!(:start_service)
17
+ God::Socket.stub!(:socket)
18
+ DRbObject.should_receive(:new).and_return(mock_drb = mock("DRB"))
19
+ mock_drb.should_receive(:ping).and_return(true)
20
+ @g = GodWeb.new("foo")
21
+ end
22
+
23
+ it "should format log" do
24
+ @g.send(:format_log, GOD_RUN).should eql(
25
+ "<span class='gray'>02:50:33</span> | <span class='green'>ok</span> | process is running " )
26
+ end
27
+
28
+ it "should format log mem" do
29
+ @g.send(:format_log, GOD_MEM).should eql(
30
+ "<span class='gray'>02:50:42</span> | <span class='green'>ok</span> | memory mb [23, 23, 23, 23, 23] " )
31
+ end
32
+
33
+ it "should format log move" do
34
+ @g.send(:format_log, GOD_MOV).should eql(
35
+ "<span class='gray'>05:06:19</span> | <span class='act'>act</span> | move 'up' to 'restart'" )
36
+ end
37
+
38
+ it "should format log act" do
39
+ @g.send(:format_log, GOD_ACT).should eql(
40
+ "<span class='gray'>05:06:19</span> | <span class='act'>act</span> | restart: /etc/rc.d/nginx restart" )
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rubygems'
4
+ require 'god'
5
+ require 'god_web'
6
+ require 'spec'
7
+ require 'spec/autorun'
8
+
9
+ Spec::Runner.configure do |config|
10
+
11
+ end
data/views/command.erb ADDED
@@ -0,0 +1,4 @@
1
+ <div id="<%= @command %>ing_<%= @watch %>" class="panel" title="<%= @title %>">
2
+ <h2><%= @success ? 'Success' : 'Failed' %></h2>
3
+ <%= @log %>
4
+ </div>
data/views/status.erb ADDED
@@ -0,0 +1,30 @@
1
+ <html>
2
+ <head>
3
+ <title><%= @title %></title>
4
+ <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
5
+ <style type="text/css" media="screen">@import "/iui/iui.css";</style>
6
+ <style type="text/css" media="screen">@import "/app.css";</style>
7
+ <script type="application/x-javascript" src="/iui/iui.js"></script>
8
+ <script type="text/javascript"> iui.animOn = true;</script>
9
+ </head>
10
+ <body>
11
+ <div class="toolbar">
12
+ <h1 id="pageTitle"><%= @title %><img src="icons/up.png"></img></h1>
13
+ <a id="backButton" class="button" href="#"></a>
14
+ <a class="button" href="/" target="_self">Refresh</a>
15
+ </div>
16
+ <ul id="home" selected="true" title="GodWeb">
17
+ <% unless @groups.empty? %>
18
+ <li class="group">Groups</li>
19
+ <% @groups.each do |watch| %>
20
+ <li id="<%= watch %>" class="groups"><a href="/g/<%= watch %>"><%= watch %></a></li>
21
+ <% end %>
22
+ <% end %>
23
+ <li class="group">Watches</li>
24
+ <% @watches.each do |watch| %>
25
+ <li id="<%= watch %>" class="<%= @statuses[watch][:state] %>">
26
+ <a href="/w/<%= watch %>"><%= watch %></a></li>
27
+ <% end %>
28
+ </ul>
29
+ </body>
30
+ </html>
data/views/watch.erb ADDED
@@ -0,0 +1,10 @@
1
+ <ul id="<%= @watch %>_commands" title="<%= @title %>">
2
+ <li class="<%= @status %>"> <%= @status %> [<%= Time.now.strftime("%H:%m %m/%d") %>]</li>
3
+ <li class="group">Commands</li>
4
+ <% @commands.each do |command| %>
5
+ <li id="<%= command %>_<%= @watch %>" class="<%= command %>">
6
+ <a href="/w/<%= @watch %>/<%= command %>"><%= command %></a></li>
7
+ <% end %>
8
+ <li class="group">Log</li>
9
+ <div class="info"><p><%= @log %></p></div>
10
+ </ul>
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nofxx-god_web
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Jesse Newland
8
+ - Marcos Piccinini
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-09-08 00:00:00 -07:00
14
+ default_executable: god_web
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: god
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: sinatra
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ version:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ type: :development
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ version:
46
+ description: iPhone friendly sinatra web UI for God
47
+ email: see@github.com
48
+ executables:
49
+ - god_web
50
+ extensions: []
51
+
52
+ extra_rdoc_files: []
53
+
54
+ files:
55
+ - .gitignore
56
+ - Rakefile
57
+ - Readme.textile
58
+ - VERSION
59
+ - bin/god_web
60
+ - bugs/issue-28789de6ef59a981f26031fdf68030a1474251e8.yaml
61
+ - bugs/issue-949b87d1535bd55950daf2ec197a25ce2a0de13f.yaml
62
+ - bugs/issue-9579e138eec0aee906895eefa1cc546bd7d54b0d.yaml
63
+ - bugs/issue-b13b98759d3cf194cfee1bc00f0245f4b19f6cd2.yaml
64
+ - bugs/issue-cf27fa73c85d2b7a389cbdcfe669b9703380667c.yaml
65
+ - bugs/project.yaml
66
+ - god_web.gemspec
67
+ - lib/app.rb
68
+ - lib/environment.rb
69
+ - lib/god_web.rb
70
+ - lib/sinatra_http_auth.rb
71
+ - public/.DS_Store
72
+ - public/app.css
73
+ - public/icons/databases.png
74
+ - public/icons/gear.png
75
+ - public/icons/groups.png
76
+ - public/icons/key.png
77
+ - public/icons/monitor.png
78
+ - public/icons/restart.png
79
+ - public/icons/ruby.png
80
+ - public/icons/server.png
81
+ - public/icons/start.png
82
+ - public/icons/stop.png
83
+ - public/icons/terminal.png
84
+ - public/icons/unmonitor.png
85
+ - public/icons/unmonitored.png
86
+ - public/icons/unmonitored_old.png
87
+ - public/icons/up.png
88
+ - public/icons/warn.png
89
+ - public/icons/wrench.png
90
+ - public/iui/backButton.png
91
+ - public/iui/blueButton.png
92
+ - public/iui/cancel.png
93
+ - public/iui/grayButton.png
94
+ - public/iui/iui-logo-touch-icon.png
95
+ - public/iui/iui.css
96
+ - public/iui/iui.js
97
+ - public/iui/iuix.css
98
+ - public/iui/iuix.js
99
+ - public/iui/listArrow.png
100
+ - public/iui/listArrowSel.png
101
+ - public/iui/listGroup.png
102
+ - public/iui/loading.gif
103
+ - public/iui/pinstripes.png
104
+ - public/iui/redButton.png
105
+ - public/iui/selection.png
106
+ - public/iui/thumb.png
107
+ - public/iui/toggle.png
108
+ - public/iui/toggleOn.png
109
+ - public/iui/toolButton.png
110
+ - public/iui/toolbar.png
111
+ - public/iui/whiteButton.png
112
+ - spec/god_web_spec.rb
113
+ - spec/spec_helper.rb
114
+ - views/command.erb
115
+ - views/status.erb
116
+ - views/watch.erb
117
+ has_rdoc: false
118
+ homepage: http://github.com/nofxx/god_web
119
+ licenses:
120
+ post_install_message:
121
+ rdoc_options:
122
+ - --charset=UTF-8
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: "0"
130
+ version:
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: "0"
136
+ version:
137
+ requirements: []
138
+
139
+ rubyforge_project:
140
+ rubygems_version: 1.3.5
141
+ signing_key:
142
+ specification_version: 3
143
+ summary: iPhone friendly web UI for God
144
+ test_files:
145
+ - spec/spec_helper.rb
146
+ - spec/god_web_spec.rb