You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

582 lines
22 KiB

10 years ago
10 years ago
7 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
5 years ago
10 years ago
10 years ago
8 years ago
8 years ago
8 years ago
6 years ago
6 years ago
9 years ago
9 years ago
  1. {% extends "base.html" %}
  2. {% load compress hc_extras humanize static %}
  3. {% block description %}
  4. <meta name="description" content="Cron Monitoring. Monitor nightly backups, weekly reports, cron jobs and background tasks. Receive alerts when your tasks don't run on time.">
  5. {% endblock %}
  6. {% block head %}
  7. <link rel="canonical" href="{% site_root %}" />
  8. {% endblock %}
  9. {% block containers %}
  10. <div class="index-bleed">
  11. <div class="container">
  12. <div class="row">
  13. <div class="col-sm-12">
  14. <h1 id="pitch">
  15. Monitoring for your nightly backups,
  16. weekly reports, cron jobs and background tasks.</h1>
  17. </div>
  18. </div>
  19. <div class="row">
  20. <div class="col-sm-6 col-sm-push-6">
  21. <p id="pitch-text">
  22. Make HTTP requests to the Ping URL at regular intervals.
  23. <strong>
  24. When the URL is not pinged on time,
  25. {% site_name %} will send you an alert.
  26. </strong>
  27. You can monitor any service that can make HTTP requests
  28. or send emails.
  29. </p>
  30. </div>
  31. <div class="col-sm-6 col-sm-pull-6">
  32. <h2 id="pitch-subtitle">
  33. For each of your periodic tasks,
  34. {% site_name %} provides an unique URL like this one:
  35. </h2>
  36. <div id="pitch-url">
  37. <code>{{ ping_url }}</code>
  38. </div>
  39. </div>
  40. </div>
  41. <div class="row">
  42. <div class="col-sm-12">
  43. <ul class="nav nav-tabs" role="tablist">
  44. <li class="active">
  45. <a href="#crontab" data-toggle="tab">Crontab</a>
  46. </li>
  47. <li>
  48. <a href="#bash" data-toggle="tab">Bash</a>
  49. </li>
  50. <li>
  51. <a href="#python" data-toggle="tab">Python</a>
  52. </li>
  53. <li class="hidden-xs">
  54. <a href="#ruby" data-toggle="tab">Ruby</a>
  55. </li>
  56. <li class="hidden-xs">
  57. <a href="#node" data-toggle="tab">Node.js</a>
  58. </li>
  59. <li class="hidden-xs">
  60. <a href="#go" data-toggle="tab">Go</a>
  61. </li>
  62. <li class="hidden-xs">
  63. <a href="#php" data-toggle="tab">PHP</a>
  64. </li>
  65. <li class="hidden-xs">
  66. <a href="#cs" data-toggle="tab">C#</a>
  67. </li>
  68. <li class="hidden-xs">
  69. <a href="#browser" data-toggle="tab">Browser</a>
  70. </li>
  71. <li class="hidden-xs">
  72. <a href="#powershell" data-toggle="tab">PowerShell</a>
  73. </li>
  74. <li class="hidden-xs">
  75. <a href="#email" data-toggle="tab">Email</a>
  76. </li>
  77. </ul>
  78. <div class="tab-content">
  79. <div role="tabpanel" class="tab-pane active" id="crontab">
  80. {% include "front/snippets/crontab.html" %}
  81. </div>
  82. <div role="tabpanel" class="tab-pane" id="bash">
  83. {% include "front/snippets/bash_curl.html" %}
  84. {% include "front/snippets/bash_wget.html" %}
  85. </div>
  86. <div role="tabpanel" class="tab-pane" id="python">
  87. {% include "front/snippets/python_urllib2.html" %}
  88. {% include "front/snippets/python_requests.html" %}
  89. </div>
  90. <div role="tabpanel" class="tab-pane" id="ruby">
  91. {% include "front/snippets/ruby.html" %}
  92. </div>
  93. <div role="tabpanel" class="tab-pane" id="node">
  94. {% include "front/snippets/node.html" %}
  95. </div>
  96. <div role="tabpanel" class="tab-pane" id="go">
  97. {% include "front/snippets/go.html" %}
  98. </div>
  99. <div role="tabpanel" class="tab-pane" id="php">
  100. {% include "front/snippets/php.html" %}
  101. </div>
  102. <div role="tabpanel" class="tab-pane" id="cs">
  103. {% include "front/snippets/cs.html" %}
  104. </div>
  105. <div class="tab-pane" id="browser">
  106. {% include "front/snippets/browser.html" %}
  107. </div>
  108. <div class="tab-pane" id="powershell">
  109. {% include "front/snippets/powershell.html" %}
  110. {% include "front/snippets/powershell_inline.html" %}
  111. </div>
  112. <div class="tab-pane tab-pane-email" id="email">
  113. <p>
  114. As an alternative to HTTP and HTTPS requests,
  115. you can "ping" this check by sending an
  116. email message to
  117. <a href="mailto:{{ check.email }}">{{ check.email }}</a>
  118. </p>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. </div>
  125. {% if registration_open %}
  126. <div class="get-started-bleed">
  127. <div class="container">
  128. <div class="row">
  129. <div id="get-started" class="col-sm-8 col-sm-offset-2 text-center">
  130. <h1>{% site_name %} monitors the heartbeat messages sent by your cron jobs, services and APIs.
  131. Get immediate alerts when they don't arrive on schedule. </h1>
  132. <a href="#" data-toggle="modal" data-target="#signup-modal" class="btn btn-lg btn-primary">
  133. Sign Up – It's Free
  134. </a>
  135. </div>
  136. </div>
  137. </div>
  138. </div>
  139. {% endif %}
  140. <div class="container">
  141. <div class="row">
  142. <div class="col-sm-12">
  143. <h2 class="tour-title">A quick peek of what's inside:</h2>
  144. </div>
  145. </div>
  146. <div class="row tour-section">
  147. <div class="col-sm-8">
  148. <img
  149. class="img-responsive"
  150. src="{% static 'img/my_checks.png' %}"
  151. srcset="{% static 'img/my_checks.png'%} 1x, {% static 'img/[email protected]'%} 2x"
  152. alt="My Checks page" />
  153. </div>
  154. <div class="col-sm-4">
  155. <h3>Live-updating Dashboard</h3>
  156. <p>
  157. A list of your checks, one for each Cron job, daemon or
  158. scheduled task you want to monitor.
  159. </p>
  160. <p>
  161. Give names and assign tags to your checks to easily recognize
  162. them later.
  163. </p>
  164. <p>
  165. Tap on the integration icons to toggle them on and off.
  166. </p>
  167. <p>
  168. Adjust Period and Grace time to match the
  169. periodicity and duration of your tasks.
  170. </p>
  171. </div>
  172. </div>
  173. <div class="row tour-section">
  174. <div class="col-sm-8">
  175. <img
  176. class="img-responsive"
  177. src="{% static 'img/period_grace.png' %}"
  178. srcset="{% static 'img/period_grace.png'%} 1x, {% static 'img/[email protected]'%} 2x"
  179. alt="Period/Grace Time dialog" />
  180. </div>
  181. <div class="col-sm-4">
  182. <h3>Simple Configuration</h3>
  183. Each check has configurable <strong>Period</strong> and <strong>Grace Time</strong> parameters.
  184. Depending on these parameters and time since the last ping, the check is in one of the
  185. following states:
  186. <table class="table">
  187. <tr>
  188. <td>
  189. <span class="status icon-new"></span>
  190. </td>
  191. <td>
  192. New.
  193. A check that has been created, but has not received any pings yet.
  194. </td>
  195. </tr>
  196. <tr>
  197. <td>
  198. <span class="status icon-up"></span>
  199. </td>
  200. <td>
  201. Up.
  202. Time since last ping has not exceeded <strong>Period</strong>.
  203. </td>
  204. </tr>
  205. <tr>
  206. <td>
  207. <span class="status icon-grace"></span>
  208. </td>
  209. <td>
  210. Late.
  211. Time since last ping has exceeded <strong>Period</strong>,
  212. but has not yet exceeded <strong>Period</strong> + <strong>Grace</strong>.
  213. </td>
  214. </tr>
  215. <tr>
  216. <td>
  217. <span class="status icon-down"></span>
  218. </td>
  219. <td>
  220. Down.
  221. Time since last ping has exceeded <strong>Period</strong> + <strong>Grace</strong>.
  222. When check goes from "Late" to "Down", {% site_name %}
  223. sends you a notification.
  224. </td>
  225. </tr>
  226. </table>
  227. </div>
  228. </div>
  229. <div class="row tour-section">
  230. <div class="col-sm-8">
  231. <img
  232. class="img-responsive"
  233. src="{% static 'img/cron.png' %}"
  234. srcset="{% static 'img/cron.png'%} 1x, {% static 'img/[email protected]'%} 2x"
  235. alt="Cron dialog" />
  236. </div>
  237. <div class="col-sm-4">
  238. <h3>Cron Expression Support</h3>
  239. <p>
  240. Alternatively, you can define the expected ping dates and times
  241. using a cron expression. See
  242. <a href="{% url 'hc-docs-cron' %}">Cron Syntax Cheatsheet</a>
  243. for the supported syntax features.
  244. </p>
  245. <p>
  246. <strong>Grace Time</strong> specifies how "late" a ping can
  247. be before you will be alerted. Set it to be a little above
  248. the expected duration of your cron job.
  249. </p>
  250. </div>
  251. </div>
  252. <div class="row tour-section">
  253. <div class="col-sm-8">
  254. <img
  255. class="img-responsive"
  256. src="{% static 'img/check_details.png' %}"
  257. srcset="{% static 'img/check_details.png'%} 1x, {% static 'img/[email protected]'%} 2x"
  258. alt="Details Page" />
  259. </div>
  260. <div class="col-sm-4">
  261. <h3>Details and Event Log</h3>
  262. <p>
  263. You can add a longer, free-form description to each
  264. check. Leave notes and pointers for yourself and
  265. for your team.
  266. </p>
  267. <p>
  268. You can also see the log of received pings and
  269. sent "Down" notifications.
  270. </p>
  271. </div>
  272. </div>
  273. <div class="row tour-section">
  274. <div class="col-sm-8">
  275. <img
  276. class="img-responsive"
  277. src="{% static 'img/badges.png' %}"
  278. srcset="{% static 'img/badges.png'%} 1x, {% static 'img/[email protected]'%} 2x"
  279. alt="Details Page" />
  280. </div>
  281. <div class="col-sm-4">
  282. <h3>Public Status Badges</h3>
  283. <p>
  284. {% site_name %} provides status badges for each of the tags
  285. you have used. Additionally, the "{% site_name %}" badge
  286. shows the overall status of all checks in your account.
  287. </p>
  288. <p>
  289. The badges have public, but hard-to-guess URLs.
  290. You can use them in your READMEs, dashboards or status pages.
  291. </p>
  292. </div>
  293. </div>
  294. <div id="welcome-integrations" class="row">
  295. <div class="col-sm-12">
  296. <h1>Integrations<br>
  297. <small>Set up multiple ways to get notified:</small>
  298. </h1>
  299. </div>
  300. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  301. <div class="integration">
  302. <img src="{% static 'img/integrations/email.png' %}" class="icon" alt="" />
  303. <h3>Email<br><small>&nbsp;</small>
  304. </h3>
  305. </div>
  306. </div>
  307. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  308. <div class="integration">
  309. <img src="{% static 'img/integrations/webhook.png' %}" class="icon" alt="" />
  310. <h3>Webhooks<br><small>&nbsp;</small></h3>
  311. </div>
  312. </div>
  313. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  314. {% if enable_slack_btn %}
  315. <a href="{% url 'hc-slack-help' %}" class="integration">
  316. <img src="{% static 'img/integrations/slack.png' %}" class="icon" alt="" />
  317. <h3>Slack<br><small>Chat</small></h3>
  318. </a>
  319. {% else %}
  320. <div class="integration">
  321. <img src="{% static 'img/integrations/slack.png' %}" class="icon" alt="" />
  322. <h3>Slack<br><small>Chat</small></h3>
  323. </div>
  324. {% endif %}
  325. </div>
  326. {% if enable_apprise %}
  327. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  328. <div class="integration">
  329. <img src="{% static 'img/integrations/apprise.png' %}" class="icon" alt="" />
  330. <h3>Apprise<br><small>Push Notifications</small></h3>
  331. </div>
  332. </div>
  333. {% endif %}
  334. {% if enable_discord %}
  335. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  336. <div class="integration">
  337. <img src="{% static 'img/integrations/discord.png' %}" class="icon" alt="" />
  338. <h3>Discord<br><small>Chat</small></h3>
  339. </div>
  340. </div>
  341. {% endif %}
  342. {% if enable_matrix %}
  343. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  344. <div class="integration">
  345. <img src="{% static 'img/integrations/matrix.png' %}" class="icon" alt="" />
  346. <h3>Matrix<br><small>Chat</small></h3>
  347. </div>
  348. </div>
  349. {% endif %}
  350. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  351. <div class="integration">
  352. <img src="{% static 'img/integrations/mattermost.png' %}" class="icon" alt="" />
  353. <h3>Mattermost<br><small>Chat</small></h3>
  354. </div>
  355. </div>
  356. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  357. <div class="integration">
  358. <img src="{% static 'img/integrations/msteams.png' %}" class="icon" alt="" />
  359. <h3>Microsoft Teams<br><small>Chat</small></h3>
  360. </div>
  361. </div>
  362. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  363. <div class="integration">
  364. <img src="{% static 'img/integrations/opsgenie.png' %}" class="icon" alt="" />
  365. <h3>OpsGenie<br><small>Incident Management</small></h3>
  366. </div>
  367. </div>
  368. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  369. {% if enable_pdc %}
  370. <a href="{% url 'hc-pdc-help' %}" class="integration">
  371. <img src="{% static 'img/integrations/pd.png' %}" class="icon" alt="" />
  372. <h3>PagerDuty<br><small>Incident Management</small></h3>
  373. </a>
  374. {% else %}
  375. <div class="integration">
  376. <img src="{% static 'img/integrations/pd.png' %}" class="icon" alt="" />
  377. <h3>PagerDuty<br><small>Incident Management</small></h3>
  378. </div>
  379. {% endif %}
  380. </div>
  381. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  382. <div class="integration">
  383. <img src="{% static 'img/integrations/pagerteam.png' %}" class="icon" alt="" />
  384. <h3>Pager Team <br><small>Incident Management</small></h3>
  385. </div>
  386. </div>
  387. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  388. <div class="integration">
  389. <img src="{% static 'img/integrations/pagertree.png' %}" class="icon" alt="" />
  390. <h3>PagerTree<br><small>Incident Management</small></h3>
  391. </div>
  392. </div>
  393. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  394. <div class="integration">
  395. <img src="{% static 'img/integrations/prometheus.png' %}" class="icon" alt="" />
  396. <h3>Prometheus<br><small>Event Monitoring</small></h3>
  397. </div>
  398. </div>
  399. {% if enable_pushbullet %}
  400. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  401. <div class="integration">
  402. <img src="{% static 'img/integrations/pushbullet.png' %}" class="icon" alt="" />
  403. <h3>Pushbullet<br><small>Push Notifications</small></h3>
  404. </div>
  405. </div>
  406. {% endif %}
  407. {% if enable_pushover %}
  408. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  409. <a href="{% url 'hc-pushover-help' %}" class="integration">
  410. <img src="{% static 'img/integrations/po.png' %}" class="icon" alt="" />
  411. <h3>Pushover<br><small>Push Notifications</small></h3>
  412. </a>
  413. </div>
  414. {% endif %}
  415. {% if enable_shell %}
  416. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  417. <div class="integration">
  418. <img src="{% static 'img/integrations/shell.png' %}" class="icon" alt="" />
  419. <h3>Shell Commands<br><small>&nbsp;</small></h3>
  420. </div>
  421. </div>
  422. {% endif %}
  423. {% if enable_sms %}
  424. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  425. <div class="integration">
  426. <img src="{% static 'img/integrations/sms.png' %}" class="icon" alt="" />
  427. <h3>SMS<br><small>&nbsp;</small></h3>
  428. </div>
  429. </div>
  430. {% endif %}
  431. {% if enable_telegram %}
  432. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  433. <a href="{% url 'hc-telegram-help' %}" class="integration">
  434. <img src="{% static 'img/integrations/telegram.png' %}" class="icon" alt="" />
  435. <h3>Telegram<br><small>Chat</small></h3>
  436. </a>
  437. </div>
  438. {% endif %}
  439. {% if enable_trello %}
  440. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  441. <div class="integration">
  442. <img src="{% static 'img/integrations/trello.png' %}" class="icon" alt="" />
  443. <h3>Trello<br><small>Project Management</small></h3>
  444. </div>
  445. </div>
  446. {% endif %}
  447. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  448. <div class="integration">
  449. <img src="{% static 'img/integrations/victorops.png' %}" class="icon" alt="" />
  450. <h3>VictorOps<br><small>Incident Management</small></h3>
  451. </div>
  452. </div>
  453. {% if enable_whatsapp %}
  454. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  455. <div class="integration">
  456. <img src="{% static 'img/integrations/whatsapp.png' %}" class="icon" alt="" />
  457. <h3>WhatsApp<br><small>Chat</small></h3>
  458. </div>
  459. </div>
  460. {% endif %}
  461. <div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
  462. <div class="integration">
  463. <img src="{% static 'img/integrations/zulip.png' %}" class="icon" alt="" />
  464. <h3>Zulip<br><small>Chat</small></h3>
  465. </div>
  466. </div>
  467. </div>
  468. <div class="row tour-section">
  469. <div class="col-sm-12">
  470. <h1 class="text-center">What Can I Monitor With {% site_name %}?</h1>
  471. </div>
  472. <div class="col-sm-6 use-cases">
  473. <h2>Cron Jobs</h2>
  474. <p>{% site_name %} monitoring is a great fit for cron jobs and cron-like systems
  475. (systemd timers, Jenkins build jobs, Windows Scheduled Tasks, wp-cron, uwsgi cron-like
  476. interface, Heroku Scheduler, ...). A failed cron job often has no immediate visible
  477. consequences, and can go unnoticed for a long time.</p>
  478. <p>Specific examples:</p>
  479. <ul>
  480. <li>Filesystem backups</li>
  481. <li>Database backups</li>
  482. <li>Daily, weekly, monthly report emails</li>
  483. <li>SSL renewals</li>
  484. <li>Business data import and sync</li>
  485. <li>Antivirus scans</li>
  486. <li>Dynamic DNS updates</li>
  487. </ul>
  488. </div>
  489. <div class="col-sm-6 use-cases">
  490. <h2>Processes, Services, Servers</h2>
  491. <p>{% site_name %} monitoring can be used for lightweight server monitoring:
  492. ensuring a particular system service, or the server as a whole is alive and healthy.
  493. Write a shell script that checks for a specific condition, and pings {% site_name %}
  494. if successful. Run the shell script regularly.</p>
  495. <p>Specific examples:</p>
  496. <ul>
  497. <li>Check a specific docker container is running</li>
  498. <li>Check a specific application process is running</li>
  499. <li>Check database replication lag</li>
  500. <li>Check system resources: free disk, free RAM, ...</li>
  501. <li>Send simple, unconditional "I'm alive" messages from your server (or your NAS,
  502. router, Raspberry Pi, ...)</li>
  503. </ul>
  504. </div>
  505. </div>
  506. <div class="row">
  507. {% if registration_open %}
  508. <div class="footer-jumbo-bleed">
  509. <div class="col-sm-10 col-sm-offset-1">
  510. <div id="footer-cta" class="jumbotron text-center">
  511. <p>{% site_name %} is a <strong>free</strong> and
  512. <a href="https://github.com/healthchecks/healthchecks">open source</a> service.
  513. Setting up monitoring for your cron jobs only takes minutes.
  514. Start sleeping better at nights!</p>
  515. <a href="#" data-toggle="modal" data-target="#signup-modal" class="btn btn-lg btn-primary">
  516. Sign Up
  517. </a>
  518. </div>
  519. </div>
  520. </div>
  521. {% endif %}
  522. </div>
  523. </div>
  524. {% include "front/signup_modal.html" %}
  525. {% endblock %}
  526. {% block scripts %}
  527. {% compress js %}
  528. <script src="{% static 'js/jquery-2.1.4.min.js' %}"></script>
  529. <script src="{% static 'js/bootstrap.min.js' %}"></script>
  530. <script src="{% static 'js/clipboard.min.js' %}"></script>
  531. <script src="{% static 'js/snippet-copy.js' %}"></script>
  532. <script src="{% static 'js/signup.js' %}"></script>
  533. {% endcompress %}
  534. {% endblock %}