public void install()
        {
            TSQLCollectorConfig cfg = new TSQLCollectorConfig();

            cfg.readFromDatabase(ServerInstance);
            putPackage("ExtendedTSQLCollect", Path.Combine(installPath, "ExtendedTSQLCollect.dtsx"), TSQLCollectorConfig.CollectorPackageId, TSQLCollectorConfig.CollectorVersionId);
            putPackage("ExtendedTSQLUpload", Path.Combine(installPath, "ExtendedTSQLUpload.dtsx"), TSQLCollectorConfig.UploaderPackageId, TSQLCollectorConfig.UploaderVersionId);
            putPackage("ExtendedXEReaderCollect", Path.Combine(installPath, "ExtendedXEReaderCollect.dtsx"), XEReaderCollectorConfig.CollectorPackageId, XEReaderCollectorConfig.CollectorVersionId);
            putPackage("ExtendedXEReaderUpload", Path.Combine(installPath, "ExtendedXEReaderUpload.dtsx"), XEReaderCollectorConfig.UploaderPackageId, XEReaderCollectorConfig.UploaderVersionId);
            installTSQLCollectorType();
            installXEReaderCollectorType();
            if (!String.IsNullOrEmpty(cfg.MDWDatabase))
            {
                installCollectorTypeInMDW(cfg, TSQLCollectionItemConfig.CollectorTypeUid);
                installCollectorTypeInMDW(cfg, XEReaderCollectionItemConfig.CollectorTypeUid);
            }
        }
        private void CollectionSetDataForm_Load(object sender, EventArgs e)
        {
            this.Icon = Owner.Icon;

            Rectangle screen = Screen.PrimaryScreen.WorkingArea;
            int       w      = Width >= screen.Width ? screen.Width : (screen.Width + Width) / 2;
            int       h      = Height >= screen.Height ? screen.Height : (screen.Height + Height) / 2;

            this.Location = new Point((screen.Width - w) / 2, (screen.Height - h) / 2);
            this.Size     = new Size(w, h);

            FillTablesCombo();

            CollectorConfig config = new TSQLCollectorConfig();

            config.readFromDatabase(Manager.ServerName);
            MDWInstance = config.MDWInstance;
            MDWDatabase = config.MDWDatabase;

            FillTimeSlider();
        }
        public void CollectData(
            String SourceServerInstance,
            Guid CollectionSetUid,
            int ItemId
            )
        {
            CollectorLogger logger = new CollectorLogger(SourceServerInstance, CollectionSetUid, ItemId);

            DataTable collectedData = null;

            if (verbose)
            {
                logger.logMessage("--------------------------------");
            }
            if (verbose)
            {
                logger.logMessage("      ExtendedTSQLCollector      ");
            }
            if (verbose)
            {
                logger.logMessage("--------------------------------");
            }
            if (verbose)
            {
                logger.logMessage("Copyright© sqlconsulting.it 2014");
            }
            if (verbose)
            {
                logger.logMessage("-");
            }

            if (verbose)
            {
                logger.logMessage("Loading configuration");
            }
            //
            // Load Configuration
            //
            TSQLCollectorConfig cfg = new TSQLCollectorConfig();

            cfg.readFromDatabase(SourceServerInstance, CollectionSetUid, ItemId);


            if (verbose)
            {
                logger.logMessage("Entering collection items loop");
            }
            foreach (CollectionItemConfig item in cfg.collectionItems)
            {
                TSQLCollectionItemConfig itm = (TSQLCollectionItemConfig)item;
                if (verbose)
                {
                    logger.logMessage("Processing item n. " + itm.Index);
                }
                if (verbose)
                {
                    logger.logMessage("Processing query " + itm.Query);
                }

                collectedData = null;

                String ts          = DateTime.Now.ToString("yyyyMMddHHmmss");
                String collectorId = CollectorUtils.getCacheFilePrefix(SourceServerInstance, CollectionSetUid, ItemId) + "_" + itm.Index;

                String destFile = Path.Combine(cfg.CacheDirectory, collectorId + "_" + ts + ".cache");

                //
                // Iterate through the enabled databases
                //
                if (verbose)
                {
                    logger.logMessage("Entering databases loop");
                }
                foreach (String currentDatabase in cfg.Databases)
                {
                    if (verbose)
                    {
                        logger.logMessage("Processing database " + currentDatabase);
                    }
                    //
                    // Execute the query in the collection item
                    //

                    DataTable dt = CollectorUtils.GetDataTable(SourceServerInstance, currentDatabase, itm.Query);

                    //
                    // Add computed columns
                    //
                    if (dt.Columns.Contains("database_name"))
                    {
                        dt.Columns["database_name"].ColumnName = "__database_name";
                    }
                    DataColumn cl_db = new DataColumn("database_name", typeof(String));
                    cl_db.DefaultValue = currentDatabase;
                    dt.Columns.Add(cl_db);


                    if (dt.Columns.Contains("collection_time"))
                    {
                        dt.Columns["collection_time"].ColumnName = "__collection_time";
                    }
                    DataColumn cl_dt = new DataColumn("collection_time", typeof(DateTime));
                    cl_dt.DefaultValue = DateTime.Now;
                    dt.Columns.Add(cl_dt);


                    //
                    // Merge collected data in a single DataTable
                    //
                    if (collectedData != null)
                    {
                        collectedData.Merge(dt);
                    }
                    else
                    {
                        collectedData = dt;
                        collectedData.DataSet.RemotingFormat = System.Data.SerializationFormat.Binary;
                        collectedData.RemotingFormat         = System.Data.SerializationFormat.Binary;
                    }
                }

                if (verbose)
                {
                    logger.logMessage("Saving to cache file " + destFile);
                }
                //
                // Save data to a binary cache file
                //
                if (File.Exists(destFile))
                {
                    File.Delete(destFile);
                }



                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter fm = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

                using (FileStream fs = new FileStream(destFile, FileMode.CreateNew))
                {
                    fm.Serialize(fs, collectedData);
                    fs.Close();
                }
                if (verbose)
                {
                    logger.logMessage("File saved successfully");
                }
            }


            logger.cleanupLogFiles(cfg.DaysUntilExpiration);
        }