Category Archives: Knowledge base

Integration with slack

Thanks to one our our client we added a cool new feature to make our service better.slack-logo-color

If you use Slack for communication needs, you can integrate your Slack service with

Integration process is simple and should take not more than 5 minutes. After everything is done we will start delivering downtime alerts right to one of your chat rooms.

Step 1 – create a webhook

Log in to your Slack account and then, navigate to “Configure integrations > Incoming Webhooks“.

Slack Incoming webhooks create webhook - select channelThen select channel for alerts. We will be able to post messages to single channel for every webhook URL.

Slack Incoming webhooks create webhook -  generate webhook url

When channel is selected, click this big green button with “Add Incoming Webhook Integration” label. Slack Incoming webhooks create webhook - copy urlThen, when page is reloaded, just copy the red url and keep it for further use.

Step2 – add webhook URL to your account

When URL is generated it’s time to add it to your account.Slack Incoming webhooks create webhook - paste it to your account settings page

To do that, simply log in to you account and navigate to Account Settings page. Then scroll to Alerts section and simply paste the URL you have from to the URL input field.

Slack Incoming webhooks create webhook - save it and check the test messageRight after you hit the “add” button we will send you a test message. If you got it, everything is done.

Rely on Slack messages only

If you don’t like receiving alerts to your e-mail inbox, you can safely turn it off on your Account Settings page and rely only on Slack messages.

However, please keep in mind, that if for some reason we will not able to send up/downtime alert to your Slack channel, we will send it by e-mail as a fallback.
* Our service is not created by, affiliated with, or supported by Slack Technologies, Inc.

Realtime uptime widget

If you’re our superuser you probably noticed you have an option to create a public page of your tests.

To make this functionality more interactive and custom, we created a possibility to add a widget wherever you want with the realtime uptime chart.

Adding a widget to your site is really simple, and if you have a opportunity to create a <script> tag to your website, you’ll definitely handle it without any problems.

Step 1 – create a public uptime monitoring page

First thing you need to do is create a public uptime monitoring page. To do that, simply click on the yellow “create hash” button, next to a test name.

Create hash button

When you clicked the button, a new hash is created and now you have access to two different buttons: public page and reset.

Single test on list

Public page is a public link with a realtime uptime monitoring chart. Anytime our robot access your site and report the uptime status, you’ll see a green dot on a chart.

If you hover the dot, you’ll also get an information about the single test proceeded

Realtime uptime monitoring - test site

Remember the page is as public in a same way as your dropbox share links. It is not protected by password or your account session. Anyone who knows the link, can access the site.

If you’d like change the link, you can always do that clicking the “reset” button on a tests list.

Step 2 – copy the secret part

Your new public realtime page URL looks similar to this one:

Now, write down (copy) two last parts of the URL. You’ll need it for widget configuration.

For this example, we need to copy this: “d5ffc4218f/104”

Step 3 – insert a <script> to your site.

Now it’s time for the last step. Simply copy the html below and paste it wherever you want (for example on you blog sidebar, just like we did here).

<div id=”uptime_graph” data-title=” ” data-hash=”d5ffc4218f/104″></div>
<script src=”” data-target=”uptime_graph”></script>

The only thing you need to customize to make it work for your test is to change the “data-hash” attribute. Paste there the two last one parts of the URL you copied on step 2.

You can also change the “data-title” attribute. If you leave it empty, there will be no title at all (just the chart and your logo), just like we did on this blog.

I’m a web developer, how to customize it

If you’re a web developer, you probably need to customize it.

You can do it both way:

By configuration

The script has basic configuration options. You can change the title (see above) and height of the iframe which displays the widget (default is 300px, max is 500px).

By making your own javascript

If you like to, you can always make your own script, using our as an example.

Source code of the script, extended information can be found on our GitHub repository.



Freezing curl causing a lot of troubles

Not-so-infinite loops

Our website monitoring mechanism is actually quite simple.  We use curl to make a connection with the website and then we grab some data to check if your site is up or down (actually, curl has more power and we use it in our new features we develop right now as well).

To make sure we are able to test your site in almost equal time intervals, we need to have a couple of testing agents working at the same time.

The job of these agents is to sit and wait for available tasks for some period of time. If there are any, agent reserves one of them and does the actual website uptime test.

However, since we started the Ukrainian and Russian government websites monitoring site (lots of downtimes), we found out that some of the scripts sometimes freeze for no good reason.

It wasn’t a serious problem, because it didn’t influence the uptime monitoring service reliability. However, the zombie agents were taking our precious server resources to do nothing.

Curl has two timeout options

And then, there comes the time when we decided to fix this issue. While debugging we found out that the solution is quite trivial.

