コード例 #1
0
 /// <summary>
 ///
 /// </summary>
 /// <returns></returns>
 public TaskResult AddTracker(ImportTracker importTracker)
 {
     _importTrackerRepository.PostAsync(importTracker);
     return(new TaskResult {
         IsSuccessful = true
     });
 }
コード例 #2
0
        public override void OnSubscribed(VisualStudioDocumentTracker tracker)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException(nameof(tracker));
            }

            _foregroundDispatcher.AssertForegroundThread();

            var imports = GetImportItems(tracker);

            foreach (var import in imports)
            {
                var importFilePath = import.PhysicalPath;
                Debug.Assert(importFilePath != null);

                if (!_importTrackerCache.TryGetValue(importFilePath, out var importTracker))
                {
                    // First time seeing this import. Start tracking it.
                    var fileChangeTracker = _fileChangeTrackerFactory.Create(importFilePath);
                    importTracker = new ImportTracker(fileChangeTracker);
                    _importTrackerCache[importFilePath] = importTracker;

                    fileChangeTracker.Changed += FileChangeTracker_Changed;
                    fileChangeTracker.StartListening();
                }

                importTracker.AssociatedDocuments.Add(tracker.FilePath);
            }
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="importTracker"></param>
        /// <returns></returns>
        public TaskResult DeleteAsync(ImportTracker importTracker)
        {
            Logger.Info($"deleting import tracker data: {importTracker}");
            var response = Entities.DeleteAsync(new ImportTrackerJson(importTracker));

            Logger.Info($"operaton status code: {response.Result.StatusCode}");
            return(new TaskResult {
                IsSuccessful = response.Result.IsSuccess
            });
        }
コード例 #4
0
        /// <summary>
        /// Bulks the async.
        /// </summary>
        /// <returns>The async.</returns>
        /// <param name="importTracker">Ideas json.</param>
        public TaskResult PostAsync(ImportTracker importTracker)
        {
            Logger.Info($"adding imported tracker: {importTracker}");
            var response = Entities.PostAsync(new ImportTrackerJson(importTracker));

            Logger.Info($"operaton status code: {response.Result.StatusCode}");
            return(new TaskResult {
                IsSuccessful = response.Result.IsSuccess
            });
        }
コード例 #5
0
        private void OnChanged(ImportTracker importTracker, FileChangeKind changeKind)
        {
            _foregroundDispatcher.AssertForegroundThread();

            if (Changed == null)
            {
                return;
            }

            var args = new ImportChangedEventArgs(importTracker.FilePath, changeKind, importTracker.AssociatedDocuments);

            Changed.Invoke(this, args);
        }
コード例 #6
0
        private void OnChanged(ImportTracker importTracker, FileChangeKind changeKind)
        {
            _projectSnapshotManagerDispatcher.AssertDispatcherThread();

            if (Changed is null)
            {
                return;
            }

            var args = new ImportChangedEventArgs(importTracker.FilePath, changeKind, importTracker.AssociatedDocuments);

            Changed.Invoke(this, args);
        }
コード例 #7
0
        public void ContainsTest()
        {
            var importTracker = new ImportTracker("asdf");
            var list          = new List <ImportTracker>()
            {
                new ImportTracker("adsf")
            };

            if (list.Contains(importTracker))
            {
                Assert.IsTrue(true);
            }
        }
