/// <summary>
        /// Update monitis custom monitor with new perfomance counters data.
        /// Trigger by timer instance
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UpdatePerfomanceCounters(object sender, ElapsedEventArgs e)
        {
            //TODO: look like template pattern

            //create query executer for access to data in Windows Azure Table Service
            var queryExecuter = new QueryExecuter(_userSession.AzureInfo.AccountName, _userSession.AzureInfo.AccountKey);

            var customMonitorAPI = new CustomMonitorAPI(_userSession.APIKey, _userSession.APIType);
            foreach (var kvp in _counterNameEventUpdateMap)
            {
                InvokeStatusChanged(kvp.Key + "> start update");

                //get perfomance counter data
                IEnumerable<PerformanceData> data = queryExecuter.GetPerformanceCounters(kvp.Key,
                                                                                         _userSession.AzureInfo.
                                                                                             DeploymentInfo.
                                                                                             RoleInstanceName,
                                                                                         DateTime.UtcNow.AddSeconds(
                                                                                             -_syncPeriod.TotalSeconds),
                                                                                         DateTime.UtcNow);

                InvokeStatusChanged(kvp.Key + "> retrieved records count from Azure:" + data.Count());

                CustomMonitorConfig configByMetricName = CustomMonitorList.Singleton.GetConfigByMetricName(kvp.Key);

                //convert Windows Azure perfomance counters data to monitis monitor parameters data
                List<ResultParameter> convertToMonitorResults = DataConverter.ConvertToMonitorResults(data,
                                                                                        configByMetricName.Descriptor.
                                                                                            Converter);

                InvokeStatusChanged(kvp.Key + "> push data to Monitis");

                //add result to monitor
                customMonitorAPI.AddResults(_userSession.CurrentAuthToken, configByMetricName.MonitorID,
                                            convertToMonitorResults);

                //fire event to update all handlers
                kvp.Value(this, new CounterDataEventArgs { PerformanceDatas = data });
            }

            InvokeStatusChanged(String.Format("Next update after {0} second",
                                              TimeSpan.FromMilliseconds(_updateTimer.Interval).TotalSeconds));
        }