Esempio n. 1
0
        public void SimpleStoreTest()
        {
            var config = new MeasurementStoreConfig()
            {
                StoreType        = StoreType.MicrosoftSqlServer,
                ConnectionString = @"server=(localdb)\MSSqlLocalDb;Database=SimpleStoreTest"
            };
            var trace = new MeasuredTrace()
            {
                PackageFileName = "xyz"
            };
            var measurement = new CpuSampled()
            {
                ProcessName = "Foo", IsDpc = true, Count = 100, TotalSamplesDuringInterval = 1000, CpuCoreCount = 1
            };
            var measurement2 = new TraceAttribute()
            {
                Name = "FooA"
            };

            trace.AddMeasurement(measurement);
            trace.AddMeasurement(measurement2);
            using (var store = new MeasurementStore(config))
            {
                store.Database.EnsureCreated();
                store.Database.EnsureDeleted();
                store.Database.EnsureCreated();
                Assert.True(store.SaveTraceAndMeasurements(trace) == 3);
            }
        }
        public void SimpleProcessingTest()
        {
            var dataSource =
                @"https://github.com/MatthewMWR/WinPerf/blob/master/Scenarios/BOOT-REFERENCE__NormalLightlyManaged.zip?raw=true";
            var dataIncomingDir = Path.Combine(Path.GetTempPath(), "SimpleProcessingTest-In");

            Directory.CreateDirectory(dataIncomingDir);
            var dataArchiveDir = Path.Combine(Path.GetTempPath(), "SimpleProcessingTest-Archive");

            Directory.CreateDirectory(dataArchiveDir);
            var webClient = new WebClient();

            webClient.DownloadFile(dataSource, Path.Combine(dataIncomingDir, "Original.zip"));
            var testCopyCount = 30;
            var i             = 0;

            while (i < testCopyCount)
            {
                i++;
                File.Copy(Path.Combine(dataIncomingDir, "Original.zip"), Path.Combine(dataIncomingDir, $"Copy{i}.zip"), true);
            }
            var storeConfig = new MeasurementStoreConfig()
            {
                StoreType        = StoreType.MicrosoftSqlServer,
                ConnectionString = @"server=(localdb)\MSSqlLocalDb;Database=SimpleProcessingTest"
            };
            var processingConfig = new ProcessingConfig()
            {
                DestinationDataPath = dataArchiveDir
            };

            processingConfig.IncomingDataPaths.Add(dataIncomingDir);
            using (var store = new MeasurementStore(storeConfig))
            {
                store.Database.EnsureCreated();
                store.Database.EnsureDeleted();
                store.Database.EnsureCreated();
            }
            DoWork.InvokeProcessingOnce(processingConfig, storeConfig);
            using (var store = new MeasurementStore(storeConfig))
            {
                Assert.True(store.ProcessingRecords.Count() == testCopyCount + 1);
                Assert.True(store.ProcessingRecords.Count(pr => pr.ProcessingState == ProcessingState.Measured) ==
                            processingConfig.ParallelMeasuringThrottle);
                Assert.True(store.ProcessingRecords.Count(pr => pr.ProcessingState == ProcessingState.Moved) ==
                            processingConfig.ParallelMovesThrottle - processingConfig.ParallelMeasuringThrottle);
            }
            DoWork.InvokeProcessingOnce(processingConfig, storeConfig);
            DoWork.InvokeProcessingOnce(processingConfig, storeConfig);
            DoWork.InvokeProcessingOnce(processingConfig, storeConfig);
            using (var store = new MeasurementStore(storeConfig))
            {
                Assert.True(store.ProcessingRecords.Count(pr => pr.ProcessingState == ProcessingState.Measured) == testCopyCount + 1);
            }
        }
