示例#1
0
        private void MediateTableMetrics(DateTime start, DateTime end)
        {
            var queryExecuter = new QueryExecuter(_userSession.AzureInfo.AccountName, _userSession.AzureInfo.AccountKey);

            InvokeStatusStorageMetricsChanged("Get metrics data from Azure");
            MetricsTransactionsEntity[] metricsTransactionsEntities = queryExecuter.GetMetricData(start, end);

            String statusFormat = "Captured records count: {0}\r\nPushed to monitis service:{1}";

            Int32 totalProcessedRecords = 0;

            InvokeStatusStorageMetricsChanged(String.Format(statusFormat, metricsTransactionsEntities.Length, totalProcessedRecords));
            var customMonitorAPI = new CustomMonitorAPI(_userSession.APIKey, _userSession.APIType);

            foreach (MetricsTransactionsEntity metricsTransactionsEntity in metricsTransactionsEntities)
            {
                CustomMonitorConfig availabilityConfig =
                    CustomMonitorList.Singleton.GetConfigByMetricName(MetricNames.Availability);
                ResultParameter convertToMonitorResult = DataConverter.ConvertToMonitorResult(metricsTransactionsEntity.Availability,
                                                                                              metricsTransactionsEntity.Timestamp,
                                                                                              availabilityConfig);

                customMonitorAPI.AddResults(_userSession.CurrentAuthToken, availabilityConfig.MonitorID,
                                            new List <ResultParameter> {
                    convertToMonitorResult
                });

                CustomMonitorConfig totalRequestsConfig =
                    CustomMonitorList.Singleton.GetConfigByMetricName(MetricNames.TotalRequests);
                convertToMonitorResult = DataConverter.ConvertToMonitorResult(metricsTransactionsEntity.TotalRequests,
                                                                              metricsTransactionsEntity.Timestamp,
                                                                              totalRequestsConfig);
                customMonitorAPI.AddResults(_userSession.CurrentAuthToken, totalRequestsConfig.MonitorID,
                                            new List <ResultParameter> {
                    convertToMonitorResult
                });

                CustomMonitorConfig totalBillableRequestsConfig =
                    CustomMonitorList.Singleton.GetConfigByMetricName(MetricNames.TotalBillableRequests);
                convertToMonitorResult = DataConverter.ConvertToMonitorResult(metricsTransactionsEntity.TotalBillableRequests,
                                                                              metricsTransactionsEntity.Timestamp,
                                                                              totalBillableRequestsConfig);
                customMonitorAPI.AddResults(_userSession.CurrentAuthToken, totalBillableRequestsConfig.MonitorID,
                                            new List <ResultParameter> {
                    convertToMonitorResult
                });

                totalProcessedRecords++;
                InvokeStatusStorageMetricsChanged(String.Format(statusFormat, metricsTransactionsEntities.Length, totalProcessedRecords));
            }
            InvokeStatusStorageMetricsChanged("Completed");
            InvokeStorageMetricsPublishCompleted(EventArgs.Empty);
        }
示例#2
0
        /// <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));
        }
 /// <summary>
 /// Convert value to parameter which understand monitis.com
 /// </summary>
 /// <param name="value">Value to convert</param>
 /// <param name="timeStamp">Parameter timestamp</param>
 /// <param name="config">Configuration of monitor for convert details</param>
 /// <returns></returns>
 public static ResultParameter ConvertToMonitorResult(Double value, DateTime timeStamp,
                                                      CustomMonitorConfig config)
 {
     return(ConvertToMonitorResult(value, timeStamp, config.Descriptor.Converter,
                                   config.Descriptor.ResultParams.First().Name));
 }