As you probably know, we assumed that if your site is not responding in 10 seconds after our call, it means that the website is down. Nobody is waiting 10 seconds for first document request anyway. Even if your server works, the user nearby our agent’s server location might not be able to notice this.

These 10 seconds of timeout are set as a curl option (CURLOPT_CONNECTTIMEOUT). It means “if the server is not responding in X seconds, do not wait more and return connection error [http 0]”.

What we didn’t notice is the other curl option – CURLOPT_TIMEOUT and it was the cause of our problems. The option is more important in this case since it forbids curl to freeze. Connection timeout is related to the connection only. If connection is made quickly, the clock for the whole script is not ticking any more.

Summary (tl;dr)

If you plan to use a curl mechanism inside a do-while loop with iteration limit, remember to set a curlopt_timeout or your loop won’t die sometimes.



Tutorial for custom maintenance mode in WordPress

Maintenance mode in WordPress

Maintenance mode is the “be right back” state of your website.  You should use it any time you are changing the WordPress code or making anything else with a non-zero possibility to fail and affect a user experience.

You’ve probably noticed that WordPress is actually turning the built-in maintenance mode while upgrading the WP core, or adding new plugins.

In this article, you’ll learn how it works, how to turn the maintenance mode on manually, and how to make it look better.

How the built-in maintenance mode works

When you click the “upgrade WordPress” button,  Wordpress is inserting the .maintenance php file into the site’s root directory with $upgrading variable set to time().

Wordpress maintenance mode function

Every single time someone enters your site, WordPress is looking for this particular file and if it exists, WordPress is comparing the $upgrading variable with the time() value. If the difference is less than 600 seconds (10 minutes), the maintenance mode function is looking for a custom maintenance.php inside wp-content directory.

If it exists, WordPress loads that file and exits the compilation process.

If not, the maintenance function compiles the built-in maintenance landing page and ends with the compilation process. What’s important, WordPress handles the maintenance mode well with a proper http code sending to a user.

Find out why the proper http code is important.

How to make a custom maintenance mode landing page?

To make a custom maintenance mode landing page, you just need to make your own php script and save it into wp-content directory as maintenance.php file. Every time your site is in the maintenance mode, WordPress will look for this file and compile it, ignoring the built-in landing page.

To make it easier for you, we’ve made an example script. You can grab it from our GitHub repository and customise it any way you like.

How to turn on the maintenance mode manually?

If you would like to turn on the maintenance mode manually, without any plugin you just need to insert the .maintenance file into your WordPress main folder.

We made the file for you, extending it with an IP white list and secret key white list support. You can grab it from our GitHub repo as well as the maintenance.php example file.


Common HTTP codes list with meanings

HTTP? What a heck is that?

Long story short, HTTP is an abbreviation of “Hypertext Transfer Protocol”. This protocol defines how machines like your computer or mobile phone should talk to any other machine.

Of course, there are plenty of other protocols with different purposes. You’re probably familiar with some of them like FTP, or SSH.

The main and most common purpose of HTTP is to connect a client machine with a server machine to get or post some data.

Here,  we are focused mostly on HTTP protocols. Mostly because it’s the most common protocol which we deal with on while we monitor your sites.

You can find more about http protocol in “how machines talk to each other” article.

HTTP codes list

You can find full list of http codes on the Wikipedia.  If you’re familiar with the server maintenance, you probably already know them. If not, you should check the Wikipedia list anyway.

In this article I’d like to tell you more about most common http codes, and their meanings related to service (or any other uptime monitoring service as well). The article is meant to be a quick manual for those who are not familiar with technology, but need to know the most important things for their website.


Your server should respond to our request with this code when everything is fine. When server sends that code to a client with a document header, it means “everything is OK, you can find the document you requested below”.

However, treats this kind of response as a downtime anyway in one case – when you set a keyword to be found in document body and it’s not there.

We thought about this case a lot and as a result we decided to make this that way.

As far as we know, sometimes websites doesn’t respond with proper http code when they are down. For example, there are lots of buggy WordPress themes which return http 200 OK even when a site is under the maintenance mode.  We can not change the world, but we can deal with it giving you a tool to detect the downtime anyway.

Besides the buggy maintenance mode, this feature is also considered a deface detection trigger.

The other downtime case with the http 200 code is when your site is hacked (cracked) and defaced.  Most often, the cracker is going to change the entire site to get the attention. If you set a must-have keyword to your test, there’s quite good chance to detect the problem and send you a notice right away.

HTTP 500 Internal Server Error

In the perfect world we wouldn’t see this code in any production environment.  It means that something really wrong happened while compiling a website code or there is some problem with your hosting.

If you see a downtime notice from with this error, you should check your website as soon as possible.

