Skip to content

Commit aad05de

Browse files
Merge pull request #58 from TransactionProcessing/task/#49_checkinprogressonstartup
Move inprogress files to listening dir on startup
2 parents bd46c37 + be68824 commit aad05de

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

FileProcessor/FileProcessingWorker.cs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,35 @@ public override async Task StartAsync(CancellationToken cancellationToken)
8585
// TODO: Do we poll here for files incase they have been left from a previous run
8686
var temporaryFileLocation = ConfigurationReader.GetValue("AppSettings", "TemporaryFileLocation");
8787
this.LogInformation($"Starting up, TemporaryFileLocation is [{temporaryFileLocation}]");
88-
Directory.CreateDirectory(temporaryFileLocation);
88+
89+
this.FileSystem.Directory.CreateDirectory(temporaryFileLocation);
8990
this.LogInformation($"Created TemporaryFileLocation at [{temporaryFileLocation}]");
9091
var fileProfiles = await this.FileProcessorManager.GetAllFileProfiles(cancellationToken);
9192

9293
foreach (FileProfile fileProfile in fileProfiles)
9394
{
94-
Directory.CreateDirectory($"{fileProfile.ListeningDirectory}//inprogress");
95+
this.FileSystem.Directory.CreateDirectory($"{fileProfile.ListeningDirectory}//inprogress");
9596
this.LogInformation($"Created in progress at [{ fileProfile.ListeningDirectory}//inprogress");
96-
Directory.CreateDirectory(fileProfile.ProcessedDirectory);
97+
this.FileSystem.Directory.CreateDirectory(fileProfile.ProcessedDirectory);
9798
this.LogInformation($"Created ProcessedDirectory at [{fileProfile.ProcessedDirectory}]");
98-
Directory.CreateDirectory(fileProfile.FailedDirectory);
99+
this.FileSystem.Directory.CreateDirectory(fileProfile.FailedDirectory);
99100
this.LogInformation($"Created FailedDirectory at [{fileProfile.FailedDirectory}]");
100-
}
101101

102+
IDirectoryInfo inprogressDirectory = this.FileSystem.DirectoryInfo.FromDirectoryName(fileProfile.ListeningDirectory);
103+
var inprogressList = inprogressDirectory.GetFiles();
104+
105+
if (inprogressList.Any())
106+
{
107+
this.LogInformation($"{inprogressList.Length} files in progress detected in [{ fileProfile.ListeningDirectory}//inprogress");
108+
109+
// Now move these to the listening directory
110+
foreach (IFileInfo file in inprogressList)
111+
{
112+
file.MoveTo($"{fileProfile.ListeningDirectory}//{file.Name}");
113+
}
114+
}
115+
}
116+
102117
await base.StartAsync(cancellationToken);
103118
}
104119

@@ -132,17 +147,18 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
132147
try
133148
{
134149
List<Task> fileProcessingTasks = new List<Task>();
135-
var fileProfiles = await this.FileProcessorManager.GetAllFileProfiles(stoppingToken);
150+
List<FileProfile> fileProfiles = await this.FileProcessorManager.GetAllFileProfiles(stoppingToken);
151+
136152
foreach (FileProfile fileProfile in fileProfiles)
137153
{
138154
this.LogInformation($"About to look in {fileProfile.ListeningDirectory} for files");
139-
var files = Directory.GetFiles(fileProfile.ListeningDirectory).Take(1).ToList(); // Only process 1 file per file profile concurrently
140-
141-
foreach (String file in files)
155+
IDirectoryInfo listeningDirectory = this.FileSystem.DirectoryInfo.FromDirectoryName(fileProfile.ListeningDirectory);
156+
157+
List<IFileInfo> files = listeningDirectory.GetFiles().OrderBy(f => f.CreationTime).Take(1).ToList(); // Only process 1 file per file profile concurrently,
158+
159+
foreach (IFileInfo fileInfo in files)
142160
{
143-
this.LogInformation($"File {file} detected");
144-
145-
IFileInfo fileInfo = this.FileSystem.FileInfo.FromFileName(file);
161+
this.LogInformation($"File {fileInfo.Name} detected");
146162

147163
String inProgressFolder = $"{fileProfile.ListeningDirectory}/inprogress/";
148164
if (this.FileSystem.Directory.Exists(inProgressFolder) == false)
@@ -152,7 +168,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
152168
String inProgressFilePath = $"{fileProfile.ListeningDirectory}/inprogress/{fileInfo.Name}";
153169
fileInfo.MoveTo(inProgressFilePath, true);
154170

155-
var request = this.CreateProcessFileRequest(fileProfile, inProgressFilePath);
171+
IRequest request = this.CreateProcessFileRequest(fileProfile, inProgressFilePath);
156172
fileProcessingTasks.Add(this.Mediator.Send(request));
157173
}
158174
}

0 commit comments

Comments
 (0)