Esempio n. 3
0
        public void BasicQueriesWork()
        {
            var config = new MeasurementStoreConfig()
            {
                StoreType        = StoreType.MicrosoftSqlServer,
                ConnectionString = @"server=(localdb)\MSSqlLocalDb;Database=QueryTests;MultipleActiveResultSets = True"
            };

            using (var store = new MeasurementStore(config))
            {
                store.Database.EnsureCreated();
                store.Database.EnsureDeleted();
                store.Database.EnsureCreated();
                foreach (var n in new[] { 1, 2, 3 })
                {
                    var trace = new MeasuredTrace()
                    {
                        PackageFileName = $"Trace{n}"
                    };
                    var measurement = new CpuSampled()
                    {
                        ProcessName = "ProcessX",
                        IsDpc       = true,
                        Count       = 100,
                        TotalSamplesDuringInterval = 1000,
                        CpuCoreCount = 1
                    };
                    var measurement2 = new TraceAttribute()
                    {
                        Name = "AttributeX", WholeNumberValue = n
                    };
                    trace.AddMeasurement(measurement);
                    trace.AddMeasurement(measurement2);
                    Assert.True(store.SaveTraceAndMeasurements(trace) == 3);
                    trace.ProcessingRecords.Add(new ProcessingRecord()
                    {
                        Path            = "xxx",
                        StateChangeTime = new DateTime(1980, 2, 2),
                        ProcessingState = ProcessingState.Discovered
                    });
                    Assert.True(store.SaveChanges() == 1);
                }
            }
            using (var store = new MeasurementStore(config))
            {
                foreach (var trace in store.GetTraceByFilter(t => true, true))
                {
                    Assert.NotEmpty(trace.ProcessingRecords);
                    var measurements = trace.GetMeasurementsAll();
                    Assert.True(measurements.Count() == 2);
                }
            }
        }
        //Einstieg ins Programm
        static void Main(string[] args)
        {
            System.Runtime.GCSettings.LatencyMode = System.Runtime.GCLatencyMode.LowLatency;
            var generatorFor1kb    = new GeneratorFor1kb();
            var generatorFor10kb   = new GeneratorFor10kb();
            var generatorFor100kb  = new GeneratorFor100kb();
            var generatorFor1000kb = new GeneratorFor1000kb();
            var databaseMongo      = new MongoDB();
            var databasePost       = new PostGreSQL();
            var databaseMemory     = new InMemory();
            var store        = new MeasurementStore();
            var resultLogger = new CSVResultLogger();
            var export       = new Export(store, resultLogger);
            var logger       = new ConsoleLogger();

            List <IMeasureAlgorithm> CreateAlgorithmForDatabase(IDatabase db, ILogger logger, IDocumentGenerator documentGenerator, string documentSize)
            {
                var algorithms = new List <IMeasureAlgorithm>();

                algorithms.Add(new SingleInsert(db, logger));
                algorithms.Add(new SingleUpdate(db, logger));
                algorithms.Add(new SingleDelete(db, logger));
                algorithms.Add(new SingleSelect(db, logger));
                algorithms.Add(new BulkInsert(db, logger));
                algorithms.Add(new BulkUpdate(db, logger));
                algorithms.Add(new BulkDelete(db, logger));
                algorithms.Add(new BulkSelect(db, logger));

                var testAlgorithms = new List <IMeasureAlgorithm>();

                testAlgorithms.Add(new SingleInsert(db, logger));
                testAlgorithms.Add(new SingleUpdate(db, logger));
                testAlgorithms.Add(new SingleDelete(db, logger));
                testAlgorithms.Add(new SingleSelect(db, logger));

                SetUpEmptyDB(db);
                foreach (var testAlgorithm in testAlgorithms)
                {
                    testAlgorithm.StartMeasure(generatorFor1kb.GetDocumentsForMeasurement);
                    testAlgorithm.CleanUp(db, documentGenerator);
                }

                string database = "";

                if (db is MongoDB)
                {
                    database = "MongoDB";
                }
                if (db is PostGreSQL)
                {
                    database = "PostGreSQL";
                }
                if (db is InMemory)
                {
                    database = "InMemory";
                }

                SetUpEmptyDB(db);
                foreach (var algorithm in algorithms)
                {
                    store.SaveResult($"{algorithm}:Empty", algorithm
                                     .StartMeasure(documentGenerator.GetDocumentsForMeasurement), documentSize, database);
                    algorithm.CleanUp(db, documentGenerator);
                }

                SetUpFilledDB(db);
                foreach (var algorithm in algorithms)
                {
                    store.SaveResult($"{algorithm}:Filled", algorithm
                                     .StartMeasure(documentGenerator.GetDocumentsForMeasurement), documentSize, database);
                    algorithm.CleanUp(db, documentGenerator);
                }
                return(algorithms);
            }

            var jsonString1kb    = JsonConvert.SerializeObject(generatorFor1kb.GetDocumentsForMeasurement[0]);
            var jsonString10kb   = JsonConvert.SerializeObject(generatorFor10kb.GetDocumentsForMeasurement[0]);
            var jsonString100kb  = JsonConvert.SerializeObject(generatorFor100kb.GetDocumentsForMeasurement[0]);
            var jsonString1000kb = JsonConvert.SerializeObject(generatorFor1000kb.GetDocumentsForMeasurement[0]);

            Console.WriteLine($"One Document of 1kb Generator.List is size of {jsonString1kb.Length * sizeof(char)} Bytes or {jsonString1kb.Length * sizeof(char) / 1000} Kilobytes");
            Console.WriteLine($"One Document of 10kb Generator.List is size of {jsonString10kb.Length * sizeof(char)} Bytes or {jsonString10kb.Length * sizeof(char) / 1000} Kilobytes");
            Console.WriteLine($"One Document of 100kb Generator.List is size of {jsonString100kb.Length * sizeof(char)} Bytes or {jsonString100kb.Length * sizeof(char) / 1000} Kilobytes");
            Console.WriteLine($"One Document of 1000kb Generator.List is size of {jsonString1000kb.Length * sizeof(char)} Bytes or {jsonString1000kb.Length * sizeof(char) / 1000} Kilobytes");

            Console.WriteLine("\nStarting Tests for 1kb");
            Console.WriteLine("\nPostgres:");
            CreateAlgorithmForDatabase(databasePost, logger, generatorFor1kb, "1kb");
            Console.WriteLine("\nMongoDB:");
            CreateAlgorithmForDatabase(databaseMongo, logger, generatorFor1kb, "1kb");
            Console.WriteLine("\nIn Memory:");
            CreateAlgorithmForDatabase(databaseMemory, logger, generatorFor1kb, "1kb");

            Console.WriteLine("\nStarting Tests for 10kb");
            Console.WriteLine("\nPostgres:");
            CreateAlgorithmForDatabase(databasePost, logger, generatorFor10kb, "10kb");
            Console.WriteLine("\nMongoDB:");
            CreateAlgorithmForDatabase(databaseMongo, logger, generatorFor10kb, "10kb");
            Console.WriteLine("\nIn Memory:");
            CreateAlgorithmForDatabase(databaseMemory, logger, generatorFor10kb, "10kb");

            Console.WriteLine("\nStarting Tests for 100kb");
            Console.WriteLine("\nPostgres:");
            CreateAlgorithmForDatabase(databasePost, logger, generatorFor100kb, "100kb");
            Console.WriteLine("\nMongoDB:");
            CreateAlgorithmForDatabase(databaseMongo, logger, generatorFor100kb, "100kb");
            Console.WriteLine("\nIn Memory:");
            CreateAlgorithmForDatabase(databaseMemory, logger, generatorFor100kb, "100kb");

            Console.WriteLine("\nStarting Tests for 1000kb");
            Console.WriteLine("\nPostgres:");
            CreateAlgorithmForDatabase(databasePost, logger, generatorFor1000kb, "1000kb");
            Console.WriteLine("\nMongoDB:");
            CreateAlgorithmForDatabase(databaseMongo, logger, generatorFor1000kb, "1000kb");
            Console.WriteLine("\nIn Memory:");
            CreateAlgorithmForDatabase(databaseMemory, logger, generatorFor1000kb, "1000kb");

            //Export the CSV File into folder
            export.ConfigureResult();

            void SetUpEmptyDB(IDatabase db)
            {
                db.CleanDatabase();
                Console.WriteLine("Database is empty");
            }

            void SetUpFilledDB(IDatabase db)
            {
                db.BulkInsert(generatorFor1kb.GetDocumentsPopulateDatabase);
                Console.WriteLine("Database is highly Filled");
            }
        }
