예제 #1
0
        public void Parse(string url)
        {
            MasterIndex masterIndex       = AddMasterIndex(url);
            Stream      masterIndexStream = Ftp.GetZippedFile(url);

            ParseMasterIndexStream(masterIndex.MasterIndexId, masterIndexStream);
        }
        public void ProcessFullIndex(ushort year, ushort quarter)
        {
            string key = year.ToString("0000") + quarter.ToString("00");

            if (tasks.ContainsKey(key))
            {
                return;
            }

            Task task = Task.Factory.StartNew(() =>
            {
                logger.Info($"ProcessFullIndex - Init proces for year {year}, quarter {quarter}");
                try
                {
                    MasterIndex index;
                    Quarter q = (Quarter)quarter;

                    logger.Info($"ProcessFullIndex - Getting full index from DB");
                    index = GetFullIndexFromDB(year, q);
                    if (index != null && index.IsComplete)
                    {
                        return(index);
                    }

                    logger.Info($"ProcessFullIndex - Downloading full index from Web");
                    string content;
                    if (GetFullIndexFromWeb(year, q, out content))
                    {
                        if (index == null)
                        {
                            logger.Info($"ProcessFullIndex - Creating new index");
                            index         = new MasterIndex();
                            index.Quarter = q;
                            index.Year    = year;
                        }
                        logger.Info($"ProcessFullIndex - Parsing index");
                        IList <IndexEntry> entries = parser.ParseMasterIndex(content);
                        index.TotalLines           = entries.Count;
                        logger.Info($"ProcessFullIndex - Updating total lines");
                        edgarFilesRepo.Update(index, "TotalLines");
                        logger.Info($"ProcessFullIndex - Saving entries to DB");
                        SaveIndexEntriesToDB(index, entries);
                        logger.Info($"ProcessFullIndex - End successful");
                        return(index);
                    }
                    else
                    {
                        throw new ApplicationException($"It wasn't able to retrieve index (year={year}, quarter={quarter}");
                    }
                }
                catch (Exception ex)
                {
                    logger.Fatal("ProcessFullIndex - Exception: " + ex.Message, ex);
                    throw ex;
                }
            }, TaskCreationOptions.LongRunning).ContinueWith(ProcessFullIndexWhenFinish, key);

            tasks.Add(key, task);
        }
        private void SaveIndexEntriesToDB(MasterIndex index, IList <IndexEntry> entries)
        {
            edgarFilesBulkRepo.SaveIndexEntries(index, entries);
            long dbRowsCopied = edgarFilesRepo.GetIndexEntriesCount(index);

            index.ProcessedLines = dbRowsCopied;
            edgarFilesRepo.Update(index, "ProcessedLines");
            if (index.ProcessedLines == index.TotalLines)
            {
                index.IsComplete = true;
                edgarFilesRepo.Update(index, "IsComplete");
            }
        }
예제 #4
0
        private MasterIndex AddMasterIndex(string url)
        {
            MasterIndex masterIndex = _db.MasterIndexes.FirstOrDefault(m => m.Url == url);

            if (masterIndex == null)
            {
                masterIndex = GetMasterIndexFromUrl(url);
                Console.WriteLine($"Adding new MasterIndex for {masterIndex.Name}");

                _db.MasterIndexes.Add(masterIndex);
                _db.SaveChanges();
            }
            else
            {
                Console.WriteLine($"MasterIndex {masterIndex.Name} already exists, continuing.");
            }

            return(masterIndex);
        }
        public long SaveIndexEntries(MasterIndex index, IList <IndexEntry> entries)
        {
            log.Info("SaveIndexEntries - Saving data to datatable");
            string    tableName = "IndexEntries";
            DataTable dt        = GetEmptyDataTable(tableName);

            foreach (IndexEntry entry in entries)
            {
                DataRow dr = dt.NewRow();
                dr["CIK"]           = entry.CIK;
                dr["FormTypeId"]    = entry.FormTypeId;
                dr["DateFiled"]     = entry.DateFiled;
                dr["RelativeURL"]   = entry.RelativeURL;
                dr["MasterIndexId"] = index.Id;
                //dr["MasterDailyIndex_Id"] = ?????;
                dt.Rows.Add(dr);
            }
            log.Info($"SaveIndexEntries - Datatable has {dt.Rows.Count} rows, starting bulk copy");
            long rowsCopied = BulkCopy(tableName, dt);

            log.Info($"SaveIndexEntries - Bulk copy ended ok");
            return(rowsCopied);
        }
예제 #6
0
        public IHttpActionResult GetDailyIndex(ushort year, ushort quarter, uint date)
        {
            MasterIndex index = indexService.ProcessDailyIndex(year, quarter, date);

            return(Ok(index));
        }
        public ActionResult <MasterIndex> GetDailyIndex(ushort year, ushort quarter, uint date)
        {
            MasterIndex index = indexesParser.ProcessDailyIndex(year, quarter, date);

            return(Ok(index));
        }
 public long GetIndexEntriesCount(MasterIndex index)
 {
     return(Context.IndexEntries.Where(entry => entry.MasterIndexId == index.Id).Count());
 }
 public void Update(MasterIndex index, string property)
 {
     Context.Entry <MasterIndex>(index).Property(property).IsModified = true;
     Context.SaveChanges();
 }
 public void Add(MasterIndex index)
 {
     Context.MasterIndexes.Add(index);
     Context.SaveChanges();
 }
        public void Test_MasterIndex_Ctor()
        {
            MasterIndex mi = new MasterIndex();

            return;
        }