If you’re able to check error logs on your server, you should do that as well.

However, if you can’t find any bug on your website, and downtimes are still happening from time to time – you should consider changing your hosting provider.

HTTP 503 Service Unavailable

This code is a common maintenance mode server response. It means that your site is temporary unavailable, and all visitors (including Google spiders) should check it back in a couple of minutes.

It’s important to set that code when you’re working on production environment and your work can possibly affect user experience with the site.

For example, if you’re upgrading your WordPress, the site is turning a maintenance mode for the entire upgrading process with that code.  Any user coming to your WordPress site at that exact time would see the “come back later” notice.

Why is it so important?

If your “maintenance mode” sends HTTP 200 OK code, there is possibility that in that exact time some search crawlers are going to visit your site to make a copy to its index. I bet you don’t want to get your site indexed while it’s in the maintenance - maintenance mode with http 200 code indexed

HTTP 0, “not available”

It’s not a real http code. You won’t find it on the Wikipedia list, and your server is not responding with that code anytime.

However we use this code as a “no response” code.

If your server is not responding as quickly as any user is willing to wait (~10–15 seconds) it means your site is down. treats this connection as failed as well and sends you a downtime notice with this code in description.

HTTP 404 Not Found

This code simply means that given URL doesn’t match any resource on the server. If you see this code on your downtime message and you’re sure that the URL you set on your test is valid, you should check your site as soon as possible.

HTTP 301, 302, 303 – redirections

All of these codes mean that the resource matches some URL but it’s on another location right now.

Some of the developers use http 302 code as a temporary redirect for maintenance mode. It’s not a good practice, since the code means something else. It’s also not an evil practice, since search crawlers won’t probably download the site with this code.

However, the same developers often redirect user with that code to some /maintenance page which sends http 200 OK code which is actually evil as devil itself (see example above).

403 Forbidden

If you see this code on your downtime message you should check your site immediately. It means that resource behind the given URL is not meant to be shown to public/anonymous user.

Here are some possible causes of this kind of behavior.

  • someone changed your website/app directory permissions (“chmod”) on server and your app can’t be compiled/executed
  • someone/something deleted all your app files and your server can’t find any
  • the app server stopped like the and treats it as an abusing service (firewall sends us back home)

That’s all for now. As always, any comments are welcome below. Feel free to ask for explaining any other code you’d like to have explained.

How machines talk to each other

A guide for human beings – HTTP codes is meant to be so simple that anyone can use it without any trouble.

However, there are some kind of technical terms you should actually know to understand what’s going on with your website.

This article is not for technical people, it simplifies many complicated issues.

How does it work and why it matters?

Imagine you are looking for some company document. You know it probably exists, but you don’t really know where exactly.  You just know its name.  Let’s say it’s a Holiday Funding Request Form*

First thing you do is you call your colleague who works here longer than you and knows everyone. He tells you that you should call a guy from HR department. The HR guy redirects you to Finances. You go there, and you are told to be back in couple of minutes, because they are doing some maintenance and can’t serve you now.

After a couple of minutes you go back and get the proper form.

Machines works almost the same way. URLs are something like names.  Unified names with whole addresses.

When you type an URL and hit the enter key, your browser sends a request to a DNS server. DNS is you friend who knows everyone or knows people who know people. DNS routes your browser to a proper server by resolving the domain name to a related IP number.  Sometimes the first DNS knows the name and knows the IP. Sometimes it has to ask other DNS .

Then your request is routed to a proper server by the IP address. If the server is up and responding, it should send some response to your browser.

When the URL matches any document on server, response should contain HTTP 200 “OK” code. It means “everything is fine, here’s what you are looking for”.

If the server is down for maintenance, it should send you an HTTP 503 response. Translation of this code to the human language is “sorry, we have some issue over here, come back later”.

If the server can’t find the document, but knows where you should go to find it, it will redirect you (your browser) by sending an HTTP 301 code which means “there’s nothing here, the resources were moved to another location, you should go somewhere else”.

So, why does it matter?

Machines communicate in a human-like way. They were made by humans and they are similar to humans in many dimensions.

scuba_maintenance_modeYour server should respond properly. Imagine you are asking the finance guy for a Holiday Form. He tells you “OK, here you go” and doesn’t give it to you. It would be weird, right?

The same story is when machines speak to each other.  We noticed that some websites in the maintenance mode, send HTTP 200 code with a nice “be right back” landing page. If one of the Google indexing crawlers came there during this pseudo-maintenance mode, it would identify the landing page as a regular page and switch the indexed page with the maintenance notice.

Learn more about http codes and their meanings.

* In many EU countries, companies can participate in employees’ vacation.