Esempio n. 5
0
        public void SimpleProcessingTest()
        {
            var dataSource =
                @"https://github.com/MatthewMWR/WinPerf/blob/master/Scenarios/BOOT-REFERENCE__NormalLightlyManaged.zip?raw=true";
            var dataIncomingDir = Path.Combine(Path.GetTempPath(), "SimpleProcessingTest-In");

            Directory.CreateDirectory(dataIncomingDir);
            var dataArchiveDir = Path.Combine(Path.GetTempPath(), "SimpleProcessingTest-Archive");

            Directory.CreateDirectory(dataArchiveDir);
            var dataDownloadStageDir = Path.Combine(Path.GetTempPath(), "SimpleProcessingTest-DownloadStage");

            Directory.CreateDirectory(dataDownloadStageDir);
            var stagedDownlodFilePath = Path.Combine(dataDownloadStageDir, "original.zip");

            if (!File.Exists(stagedDownlodFilePath))
            {
                var webClient = new WebClient();
                webClient.DownloadFile(dataSource, stagedDownlodFilePath);
            }
            var testCopyCount = 26;
            var i             = 0;

            while (i < testCopyCount)
            {
                i++;
                File.Copy(stagedDownlodFilePath, Path.Combine(dataIncomingDir, $"Copy{i}.zip"), true);
            }
            var storeConfig = new MeasurementStoreConfig()
            {
                StoreType        = StoreType.MicrosoftSqlServer,
                ConnectionString = @"server=(localdb)\MSSqlLocalDb;Database=SimpleProcessingTest"
            };
            var processingConfig = new ProcessingConfig()
            {
                DestinationDataPath = dataArchiveDir
            };

            processingConfig.IncomingDataPaths.Add(dataIncomingDir);
            using (var store = new MeasurementStore(storeConfig))
            {
                store.Database.EnsureCreated();
                store.Database.EnsureDeleted();
                store.Database.EnsureCreated();
            }
            Automate.InvokeProcessingOnce(processingConfig, storeConfig);
            using (var store = new MeasurementStore(storeConfig))
            {
                Assert.True(store.Traces.Count() == testCopyCount);
                var measuredCount = store.Traces
                                    .Include(t => t.ProcessingRecords)
                                    .Count(t => t.ProcessingRecords.OrderBy(pr => pr.StateChangeTime).Last().ProcessingState == ProcessingState.Measured);
                Assert.True(measuredCount == processingConfig.ParallelMeasuringThrottle);
                var movedCount = store.ProcessingRecords.Count(pr => pr.ProcessingState == ProcessingState.Moved);
                Assert.True(movedCount == processingConfig.ParallelMovesThrottle);
            }
            Automate.InvokeProcessingOnce(processingConfig, storeConfig);
            Automate.InvokeProcessingOnce(processingConfig, storeConfig);
            Automate.InvokeProcessingOnce(processingConfig, storeConfig);
            using (var store = new MeasurementStore(storeConfig))
            {
                var measuredCount = store.Traces
                                    .Include(t => t.ProcessingRecords)
                                    .Count(t => t.ProcessingRecords.OrderBy(pr => pr.StateChangeTime).Last().ProcessingState == ProcessingState.Measured);
                Assert.True(measuredCount == testCopyCount);
                var measuredCountByDifferentPath = store.GetTraceByState(ProcessingState.Measured).Count();
                Assert.True(measuredCountByDifferentPath == testCopyCount);
                var measuredCountByThirdPath =
                    store.GetTraceByFilter(t => t.ProcessingRecords.Latest().ProcessingState == ProcessingState.Measured).Count();
                Assert.True(measuredCountByThirdPath == testCopyCount);
                Assert.True(store.GetTraceByName("copy1.zip", false) != null);
                Assert.True(store.GetTraceByFilter(t => t.ProcessingRecords.Count == 3).AsEnumerable().Count() == testCopyCount);
                Assert.NotEmpty(store.GetTraceByName("copy1.zip", true).GetMeasurements <DiskIo>());
            }
        }