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(); }
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, ""); }
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(); } }
public frmImportSummary(INexusImporter ri) { // // Required for Windows Form Designer support // InitializeComponent(); this.ri = ri; }
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); } } } }
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); }
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); } }
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(); }
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(); } } }
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); } } } } }