private async void PollDecoTableFired(object stateInfo) { if (m_paused) { return; } Console.WriteLine("now running Deco..."); var logger = new LocationLogger(); var number = 0; var records = await ReadDecoAsync(); Console.WriteLine("Found: {0} records", records.ToList().Count); foreach (var r in records) { number++; if (null == r) { continue; // we got an exception reading the record } //sow_Deco_<locationid>_<date>-<time>_<linecount>_<staffid> var filename = string.Format("sow_Deco_{0}_{1}_{2}_{3}", r.location_id, r.date_time.ToString("yyyyMMdd-HHmm"), 1, r.courier_id); // polly policy goes here var retry = ConfigurationManager.GetEnvironmentVariableInt32($"{nameof(Deco)}Retry", 3); var interval = ConfigurationManager.GetEnvironmentVariableInt32($"{nameof(Deco)}Internal", 100); var pr = await Policy.Handle <Exception>() .WaitAndRetryAsync(retry, c => TimeSpan.FromMilliseconds(interval * Math.Pow(2, c))) .ExecuteAndCaptureAsync(() => { var text = r.ToString(); var request = new StringContent(text); request.Headers.Add("X-Name", filename); request.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain"); request.Headers.Add("Source", "sow"); return(m_client.PostAsync("/api/rts/deco", request)); }); if (null != pr.FinalException) { logger.Log(new LogEntry(pr.FinalException) { Message = $"Line {number}" }); continue; } var response = pr.Result; Console.WriteLine($"\t{r.console_no} : {response.StatusCode}\t"); logger.Log(new LogEntry { Message = $"Record: {number}({r.id}) , StatusCode: {(int)response.StatusCode}", Severity = Severity.Debug }); if (!response.IsSuccessStatusCode) { var warn = new LogEntry { Message = $"Non success status code record {number}({r.id}), StatusCode: {(int)response.StatusCode}", Severity = Severity.Warning }; logger.Log(warn); } else { await DeleteDecoRowAsync(r); } } Console.WriteLine(); logger.Log(new LogEntry { Message = $"Done processing with {number} record(s)", Severity = Severity.Info }); }
private async void FswChanged(object sender, FileSystemEventArgs e) { if (m_paused) { return; } var file = e.FullPath; var wip = file + ".wip"; await WaitReadyAsync(file); var logger = new LocationLogger(); var port = new IposDepositPaymentPort(logger) { Uri = new Uri(file) }; var fileInfo = new FileInfo(file); port.AddHeader("CreationTime", $"{fileInfo.CreationTime:s}"); port.AddHeader("DirectoryName", fileInfo.DirectoryName); port.AddHeader("Exists", $"{fileInfo.Exists}"); port.AddHeader("Length", $"{fileInfo.Length}"); port.AddHeader("Extension", fileInfo.Extension); port.AddHeader("Attributes", $"{fileInfo.Attributes}"); port.AddHeader("FullName", fileInfo.FullName); port.AddHeader("Name", fileInfo.Name); port.AddHeader("LastWriteTime", $"{fileInfo.LastWriteTime:s}"); port.AddHeader("LastAccessTime", $"{fileInfo.LastAccessTime:s}"); port.AddHeader("IsReadOnly", $"{fileInfo.IsReadOnly}"); port.AddHeader("Rx:ApplicationName", "PosEntt"); port.AddHeader("Rx:LocationName", nameof(IposDepositFileDrop)); port.AddHeader("Rx:Type", "FolderReceiveLocation"); port.AddHeader("Rx:MachineName", Environment.GetEnvironmentVariable("COMPUTERNAME")); port.AddHeader("Rx:UserName", Environment.GetEnvironmentVariable("USERNAME")); File.Move(file, wip); await WaitReadyAsync(wip); await Task.Delay(100); var number = 0; var lines = File.ReadLines(wip); var records = port.Process(lines); // now post it to the server Console.WriteLine($"Reading file {file}"); foreach (var r in records) { number++; if (null == r) { continue; // we got an exception reading the record } // polly policy goes here var retry = ConfigurationManager.GetEnvironmentVariableInt32("IposDepositFileDrop", 3); var interval = ConfigurationManager.GetEnvironmentVariableInt32("IposDepositFileDrop", 100); var pr = await Policy.Handle <Exception>() .WaitAndRetryAsync(retry, c => TimeSpan.FromMilliseconds(interval * Math.Pow(2, c))) .ExecuteAndCaptureAsync(() => { var request = new StringContent(r.ToJson()); request.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); return(m_client.PostAsync("/api/ipos-deposit-payments/", request)); }); if (null != pr.FinalException) { logger.Log(new LogEntry(pr.FinalException) { Message = $"Line {number}" }); continue; } var response = pr.Result; Console.Write($"\r{number} : {response.StatusCode}\t"); logger.Log(new LogEntry { Message = $"Record: {number}({r.Sequence}) , StatusCode: {(int)response.StatusCode}", Severity = Severity.Debug }); if (!response.IsSuccessStatusCode) { var warn = new LogEntry { Message = $"Non success status code record {number}({r.Sequence}), StatusCode: {(int)response.StatusCode}", Severity = Severity.Warning, Details = $"{fileInfo.FullName}:{number}({r.Sequence})" }; logger.Log(warn); } } Console.WriteLine(); logger.Log(new LogEntry { Message = $"Done processing {file} with {number} record(s)", Severity = Severity.Info }); var archivedFolder = ConfigurationManager.GetEnvironmentVariable(nameof(IposDepositFileDrop) + "ArchiveLocation"); if (!string.IsNullOrWhiteSpace(archivedFolder) && Directory.Exists(archivedFolder)) { File.Move(wip, Path.Combine(archivedFolder, Path.GetFileName(file))); } else { File.Delete(wip); } }