예제 #1
0
        public string[] GetPathToPackDirectory()
        {
            var dirs = pathBuilder.GetPathToPackDirectory();

            foreach (var dir in dirs)
            {
                Directory.CreateDirectory(dir);
            }
            return(dirs);
        }
예제 #2
0
        public void RecoverAll()
        {
            var waitingReceivePacks = new List <ParsedReceivePack>();

            foreach (var packDir in recoveryFilePathBuilder.GetPathToPackDirectory())
            {
                foreach (var packFilePath in Directory.GetFiles(packDir))
                {
                    using (var fileReader = new StreamReader(packFilePath))
                    {
                        var packFileData = fileReader.ReadToEnd();
                        waitingReceivePacks.Add(JsonConvert.DeserializeObject <ParsedReceivePack>(packFileData));
                    }
                }
            }

            foreach (var pack in waitingReceivePacks.OrderBy(p => p.Timestamp))
            {
                // execute if the pack has been waiting for X amount of time
                if ((DateTime.Now - pack.Timestamp) >= failedPackWaitTimeBeforeExecution)
                {
                    // re-parse result file and execute "post" hooks
                    // if result file is no longer there then move on
                    var failedPackResultFilePath = recoveryFilePathBuilder.GetPathToResultFile(pack.PackId, pack.RepositoryName, "receive-pack");
                    if (File.Exists(failedPackResultFilePath))
                    {
                        using (var resultFileStream = File.OpenRead(failedPackResultFilePath))
                        {
                            var failedPackResult = resultFileParser.ParseResult(resultFileStream);
                            ProcessOnePack(pack, failedPackResult);
                        }
                        File.Delete(failedPackResultFilePath);
                    }
                }
            }
        }