private void ExportVisitsFromLocation(string locationIdentifier) { var visitDescriptions = GetVisitsToExport(locationIdentifier); Log.Info($"Exporting {"visit".ToQuantity(visitDescriptions.Count)} from '{locationIdentifier}' ..."); var locationPath = Path.Combine(Context.ExportFolder, FileProcessor.SanitizeFilename(locationIdentifier)); Directory.CreateDirectory(locationPath); foreach (var visitDescription in visitDescriptions) { ExportVisit(locationPath, visitDescription); } }
private void ExportVisit(string locationPath, FieldVisitDescription fieldVisitDescription) { var visitPath = Path.Combine(locationPath, FileProcessor.SanitizeFilename($"{fieldVisitDescription.LocationIdentifier}@{fieldVisitDescription.StartTime:yyyy-MM-dd_HH_MM}.json")); var zipPath = Path.ChangeExtension(visitPath, ".zip"); var targetPath = File.Exists(zipPath) ? zipPath : visitPath; if (!Context.ExportOverwrite && File.Exists(targetPath)) { Log.Info($"Skipping existing '{targetPath}'"); ++SkipCount; return; } var archivedVisit = new ArchivedVisit { Summary = fieldVisitDescription, Activities = Client.Publish.Get(new FieldVisitDataServiceRequest { FieldVisitIdentifier = fieldVisitDescription.Identifier, IncludeNodeDetails = true, IncludeInvalidActivities = true, IncludeCrossSectionSurveyProfile = true, IncludeVerticals = true }) }; try { ExportVisit(visitPath, zipPath, archivedVisit); ++VisitCount; } catch (Exception exception) { ++ErrorCount; var errorPath = Path.ChangeExtension(visitPath, ".error.json"); File.WriteAllText(errorPath, archivedVisit.ToJson().IndentJson()); Log.Error(exception is ExpectedException ? $"'{visitPath}': {exception.Message}" : $"'{visitPath}': {exception.Message}\n{exception.StackTrace}"); } }