Example #1
0
 private void UpdateProgress(object[] args)
 {
     if (args[0] is INexusFileImporter)
     {
         INexusFileImporter rif = (args[0] as INexusFileImporter);
         int PctComplete;
         // Make sure we don't divide by 0 if someone points us at a 0 byte file.
         if (rif.FileSize > 0)
         {
             PctComplete = (int)(((decimal)rif.CurrentPosition) / rif.FileSize * 100);
         }
         else
         {
             PctComplete = 0;
         }
         if (PctComplete > 100)
         {
             PctComplete = 100;
         }
         currBar.Value = PctComplete;
     }
     else
     {
         UpdateStatus(args);
     }
     if (null != currLabel)
     {
         INexusImporter ri = (args[0] as INexusImporter);
         currLabel.Text = string.Format("Importing: {0} lines processed; {1} rows inserted...", ri.TotalLinesProcessed, ri.TotalRowsInserted);
     }
     Application.DoEvents();
 }
Example #2
0
        private void AddFileRow(int row, string labelText, INexusImporter Importer)
        {
            tlpFiles.RowCount += 1;
            //LinkLabel la = new LinkLabel();
            Label la = new Label();

            //Label lbl;
            la.Name = "FileNameLabel";


            la.AutoSize = true;
            //la.LinkBehavior = LinkBehavior.NeverUnderline;
            tlpFiles.Controls.Add(la, 0, row);
            la.Text = labelText; //+"(" + Importer.Name + ")";

            la.Anchor   = AnchorStyles.Left;
            la.Location = new Point(0, 3);

            la.Tag = Importer;

            //la.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llTemplate_LinkClicked);

            ProgressBar pb = new ProgressBar();

            tlpFiles.Controls.Add(pb, 1, row);
            pb.Height = 13;
            pb.MarqueeAnimationSpeed = 25;

            /*Label lblImporterName = new Label();
             * lblImporterName.Name = "Importer Name";
             * lblImporterName.Text = Importer.Name;
             * tlpFiles.Controls.Add(lblImporterName);*/
            AddLabel(row, "");
        }
Example #3
0
        private void tsiSaveOptions_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem tsi = (sender as ToolStripMenuItem);

            ImportOptions.Set("SaveImportOptions", tsi.Checked);

            StringBuilder sb = new StringBuilder();

            if (tsi.Checked)
            {
                foreach (ToolStripMenuItem tsi_ImporterMenu in cmOptions.Items)
                {
                    if (tsi_ImporterMenu.Text == "Importers")
                    {
                        foreach (ToolStripMenuItem tsi_ProductMenu in tsi_ImporterMenu.DropDownItems)
                        {
                            foreach (ToolStripMenuItem tsi_IndividualOptionMenu in tsi_ProductMenu.DropDownItems)
                            {
                                INexusImporter prod       = (INexusImporter)tsi_IndividualOptionMenu.Tag;
                                String         OptionName = String.Format("{0}.{1}", prod.Name, tsi_IndividualOptionMenu.Text);
                                ImportOptions.Set(OptionName, tsi_IndividualOptionMenu.Checked);
                            }
                        }
                    }
                }

                ImportOptions.Set("DropDbBeforeImporting", tsiDropDBBeforeImporting.Checked);
            }
            else
            {
                ImportOptions.Clear();
            }
        }
Example #4
0
 public frmImportSummary(INexusImporter ri)
 {
     //
     // Required for Windows Form Designer support
     //
     InitializeComponent();
     this.ri = ri;
 }
Example #5
0
        private void AddFiles(string Mask, INexusImporter Importer)
        {
            string[] files2 = Directory.GetFiles(cbPath.Text.Trim().Replace("\"", ""), Mask);

            //if no file found for this mask, just return
            if (files2.Length <= 0)
            {
                return;
            }
            int i = tlpFiles.RowCount - 1;


            if (Importer is INexusFileImporter)
            {
                string[] files          = Directory.GetFiles(cbPath.Text.Trim().Replace("\"", ""), Mask);
                int      blockedCounter = 0;
                foreach (string f in files)
                {
                    //handle multiple instances
                    //block all text files that are from excluded instances
                    if (BlockFile(f) || instances.Block(f))
                    {
                        blockedCounter++;
                        continue;
                    }

                    AddFileRow(i, Path.GetFileName(f), Importer);
                    i++;
                }
                MainForm.LogMessage("Number of files blocked for import (due to multiple instance or unrelated files such as sqldump*: " + blockedCounter, MessageOptions.Silent);
            }
            else
            {
                if (0 != Directory.GetFiles(cbPath.Text.Trim().Replace("\"", ""), Mask).Length)  //Only add the mask if matching files are found
                {
                    //need special handling read trace for multiple instances
                    //when multiple instances files are caputred, only provide the one instnance selected.
                    if (Importer.Name.ToUpper().IndexOf("READTRACE") >= 0 && instances.Count > 1)
                    {
                        if (Mask.ToUpper().Contains("XEL"))
                        {
                            AddFileRow(i, instances.SelectedXEventFileMask, Importer);
                        }
                        else
                        {
                            AddFileRow(i, instances.SelectedTraceFileMask, Importer);
                        }
                    }
                    else
                    {
                        AddFileRow(i, Mask, Importer);
                    }
                }
            }
        }
