Пример #1
0
        public long GetRecordCountToScrub(ScrubRule scrubbingRule)
        {
            //var SourceCosmosDBSettings = CloneSettings.GetConfigurationSection("SourceCosmosDBSettings");
            string DatabaseName   = CloneSettings.TargetSettings.DatabaseName;
            string CollectionName = CloneSettings.TargetSettings.CollectionName;
            string totalCountQuery;

            if (string.IsNullOrEmpty(scrubbingRule.FilterCondition))
            {
                totalCountQuery = "SELECT VALUE COUNT(1) FROM c";
            }
            else
            {
                totalCountQuery = "SELECT VALUE COUNT(1) FROM c" + " where " + scrubbingRule.FilterCondition;
            }
            FeedOptions queryOptions = new FeedOptions {
                MaxItemCount = -1, EnableCrossPartitionQuery = true
            };
            long sourceTotalRecordCount;

            using (var cosmosClient = GetTargetDocumentDbClient())
            {
                sourceTotalRecordCount = cosmosClient.CreateDocumentQuery <long>(
                    UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName), totalCountQuery, queryOptions)
                                         .AsEnumerable().First();
            }
            return(sourceTotalRecordCount);
        }
        private void CreateScrubRule(ScrubRule scrubRule = null)
        {
            WrapPanel parentStackPanelLeft = (WrapPanel)this.FindName("WrapPanel");

            int newRuleIndex = newIndex(scrubRule);

            AddRuleWithData(parentStackPanelLeft, newRuleIndex, scrubRule);
        }
Пример #3
0
        private void CreateScrubRule(ScrubRule scrubRule = null)
        {
            StackPanel parentStackPanelLeft  = (StackPanel)this.FindName("RulesStackPanelLeft");
            StackPanel parentStackPanelRight = (StackPanel)this.FindName("RulesStackPanelRight");

            int newRuleIndex = newIndex(scrubRule);

            if (newRuleIndex % 2 == 1)
            {
                AddRuleWithData(parentStackPanelLeft, newRuleIndex, scrubRule);
            }
            else
            {
                AddRuleWithData(parentStackPanelRight, newRuleIndex, scrubRule);
            }
        }
Пример #4
0
        public static void TestCosmosScrubbing()
        {
            var tcs = new DataScrubMigrator();
            // ScrubRule rule1 = new ScrubRule("c.id=\"a5e66b8b-a57c-4788-a194-58d3735a9854\"", "c.CompositeName",  RuleType.Singlevalue, "Test overwritten Value xyz",1);
            //ScrubRule rule2 = new ScrubRule("", "c.SuperKeys.KeyValue",  RuleType.Shuffle, "",2);
            //ScrubRule rule3 = new ScrubRule("", "c.EntityValue.Name", RuleType.Shuffle, "", 3);
            //ScrubRule rule4 = new ScrubRule("", "c.EntityValue.Description", RuleType.Singlevalue, "OverWrite Filtered rule Description", 4);
            //ScrubRule rule3 = new ScrubRule("c.id=\"1402e84d-e034-45f9-8064-3ab174119e4f\"", "c.EntityValue.Name", RuleType.Singlevalue,"Test overwritten EntityName", 3);
            var scrubRules = new List <ScrubRule>();
            //scrubRules.Add(rule2);
            //scrubRules.Add(rule3);
            //scrubRules.Add(rule4);
            //ScrubRule rule5 = new ScrubRule("c.EntityType=\"External\"", "c.EmailAddress", RuleType.Singlevalue, "*****@*****.**", 4);
            ScrubRule rule6 = new ScrubRule("c.id=\"2826d281-3a8b-4408-b064-efff26e26119\"", "c.EmailAddress", RuleType.SingleValue, "*****@*****.**", 4);

            scrubRules.Add(rule6);
            var documentMigrator = new CosmosCloneCommon.Migrator.DocumentMigrator();

            documentMigrator.StartCopy(scrubRules).Wait();
            //var result = tcs.StartScrub(scrubRules);
        }
        int newIndex(ScrubRule scrubRule = null)
        {
            int newRuleIndex = 0;

            if (scrubRule == null)
            {
                newRuleIndex = RuleIndex++;
            }
            else
            {
                if (scrubRule.RuleId == 0)
                {
                    newRuleIndex = RuleIndex++;
                }
                else
                {
                    newRuleIndex = scrubRule.RuleId;
                }
            }
            return(newRuleIndex);
        }
