/// <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)); }