示例#1
0
 public Task <bool> LazyCommitMasterData(Guid runId, string CompletedAt)
 {
     return(_docerator.Decorate <bool>(() =>
     {
         bool ret = false;
         using (var dbContext = new PerformanceDbContext())
         {
             var masterData = dbContext.PerformanceExecutions.FirstOrDefault(r => r.RunId == runId);
             if (masterData == null)
             {
                 return false;
             }
             masterData.CompletedAt = Helper.Utilities.ParseDateTimestamp(CompletedAt);
             masterData.DurationInMS = ((masterData.CompletedAt) - masterData.StartedAt)?.TotalMilliseconds ?? 0;
             var enumartor = TransformData(ReadData(tracePath)).GetEnumerator();
             int idx = 0;
             while (enumartor.MoveNext())
             {
                 var item = enumartor.Current as TraceDetails;
                 item.RunId = masterData.RunId;
                 item.PerformanceExecution = masterData;
                 dbContext.TraceDetails.Add(item);
                 // save when reach threeshold to keep saving in progress, avoid saving timeout for large number of items.
                 if (idx++ > saveThreeshold)
                 {
                     dbContext.SaveChanges();
                     idx = 0;
                 }
             }
             ret = dbContext.SaveChanges() > 0;
         }
         return ret;
     }));
 }
        static (double coreEllapsed, long totalElapsed) GenerateProducts(int numberOfProductsToGenerate, bool dropData = false, bool batchInsert = true)
        {
            Stopwatch watch;
            var       faker = new Faker("es");

            if (dropData)
            {
                context.EncabezadoFacturas.Where(f => 1 == 1).DeleteFromQuery();
                context.Productos.Where(x => 1 == 1).DeleteFromQuery();
            }

            var range = new Queue <int>(Enumerable.Range(1, numberOfProductsToGenerate));

            faker.IndexFaker = 1;
            var fakeProducts = Builder <Producto> .CreateListOfSize(numberOfProductsToGenerate)
                               .All()
                               .With(p => p.CodigoProducto = faker.IndexFaker++)
                               .With(p => p.Descripcion    = faker.Commerce.ProductName())
                               .With(p => p.PrecioVenta    = decimal.Parse(faker.Commerce.Price()))
                               .With(p => p.Existencia     = int.MaxValue)
                               .Build();


            if (batchInsert)
            {
                watch = Stopwatch.StartNew();
                context.BulkInsert <Producto>(fakeProducts);
                context.SaveChanges();
                watch.Stop();

                return((double)watch.ElapsedMilliseconds / (double)numberOfProductsToGenerate, watch.ElapsedMilliseconds);
            }

            var times = new List <long>(numberOfProductsToGenerate);

            fakeProducts.ToList().ForEach(p =>
            {
                watch = Stopwatch.StartNew();
                context.Productos.Add(p);
                context.SaveChanges();
                watch.Stop();
                times.Add(watch.ElapsedMilliseconds);
            });

            return(times.Average(), times.Sum());
        }
示例#3
0
 public Task <bool> SaveAPITestCase(Models.APITestCase APITestCase)
 {
     return(_docerator.Decorate <bool>(() =>
     {
         bool ret = false;
         using (var dbContext = new PerformanceDbContext())
         {
             dbContext.APITestCases.Add(APITestCase);
             ret = dbContext.SaveChanges() > 0;
         }
         return ret;
     }));
 }
示例#4
0
 public Task <bool> CommitMasterData(Guid runId, string CompletedAt)
 {
     return(_docerator.Decorate <bool>(() =>
     {
         bool ret = false;
         using (var dbContext = new PerformanceDbContext())
         {
             var masterData = dbContext.PerformanceExecutions.FirstOrDefault(r => r.RunId == runId);
             if (masterData == null)
             {
                 return false;
             }
             masterData.CompletedAt = Helper.Utilities.ParseDateTimestamp(CompletedAt);
             masterData.DurationInMS = ((masterData.CompletedAt) - masterData.StartedAt)?.TotalMilliseconds ?? 0;
             var traceData = ReadDataInHashTable(tracePath);
             int idx = 0;
             foreach (ICollection <TraceDetails> traceDic in traceData.Values)
             {
                 foreach (var item in traceDic)
                 {
                     item.RunId = masterData.RunId;
                     item.PerformanceExecution = masterData;
                     dbContext.TraceDetails.Add(item);
                     // save when reach threeshold to keep saving in progress, avoid saving timeout for large number of items.
                     if (++idx >= saveThreeshold)
                     {
                         dbContext.SaveChanges();
                         idx = 0;
                     }
                 }
             }
             ret = dbContext.SaveChanges() > 0;
         }
         return ret;
     }));
 }
示例#5
0
 public Task <bool> SaveMaster(Models.PerformanceExecution masterData)
 {
     return(_docerator.Decorate <bool>(() =>
     {
         bool ret = false;
         using (var dbContext = new PerformanceDbContext())
         {
             if (masterData == null)
             {
                 return false;
             }
             dbContext.PerformanceExecutions.Add(masterData);
             ret = dbContext.SaveChanges() > 0;
         }
         return ret;
     }));
 }
示例#6
0
 public Task <bool> SaveAPIPerformance(APITrace APIPerformance)
 {
     return(_docerator.Decorate <bool>(() =>
     {
         bool ret = false;
         using (var dbContext = new PerformanceDbContext())
         {
             var master = dbContext.PerformanceExecutions.FirstOrDefault(m => m.RunId == APIPerformance.RunId);
             if (APIPerformance == null || master == null)
             {
                 return false;
             }
             APIPerformance.PerformanceExecution = master;
             dbContext.APITraces.Add(APIPerformance);
             ret = dbContext.SaveChanges() > 0;
         }
         return ret;
     }));
 }
示例#7
0
 public Task <bool> APIErrorLogger(Guid runId, string error)
 {
     return(_docerator.Decorate <bool>(() =>
     {
         bool ret = false;
         using (var dbContext = new PerformanceDbContext())
         {
             var master = dbContext.PerformanceExecutions.FirstOrDefault(m => m.RunId == runId);
             if (string.IsNullOrEmpty(error) || master == null)
             {
                 return false;
             }
             var errorLog = new APIErrorLog()
             {
                 RunId = runId,
                 PerformanceExecution = master,
                 Error = error,
             };
             dbContext.APIErrorLogs.Add(errorLog);
             ret = dbContext.SaveChanges() > 0;
         }
         return ret;
     }));
 }