Пример #6
0
        public List <JToken> ScrubObjectList(List <string> srcList, ScrubRule scrubRule)
        {
            //var scrubbedObjects = new List<string>();
            var scrubbedObjects = new List <JToken>();
            var propNames       = scrubRule.PropertyName.Split('.').ToList();

            if (scrubRule.Type == RuleType.NullValue || scrubRule.Type == RuleType.SingleValue || scrubRule.Type == RuleType.PartialMaskFromLeft || scrubRule.Type == RuleType.PartialMaskFromRight)
            {
                foreach (var strObj in srcList)
                {
                    try
                    {
                        JToken jToken = GetUpdatedJsonArrayValue((JToken)JObject.Parse(strObj), propNames, scrubRule.UpdateValue, scrubRule.Type);
                        scrubbedObjects.Add(jToken);
                    }
                    catch (Exception ex)
                    {
                        CloneLogger.LogInfo("Log failed");
                        CloneLogger.LogError(ex);
                        throw;
                    }
                }
            }
            else if (scrubRule.Type == RuleType.Shuffle)
            {
                //get all similar values
                var propertyValues = new List <JToken>();
                foreach (var strObj in srcList)
                {
                    try
                    {
                        List <JToken> jTokenList = new List <JToken>();
                        GetPropertyValues((JToken)JObject.Parse(strObj), propNames, ref jTokenList);
                        propertyValues.AddRange(jTokenList);
                    }
                    catch (Exception ex)
                    {
                        CloneLogger.LogInfo("Log failed");
                        CloneLogger.LogError(ex);
                        throw;
                    }
                }

                var shuffledTokens = RandomNumberGenerator.Shuffle(propertyValues);
                var shuffledTokenQ = new Queue <JToken>(shuffledTokens);

                foreach (var strObj in srcList)
                {
                    try
                    {
                        JToken jToken = GetDocumentShuffledToken((JToken)JObject.Parse(strObj), propNames, ref shuffledTokenQ);
                        scrubbedObjects.Add(jToken);
                    }
                    catch (Exception ex)
                    {
                        CloneLogger.LogInfo("Log failed");
                        CloneLogger.LogError(ex);
                        throw;
                    }
                }
            }
            else
            {
                foreach (var strObj in srcList)
                {
                    scrubbedObjects.Add((JToken)strObj);
                }
            }

            return(scrubbedObjects);
        }
        void AddRuleWithData(WrapPanel parentStackPanel, int ruleIndex, ScrubRule scrubRule = null)
        {
            StackPanel RuleHeadersp = new StackPanel();

            RuleHeadersp.Orientation = Orientation.Horizontal;

            TextBlock HeaderTB = new TextBlock();

            HeaderTB.Text = "Rule " + (ruleIndex);

            Label RuleIdLabel = new Label();

            RuleIdLabel.Content    = ruleIndex;
            RuleIdLabel.Visibility = Visibility.Hidden;

            Button DeleteBtn = new Button();

            DeleteBtn.Name = "btnDelete_" + ruleIndex;
            DeleteBtn.HorizontalAlignment = HorizontalAlignment.Right;
            //DeleteBtn.Content = "Delete";
            DeleteBtn.Margin  = new Thickness(265, 0, 0, 0);
            DeleteBtn.Click  += DeleteBtn_Click;
            DeleteBtn.Content = new Image
            {
                Source            = new BitmapImage(new Uri("/Images/closeIcon.png", UriKind.Relative)),
                VerticalAlignment = VerticalAlignment.Center
            };

            RuleHeadersp.Children.Add(HeaderTB);
            RuleHeadersp.Children.Add(DeleteBtn);

            Expander exp = new Expander();

            exp.Header = RuleHeadersp;
            exp.HorizontalAlignment = HorizontalAlignment.Left;
            exp.Margin          = new Thickness(20, 30, 0, 0);
            exp.BorderThickness = new Thickness(1, 1, 1, 1);
            exp.Width           = 350;
            exp.BorderBrush     = Brushes.Gray;
            exp.Background      = Brushes.White;
            exp.IsExpanded      = true;
            exp.Name            = "RuleExpander_" + ruleIndex;

            StackPanel sp = new StackPanel();

            sp.Orientation = Orientation.Vertical;
            sp.Margin      = new Thickness(20, 5, 0, 0);

            StackPanel filterSP = new StackPanel();

            filterSP.Orientation = Orientation.Horizontal;
            filterSP.Margin      = new Thickness(0, 5, 0, 2);

            StackPanel attributeSP = new StackPanel();

            attributeSP.Orientation = Orientation.Horizontal;
            attributeSP.Margin      = new Thickness(0, 5, 0, 2);

            StackPanel scrubTypeSP = new StackPanel();

            scrubTypeSP.Orientation = Orientation.Horizontal;
            scrubTypeSP.Margin      = new Thickness(0, 5, 0, 2);

            StackPanel findValueSP = new StackPanel();

            findValueSP.Orientation = Orientation.Horizontal;
            findValueSP.Margin      = new Thickness(0, 5, 0, 2);

            StackPanel scrubValueSP = new StackPanel();

            scrubValueSP.Orientation = Orientation.Horizontal;
            scrubValueSP.Margin      = new Thickness(0, 5, 0, 2);

            TextBlock FilterLabel = new TextBlock();

            FilterLabel.VerticalAlignment = VerticalAlignment.Center;
            FilterLabel.Margin            = new Thickness(10, 0, 0, 0);
            //FilterLabel.MaxWidth = 150;

            Run runFilterLabel = new Run();

            runFilterLabel.Text     = "Filter Query";
            runFilterLabel.FontSize = 15;

            Run runFilterLabelHint = new Run();

            runFilterLabelHint.Text     = " \nEx: c.Type = \"document\"";
            runFilterLabelHint.FontSize = 10;

            FilterLabel.Inlines.Add(runFilterLabel);
            FilterLabel.Inlines.Add(runFilterLabelHint);

            TextBox FilterTB = new TextBox();

            FilterTB.Name  = "Filter" + ruleIndex;
            FilterTB.Width = 150;
            FilterTB.HorizontalContentAlignment = HorizontalAlignment.Left;
            FilterTB.VerticalAlignment          = VerticalAlignment.Center;
            FilterTB.Margin = new Thickness(20, 0, 0, 0);

            TextBlock AttributeScrubLabel = new TextBlock();

            AttributeScrubLabel.VerticalAlignment = VerticalAlignment.Center;
            AttributeScrubLabel.Margin            = new Thickness(10, 0, 0, 0);
            //AttributeScrubLabel.Width = 120;

            Run runAttributeScrubLabel = new Run();

            runAttributeScrubLabel.Text     = "Attribute To Scrub";
            runAttributeScrubLabel.FontSize = 15;

            Run runAttributeScrubLabelHint = new Run();

            runAttributeScrubLabelHint.Text     = " \nEx: c.Person.Email";
            runAttributeScrubLabelHint.FontSize = 10;

            AttributeScrubLabel.Inlines.Add(runAttributeScrubLabel);
            AttributeScrubLabel.Inlines.Add(runAttributeScrubLabelHint);

            TextBox AttributeScrubTB = new TextBox();

            AttributeScrubTB.Name  = "ScrubAttribute" + ruleIndex;
            AttributeScrubTB.Width = 150;
            AttributeScrubTB.HorizontalContentAlignment = HorizontalAlignment.Left;
            AttributeScrubTB.VerticalAlignment          = VerticalAlignment.Center;
            AttributeScrubTB.Margin = new Thickness(20, 0, 0, 0);

            TextBlock ScrubTypeLabel = new TextBlock();

            ScrubTypeLabel.Text              = "Scrub Type";
            ScrubTypeLabel.FontSize          = 15;
            ScrubTypeLabel.VerticalAlignment = VerticalAlignment.Center;
            ScrubTypeLabel.Margin            = new Thickness(10, 0, 0, 0);

            ComboBox ScrubTypeCB = new ComboBox();

            ScrubTypeCB.Name   = "ScrubType" + ruleIndex;
            ScrubTypeCB.Width  = 150;
            ScrubTypeCB.Margin = new Thickness(20, 0, 0, 0);

            foreach (RuleType val in Enum.GetValues(typeof(RuleType)))
            {
                ScrubTypeCB.Items.Add(val.ToString());
            }

            ScrubTypeCB.SelectionChanged += new SelectionChangedEventHandler(scrubTypeComboBox_SelectedIndexChanged);

            TextBlock FindValueLabel = new TextBlock();

            FindValueLabel.Text              = "Find";
            FindValueLabel.FontSize          = 15;
            FindValueLabel.VerticalAlignment = VerticalAlignment.Center;
            FindValueLabel.Margin            = new Thickness(10, 0, 0, 5);

            TextBox FindValueTB = new TextBox();

            FindValueTB.Name  = "FindValue" + ruleIndex;
            FindValueTB.Width = 150;
            FindValueTB.HorizontalContentAlignment = HorizontalAlignment.Left;
            FindValueTB.VerticalAlignment          = VerticalAlignment.Center;
            FindValueTB.Margin = new Thickness(20, 0, 0, 0);

            TextBlock ScrubValueLabel = new TextBlock();

            ScrubValueLabel.Text              = "Replace with";
            ScrubValueLabel.FontSize          = 15;
            ScrubValueLabel.VerticalAlignment = VerticalAlignment.Center;
            ScrubValueLabel.Margin            = new Thickness(10, 0, 0, 5);

            TextBox ScrubValueTB = new TextBox();

            ScrubValueTB.Name  = "ScrubValue" + ruleIndex;
            ScrubValueTB.Width = 150;
            ScrubValueTB.HorizontalContentAlignment = HorizontalAlignment.Left;
            ScrubValueTB.VerticalAlignment          = VerticalAlignment.Center;
            ScrubValueTB.Margin = new Thickness(20, 0, 0, 0);

            FilterLabel.Width         = 120;
            FilterTB.Width            = 150;
            AttributeScrubLabel.Width = 120;
            AttributeScrubTB.Width    = 150;
            ScrubTypeLabel.Width      = 120;
            ScrubTypeCB.Width         = 150;
            ScrubValueLabel.Width     = 120;
            FindValueTB.Width         = 150;
            FindValueLabel.Width      = 120;

            filterSP.Children.Add(FilterLabel);
            filterSP.Children.Add(FilterTB);

            attributeSP.Children.Add(AttributeScrubLabel);
            attributeSP.Children.Add(AttributeScrubTB);

            scrubTypeSP.Children.Add(ScrubTypeLabel);
            scrubTypeSP.Children.Add(ScrubTypeCB);

            findValueSP.Children.Add(FindValueLabel);
            findValueSP.Children.Add(FindValueTB);
            findValueSP.Visibility = Visibility.Collapsed;

            scrubValueSP.Children.Add(ScrubValueLabel);
            scrubValueSP.Children.Add(ScrubValueTB);
            scrubValueSP.Children.Add(RuleIdLabel);
            scrubValueSP.Visibility = Visibility.Hidden;

            sp.Children.Add(attributeSP);
            sp.Children.Add(filterSP);
            sp.Children.Add(scrubTypeSP);
            sp.Children.Add(findValueSP);
            sp.Children.Add(scrubValueSP);

            exp.Content = sp;

            if (scrubRule != null)
            {
                FilterTB.Text         = scrubRule.FilterCondition;
                AttributeScrubTB.Text = scrubRule.PropertyName;
                if (scrubRule.Type != null)
                {
                    ScrubTypeCB.SelectedIndex = (int)scrubRule.Type;
                }
                ScrubValueTB.Text = scrubRule.UpdateValue;
                FindValueTB.Text  = scrubRule.FindValue;
            }
            parentStackPanel.Children.Add(exp);
            if (!SaveRuleButton.IsEnabled)
            {
                SaveRuleButton.IsEnabled = true;
            }
        }
        public List <ScrubRule> getScrubRules()
        {
            //List<ScrubRule> sb = new List<ScrubRule>();
            TextBox filterCondition = (TextBox)this.FindName("FilterCondition");
            //sb.filterQuery = filterCondition.Text;
            List <ScrubRule> srList = new List <ScrubRule>();

            WrapPanel wrapPanel = (WrapPanel)this.FindName("WrapPanel");

            foreach (UIElement SPUI in wrapPanel.Children)
            {
                Expander            exp          = (Expander)SPUI;
                StackPanel          lrsp         = (StackPanel)exp.Content;
                UIElementCollection uiElementsSP = lrsp.Children;

                ScrubRule sr = new ScrubRule();

                foreach (UIElement uiElementSP in uiElementsSP)
                {
                    StackPanel          tempSP     = (StackPanel)uiElementSP;
                    UIElementCollection uiElements = tempSP.Children;

                    foreach (UIElement uiElement in uiElements)
                    {
                        if (uiElement.GetType().Name == "Label")
                        {
                            var ruleIdLabel = (Label)uiElement;
                            int ruleId;
                            if (int.TryParse(ruleIdLabel.Content.ToString(), out ruleId))
                            {
                                sr.RuleId = ruleId;
                            }
                            else
                            {
                                sr.RuleId = 0;
                            }
                        }

                        if (uiElement.GetType().Name == "TextBox")
                        {
                            TextBox tb = (TextBox)uiElement;

                            if (tb.Name.StartsWith("Filter"))
                            {
                                sr.FilterCondition = tb.Text.Trim();
                            }
                            else if (tb.Name.StartsWith("ScrubAttribute"))
                            {
                                sr.PropertyName = tb.Text.Trim();
                            }
                            else if (tb.Name.StartsWith("ScrubValue"))
                            {
                                sr.UpdateValue = tb.Text.Trim();
                            }
                            else if (tb.Name.StartsWith("FindValue"))
                            {
                                sr.FindValue = tb.Text.Trim();
                            }
                        }

                        if (uiElement.GetType().Name == "ComboBox")
                        {
                            ComboBox cb = (ComboBox)uiElement;
                            if (cb.Name.StartsWith("ScrubType"))
                            {
                                //sr.Type = (RuleType) Enum.Parse(typeof(RuleType), cb.Text);
                                RuleType rType;

                                if (Enum.TryParse <RuleType>(cb.Text, out rType))
                                {
                                    sr.Type = rType;
                                }
                                else
                                {
                                    sr.Type = null;
                                }
                            }
                        }
                    }
                }

                srList.Add(sr);
            }

            return(srList);
        }