AppBeat Blog

Perfect Monitoring for Your Cloud

AppBeat Website Speed Test (Beta)

We have published first beta version of our Website Speed Test. This tool allows you to open any website on remote web browser where it is analysed for performance. At the end you get summary report for selected geographic location.

Currently we support three remote locations:

  • New York (US East)
  • South Korea (Asia Pacific)
  • Slovenia (Central Europe)

This tool can give you insight how your page behaves for visitors from different regions. Please tell us what you think about our first beta version. You can also suggest which new regions would you like to see in future versions.

Later we also plan to add support for automated website speed testing via our AppBeat Monitoring application and REST API.

Coming very soon: Website Speed Test

We are currently doing final internal review of our API for synthetic website speed testing!

var harResponse = AppBeat.PageSpeed.API.RunTest(test.PublicId, test.Url, test.Location);

We have build entire infrastructure for this from grounds up in record time. We will provide multiple test locations and simple page for everyone to use.

Later we will provide special REST API for website speed testing and we will also integrate this functionality into AppBeat monitoring as free bonus.

Stay tuned :)

Tips & Tricks: bulk importing your website monitors

Few customers who previously used competitive solution asked us if we can help them migrate their web site monitors to AppBeat. We helped them of course and in this process we also created internal tool which speeds up this migration.

If you have too many websites to import them manually, please just contact us and we will gladly assist you. Why bother with manual work if we can do it automatically!

Free 1 minute website monitoring

For those users who are using our free service, we are giving you additional choice. If you want to have one minute website monitoring instead of five minute interval, we can offer you this for free, if you are good with just one web monitor.

To summarize: you can have 5 x five minute website monitors or we can offer you 1 x one minute web site monitor - for free of course. If you are interested please let us know.

We are also in the process of further optimization of our service and costs. We will soon prepare you surprise but we can't say more at this moment :)

Kind regards, team

C# - how to lock without deadlocks

In C# there is built-in keyword lock which enables you to create thread-safe methods. However, you must be aware that if you are not careful, you can create deadlock conditions where your method waits for lock indefinitely.

How lock keyword works? As described in "Locks and exceptions do not mix" blog article, in C# 4 compiler translates lock statement into this:

bool lockWasTaken = false;
var temp = obj;
try { Monitor.Enter(temp, ref lockWasTaken); { body } }
finally { if (lockWasTaken) Monitor.Exit(temp); }

We can use this to create utility method which works similarly to original lock, but waits only specified amount of time and prevents deadlocks:

using System;
using System.Threading;

namespace AppBeat.Utility
    public static class Concurrency
        /// <summary>
        /// Method tries to run <seealso cref="doAction"/> in thread-safe manner but waits max <seealso cref="millisecondsTimeout"/> milliseconds for lock. If it can not acquire lock in specified time, exception is thrown.
        /// This method can be used to prevents deadlock scenarios.
        /// </summary>
        public static void LockWithTimeout(object lockObj, Action doAction, int millisecondsTimeout = 15000)
            bool lockWasTaken = false;
            var temp = lockObj;
                Monitor.TryEnter(temp, millisecondsTimeout, ref lockWasTaken);
                if (lockWasTaken)
                    throw new Exception("Could not get lock");
                if (lockWasTaken)

Instead of this code:

lock (this)
    //do something

You could then have something like this:

AppBeat.Utility.Concurrency.LockWithTimeout(this, delegate () {
    //do something
}, 15000); //do not wait more than 15 seconds for lock

As you can see, usage is very similar but in second case we should never get deadlock, because code will simply throw exception if it can not get lock.

This code could be used in debug version when you stress test your multithreaded code, so you can see if you get any timeout exceptions (deadlocks occur). From stack trace you should be able to see which part of your code is problematic.

In production you can leave this or replace it back with standard lock statement.

Take advantage of free website monitoring

Want to monitor your website but don't want to spend any money? At AppBeat we make this possible! We offer five monitors which are scheduled every 5 minutes free of charge! All you have to do is Sign Up for free account (no credit card is required).

If you later need more monitors or want to have 1 minute checks, you can upgrade at any time for very affordable price (if you find cheaper offer elsewhere please contact us and we will make you even better).

Don't let your visitors / customers go to competition because you didn't know your website was down. Take advantage of our free website monitoring and Sign Up now.

As bonus you will also receive free public status page and scheduled maintenance module.

Website monitoring badges

If you would like to put link to your AppBeat public status page for your visitors to see website availability, you can use these badge images:
Website Monitoring Made Easy
Website Monitoring Made Easy
Website Monitoring Made Easy
Website Monitoring Made Easy
Website Monitoring Made Easy 

What is AppBeat? AppBeat is perfect tool for website owners for whom high availability of their websites is crucial for their business. You can quickly create page monitor with just two clicks or you can create advanced website check, where you have more control:

  • define your own monitor timeout,
  • custom rules,
  • monitor frequency,
  • basic authentication,
  • and much more!

We log every check with information such us response time, monitor status, error message, which can be useful for detailed analysis. Want to be notified before your SSL certificate expires? No problem, you can also check ssl certificate and other type of online services (SMTP, POP3, IMAP, TCP ports, UDP ports, ping, SNMP, ...). If you have proprietary solution which needs to be monitored we can develop your own monitoring agent (please contact us). Want to define more complex rules to determine if your website is down? You can use Expression Builder to create customized rules which can also include regular expressions.

Have questions? We are here to help!

Want to migrate from Pingdom or UptimeRobot? Now is the time!

We are introducing world's lowest prices for website monitoring. We are giving you 50% discount for any paid plan!
We checked this market thoroughly and our prices are now guaranteed to be lowest! If you find any other monitoring provider with lower price, please let us know!

Our most affordable paid plan is now only 5.04 EUR per year and includes 5 monitors with 1 minute frequency. That is just 0.42 EUR per month to get notifications about your server outages. Would you risk losing your customers for just few coffees per year?

Best of all, you can still configure your plan as you wish. Want to include SMS notifications? No problem, you can configure that. Don't need 12 months log retention? You can change this too and get lower price for this.

You can check our prices on If you have any questions please let us know.

Running .NET Core web application on Linux

As proof of concept we tried to run AppBeat frontend (web application on on Ubuntu Linux 14.04.

First we had to switch to portable NuGet client library for WCF. This is necessary for communication with our backend. We then used auto generated proxies from Visual Studio "Add Service Reference" utility and only changed few lines of code (to explicitly cast objects to IDisposable at the end).

With this change web project was successfully compiled under dnxcore50 profile! Now everything was ready for Linux test!

We created fresh 64-bit installation of Ubuntu 14.04 and followed instructions on and later

Everything went smoothly! At the end we configured firewall and installed nginx server. nginx is used to proxy requests to Kestrel server. Our application worked, but... It was really really slow :) We found out that there is an issue with current ASP.Net Core RC1 (Kestrel) and nginx combination and that it will be fixed with RC2 release (there were some workarounds published but it didn't help in our case). We will repeat test when RC2 is released.

Overall we are highly impressed with how things are evolving with .NET Core. Hat off to all participating in this project!

I just quietly hope that Microsoft will decide to implement native compilation of web apps on .NET Core. That would be really really fantastic!