Example #6
0
        private void llTemplate_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (null == ((sender as LinkLabel).Tag))
            {
                return;
            }
            INexusImporter   ri   = ((sender as LinkLabel).Tag as INexusImporter);
            frmImportSummary fmIS = new frmImportSummary(ri);

            fmIS.ShowDialog(this);
        }
Example #7
0
        private void tsiBool_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem tsi  = (sender as ToolStripMenuItem);
            INexusImporter    prod = (INexusImporter)tsi.Tag;

            prod.Options[tsi.Text] = tsi.Checked;
            if (ImportOptions.IsEnabled("SaveImportOptions"))
            {
                ImportOptions.Set(string.Format("{0}.{1}", prod.Name, tsi.Text), tsi.Checked);
                //LogMessage("strip: " + string.Format("{0}.{1}", prod.Name, tsi.Name), MessageOptions.Silent);
            }
        }
Example #8
0
        private void UpdateStatus(object[] args)
        {
            INexusImporter ri = (args[0] as INexusImporter);
            // Check for changes in import state and report them
            string msg = "";

            switch (ri.State)
            {
            case ImportState.Canceling:
                msg = "Canceling import...";
                break;

            case ImportState.CreatingDatabase:
                msg = "Creating and sizing database...";
                break;

            case ImportState.Idle:
                msg = "Idle.";
                break;

            case ImportState.Importing:

                msg = "Importing...";
                break;

            case ImportState.OpeningFile:
                msg = "Opening file...";
                break;

            case ImportState.OpeningDatabaseConnection:
                msg = "Opening database connection...";
                break;
            }
            currLabel.Text = "(" + ri.Name + ")" + msg;
            Application.DoEvents();
        }
