public void start() {
        connectionController = new Thread(new Runnable() {
            @Override
            public void run() {
                String serverURL = BmUrlManager.getServerUrl();
                ServerStatus latestServerStatus = serverStatus;

                try {
                    URL url = new URL(serverURL);
                    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
                    httpConn.setInstanceFollowRedirects(false);
                    httpConn.setRequestMethod("HEAD");
                    httpConn.setConnectTimeout(5000);
                    httpConn.connect();
                    BmLog.debug("Connection with " + serverURL + " is OK.");
                    serverStatus = ServerStatus.AVAILABLE;
                    httpConn.disconnect();
                } catch (SocketTimeoutException e) {
                    BmLog.error("Connection with " + serverURL + " was not established, server is unavailable");
                    serverStatus = ServerStatus.NOT_AVAILABLE;
                } catch (MalformedURLException e) {
                    BmLog.error("SERVER URL is invalid! Check 'blazemeter.url' in jmeter.properties");
                    serverStatus = ServerStatus.NOT_AVAILABLE;
                } catch (java.net.ConnectException e) {
                    BmLog.error(serverURL + " is down ");
                    serverStatus = ServerStatus.NOT_AVAILABLE;
                } catch (ProtocolException e) {
                    BmLog.error("HTTP Request method was not set up for checking connection");
                    serverStatus = ServerStatus.NOT_AVAILABLE;
                } catch (IOException e) {
                    BmLog.error("Connection with " + serverURL + " was not established, server is unavailable");
                    serverStatus = ServerStatus.NOT_AVAILABLE;
                } finally {
                    if (!latestServerStatus.equals(serverStatus)) {
                        NotifyServerStatusChanged();
                    }
                }
            }
        });
        if (this.task == null || this.task.isDone()) {
            this.task = scheduler.scheduleAtFixedRate(connectionController, 1, 10, TimeUnit.SECONDS);
            BmLog.info("ConnectionController is started");
        }
    }