コード例 #8
0
 private void StopListeningForChanges(ImportTracker importTracker)
 {
     try
     {
         if (importTracker.FileChangeCookie != VSConstants.VSCOOKIE_NIL)
         {
             var hr = _fileChangeService.UnadviseFileChange(importTracker.FileChangeCookie);
             Marshal.ThrowExceptionForHR(hr);
             importTracker.FileChangeCookie = VSConstants.VSCOOKIE_NIL;
         }
     }
     catch (Exception exception)
     {
         _errorReporter.ReportError(exception);
     }
 }
        public void BuildImports()
        {
            var importTrackerRepository = new ImportTrackerRepository("http://127.0.0.1:5984");
            var exportedList            = new List <string>
            {
                "2GO", "ACE", "FGENF", "FGENG", "FJP", "FJPB", "FLI", "FMETF", "FOOD", "FPH", "FPI", "GEO", "GERI", "GLO", "GMA7", "GMAP", "GPH", "GSMI", "GTCAP", "H2O",
                "HI", "HLCM", "HOUSE", "I", "IMP", "ION", "IPO", "IRC", "IMP", "ION", "IPO", "IRC", "IS", "ISM", "JFC", "JGS", "JOH", "KEP", "KPH", "KPHB", "LAND", "LC", "LCB",
                "LFM", "LMG", "LOTO", "LPZ", "LR", "LRP", "LRW", "LSC", "LTG", "MA", "MAB", "MAC", "MACAY", "MAH", "MARC", "MB", "MBC", "MBT", "MED", "MEG", "MER", "MFC", "MFIN",
                "MG", "MHC", "MJC", "MJIC", "MRC", "MVC", "MWC", "MWIDE", ",NI", "NIKL", "NOW", "NRCP", "OM", "OPM", "ORE", "OV", "PA", "PAL", "PBB", "PBC", "PCOR", "PERC",
                "PGOLD", "PHA", "PHES", "PHN", "PIP", "PMPC", "PNB", "PNX", "PPC", "PRC", "PRIM", "PRMX", "PSB", "PSE", "PTC", "PX", "PXP", "RCB", "RCI", "REG", "RFM", "RLT",
                "ROCK", "ROX", "RRHI", "RWM", "SCC", "SECB", "SEVN", "SFI", "SFIP", "SGI", "SHNG", "SLF", "SLI", "SM", "SMC", "SMC2B", "GOB", "IMPB", "AEV",
                "SMPH", "SOC", "SPC", "SPM", "STI", "STR", "SUN", "T", "TBGI", "TEL", "TFC", "TFHI", "UBP", "UNI", "UPM", "URC", "V", "VITA", "VLL", "VMC", "VUL", "VVT",
                "WEB", "WIN"
            };

            foreach (var exported in exportedList)
            {
                var item     = new ImportTracker(exported);
                var response = importTrackerRepository.PostAsync(item);
            }
            Assert.IsTrue(true);
        }
コード例 #10
0
        private void StartListeningForChanges(ImportTracker importTracker)
        {
            try
            {
                if (importTracker.FileChangeCookie == VSConstants.VSCOOKIE_NIL)
                {
                    var hr = _fileChangeService.AdviseFileChange(
                        importTracker.FilePath,
                        FileChangeFlags,
                        new ImportDocumentEventSink(this, _foregroundDispatcher),
                        out var cookie);

                    Marshal.ThrowExceptionForHR(hr);

                    importTracker.FileChangeCookie = cookie;
                }
            }
            catch (Exception exception)
            {
                _errorReporter.ReportError(exception);
            }
        }
コード例 #11
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public TaskResult Scrape(TransactionParameter transactionParameter)
        {
            var counter = 0;

            foreach (var import in _imports)
            {
                counter++;
                Logger.Info($"processing {counter} out of {_imports.Count}");
                LogicalThreadContext.Properties["symbol"] = import.Symbol;
                var importTracker = new ImportTracker(import.Symbol, transactionParameter.FromDate);

                try
                {
                    //create new transaction parameter to avoid threading issues
                    var parameter = new TransactionParameter
                    {
                        Symbol   = import.Symbol,
                        FromDate = transactionParameter.FromDate,
                        ToDate   = transactionParameter.ToDate
                    };
                    _brokerTransactionSimulator.Simulate(parameter);

                    var fluentWait = new DefaultWait <IWebDriver>(_webDriver)
                    {
                        Timeout         = TimeSpan.FromSeconds(30),
                        PollingInterval = TimeSpan.FromMilliseconds(250)
                    };
                    fluentWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
                    var rows = fluentWait
                               .Until(x => x.FindElements(By.XPath("/html/body/form/table/tbody/tr")));

                    if (rows.Count > 0)
                    {
                        Logger.Info("initiating transaction builder");
                        var brokerTransactions = _brokerTransactionBuilder.Build(rows.ToList(), parameter);
                        Logger.Info("initiating transaction process");
                        _brokerTransactionProcessor.Process(brokerTransactions);
                        _brokerTransactionBuilder.Transactions.Clear();

                        importTracker.Status = "Success";
                        Logger.Info($"broker transactions for completed for symbol: {import.Symbol}");
                    }
                    importTracker.Status = "None";
                }
                catch (Exception e)
                {
                    Logger.Warn($"An issue trying to download broker transactions found, adding to retry queue for later processing", e);
                    importTracker.Status = "Retry";
                }

                //switch back to main frame to prevent
                _brokerTabNavigator.NavigateHeaderFrame();
                _brokerTabNavigator.Navigate(true);
                _importProcessor.AddTracker(importTracker);
            }

            Logger.Info($"broker table scraping completed.");
            return(new TaskResult {
                IsSuccessful = true
            });
        }