Example #9
0
        private void DoImport()
        {
            if (CheckAndStop())
            {
                return;
            }
            if (!tlpFiles.Visible)
            {
                this.Height          = 500;
                this.Width           = 850;
                this.FormBorderStyle = FormBorderStyle.Sizable;
                tlpFiles.Visible     = true;
                ssStatus.Visible     = true;
            }

            MainForm.LogMessage("Starting import...");

            if (tsiDropDBBeforeImporting.Checked == true || ImportOptions.IsEnabled("DropDbBeforeImporting"))
            {
                if (Globals.ConsoleMode == false)
                {
                    DialogResult dr = MainForm.LogMessage(String.Format(Properties.Resources.Warning_ToDropDB, Globals.credentialMgr.Database), "Danger", MessageBoxButtons.YesNo);
                    MainForm.LogMessage("dialog result = " + dr.ToString());
                    if (dr == DialogResult.No)
                    {
                        return;
                    }
                    else if (dr == DialogResult.Yes && Globals.credentialMgr.Database.ToLower() != "sqlnexus")
                    {
                        DialogResult reconfirm = MainForm.LogMessage(String.Format("Are you sure you really want to drop database {0}?", Globals.credentialMgr.Database), "Danger", MessageBoxButtons.YesNo);
                        if (DialogResult.No == reconfirm)
                        {
                            return;
                        }
                    }
                }

                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.ConnectionString = Globals.credentialMgr.ConnectionString;
                builder.InitialCatalog   = "master";
                SqlConnection conn = new SqlConnection(builder.ConnectionString);
                SqlCommand    cmd  = conn.CreateCommand();
                cmd.CommandText = String.Format(Properties.Resources.CreateDropDB, Globals.credentialMgr.Database);
                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (SqlException sqlex)
                {
                    MainForm.LogMessage("Create Db failed with exception " + sqlex.Message, MessageOptions.Dialog);
                    return;
                }
                finally
                {
                    conn.Close();
                }
            }

            RunScript("SqlNexus_PreProcessing.sql");
            MainForm.LogMessage("Adding Nexus Importer Version" + Globals.credentialMgr.ConnectionString);
            NexusInfo nInfo = new NexusInfo(Globals.credentialMgr.ConnectionString, this.MainForm);

            nInfo.SetAttribute("Nexus Importer Version", Application.ProductVersion);



            int startTicks = Environment.TickCount;

            MainForm.StartStopSpinner(true, MainForm.spnImporter);

            //Switch button/modes to Stop mode
            EnableButtons(false);
            tsbGo.Image = sqlnexus.Properties.Resources.RecordHS1;
            tsbGo.Text  = "Stop";
            Application.DoEvents();

            // Close any open reports based on the data that we're about to overwrite
            fmNexus.singleton.CloseAll();

            string srcPath = Path.GetFullPath(cbPath.Text.Trim().Replace("\"", ""));

            /*
             * string pathFromCmd = Globals.PathsToImport.Dequeue();
             * if (pathFromCmd != null)
             *  srcPath = pathFromCmd;
             * else
             * srcPath=  Path.GetFullPath(cbPath.Text);
             */

            sqlnexus.Properties.Settings.Default.ImportPath = srcPath;
            if (srcPath[srcPath.Length - 1] != '\\')
            {
                srcPath += '\\';
            }
            if (-1 == cbPath.Items.IndexOf(srcPath))
            {
                cbPath.Items.Add(srcPath);
            }
            instances = new SqlInstances(srcPath);

            if (instances.Count > 1 && Globals.QuietMode)
            {
                //get first instance for quiet mode (list already sorted;
                MainForm.LogMessage("quiet mode. Silently select first instance (sorted) for instance: " + instances.InstanceList()[0], MessageOptions.Silent);
                instances.InstanceToImport = instances.InstanceList()[0];
            }
            else if (instances.Count > 1)
            {
                fmSelectInstance chooseInstancefm = new fmSelectInstance();
                chooseInstancefm.Tag = instances;
                chooseInstancefm.ShowDialog();
            }

            DiagConfig config = new DiagConfig(srcPath);

            nInfo.SetAttribute("SQLVersion", config.SQLVersion);
            EnumFiles();

            //AddLabel();
            bool RunScripts = true;
            bool Success    = false;

            CustomXELImporter CI = new CustomXELImporter();

            CI.SQLBaseImport(Globals.credentialMgr.ConnectionString, Globals.credentialMgr.Server,
                             Globals.credentialMgr.WindowsAuth,
                             Globals.credentialMgr.User,
                             Globals.credentialMgr.Password,
                             Globals.credentialMgr.Database, srcPath);


            try
            {
                int j = 0;
                for (int i = 0; i < tlpFiles.Controls.Count; i++)
                {
                    //if (tlpFiles.Controls[i] is LinkLabel)
                    if (tlpFiles.Controls[i] is Label && tlpFiles.Controls[i].Name == "FileNameLabel")
                    {
                        System.Diagnostics.Debug.Assert((null != tlpFiles.Controls[i + 1]) && (null != tlpFiles.Controls[i + 2]));
                        //LinkLabel ll = (LinkLabel)tlpFiles.Controls[i];
                        Label ll = (Label)tlpFiles.Controls[i];
                        currBar       = (ProgressBar)tlpFiles.Controls[i + 1];
                        currBar.Value = 0;
                        currLabel     = (Label)tlpFiles.Controls[i + 2];

                        int ticks = Environment.TickCount;

                        ri = (ll.Tag as INexusImporter);
                        MainForm.LogMessage(ri.Name + " is a INexusImporter");

                        try
                        {
                            ri.Initialize(srcPath + (tlpFiles.Controls[i] as /*LinkLabel*/ Label).Text,
                                          Globals.credentialMgr.ConnectionString,
                                          Globals.credentialMgr.Server,
                                          Globals.credentialMgr.WindowsAuth,
                                          Globals.credentialMgr.User,
                                          Globals.credentialMgr.Password,
                                          Globals.credentialMgr.Database,
                                          MainForm);

                            //Run pre-scripts and cache post scripts for later use
                            if (!PostScripts.ContainsKey(ri.GetType().Name))
                            {
                                PostScripts.Add(ri.GetType().Name, ri.PostScripts);
                                foreach (string s in ri.PreScripts)
                                {
                                    RunScript(s);
                                }
                            }

                            if (!(ri is INexusFileSizeReporter))
                            {
                                currBar.Style = ProgressBarStyle.Marquee;
                            }

                            //Import the data
                            Success = ri.DoImport();



                            if (ri.Name.ToLower().Contains("rowset"))
                            {
                                RunPostScripts();
                            }
                            Globals.IsNexusCoreImporterSuccessful = true;
                            //ll.LinkBehavior = LinkBehavior.HoverUnderline;
                        }
                        catch (Exception ex)
                        {
                            if (ri.Name == "Rowset Importer")
                            {
                                Globals.IsNexusCoreImporterSuccessful = false;
                            }
                            Success = false;
                            Globals.HandleException(ex, this, MainForm);
                        }

                        currBar.Style = ProgressBarStyle.Blocks;
                        string msg;
                        msg = "(Importer:" + ri.Name + ") ";
                        if (ri.Canceled)        // different msg if import was canceled.
                        {
                            RunScripts = false;
                            msg       += "Canceled. (" + (Environment.TickCount - ticks) / 1000 + " sec, ";
                            if (ri is INexusFileImporter)
                            {
                                msg += this.currBar.Value.ToString() + "% complete)";
                            }
                            else
                            {
                                msg += ri.TotalLinesProcessed + " rows inserted)";
                            }
                            MainForm.LogMessage(msg);
                            currLabel.Text = msg;
                            break;
                        }
                        else if (!Success)      // set summary msg if import failed
                        {
                            RunScripts = false;
                            msg       += "Import failed. (" + (Environment.TickCount - ticks) / 1000 + " sec, ";
                            if (ri is INexusFileImporter)
                            {
                                msg += this.currBar.Value.ToString() + "% complete)";
                            }
                            else
                            {
                                msg += ri.TotalLinesProcessed + " rows inserted)";
                            }
                            MainForm.LogMessage(msg);
                            currLabel.Text = msg;
                        }
                        else                                    // different msg if success
                        {
                            currBar.Value = currBar.Maximum;

                            msg += "Done. (" + (Environment.TickCount - ticks) / 1000 + " sec";
                            if (ri is INexusFileImporter)
                            {
                                msg += ", " + ((ri as INexusFileImporter).FileSize / 1000 / 1000) + "MB), ";
                            }
                            else
                            {
                                msg += "), ";
                            }
                            msg += msg = string.Format("{0} lines processed; {1} rows inserted.", ri.TotalLinesProcessed, ri.TotalRowsInserted);
                            MainForm.LogMessage(msg);
                            currLabel.Text = msg;
                        }
                        ri = null;
                        j++;
                    }
                }


                MainForm.LogMessage("RawFileImporter starting");
                RawFileImporter rawfileimporter = new RawFileImporter(Globals.credentialMgr.Server, Globals.credentialMgr.Database, srcPath);
                rawfileimporter.DoImport();
                MainForm.LogMessage("RawFileImporter completed");

                StringBuilder output = new StringBuilder();

                ProcessStartInfo psi = new ProcessStartInfo();
                psi.CreateNoWindow         = true;
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardInput  = true;
                psi.UseShellExecute        = false;
                psi.Arguments = string.Format("{0} {1} \"{2}\"", Globals.credentialMgr.Server, Globals.credentialMgr.Database, srcPath);
                MainForm.LogMessage("PostProcess argument " + psi.Arguments);
                psi.FileName = "PostProcess.cmd";

                Process process = new Process();
                process.StartInfo = psi;

                process.EnableRaisingEvents = true;

                process.OutputDataReceived += new DataReceivedEventHandler
                                              (
                    delegate(object sender, DataReceivedEventArgs e)
                {
                    output.Append(e.Data);
                }
                                              );
                process.Start();
                process.BeginOutputReadLine();
                process.WaitForExit();
                process.CancelOutputRead();

                MainForm.LogMessage("PostProcess output");

                MainForm.LogMessage(output.ToString());
                MainForm.LogMessage("End of  PostProcess output");



                //if (RunScripts)
                //{
                // RunPostScripts();
                //}

                //run post script just once
                RunScript("PerfStatsAnalysis.sql");

                //Refresh reports list in case provider changed it
                MainForm.EnumReports();

                //if (Globals.ReportExportPath != null)
                //  MainForm.ProcessReportQueue();

                MainForm.LogMessage(String.Format("Import complete. Total import time: {0} seconds", (Environment.TickCount - startTicks) / 1000));

                SqlConnection conn = new SqlConnection(Globals.credentialMgr.ConnectionString);
                SqlCommand    cmd  = conn.CreateCommand();
                cmd.CommandText = "select count (distinct runtime) 'NumberOfRuntimes' from tbl_PERF_STATS_SCRIPT_RUNTIMES";
                conn.Open();
                Int32 NumberOfRuntimes = (Int32)cmd.ExecuteScalar();

                conn.Close();

                if (NumberOfRuntimes < 5)
                {
                    MainForm.LogMessage("The data was captured for a very short period of time.  Some reports may fail", MessageOptions.Both);
                }
            }
            catch (Exception ex)
            {
                MainForm.LogMessage("Import failed.");
                Globals.HandleException(ex, this, MainForm);
            }
            finally
            {
                MainForm.StartStopSpinner(false, MainForm.spnImporter);
                tsbGo.Image = sqlnexus.Properties.Resources.PlayHS1;
                tsbGo.Text  = "Import";
                EnableButtons(true);
                this.Cursor = Cursors.Default;
                Application.DoEvents();

                if (Globals.QuietMode == true)
                {
                    Application.Exit();
                }
            }
        }
