From 911b28026a7882e8880b67aced583976318836ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C4=93teris=20Caune?= Date: Mon, 27 Jul 2015 23:25:06 +0300 Subject: [PATCH] More content on welcome page, more alternatives in docs. Rename "Grace Period" to "Grace Time" --- hc/front/management/commands/pygmentize.py | 2 + static/css/style.css | 26 ++-- static/img/my_checks.png | Bin 0 -> 23730 bytes static/img/period_grace.png | Bin 0 -> 25193 bytes static/js/index.js | 49 -------- templates/base.html | 2 +- templates/front/about.html | 62 +++++++++- templates/front/my_checks.html | 4 +- templates/front/snippets/crontab.html | 2 +- templates/front/snippets/crontab.txt | 2 +- templates/front/snippets/node.html | 3 + templates/front/snippets/node.txt | 2 + templates/front/snippets/php.html | 2 + templates/front/snippets/php.txt | 1 + templates/front/welcome.html | 131 +++++++++++++++------ 15 files changed, 185 insertions(+), 103 deletions(-) create mode 100644 static/img/my_checks.png create mode 100644 static/img/period_grace.png delete mode 100644 static/js/index.js create mode 100644 templates/front/snippets/node.html create mode 100644 templates/front/snippets/node.txt create mode 100644 templates/front/snippets/php.html create mode 100644 templates/front/snippets/php.txt diff --git a/hc/front/management/commands/pygmentize.py b/hc/front/management/commands/pygmentize.py index e94f4135..10f05cef 100644 --- a/hc/front/management/commands/pygmentize.py +++ b/hc/front/management/commands/pygmentize.py @@ -19,3 +19,5 @@ class Command(BaseCommand): _process("browser.txt", "browser.html", lexers.JavascriptLexer()) _process("crontab.txt", "crontab.html", lexers.BashLexer()) _process("python.txt", "python.html", lexers.PythonLexer()) + _process("php.txt", "php.html", lexers.PhpLexer()) + _process("node.txt", "node.html", lexers.JavascriptLexer()) diff --git a/static/css/style.css b/static/css/style.css index a450d6ad..022595ce 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -33,10 +33,15 @@ body { } .index-bleed { - background: #e5ece5; + background: #FFF; padding-bottom: 2em; } +.get-started-bleed { + background: #e5ece5; + padding-bottom: 3em; +} + #pitch { text-align: center; padding: 72px 0; @@ -65,18 +70,10 @@ body { border-color: #dddddd; } -#welcome-status, #get-started { +#get-started { margin-top: 4em; } -#welcome-status th { - border-top: 0; -} - -.welcome-browser-controls { - text-align: right; -} - .glyphicon.up, .glyphicon.new, .glyphicon.grace, .glyphicon.down { font-size: 22px; } @@ -107,6 +104,15 @@ body { margin: 0; } +.tour-title { + margin: 50px 0; +} + + +.tour-section { + margin-bottom: 50px; +} + /* Checks */ table.table tr > th.th-name { diff --git a/static/img/my_checks.png b/static/img/my_checks.png new file mode 100644 index 0000000000000000000000000000000000000000..30ae8cb5a6d4a725359f9ce015ca3b5c21490537 GIT binary patch literal 23730 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Ⓢ}sjrKLj4#?4Ycvy9wC^vT$`SCYb99t*PfBydX4tgvG7A!@7F7FtRck>}j>c#rr(`(Ob_%PQ{QM=IJ zQ|VV#K5R;Pj#q5m|Ec4CefQ8amm)sSn zNBNV5T-)F*`&Xb)PbSGiPM_h~t^i8OQQil6mQQz7nj~>Mg1Z+R9F*aUTKzD6r0S=| zn5fwv-HM1)c0OPmIt5e z;MsFJBs23?&vezuML6M2Z%1S;R96XXC=iEcQ&Gh*W&Gg`E)Pv?lPWb$ZYJa8LOvi# zeg`EVnI@f^<{cqOKFnJ%z_c{Zcf=g18!~W$v*zapvqvqW2>6S-BuGD*ys zk-8lErbe@dvZzyqE1U01vg!}#_G)xqc5Y>JT{=cYKz@Q)UInG9B6~Al7TPD^Wm66- zuwLlMK5CHb4HhY2rNc&PGR(0Ayv2rFH$$MRQr&5Q8`WypPyRvs4AFZK=`fP)g!%w6{F% zelEX%i&;I}@db4t;(&ZStF`G_5E6Vy1u=GAZgp`@7yjz}{M4t#hX>r1Ufq^v-v*}X zDBg$W7^YxGDAZcdC~a9hYz?LmPlJgcvRkFT68Q`cioO}|PR_(#OVh73V}gHWwKc8Z zejE!Et;u9Qu=0#r_<%ZcU6kN4ersHk#(HCo4ti72_m1WB1VS0@t1;CqMpm?Z|xbj(WLl=9~GqTN<) z^4m(F%G$(uW+D-O@I%*siCwe{@T)TR=lTW83uhy(!b?@@0yC4Dc$Q{7q1&HA6g00O z-i)s?wNBs3iwlkXIG(=bf-p`crqv8!M!1gO&0}3Q&7|WSdS!O3BNZKjcJ1TzcjF3R ziS8S-%;#^y;h3RLOUjBl!rbv?kP!k4SeBwE*jfz~b|ZD*zdw$7#^@rMbz z=0rrOVpI8il+UJnR6Zmt>f_&t!R!**^rs<8pIr%GIgZ-*1x0z}w>nN{P=utpeF>KR z#Ho`Cy(?@q0vlcggYcEXg|9+1CI09dGY(mF*XJ2DR)j;Ha!kJx@o3c4#nYFbrv-`& z28?rBeBxQx$diFwCPIXS%S!faB3fQzQKnP2AdpBDWv?SuTk!flKZV2V9XJBZB0Vyo zbl~)uWYQ9G$DXldv((H)5G~4c3VGnsQV`K_Z~>ADrvOuLgat?(o56E4fs91FZ@k z6(sGhAGU}O)B!(G7S=srL9)<_@dFpRmpFm;YZeF+wF*32c#mcfIMW(?+Il+^Fb0T( z==*Z$KwC3K6B~b_4$E#M%TjOl&&PM3c3Vj5SUYgW)U5YQRedC#@e3Po=#y+)`({n> zdVg}sL_pCVhE?mMtz=EWQk(q4lF4V)U>_a>n6?SF51Uh{`?>ev57&KU!7CU!$D9TA}=g)OW zb(8j7V}7`QXocr29%dMCs{$u$o?pRw(X(t;kml%EDp4m_=H71CEOLy%7HVDgN+ou+ zbh0%++#~z1Sv*xogrF1cy(x!ACrIT7^d8UR@iX_W=mt?n=+CT{7Hb1sSxL~e%1(~+ z*q|1)=~w0_@G=W}QH1Epvd|i{ZA-_lDRRoM)7`_Csj4UN{|l1T&z9r#r3<_a%%pJ!z7n?$>lPLg&y_)ybPbUEOLLiW# zFz_uc`=2+;HFl}vnJ9nx4W>3EYI}lAm_}+Sf9qHYU-X6Y{D;;2KQpEO17Ms6NBh79K$Q!N@UkO(@y*B1st$x5@{gMcTTzZ=Z-J<#EAgiS5jn!%9vhqY zA5_}N^ItPC5q3BbQc`isV;JZ4Z&y!Bt_+b&D;x9$7tok!*}WVJwKykniSP8R*q8h9 zh9-4X4QKp@?-v&7mqbJ^K#YFg&_k%>sHcIvc3;E|HbjD43N@YVzf(AR^duQ3KFNlG zLD9aFkY1{s6RQCaCb%Thjp#oET@vOsw;xn-r(Lg!;0)nx(MwzG#6WUZfx+X&?k$-l zhH1YH`@|_2QA-t}Z(7J4jz>P|w0U-*Ge0dY3PrE`4mOt!k{4lB?aQhd>?S0M+5dR4 z^G3welyX8mz4zr6>5eoVr&A}9MU1l6wqL*~)mt_-^5m^<)&OlaRYXL>6pW(WZ*S2X z*RxBH8bV)Qd+WW|_mci%#}@9fCiqI;tIxb@N4Dv$rNdf$l;stxiS6@=L#t_a+V?UL zIui>22&F>*!(G#$;JJHC>&p2)_$^|Ejo7<`yG9C+lz|L{Wd3XOjId$1610N7>gls@ z_%ZeaPW2{wx0-!zXWAD5ZR^Hr5eJ0*Tk;4PbF$T5N?zuLI8{kH533z432t4DLFS&x zzh_>)%HFAJXLOK2J89tQw<0N{Bcu#)cw$yr#UU_V+aCw92IuEF?7^k&pXP}nE3O{fz4DnE7;Mjgf>ZRm@`~0kvTh;0JW&Uw?JfcMq2ECOBK#7|M(LP6r zG!cJab=DHMJY1(ddOj>I01TYzcx6}D9;P(ZKeMPXMTmZd`czT zYgfwZP;C7sFWk@qw_~p5ldY$=JMA)aOL{E19`GIrXf>6s%`4^wU(wi>EsN;y3a%Oy zJqJBHP>W7?Yy+Mg;def;a9`zTuxM;f)&^?r*&yib?w{DlVPr`yN*Qj=I=-6>KktfO z9&sQV?bJ;^@+GtF(w4O|~ zn?B=_=Fr4C+{yb8bB;7FZuA6&M)r)6o|@z~Loor^C6R^NLJV z(uifeSgy6X zq6x%5x~`fK17nv;b%k#r}JLWutmSJESwJxB@;^#AJ_U+N;&k z{(BgCMnJBCsh>2{1q#7~0G9sW>g&k4S^Xrl()07tkC&n!+OgPa$^i;sq(LAil%0v?SV&Jd zIg}{p7WxZ~u9GuXlN{eZz(MI(mZGX|(YOV2C3C1D*bXBw=Ixz zXvY`3L!&Y}Z2)oA(VWZsQA_<`>eqsW<><`6vOe9RoXlz!h5W(*auH>=1+cx>h&?g{ zB>T^3_c%&1XEJAp)%c>jS(%%XDCvK1dVlI91K`GT8^{0NW_=qs@rBtA=5e=dS4rRV zY$YMB6<6!t9)Q&4UyVx}G9`!p737zJrCLgyNHF_nJNWJ09bO4hHgJKk_>I=W+h0)) z8KdGBB)J=8d+Fk3wDW}GRO2l0z_t1O5H#upLfRumufR{&`c-BdT;C?k7_8Az>$HT2 zc?i(J)O|m4ir>|xqjX`6EI%hoEl17HPhe>6yBl$C2N@;j=z>%2Y-Ihq%!FzyAo%1)4%2BDM*mOKv}Br zYh}ED~e^YFPCY%aDFkvayzsi*-ZVrH_#T}jJ<|W!KDx|vRZ~Xpb!T$ z7n~yKeJnh~g`F|ELjfv5wSSteq;b%Al)U3R&^3!ieMFcRwMV(F`mPZGz+9NNbtEUa z9P5L$l^YuilibqWP}Sm2?uqIM=eMl@S=2l@xnj2S(tECi>QuwIB_>n-Ej9dLqHRIK z#TknF9G4cUs;$YNM!ct}o8{qMU=+=H zPA1IXlr*Q9O0B<*tdYuwz(9>i5GobwUH=KU{S#jxp!g@pSt>Gp1Oxie1aQ+|Vk+ZM zW0SGdQt6YDpHW#iIfqY_0_%4I80>8f2`TJH3M259KP^0l?>FI#BtK`#*7+`hK%x<5 z;3s`F#oNP=+SJ@EACT|s9tkN zBnzKKMaM`&`Gq{`_34&DJXq}uW8{0Y-_)Dk#JMynu@|JbSsRAnlbIFr{HN7-2BK&@ z9exJFAAjLxU)Gt1@ep8vmrW;So2XddWx>7CD?=Z19l{JR@urcJ6QEqfRs7;&Y~CqJ z^D9WLO7??E_ZAYZB?lpKrLM6=s$Ges8p_I((>Gw~$|J|1K?v2OuHpBK__gU6i9L zrBQCS!(#MzlH`cCTrG0Z%dC}>kNA}b=85wlIN!7wS2SK#@1D0CZ!$e0Wk=?AnaKv= zAo0n9Y~7}*+WPmNk~FQ9vr|hawiIlRsj*4S#cvM4LC|0d?9Up$o~^Gs$9-w*7Ty!8 zuiItHK8NKsltPMs%KkA3L@@mZ6VKp^&KjGl{M?+w(!Ss+sxe%tNA`n=*Tl$?o+Mvj zZ}rBp_H&Vz6XSx?O+AhbgVlaZf2jA@0r8U4`?$C}gvo)UfP}6dDooU#;nx|#tvC~C zu>b(+hrj;|(0=xg$AELpkK0Sqdz{aQT{C;d_jtKk`hm8Vexy)^U?}`Yt_(ktpvY#9 z$S*nnY08yidiRiZwC4v{y2!~yt#1*96Xk^R>i_8Ex}&0Kw!ET91_8-AslbpKat;cT z^N@!mStKU`1%{l%kQo6b4lp1fISfg%g5)GQ4>=1g_`Pq>zO(P_+4uVXQ*}@Et*)wH z*XdjL_U{qg%>Na+QT<~KOrm{!FJ;r*$|J@gfOv)1I9UO3-4!a{-a5R3SsA%awAfk? zE*;h0)m*H4^h(+O*9UpYaE|nwhlUTEdu@zPM+;pT5eaNB^s@#Xr&T%2jebi4qwo+R z1BJ0mKw>~!ZQMr02&IU@0Jgg+{9sxVEw`|?4&yC;kmh7X7>xofK(Fw$zN@@=o|% ze~89~dshCAZTb=$&Re(S1^sC~{Os~xCj?T@3Gi*j?k#St{rFf;pE-iD87GW!EA69; zUbPenoR&xpV51?--wYo0O83e=4V`K*$jc5dsI&WNSN_Zx&5=&M ztSt_3a;f;O9W^MyH?-Yv9nj+a;wJ=MYBs~}+&nB5d zHoG&r!qj>^&qUt|aA%b&zO{@NA0|r0ghiMQd^k{-iT-E&+{t)2n?;D3 z%fYBQgNosYw@Rnrx1KsqPP?UQHA{(TveI)OhFRi!cN1eC^&yLAX{s!!85VtyCTtkb zfjPm<`oxf+y`=#QU(jURyi`EwU)pOC#n^)3vvoO^ z0jLZ2A-JPIa?1H?X~!MN7xQkP=K>G8+0wYzKqx|R!$$-oC6_Vt?!zb42X$jQCvjAA zWGc`(X3*s0L~?kJj`qJSkOoPvvSUY~hp2-Hak_iGX-(T*l4x9#G@RpWFBFVHJx|l0 z&nYzVKA3%EcHBAKt;a-rjZQ~K&SoY*BU}bo!lMUx>s;quQiy}vZ^M8HW&Or_rTE!n zJwQ_s1Cefr#ej4%qAH2Ip-Wz&nG*md4ar@i2R!ij6Q=WLhJc?#R?2Fxzr2j4O}m10 zlFr78mDn*6`o2==?H`Rm)c7|TZT&I`t-ZaNrXRnVUI8UeB5}s_$kIg&ppyN@w&p0ycNp<5fFP!@ z`Dd4^n@&Q6(UcO(uE%=<4&@n4(n(2v))ADj8x`&qks^4Z!#O8J2v6~5NmJc0Z}hlQ z{K^uZ{lYfPAaahjg?GDMV#0#aq#%h@4X|VUyLiX&T_-2wJ5Q4YFHfJ$&b2eqdY`KL z3lm@Zyxl_2FP41bf*~EcNpYEvgg266l|kk{3@y*yKfV_DG;DdyzUZGRvL=TcOtObG z*U*`{VFc8u>Ca|R>)n)19;|Get`q9&ESOh_j>~V)E34#ig_)8Lo?TUOvjI-C!=D<1 z#xnMipNvxS;2U#&P8i->2C4M1?EC3rS^2R(Dm*FqS)Xif^c)Ur5n)S#8Xymg=Py*c ztJfuMISwt0mSZ)5bCzL-<{;uS|^kY2)AZG@t4gQhL2k{o-81A z^DWU9NC;vo3MHpSP;-3td>S#@pqKSqD`q*kKPMu>^I6B_k7&l1mcYErJ6+v&udzg6pedwOCK1yPN6IEOt^`IXZnm z+Kphg7ABk)9a6IH?>Ice#-o|BF27|_n4sMV6b|=81F*qiWWs9b#QS#69C+Lg_F2PD z#>!MRkY`nxiVkZ(B38ihZahlBED_r#*Uy|6-~B5O8=aa_;bE5mEfcF*_O znU><;4Q4UaY_5p?K9F#XAFfn55!%FT!eJD+iNI3g_@cXM$3H@@;PN8Fog{>4NXSHQ zUyD{;*gNd?6X@6-bi^d4$cSIWQo9#xo#64r#ABr1<;B6DS4;?|X#7(``wgWv4fguCQE zRKnJqd6)~?o5)1Tl3pLHW_Lw?-aodAy&jPVTjn4>jF5C}83ayq;$osx0ju2#=v|Ks$IaSgwAI%tpXX+f1h#m1T241~uxJ)1308 zqgi$Uvod7-dSMn#$E3D*%?^@N#j-8SYwXvQNoOYPZq6!eMlOB ztmt7yrXBkAoL0S5ZLwkLN#>SwsD!Wk4S|0mlLik;RMtVoYu+9E|>~3)tRH zl{_rC<w=04*FEaMlDgeyZtPBG|$kU|4$UG-zfZ0dPzQ^Dqq&Y#b ztywyPbE3ppjKXMM5~+y>@E)$js2T8sB=aVdMhjStXz?&LeyVtaV~vYkoNLS&eTKwt zu`z0A^e2Q`(KY}Q5nU@>zd&p+3{oh?XK6}}a#|2cx2uZDPqIu%+LRRY)DN#Djd`C% zta+WqjX9xkWIF}OV_@8_1A>0$5;0!vCmVZcMm6%d3I7)C!!`WE%1w}tM{KMEpjnyA zw~d)Zw1Eh;6WFTd3Gvvy`_M`(rQ1D{%uReNPt@(n_K+Me>|kA_6b{f?QK7z@<19VN*d>SC-_Ik1agbAuZ6j5I#Agh>=$C?Q3Rn*A}2m z+=2E6xiM2zZbpFysK^7h`JecNO{fN?xH6Z!iu=8mXix&_jo3VmX;N-Tt4=Y99I~|s zy?Vc*Kj(d&ub)YOUN1tW@}@?jI`xrcih&=e?oV&F$ce8{#yzT`iM>6;mc?S9qiRBQ zm=#0Yb!W4Umc<;OCaW1Tdtm&~vaD6I5uVWJEVP<2WQKjoG&OFwPQPT!8s-$aO?n)> zg48(E-J^!d)E%luWS!GtDI-;lL?;M7uudj8mQk)#4tQB{Se=Qe2*b zIyA#V6^^q|+LPC-rmj1F||!Y&~1*z*?VKjgX=-JCuk100s(kT`4- zB`a_#m^Bnu@w!gADDOiOY)WQR9;E^5_52Z;0m|#>TN>=3L3t3Wx<{?We+wC(v53*U z(8RQ9yhyxztz|m4mszXtds;iWcMV}Gr%Ox$1~>1|O0ADgvJ1|qXvz2;%eMPkA5RZ7 ztYsLEDMiz*n=VJfU}dK=DmHqk zMcpFgrXy6AIu4Ab6`)dZW4PJf`xqd`$_3)e-r`>rwCnE^B(j+0YBqWT*SmRFp$zLB z^V-^;WZz{z6QD^2-@haQoI5FBsu{M_+of}?1<>pTuAtBY(X|y2WyjyZ)sTyoX*W{| zvZKIb0T{I+;ypHw?#K*aLwC&m=jP&p+`E7qOa- zzWwhoS)T;{c~j|26haDtz-XHy&wx*7FfrR^m2-i_af2L^_FX$HV^yG@( zP98I8vrhl}!S61Q!3K_H{CK?jwOcFTwvO|Mp`rg~rH3xPJxLmZyNpZ0$_uJ5JUjzDo$RDWv1-m=w{ROr6e_;4mEos!HF0i`a{ub9n zD}CDV6|r)0Oww0Xn)$*x0gyZ7VpxQA-n$))D0k}Vu5Tsu>RkE``P-Jdsir5pB`acw z(syhyf0$+dyAUYjQD-6vJlwn>A^cs2c_ z-cjvSAWJsK1O7mWEK=cFLWS;DeLRY__hku?mV_hnC^ec`t5{0@2lpahy&0c*14Xa9 zd-#tiphWx^M-6cbc$WgQYWXooVGI+tCVM@xC%#$#hIHnfEQ|+AbUtq z@Y0^&uQMf9j4LIwN-#w7g3Py>Ld;545h07_%1lHo9>sJwHbT_9c%Y>UUBXaW3iw-Q zHXPz7veoaSLUM41cY>KHwx}~A(Pzco5UU;S@@C5@^Y{D$j0t2BVT9R*MYzy+aG=DK z)CjpzEvoQppSA=YhbZN<{4V#R8RDW+a~pESJ-??Qp(hC%OlAJC(o9i&LbF0GVo@4O z62QpC^e=7IP$@TM{IrCM0y&YNUN8COBos(EpVSFSe8MnT4V#^!e<4|Eaq!srQj09B zE#51*Aryb?<5}^`Iy*E z^;1oRMZIVcc!B#Ndp!#%#HilqImoV#eGyR8rxA0l^-NY<+DZXqE4#mo!muoKI*V7b zn15J%igc+WY-Tw5?dkV6?1%@zE`v^(-9wh?yzC%s-F{tSrQ=#q>BMqBW)pa$zyKtv z^-R;S6H`Sy-pcb92)ryu;rGbLS7yHNB-8RarV)wAmKPEOcx*JZS{#FbOs|7iDa5T4 zRnlU8w@h=rMHKSChThU54fAs^PfLJK>K(veztEe~De{ZNj+z$J#Y#K|(CAf+hL!Zn z>w7!{3E@V$Ar+=Qkj8F$OY8+IA~e&{h>nj|P2*&9yexo+C49Dmbt6&~@k4UyjU%0T z&@aQ<6S5e6VMFWJ8-QZg94a`&R>00wlijpB`Fk@eWjQh3jS1!E2Lqj{fVMM?v2P(eiCtYW zfj29tH^e+p8xO z-o%Jrl4@G;GT);#hYW7#o)e~2I(>FFo-Mfa1i;bcVUM?i0U5DLcc*B;A^p9Y1ovbV z!@rV72*rS_v6yEEk5DQ-eesmgiUNt-hK<-?stLcm{9Qj zKy-T0dob4D3d0AOq_?zOciOuKcjbRHrU$jQ(A*y6-d(=}_BKiH$@b`MJiXVh9)te| zjT<*q!+(YIp6uJ?*h=M!_Y6mDeKLpxS=$5r-=ijdve{OW_s%3_iisD~UG6L>%B#wi I$$$g@3pVT$_5c6? literal 0 HcmV?d00001 diff --git a/static/img/period_grace.png b/static/img/period_grace.png new file mode 100644 index 0000000000000000000000000000000000000000..1b262d48ed6a62c2537765db2a5f26f69e240d4a GIT binary patch literal 25193 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 literal 0 HcmV?d00001 diff --git a/static/js/index.js b/static/js/index.js deleted file mode 100644 index 98ebf3f4..00000000 --- a/static/js/index.js +++ /dev/null @@ -1,49 +0,0 @@ -$(function () { - $('[data-toggle="tooltip"]').tooltip(); - - var code = $("#check-code").text(); - var url = $("#pitch-url").text(); - url = url.replace("http://", "//"); - - var lastPing = null; - var lastPingHuman = null; - - $("#run-it").click(function() { - $.get(url); - }); - - function checkLastPing() { - $.getJSON("/status/" + code + "/", function(data) { - if (data.last_ping != lastPing) { - lastPing = data.last_ping; - $("#timer").data("timer", data.secs_to_alert); - } - - var lph = data.last_ping_human; - if (lph && lph.indexOf("seconds ago") > 0) - data.last_ping_human = "seconds ago"; - - if (data.last_ping_human != lastPingHuman) { - lastPingHuman = data.last_ping_human; - $("#last-ping").text(lastPingHuman); - } - }); - } - - function updateTimer() { - var timer = parseInt($("#timer").data("timer")); - if (timer == 0) - return; - - var s = timer % 60; - var m = parseInt(timer / 60) % 60; - var h = parseInt(timer / 3600); - $("#timer").text(h + "h " + m + "m " + s + "s"); - - $("#timer").data("timer", timer - 1); - } - - setInterval(checkLastPing, 3000); - setInterval(updateTimer, 1000); - -}); \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 2dfb65a6..895c3985 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,7 +4,7 @@ {% block title %}healthchecks.io - Get Notified When Your Cron Jobs Fail{% endblock %} - + diff --git a/templates/front/about.html b/templates/front/about.html index f6322598..8a2b648e 100644 --- a/templates/front/about.html +++ b/templates/front/about.html @@ -33,12 +33,64 @@

Alternative Services

- + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Cronitor.io + +

One monitor is free.

+

50 monitors is $24.95/mo.

+
+ Cronitor.io + +

One snitch is free.

+

3 snitches is $5/mo.

+

100 snitches is $19/mo.

+
+ Coal Mine + +

Open Source.

+

No hosted service. No web UI, just API.

+
+ PushMon + +

Free during public beta.

+
+ steward.io + +

15 jobs is free.

+

75 jobs is $7/mo.

+
+ CronAlarm + +

10 jobs is $5/mo.

+

100 jobs is $20/mo.

+
{% endblock %} \ No newline at end of file diff --git a/templates/front/my_checks.html b/templates/front/my_checks.html index 0f4bb8dd..d4f9ca2a 100644 --- a/templates/front/my_checks.html +++ b/templates/front/my_checks.html @@ -169,7 +169,7 @@ class="update-timeout-label" data-toggle="tooltip" title="When check is late, how much time to wait until alert is sent"> - Grace Period + Grace Time

- Grace Period + Grace Time When a check is late, how much time to wait until alert is sent.

diff --git a/templates/front/snippets/crontab.html b/templates/front/snippets/crontab.html index 760042a4..67581548 100644 --- a/templates/front/snippets/crontab.html +++ b/templates/front/snippets/crontab.html @@ -1,3 +1,3 @@ -
# m h  dom mon dow   command
+
# m h dom mon dow   command
   8 6 *   *   *     /home/user/tasks/backup_all.sh && curl {{ ping_url }}
 
diff --git a/templates/front/snippets/crontab.txt b/templates/front/snippets/crontab.txt index 1927991b..c7e8aad3 100644 --- a/templates/front/snippets/crontab.txt +++ b/templates/front/snippets/crontab.txt @@ -1,2 +1,2 @@ -# m h dom mon dow command +# m h dom mon dow command 8 6 * * * /home/user/tasks/backup_all.sh && curl PING_URL \ No newline at end of file diff --git a/templates/front/snippets/node.html b/templates/front/snippets/node.html new file mode 100644 index 00000000..f3b216a6 --- /dev/null +++ b/templates/front/snippets/node.html @@ -0,0 +1,3 @@ +
var http = require('http');
+http.get("{{ ping_url }}");
+
diff --git a/templates/front/snippets/node.txt b/templates/front/snippets/node.txt new file mode 100644 index 00000000..3df15df0 --- /dev/null +++ b/templates/front/snippets/node.txt @@ -0,0 +1,2 @@ +var http = require('http'); +http.get("PING_URL"); \ No newline at end of file diff --git a/templates/front/snippets/php.html b/templates/front/snippets/php.html new file mode 100644 index 00000000..e30dec60 --- /dev/null +++ b/templates/front/snippets/php.html @@ -0,0 +1,2 @@ +
file_get_contents('{{ ping_url }}');
+
diff --git a/templates/front/snippets/php.txt b/templates/front/snippets/php.txt new file mode 100644 index 00000000..78fbe619 --- /dev/null +++ b/templates/front/snippets/php.txt @@ -0,0 +1 @@ +file_get_contents('PING_URL'); \ No newline at end of file diff --git a/templates/front/welcome.html b/templates/front/welcome.html index b25a8666..560e8f04 100644 --- a/templates/front/welcome.html +++ b/templates/front/welcome.html @@ -50,11 +50,14 @@
{% include "front/snippets/python.html" %}
+
+ {% include "front/snippets/node.html" %} +
+
+ {% include "front/snippets/php.html" %} +
{% include "front/snippets/browser.html" %} -
- -
@@ -62,38 +65,10 @@ +
-
-

Status - {{ check.code }} -

- - - - - - - - - - - -
Last pingPeriodAlert in
- {% if check.last_ping %} - {{ check.last_ping|naturaltime }} - {% else %} - Never - {% endif %} - - 1 day - (log in to change) - - {{ timer_formatted }} -
-
- -
+

E-mail Address to Receive Alerts:

{% csrf_token %} @@ -121,12 +96,100 @@
+
+ +
+
+
+

A quick peek of what's inside:

+
+
+ +
+
+ My Checks page +
+
+

+ A list of your checks, one for each Cron job, daemon or + periodically running task you want to monitor. +

+

+ Give names to your checks to easily recognize them + later. Adjust Period and Grace time to match periodicity + and duration of your tasks. +

+
+
+ +
+
+ Period/Grace Time dialog +
+
+ Each check has configurable Period and Grace Time parameters. + Depending on these parameters and time since the last ping, the check is in one of the + following states: + + + + + + + + + + + + + + + + + + +
+ + + New. + A check that has been created, but has not received any pings yet. +
+ + + Up. + Time since last ping has not exceeded Period. +
+ + + Late. + Time since last ping has exceeded Period, + but has not yet exceeded Period + Grace. +
+ + + Down. + Time since last ping has exceeded Period + Grace. + When check goes from "Late" to "Down", HealthChecks + sends you an email alert. +
+ +
+
+ +
+ + + + {% endblock %} {% block scripts %} {% compress js %} - {% endcompress %} {% endblock %}