Пример #1
0
        public Form1()
        {
            m_AddNewItem  = new AddNewItem(this.AddItem);
            m_InsertItem  = new InsertItem(this.AddOrInsertItem);
            m_ChangedItem = new ChangedItem(this.ChangeItem);
            m_DeletedItem = new DeletedItem(this.DeleteItem);

            InitializeComponent();
            _IpHlpAPI           = new IpHlpApidotnet.IPHelper();
            conns.ItemAdded    += new TCPUDPConnections.ItemAddedEvent(conns_ItemAdded);
            conns.ItemInserted += new TCPUDPConnections.ItemInsertedEvent(conns_ItemInserted);
            conns.ItemChanged  += new TCPUDPConnections.ItemChangedEvent(conns_ItemChanged);
            conns.ItemDeleted  += new TCPUDPConnections.ItemDeletedEvent(conns_ItemDeleted);
            RefreshLower();

            //hack to initially try to reduce the memory footprint of the app (admin only)
            try
            {
                Process loProcess = Process.GetCurrentProcess();
                loProcess.MaxWorkingSet = loProcess.MaxWorkingSet;
                loProcess.Dispose();
            }
            catch { }
            System.Timers.Timer ShrinkTimer = new System.Timers.Timer();
            ShrinkTimer.Interval = 60000;
            ShrinkTimer.Elapsed += new System.Timers.ElapsedEventHandler(ShrinkTimer_Elapsed);
            ShrinkTimer.Start();
        }
Пример #2
0
        async Task INotifyService.Notify(string eventXml, string tfsIdentityXml)
        {
            if (string.IsNullOrEmpty(eventXml))
            {
                throw new ArgumentException(nameof(eventXml));
            }

            var changedItem = new ChangedItem(eventXml);
            var link        = new SlackAttachment {
                Title     = changedItem.UrlTitle,
                TitleLink = changedItem.Url
            };

            Console.WriteLine(changedItem.Title + " - " + changedItem.UrlTitle);
            var slackHub = new SlackChatHub {
                Id = user
            };
            var policyResult = await Policy
                               .Handle <Exception>()
                               .WaitAndRetryAsync(new[] {
                TimeSpan.FromSeconds(2),
                TimeSpan.FromSeconds(4),
                TimeSpan.FromSeconds(8)
            })
                               .ExecuteAndCaptureAsync(
                () => slackIntegration.SendMessageToChannel(slackHub, changedItem.Title, link));

            if (policyResult.FinalException != null)
            {
                Console.WriteLine($"Could not post to Slack {policyResult.FinalException}");
            }
        }
Пример #3
0
        /// <summary>
        /// Processes items or their versions that were deleted from the target database. There are 3 possible scenarios that items or versions are unpublished. Publishing Restrictions, Delete, Archive.
        /// </summary>
        /// <param name="sourceDatabase"><see cref="Database"/></param>
        /// <param name="itemResult">A list of item results which indicates items or their version(s) were removed from the publishing target. <see cref="ManifestOperationResult"/></param>
        /// <returns><see cref="ChangedItem"/></returns>
        public ChangedItem ProcessDeletedItem(IDatabase sourceDatabase, ManifestOperationResult <ItemResult> itemResult)
        {
            var itemId = ID.Parse(itemResult.EntityId);

            // Try to retrieve straight as an item. If an item is found from the source database, it will most likely have something to do with Publishing Restrictions imposed to the item
            var item = sourceDatabase.Database.GetItem(itemId);

            if (item == null)
            {
                ArchiveEntry archiveEntry;

                // Try to retrieve from Recycle Bin
                var recyclebinItem = _archiveManagerWrapper.GetEntries("recyclebin", sourceDatabase.Database, itemId).FirstOrDefault(ent => ent.ItemId == itemId);

                if (recyclebinItem != null)
                {
                    _publishingLog.Debug(string.Format("Item {0} found in Recycle Bin", itemId));
                    archiveEntry = recyclebinItem;
                }
                else
                {
                    // Try to retrieve from Archive
                    var archiveItem = _archiveManagerWrapper.GetEntries("archive", sourceDatabase.Database, itemId).FirstOrDefault(ent => ent.ItemId == itemId);
                    if (archiveItem != null)
                    {
                        _publishingLog.Debug(string.Format("Item {0} found in Archive", itemId));
                        archiveEntry = archiveItem;
                    }
                    else
                    {
                        return(null);
                    }
                }

                var changedItem = new ChangedItem
                {
                    ItemId = itemId, ItemOperationResultType = itemResult.Type, Path = archiveEntry.OriginalLocation, ResultChangeType = ResultChangeType.Deleted
                };

                return(changedItem);
            }
            else
            {
                _publishingLog.Debug(string.Format("Item {0} found in source databbase {1}", itemId, sourceDatabase.Name));
                var changedItem = new ChangedItem
                {
                    ItemId = itemId,
                    ItemOperationResultType = itemResult.Type,
                    ItemPath     = item.Paths,
                    Path         = item.Paths.FullPath,
                    FieldChanges = itemResult.Metadata.FieldChanges
                };

                return(changedItem);
            }
        }