Example #10
0
        private void EnumImportersFromDirectory(string importerDirectory)
        {
            if (!Directory.Exists(importerDirectory))
            {
                return;
            }
            string[] Files = Directory.GetFiles(importerDirectory, "*.DLL");

            List <string> OrderedFiles = OrderedImporterFiles(Files);

            foreach (string file in OrderedFiles)
            {
                //we know this is a native image
                MainForm.LogMessage("detecting importer file " + file + " version and creation date " + FileVersions(file));

                if (Path.GetFileName(file).ToUpper() == "BulkLoad.dll".ToUpper())
                {
                    MainForm.LogMessage(String.Format(Properties.Resources.Msg_NativeImage, file));
                    continue;
                }
                Assembly Assem;
                try
                {
                    Assem = Assembly.LoadFile(file);
                }
                catch (Exception ex)
                {
                    MainForm.LogMessage("Assembly " + file + " could not be used as an importer: " + ex.Message, MessageOptions.Silent);
                    continue;
                }

                Type[] typs = Assem.GetExportedTypes();
                foreach (Type typ in typs)
                {
                    //Ignore abstract classes
                    if (typ.IsAbstract)
                    {
                        continue;
                    }

                    //Ignore non-classes
                    if (!typ.IsClass)
                    {
                        continue;
                    }

                    TypeFilter loadIfcFilt = new TypeFilter(loadIfcFilter);
                    Type[]     ifcs        = typ.FindInterfaces(loadIfcFilt, "NexusInterfaces.INexusImporter");
                    foreach (Type ifc in ifcs)
                    {
                        //If we get in here, the Class implements the interface, so add it to the list
                        //and bail
                        INexusImporter prod = (INexusImporter)Assem.CreateInstance(typ.FullName, true);

                        prod.StatusChanged += new System.EventHandler(this.ImportStatusChanged);
                        if (prod is INexusProgressReporter)
                        {
                            (prod as INexusProgressReporter).ProgressChanged += new System.EventHandler(this.ImportProgressChanged);
                        }

                        ToolStripMenuItem tsi = new ToolStripMenuItem(prod.Name);
                        tsi.Tag = prod;
                        tsiImporters.DropDownItems.Add(tsi);

                        // Add subitems

                        // Enabled item
                        // All importers require an "Enabled" menu option -- if this doesn't exist in the options collection, add it.
                        object enabledoption;
                        if (!prod.Options.TryGetValue("Enabled", out enabledoption))
                        {
                            prod.Options.Add("Enabled", true);
                        }

                        // options
                        ToolStripMenuItem subtsi;
                        foreach (string option in prod.Options.Keys)
                        {
                            subtsi = new ToolStripMenuItem(option);
                            if (option.Substring(option.Length - 3) == "...") // dialog
                            {
                                subtsi.Tag    = prod.OptionsDialog;
                                subtsi.Click += new System.EventHandler(this.tsiDialog_Click);
                            }
                            else // boolean
                            {
                                m_OptionList.Add(subtsi);

                                subtsi.Tag          = prod;
                                subtsi.CheckOnClick = true;

                                bool UserSaved = ImportOptions.IsEnabled(String.Format("{0}.{1}", prod.Name, subtsi.Text));
                                MainForm.LogMessage("load: " + String.Format("{0}.{1}", prod.Name, option), MessageOptions.Silent);

                                if (ImportOptions.IsEnabled("SaveImportOptions"))
                                {
                                    subtsi.Checked = UserSaved;
                                }
                                else
                                {
                                    subtsi.Checked = (bool)prod.Options[option];
                                }

                                subtsi.Click += new System.EventHandler(this.tsiBool_Click);
                            }

                            tsi.DropDownItems.Add(subtsi);
                        }
                    }
                }
            }
        }