public static List <FileProcessInfo> GetActiveProcesses() { using (var db = new FileUploadDbEntities()) { var completedState = (byte)ProcessState.Completed; var processes = db.EFFileProcessInfoes .Include("DataFileInfo") .Where(p => p.State != completedState).ToList(); List <FileProcessInfo> result = new List <FileProcessInfo>(); foreach (var process in processes) { var processInfo = new FileProcessInfo(); processInfo.Id = process.Id; processInfo.Message = process.Message; processInfo.UniqueId = process.UniqueId; processInfo.StartTime = process.StartTime; processInfo.State = (ProcessState)process.State; processInfo.Result = (ProcessResult)process.Result; processInfo.FileInfo = new DataFileInfo(); processInfo.FileInfo.Name = process.DataFileInfo.Name; processInfo.FileInfo.Hash = process.DataFileInfo.Hash; processInfo.FileInfo.Size = process.DataFileInfo.Size; processInfo.FileInfo.CreationTime = process.DataFileInfo.CreationTime; result.Add(processInfo); } return(result); } }
private bool SaveFileToSend(FileSystemInfo file) { FileProcessInfo fileProcessInfo = null; // the file is being processed or has been processed if (_queue.ContainsKey(FilePrefix + file.Name)) { fileProcessInfo = _queue[FilePrefix + file.Name]; } // the file is new if (fileProcessInfo == null) { fileProcessInfo = new FileProcessInfo { Status = FileProcessStatus.InProcess, NumberOfTries = 0 }; _queue.TryAdd(FilePrefix + file.Name, fileProcessInfo); } else if (fileProcessInfo.Status == FileProcessStatus.InProcess) { AnalyticsLog.Log(TAG, "The file '" + file.Name + "' is being processed"); return(false); } else if (fileProcessInfo.NextProcessDate != null && fileProcessInfo.NextProcessDate > DateTime.Now) { AnalyticsLog.Log(TAG, "Too early to reprocess the file '" + file.Name + "'"); return(false); } return(true); }
public void Refresh(FileProcessInfo info) { Info = info; OnPropertChanged(nameof(Id)); OnPropertChanged(nameof(this.ElapsedTime)); OnPropertChanged(nameof(this.State)); OnPropertChanged(nameof(this.FileName)); OnPropertChanged(nameof(this.FileHash)); OnPropertChanged(nameof(this.FileSize)); OnPropertChanged(nameof(this.StartTime)); OnPropertChanged(nameof(this.Result)); OnPropertChanged(nameof(this.Message)); OnPropertChanged(nameof(this.ReportButtonText)); }
public static bool FileExists(DataFileInfo fileInfo, out FileProcessInfo inProcess) { if (fileInfo == null) { throw new ArgumentNullException(nameof(fileInfo)); } bool result = false; inProcess = null; using (var db = new FileUploadDbEntities()) { var existingFile = db.EFDataFileInfoes .FirstOrDefault(f => f.Hash == fileInfo.Hash); if (existingFile != null) { result = true; if (!existingFile.FileProcessInfoes.IsLoaded) { existingFile.FileProcessInfoes.Load(); } var processInfo = existingFile.FileProcessInfoes.FirstOrDefault(); if (processInfo != null) { inProcess = new FileProcessInfo(); inProcess.Id = processInfo.Id; inProcess.FileInfo = new DataFileInfo() { CreationTime = existingFile.CreationTime, Hash = existingFile.Hash, Name = existingFile.Name, Size = existingFile.Size, }; inProcess.Result = (ProcessResult)processInfo.Result; inProcess.StartTime = processInfo.StartTime; inProcess.State = (ProcessState)processInfo.State; } } } return(result); }
public StartFileProcessViewModel(ISynchronizeInvoke context, FileInfo fileInfo) : base(context, null) { FileInfo = fileInfo ?? throw new ArgumentNullException(nameof(fileInfo)); var dataFileInfo = new DataFileInfo(); dataFileInfo.Name = fileInfo.Name; dataFileInfo.Size = fileInfo.Length; dataFileInfo.CreationTime = fileInfo.CreationTime; var processInfo = new FileProcessInfo(); processInfo.UniqueId = Guid.NewGuid(); processInfo.FileInfo = dataFileInfo; processInfo.StartTime = DateTime.Now; processInfo.State = ProcessState.None; processInfo.Result = ProcessResult.None; Info = processInfo; }
private void SendAndDeleteFiles(List <string> events, FileSystemInfo file) { if (events.Count == 0) { return; } AnalyticsLog.Log(TAG, "Send and delete file '" + file.Name + "' File"); AnalyticsApi.SendEvents(events, succeeded => { if (succeeded) { lock (FileAccess) { AnalyticsLog.Log(TAG, "Delete file: '" + file.Name + "' File"); if (_queue.ContainsKey(FilePrefix + file.Name)) { FileProcessInfo info; _queue.TryRemove(FilePrefix + file.Name, out info); } file.Delete(); } } else if (_queue.ContainsKey(FilePrefix + file.Name)) { FileProcessInfo fileProcessInfo = _queue[FilePrefix + file.Name]; fileProcessInfo.Status = FileProcessStatus.Waiting; fileProcessInfo.NumberOfTries++; int delay = _backOffDelays.Last(); if (fileProcessInfo.NumberOfTries < _backOffDelays.Length) { delay = _backOffDelays[fileProcessInfo.NumberOfTries]; } AnalyticsLog.Log(TAG, "Retry pushing '" + file.Name + "' file in " + delay + " seconds"); fileProcessInfo.NextProcessDate = DateTime.Now.AddSeconds(delay); } }); }
public static FileProcessInfo StartProcess(FileProcessInfo startInfo, Stream dataStream) { if (startInfo == null) { throw new ArgumentNullException(nameof(startInfo)); } if (dataStream == null) { throw new ArgumentNullException(nameof(dataStream)); } //todo dir name var dirName = Environment.ExpandEnvironmentVariables("%temp%\\FileUploadManager"); if (!Directory.Exists(dirName)) { Directory.CreateDirectory(dirName); } var tempFileName = Path.Combine(dirName, startInfo.UniqueId.ToString()); try { using (var fs = new FileStream(tempFileName, FileMode.Create, FileAccess.Write)) { var buffer = new byte[64 * 1024]; int readCount; while ((readCount = dataStream.Read(buffer, 0, buffer.Length)) > 0) { fs.Write(buffer, 0, readCount); } } using (var db = new FileUploadDbEntities()) { db.Connection.Open(); using (var tran = db.Connection.BeginTransaction()) { var fileInfo = new EFDataFileInfo(); fileInfo.CreationTime = startInfo.FileInfo.CreationTime; fileInfo.Hash = startInfo.FileInfo.Hash; fileInfo.HostName = Environment.MachineName; fileInfo.Name = startInfo.FileInfo.Name; fileInfo.Path = tempFileName; fileInfo.Size = startInfo.FileInfo.Size; //todo: GETDATE() fileInfo.InsertTime = DateTime.Now; EFFileProcessInfo processInfo = new EFFileProcessInfo(); processInfo.DataFileInfo = fileInfo; processInfo.StartTime = startInfo.StartTime; processInfo.UniqueId = startInfo.UniqueId; processInfo.State = (byte)ProcessState.Parsing; db.AddToEFFileProcessInfoes(processInfo); db.SaveChanges(); tran.Commit(); startInfo.Id = processInfo.Id; startInfo.State = (ProcessState)processInfo.State; return(startInfo); } } } catch (Exception e) { try { if (File.Exists(tempFileName)) { File.Delete(tempFileName); } } catch (Exception innerException) { //todo use FT.Common e.Data["InnerException"] = innerException.ToString(); } throw; } }
public FileProcessViewModel(ISynchronizeInvoke context, FileProcessInfo info) : base(context) { Info = info; }
public ActiveFileProcessViewModel(ISynchronizeInvoke context, FileProcessInfo info) : base(context, info) { }