Пример #4
0
        public void DescriptionChanged()
        {
            var xmlString = File.ReadAllText("../../../TestData/DescriptionChanged.xml");

            var changedItem = new ChangedItem(xmlString);

            Assert.Equal("Product Backlog Item changed: New backlog item", changedItem.Title);
            Assert.Equal("181902: Test", changedItem.UrlTitle);
            Assert.Equal("http://vd-tfs03:8080/tfs/DefaultCollection/DIPS/_workitems/edit/181902", changedItem.Url);
        }
Пример #5
0
        private void AddOrUpdate(Item item, OperationType operation, IEnumerable <ChangedField> changedFields)
        {
            var userName = item.Statistics.UpdatedBy;

            if (string.IsNullOrEmpty(userName))
            {
                userName = item.Statistics.CreatedBy;
            }

            if (!_userService.IsUserInRole(userName))
            {
                return;
            }

            var user = _userAuditReportReposiotry.GetByUserName(userName);

            if (user == null)
            {
                var changes = new List <Change>
                {
                    new Change(changedFields, operation)
                };

                var changedItems = new List <ChangedItem>
                {
                    new ChangedItem(item.ID.ToString(), item.Paths.FullPath, item.Language.Name, changes)
                };

                var userRoles = RolesInRolesManager.GetRolesForUser(User.FromName(userName, false),
                                                                    true).Select(r => r.Name);
                user = new UserChange(userName, userRoles, changedItems);

                _userAuditReportReposiotry.Add(user);
            }
            else
            {
                var changedItem = user.ChangedItems.FirstOrDefault(i => i.ItemId.Equals(item.ID.ToString()) && i.Language.Equals(item.Language.Name));
                if (changedItem == null)
                {
                    changedItem = new ChangedItem(item.ID.ToString(), item.Paths.FullPath, item.Language.Name);
                    user.ChangedItems.Add(changedItem);
                }
                changedItem.ItemPath = item.Paths.FullPath;
                var change = new Change(changedFields, operation);

                changedItem.Changes.Add(change);
                _userAuditReportReposiotry.Update(user);
            }
        }
        /// <summary>
        /// Deserializes an ChangedItem from an XML file.
        /// </summary>
        /// <param name="reader">XMLReader where the ChangedItem is.</param>
        /// <returns>ChangedItem.</returns>
        public static ChangedItem Deserialize(XmlReader reader)
        {
            ChangedItem lResult = null;

            if (reader.IsStartElement(DTD.Error.ChangedItems.TagChangedItem))
            {
                lResult = new ChangedItem();
                string    stringModelType = reader.GetAttribute(DTD.Error.ChangedItems.ChangedItem.TagType);
                ModelType modelType       = Convert.StringTypeToMODELType(stringModelType);

                if (modelType == ModelType.Oid)
                {
                    lResult.Type      = Convert.MODELTypeToStringType(ModelType.Oid);
                    lResult.ClassName = stringModelType;
                }
                else
                {
                    lResult.Type      = stringModelType;
                    lResult.ClassName = string.Empty;
                }
                lResult.Name = reader.GetAttribute(DTD.Error.ChangedItems.ChangedItem.TagName);

                if (!reader.IsEmptyElement)
                {
                    reader.ReadStartElement();

                    if (reader.IsStartElement(DTD.Error.ChangedItems.ChangedItem.TagChangedItemOldValue))
                    {
                        lResult.OldValue = XMLChangedItemValueSerializer.Deserialize(reader.ReadSubtree(), lResult.Type, lResult.ClassName);
                        reader.ReadEndElement();
                    }

                    if (reader.IsStartElement(DTD.Error.ChangedItems.ChangedItem.TagChangedItemNewValue))
                    {
                        lResult.NewValue = XMLChangedItemValueSerializer.Deserialize(reader.ReadSubtree(), lResult.Type, lResult.ClassName);
                        reader.ReadEndElement();
                    }
                }
                else
                {
                    reader.Skip();
                }
            }
            else
            {
                throw new ArgumentException("Xml Reader don't have the ChangedItem in Start Element.", "XmlReader reader");
            }
            return(lResult);
        }
        /// <summary>
        /// Deserializes an ChangedItem from an XML file.
        /// </summary>
        /// <param name="reader">XMLReader where the ChangedItem is.</param>
        /// <returns>ChangedItem.</returns>
        public static ChangedItem Deserialize(XmlReader reader)
        {
            ChangedItem lResult = null;
            if (reader.IsStartElement(DTD.Error.ChangedItems.TagChangedItem))
            {
                lResult = new ChangedItem();
                string stringModelType = reader.GetAttribute(DTD.Error.ChangedItems.ChangedItem.TagType);
                ModelType modelType = Convert.StringTypeToMODELType(stringModelType);

                if (modelType == ModelType.Oid)
                {
                    lResult.Type = Convert.MODELTypeToStringType(ModelType.Oid);
                    lResult.ClassName = stringModelType;
                }
                else
                {
                    lResult.Type = stringModelType;
                    lResult.ClassName = string.Empty;
                }
                lResult.Name = reader.GetAttribute(DTD.Error.ChangedItems.ChangedItem.TagName);

                if (!reader.IsEmptyElement)
                {
                    reader.ReadStartElement();

                    if (reader.IsStartElement(DTD.Error.ChangedItems.ChangedItem.TagChangedItemOldValue))
                    {
                        lResult.OldValue =  XMLChangedItemValueSerializer.Deserialize(reader.ReadSubtree(),lResult.Type, lResult.ClassName);
                        reader.ReadEndElement();
                    }

                    if (reader.IsStartElement(DTD.Error.ChangedItems.ChangedItem.TagChangedItemNewValue))
                    {
                        lResult.NewValue = XMLChangedItemValueSerializer.Deserialize(reader.ReadSubtree(), lResult.Type, lResult.ClassName);
                        reader.ReadEndElement();
                    }
                }
                else
                {
                    reader.Skip();
                }
            }
            else
            {
                throw new ArgumentException("Xml Reader don't have the ChangedItem in Start Element.", "XmlReader reader");
            }
            return lResult;
        }
