Example #1
0
        private static void ProcessParameterSet(CollarFile file, ArgosFile argos, DateTime first, DateTime last,
                                                IEnumerable <ArgosTransmission> transmissions,
                                                GetTelonicsParametersForArgosDatesResult parameters)
        {
            LogGeneralMessage(String.Format("    Start processing collar {0}/{1}", parameters.CollarManufacturer,
                                            parameters.CollarId));
            var start = parameters.StartDate ?? DateTime.MinValue;

            if (start < first)
            {
                start = first;
            }
            var end = parameters.EndDate ?? DateTime.MaxValue;

            if (last < end)
            {
                end = last;
            }
            var processor          = GetProcessor(file, parameters);
            var transmissionSubset = transmissions.Where(t => start <= t.DateTime && t.DateTime <= end);
            var lines      = processor.ProcessTransmissions(transmissionSubset, argos);
            var data       = Encoding.UTF8.GetBytes(String.Join(Environment.NewLine, lines) + Environment.NewLine);
            var filename   = Path.GetFileNameWithoutExtension(file.FileName) + "_" + parameters.CollarId + ".csv";
            var fileLoader = new FileLoader(filename, data)
            {
                Project = file.Project,
                Owner   = file.ProjectInvestigator,
                Collar  = new Collar {
                    CollarManufacturer = parameters.CollarManufacturer,
                    CollarId           = parameters.CollarId
                },
                Status            = file.Status,
                ParentFileId      = file.FileId,
                ArgosDeploymentId = parameters.DeploymentId,
                CollarParameterId = parameters.ParameterId,
                AllowDuplicates   = true
            };

            fileLoader.Load();
            var message =
                String.Format(
                    "    Successfully added Argos {0} transmissions from {1:g} to {2:g} to Collar {3}/{4}",
                    parameters.PlatformId, start, end,
                    parameters.CollarManufacturer, parameters.CollarId);

            LogGeneralMessage(message);
        }
Example #2
0
 private static void SummarizeFile(ArgosFile a)
 {
     Console.WriteLine("Transmissions in File");
     foreach (var t in a.GetTransmissions())
     {
         Console.WriteLine(t.ToFormatedString());
     }
     Console.WriteLine("Programs in File");
     foreach (var p in a.GetPrograms())
     {
         Console.WriteLine("  {0}", p);
     }
     Console.WriteLine("Collars in File");
     foreach (var p in a.GetPlatforms())
     {
         Console.WriteLine("  {0} Start {1} End {2}", p, a.FirstTransmission(p), a.LastTransmission(p));
     }
 }
