private static void ProcessAuction(HypixelContext context, Dictionary <string, SaveAuction> inDb, BidComparer comparer, SaveAuction auction) { try { var id = auction.Uuid; MigrateAuction(auction); if (inDb.TryGetValue(id, out SaveAuction dbauction)) { UpdateAuction(context, comparer, auction, dbauction); } else { if (auction.AuctioneerId == null) { Logger.Instance.Error($"auction removed bevore in db " + auction.Uuid); return; } context.Auctions.Add(auction); try { auction.NBTLookup = NBT.CreateLookup(auction.NbtData); } catch (Exception e) { Logger.Instance.Error($"Error on CreateLookup: {e.Message} \n{e.StackTrace} \n{JSON.Stringify(auction.NbtData.Data)}"); throw e; } } count++; if (!minimumOutput && count % 5 == 0) { Console.Write($"\r Indexed: {count} Saved: {StorageManager.SavedOnDisc} \tcache: {StorageManager.CacheItems} NameRequests: {Program.RequestsSinceStart}"); } } catch (Exception e) { Logger.Instance.Error($"Error {e.Message} on {auction.ItemName} {auction.Uuid} from {auction.AuctioneerId}"); Logger.Instance.Error(e.StackTrace); } }
public async Task DoBatch() { await Task.Delay(TimeSpan.FromMinutes(5)); var batchSize = 2000; using (var context = new HypixelContext()) { var select = context.Auctions .Where(a => a.Id < minId) .OrderByDescending(a => a.Id) .Include(a => a.NBTLookup) .Include(a => a.NbtData) .Take(batchSize); foreach (var auction in select) { if (auction.NBTLookup != null && auction.NBTLookup.Count > 0) { continue; } try { auction.NBTLookup = NBT.CreateLookup(auction.NbtData); context.Update(auction); } catch (Exception e) { Console.WriteLine($"could not generate nbtlookup for {auction.Uuid} {e.Message} \n{e.StackTrace} \n {e.InnerException?.Message} {e.InnerException.StackTrace}"); } } int updated = await context.SaveChangesAsync(); Console.WriteLine($"updated nbt lookup for {updated} auctions, highest: {minId}"); minId -= batchSize; } }