Пример #8
0
        internal virtual ChangedItem Update(Quotation qutation)
        {
            ChangedItem changedItems = ChangedItem.None;

            if (_ask != qutation.Ask || _bid != qutation.Bid)
            {
                changedItems |= ChangedItem.Quotation;
            }

            var currencyRate      = _owner.Owner.CurrencyRate(null);
            var settingInstrument = _owner.Owner.SettingInstrument();

            if (_currencyRateIn != currencyRate.RateIn || _currencyRateOut != currencyRate.RateOut)
            {
                changedItems |= ChangedItem.CurrecnyRate;
            }
            if (_tradePLFormula != settingInstrument.TradePLFormula)
            {
                changedItems |= ChangedItem.TradePLFormula;
            }
            if (_marginFormula != settingInstrument.MarginFormula)
            {
                changedItems |= ChangedItem.MarginFormula;
            }
            if (_lotBlance != _owner.LotBalance)
            {
                changedItems |= ChangedItem.LotBalance;
            }
            _ask             = qutation.Ask;
            _bid             = qutation.Bid;
            _marginFormula   = settingInstrument.MarginFormula;
            _tradePLFormula  = settingInstrument.TradePLFormula;
            _lotBlance       = _owner.LotBalance;
            _currencyRateIn  = currencyRate.RateIn;
            _currencyRateOut = currencyRate.RateOut;
            this.ChangedItem = changedItems;
            return(changedItems);
        }
Пример #9
0
        private ItemChangesViewModel PrepareChangesDetails(Change change, ChangedItem item, bool areSavingChanges = false)
        {
            if (change == null)
            {
                return(null);
            }

            if (areSavingChanges)
            {
                return(new ItemSavedViewModel()
                {
                    Id = item.ItemId,
                    Path = item.ItemPath,
                    Date = change.Date.ToString(CultureInfo.InvariantCulture),
                    FieldsChanged = change.ChangedFields
                });
            }
            return(new ItemChangesViewModel()
            {
                Id = item.ItemId,
                Path = item.ItemPath,
                Date = change.Date.ToString(CultureInfo.InvariantCulture)
            });
        }
Пример #10
0
        /// <summary>
        /// Processes items that were created and modified during publishing.
        /// </summary>
        /// <param name="sourceDatabase">This should be the 'master' database.<see cref="Database"/></param>
        /// <param name="itemResult">A list of item results which indicates items or their version(s) were removed from the publishing target. <see cref="ManifestOperationResult"/></param>
        /// <returns><see cref="ChangedItem"/></returns>
        public ChangedItem ProcessChangedItem(IDatabase sourceDatabase, ManifestOperationResult <ItemResult> itemResult)
        {
            var itemId = ID.Parse(itemResult.EntityId);
            var item   = sourceDatabase.Database.GetItem(itemId, Language.Parse(itemResult.Metadata.VarianceChanges[0].Item1), Version.Parse(itemResult.Metadata.VarianceChanges[0].Item2));

            if (item == null)
            {
                return(null);
            }
            var changedItem = new ChangedItem
            {
                ItemId = itemId,
                ItemOperationResultType = itemResult.Type,
                ItemPath         = item.Paths,
                Path             = item.Paths.FullPath,
                Language         = itemResult.Metadata.VarianceChanges[0].Item1,
                Version          = itemResult.Metadata.VarianceChanges[0].Item2,
                ResultChangeType = itemResult.Metadata.VarianceChanges[0].Item3,
                FieldChanges     = itemResult.Metadata.FieldChanges
            };

            _publishingLog.Debug(string.Format("Item {0} found in source database {1}", itemId, sourceDatabase.Name));
            return(changedItem);
        }
Пример #11
0
 internal static bool Include(this ChangedItem source, ChangedItem item)
 {
     return((source & item) != 0);
 }