public bool Execute(MeterDataSet meterDataSet) { try { s_mutex.WaitOne(); using (AdoDataConnection connection = new AdoDataConnection("systemSettings")) { string url = connection.ExecuteScalar <string>("SELECT Value FROM Setting WHERE Name = 'SystemCenter.Url'"); string credential = connection.ExecuteScalar <string>("SELECT Value FROM Setting WHERE Name = 'SystemCenter.Credential'"); string password = connection.ExecuteScalar <string>("SELECT Value FROM Setting WHERE Name = 'SystemCenter.Password'"); // Get MiMD Statistic record for current meter and date string meter = meterDataSet.Meter.AssetKey; MiMDDailyStatistic record = GetRecord(url, credential, password, meter); // if if (record == null) { record = new MiMDDailyStatistic(); record.Meter = meterDataSet.Meter.AssetKey; record.Date = DateTime.Now.Date.ToString("MM/dd/yyyy"); if (meterDataSet.FileProcessingError == null) { record.LastSuccessfulFileProcessed = DateTime.Now; } else { record.LastUnsuccessfulFileProcessed = DateTime.Now; } record.LastUnsuccessfulFileProcessedExplanation = meterDataSet.FileProcessingError; record.TotalFilesProcessed = 1; record.TotalSuccessfulFilesProcessed = (meterDataSet.FileProcessingError == null ? 1 : 0); record.TotalUnsuccessfulFilesProcessed = (meterDataSet.FileProcessingError == null ? 0 : 1); record.ConfigChanges = meterDataSet.ConfigChanges; if (meterDataSet.ConfigChanges > 0) { record.LastConfigFileChange = DateTime.Now; } record.DiagnosticAlarms = meterDataSet.DiagnosticAlarms; record.ComplianceIssues = meterDataSet.ComplianceIssues; } else if (record.Date != DateTime.Now.Date.ToString("MM/dd/yyyy")) { MiMDDailyStatistic lastRecord = record; record = new MiMDDailyStatistic(); record.Meter = lastRecord.Meter; record.Date = DateTime.Now.Date.ToString("MM/dd/yyyy"); if (meterDataSet.FileProcessingError == null) { record.LastSuccessfulFileProcessed = DateTime.Now; } else { record.LastUnsuccessfulFileProcessed = DateTime.Now; } if (meterDataSet.ConfigChanges > 0) { record.LastConfigFileChange = DateTime.Now; } record.LastUnsuccessfulFileProcessedExplanation = (meterDataSet.FileProcessingError == null ? lastRecord.LastUnsuccessfulFileProcessedExplanation : meterDataSet.FileProcessingError); record.TotalFilesProcessed = lastRecord.TotalFilesProcessed + 1; record.TotalSuccessfulFilesProcessed = lastRecord.TotalSuccessfulFilesProcessed + (meterDataSet.FileProcessingError == null ? 1 : 0); record.TotalUnsuccessfulFilesProcessed = lastRecord.TotalUnsuccessfulFilesProcessed + (meterDataSet.FileProcessingError == null ? 0 : 1); record.ConfigChanges = lastRecord.ConfigChanges + meterDataSet.ConfigChanges; record.DiagnosticAlarms = lastRecord.DiagnosticAlarms + meterDataSet.DiagnosticAlarms; record.ComplianceIssues = lastRecord.ComplianceIssues + meterDataSet.ComplianceIssues; } else { if (meterDataSet.FileProcessingError == null) { record.LastSuccessfulFileProcessed = DateTime.Now; } else { record.LastUnsuccessfulFileProcessed = DateTime.Now; } record.LastUnsuccessfulFileProcessedExplanation = (meterDataSet.FileProcessingError == null ? record.LastUnsuccessfulFileProcessedExplanation : meterDataSet.FileProcessingError);; record.TotalFilesProcessed += 1; record.TotalSuccessfulFilesProcessed += (meterDataSet.FileProcessingError == null ? 1 : 0); record.TotalUnsuccessfulFilesProcessed += (meterDataSet.FileProcessingError == null ? 0 : 1); record.ConfigChanges += meterDataSet.ConfigChanges; if (meterDataSet.ConfigChanges > 0) { record.LastConfigFileChange = DateTime.Now; } record.DiagnosticAlarms += meterDataSet.DiagnosticAlarms; record.ComplianceIssues += meterDataSet.ComplianceIssues; } HttpStatusCode code = UpdateRecord(url, credential, password, record); if (code != HttpStatusCode.OK) { throw new Exception("Failed to add or update daily statistics."); } } } catch (Exception ex) { Log.Error($"Failed to create daily statistic for {meterDataSet.Meter.AssetKey} - {ex.Message}"); } finally { s_mutex.ReleaseMutex(); } return(true); }
public HttpStatusCode UpdateRecord(string url, string credential, string password, MiMDDailyStatistic record) { string antiForgeryToken = GenerateAntiForgeryToken(url, credential, password); using (WebRequestHandler handler = new WebRequestHandler()) using (HttpClient client = new HttpClient(handler)) { handler.ServerCertificateValidationCallback += HandleCertificateValidation; client.BaseAddress = new Uri(url); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("X-GSF-Verify", antiForgeryToken); client.AddBasicAuthenticationHeader(credential, password); HttpResponseMessage response = client.PutAsJsonAsync($"api/SystemCenter/Statistics/MiMD/Update", record).Result; return(response.StatusCode); } }