AppBeat Blog

Perfect Monitoring for Your Cloud

New website monitoring features (coming soon)

Hello AppBeat users.

Most of our users are currently very happy with our service which gives us a lot of confidence that we are building right tool for you. Thank you for this!

We just wanted to notify you that we are currently finalizing work on new AppBeat version (1.1) which will bring new cool features. We will give you more control about core AppBeat behaviour and we will add more personalization options (we won't say much more at this point, stay tuned for version 1.1 :)

After we publish version 1.1, we already have new very useful feature planned for version 1.2 (it should also stay secret for now).

If you have your own ideas which should be implemented in AppBeat please submit them to our idea pool. Most voted ideas are probably going to be implemented in one of future versions.

AppBeat improvements

Our monitoring platform now supports microservices architecture which allows us to deploy AppBeat monitoring agents to any geographic location.

Currently we support following locations:

  • Southeast Asia
  • East Asia
  • Japan
  • North Europe
  • Central US
  • East US

Every outage that we now detect must be confirmed by three different locations. Soon we will allow paid users to choose their prefered monitoring location (to have more consistent response time).

AppBeat Wish List - how would you improve our monitoring solution?

What would you like to see in future versions of our monitoring app?

We have created draft of initial ideas. We would like to encourage you to vote for your favorite feature or publish your own request.

Currently we have following ideas:

  • AppBeat monitoring API
    • For example, custom clients can be made.
  • Realtime user monitoring reports
    • Put AppBeat JavaScript snippet on your page and monitor real time user performance.
  • Mobile apps
    • Create mobile apps for Android, Windows Phone for easy management.
  • Exporting reports
    • Excel, CSV, ...
  • Smart agents
    • Monitor CPU and disk usage, ...
  • Improved public status pages
    • For example public status widget integrated directly to website.
  • Support for web hooks
    • When check changes status call user defined URL and pass task details (task name, status, time)
  • More notification channels
    • Currently there is support for email and SMS. Add support for push notifications, publishing twitter status, ...
  • Vulnerability report
    • Create periodic vulnerability report for websites.
  • Periodic full page speed testing
    • Download entire page with all resources (images, scripts, ...). Monitor download time and performance grade.
  • Audio alarm on failure
    • If error occurs in "Live status" view play alarm in web browser.
  • Scheduled and triggered tasks
    • Extend AppBeat monitoring platform with possibility to run scheduled / triggered web tasks (similar to Zapier or IFTTT)

These are initial ideas that we received from some of our users. You are welcome to vote and submit your own ideas on http://appbeat.idea.informer.com.

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,
AppBeat.io 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;
            try
            {
                Monitor.TryEnter(temp, millisecondsTimeout, ref lockWasTaken);
                if (lockWasTaken)
                {
                    doAction();
                }
                else
                {
                    throw new Exception("Could not get lock");
                }
            }
            finally
            {
                if (lockWasTaken)
                {
                    Monitor.Exit(temp);
                }
            }
        }
    }
}

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.