Example #3
0
        private static void ProcessFile(CollarFile file, ArgosFile argos, ArgosPlatform platform)
        {
            LogGeneralMessage(String.Format("Start local processing of file {0}", file.FileId));
            var databaseFunctions = new AnimalMovementFunctions();

            if (platform == null)
            {
                databaseFunctions.ArgosFile_ClearProcessingResults(file.FileId);
                if (IsArgosAwsFileIncomplete(argos as ArgosAwsFile) ?? false)
                {
                    LogIssueForFile(file.FileId,
                                    "The Argos server could not return all the data requested and this file is incomplete.");
                }
            }
            else
            {
                databaseFunctions.ArgosFile_UnProcessPlatform(file.FileId, platform.PlatformId);
            }

            var transmissionsByPlatform = from transmission in argos.GetTransmissions()
                                          group transmission by transmission.PlatformId
                                          into transmissions
                                          where platform == null || transmissions.Key == platform.PlatformId
                                          select transmissions;

            foreach (var transmissionSet in transmissionsByPlatform)
            {
                try
                {
                    ProcessTransmissions(file, argos, transmissionSet);
                }
                catch (Exception ex)
                {
                    var message = String.Format("ERROR {0} adding Argos {1} transmissions",
                                                ex.Message, transmissionSet.Key);
                    LogIssueForFile(file.FileId, message, transmissionSet.Key);
                }
            }
            LogGeneralMessage("Finished local processing of file");
        }
        private static void SummarizeArgosFile(SqlInt32 fileId, ArgosFile file)
        {
            using (var connection = new SqlConnection("context connection=true"))
            {
                connection.Open();

                foreach (var program in file.GetPrograms())
                {
                    foreach (var platform in file.GetPlatforms(program))
                    {
                        var minDate = file.FirstTransmission(platform);
                        var maxDate = file.LastTransmission(platform);
                        const string sql = "INSERT INTO [dbo].[ArgosFilePlatformDates] (FileId, PlatformId, ProgramId, FirstTransmission, LastTransmission)" +
                                           " VALUES (@FileId, @PlatformId, @ProgramId, @FirstTransmission, @LastTransmission)";
                        using (var command = new SqlCommand(sql, connection))
                        {
                            command.Parameters.Add(new SqlParameter("@fileId", SqlDbType.Int) {Value = fileId});
                            command.Parameters.Add(new SqlParameter("@PlatformId", SqlDbType.NVarChar) {Value = platform});
                            command.Parameters.Add(new SqlParameter("@ProgramId", SqlDbType.NVarChar) {Value = program});
                            command.Parameters.Add(new SqlParameter("@FirstTransmission", SqlDbType.DateTime2) {Value = minDate});
                            command.Parameters.Add(new SqlParameter("@LastTransmission", SqlDbType.DateTime2) {Value = maxDate});
                            command.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
Example #5
0
        private static void ProcessTransmissions(CollarFile file, ArgosFile argos,
                                                 IGrouping <string, ArgosTransmission> group)
        {
            LogGeneralMessage(String.Format("  Start processing transmissions for Argos Id {0}", group.Key));
            var platformId    = group.Key;
            var transmissions = group.ToList();
            var first         = transmissions.Min(t => t.DateTime);
            var last          = transmissions.Max(t => t.DateTime);
            var databaseViews = new AnimalMovementViews();
            var parameterSets =
                databaseViews.GetTelonicsParametersForArgosDates(platformId, first, last)
                .OrderBy(c => c.StartDate)
                .ToList();

            if (parameterSets.Count == 0)
            {
                var msg = String.Format("No Collar for ArgosId {0} from {1:g} to {2:g}",
                                        platformId, first, last);
                LogIssueForFile(file.FileId, msg, platformId, null, null, first, last);
                return;
            }
            if (parameterSets[0].StartDate != null && first < parameterSets[0].StartDate)
            {
                var msg = String.Format("No Collar for ArgosId {0} from {1:g} to {2:g}",
                                        platformId, first, parameterSets[0].StartDate);
                LogIssueForFile(file.FileId, msg, platformId, null, null, first, parameterSets[0].StartDate);
            }
            int lastIndex = parameterSets.Count - 1;

            if (parameterSets[lastIndex].EndDate != null && parameterSets[lastIndex].EndDate < last)
            {
                var msg = String.Format("No Collar for ArgosId {0} from {1:g} to {2:g}",
                                        platformId, parameterSets[lastIndex].EndDate, last);
                LogIssueForFile(file.FileId, msg, platformId, null, null, parameterSets[lastIndex].EndDate, last);
            }
            foreach (var parameterSet in parameterSets)
            {
                if (parameterSet.ParameterId == null ||
                    (parameterSet.CollarModel == "Gen3" && parameterSet.Gen3Period == null) ||
                    (parameterSet.CollarModel == "Gen4" && parameterSet.Format == null))
                {
                    var start = parameterSet.StartDate ?? first;
                    var end   = parameterSet.EndDate ?? last;
                    var msg   = String.Format("No Telonics Parameters for Collar {0}/{3} from {1:g} to {2:g}",
                                              parameterSet.CollarManufacturer, start, end, parameterSet.CollarId);
                    LogIssueForFile(file.FileId, msg, platformId, parameterSet.CollarManufacturer, parameterSet.CollarId, start, end);
                    continue;
                }
                try
                {
                    ProcessParameterSet(file, argos, first, last, transmissions, parameterSet);
                }
                catch (Exception ex)
                {
                    var message = String.Format(
                        "ERROR {0} adding Argos {1} transmissions from {2:g} to {3:g} to Collar {4}/{5}",
                        ex.Message, parameterSet.PlatformId, first, last,
                        parameterSet.CollarManufacturer, parameterSet.CollarId);
                    LogIssueForFile(file.FileId, message, parameterSet.PlatformId, parameterSet.CollarManufacturer,
                                    parameterSet.CollarId, first, last);
                }
            }
            LogGeneralMessage("  Finished processing transmissions");
        }