Browse Source

Набросок алгоритма рассчета worker_unpaid. Не работает на данный момент. #EBT-16

Veloe 4 years ago
parent
commit
203c1f4513
1 changed files with 73 additions and 8 deletions
  1. 73 8
      EthermineBotTelegram/Program.cs

+ 73 - 8
EthermineBotTelegram/Program.cs

@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Configuration;
 using System.Data.Entity;
+using System.Data.Entity.Migrations;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -279,7 +280,7 @@ namespace EthermineBotTelegram
                     if (lastMinerRecord == null || lastMinerRecord.time !=
                         newMinerRecord.time)
                     {
-                        Botdb.miners.Add(newMinerRecord);
+                        Botdb.miners.AddOrUpdate(newMinerRecord);
                         await Botdb.SaveChangesAsync();
                         await Console.Out.WriteLineAsync($"Added new row for {newMinerRecord.wallet}");
                         url = AppSettings.poolApiUrl + "/miner/" + u.wallet + "/workers";
@@ -300,18 +301,82 @@ namespace EthermineBotTelegram
                                 newWorkerRecord.stale_shares = currentWorker.data[i].staleShares;
                                 newWorkerRecord.invalid_shares = currentWorker.data[i].invalidShares;
                                 //add func to calc worker_unpaid here
-                                newWorkerRecord.worker_unpaid = 0;
-                                
-                                lastTime = 0;
-                                if (Botdb.workers.Where(m => m.wallet == newMinerRecord.wallet).FirstOrDefault() != null) 
-                                    lastTime = Botdb.workers.Where(m => m.wallet == newMinerRecord.wallet).Max(m => m.time);
-                                var lastWokerRecord = Botdb.workers.Where(m => m.wallet == newWorkerRecord.worker && m.time == lastTime).FirstOrDefault();
+                                if (lastMinerRecord != null)
+                                {
+                                    await Console.Out.WriteLineAsync($"lastMinerRecord exists");
+                                    //lastTime = 0;
+                                    //if (Botdb.workers.Where(m => m.worker == newWorkerRecord.worker).FirstOrDefault() != null) 
+                                    //   lastTime = Botdb.workers.Where(m => m.worker == newWorkerRecord.worker).Max(m => m.time);
+ 
+                                var lastWorkerRecord = Botdb.workers.Where(w => w.wallet == newWorkerRecord.worker)
+                                         .OrderByDescending(w => w.time).FirstOrDefault();
+                                    if (lastWorkerRecord != null)
+                                    {
+                                        await Console.Out.WriteLineAsync($"lastWorkerRecord time {lastWorkerRecord.time}");
+                                        if (lastMinerRecord.time == newMinerRecord.time - 600)
+                                        {
+                                            await Console.Out.WriteLineAsync($"lastMinerRecord 600s from new");
+                                            var prevMinerRecord = Botdb.miners.Where(m =>
+                                                    m.wallet == newMinerRecord.wallet && m.time == lastMinerRecord.time - 600)
+                                                .FirstOrDefault();
+                                            if (prevMinerRecord != null)
+                                            {
+                                                if (lastMinerRecord.unpaid == prevMinerRecord.unpaid)
+                                                {
+                                                    await Console.Out.WriteLineAsync(
+                                                        $"prevMinerRecord exists and 600s from new");
+                                                    //var lastWorkerRecord600 = Botdb.workers.Where(m =>
+                                                    //    m.worker == newWorkerRecord.worker &&
+                                                    //    m.time == newWorkerRecord.time - 600).FirstOrDefault();
+                                                    if (lastWorkerRecord.time == newWorkerRecord.time - 600)
+                                                    {
+                                                        await Console.Out.WriteLineAsync(
+                                                            $"lastWorkerRecord exists and 600s from new");
+                                                        await Console.Out.WriteLineAsync($"Hard calc here");
+                                                    }
+                                                }
+                                                else
+                                                {
+                                                    await Console.Out.WriteLineAsync($"Normal calc here");
+                                                    newWorkerRecord.worker_unpaid =
+                                                        lastWorkerRecord.worker_unpaid + (long)((newMinerRecord.unpaid - lastMinerRecord.unpaid) *
+                                                        (newWorkerRecord.reported_hashrate / (double)newMinerRecord.reported_hashrate));
+                                                }
+                                            }
+                                            else
+                                            {
+                                                await Console.Out.WriteLineAsync($"Normal calc here!");
+                                                newWorkerRecord.worker_unpaid =
+                                                    lastWorkerRecord.worker_unpaid + (long)((newMinerRecord.unpaid - lastMinerRecord.unpaid) *
+                                                        (newWorkerRecord.reported_hashrate / (double)newMinerRecord.reported_hashrate));
+                                            }
+                                        }
+                                        else
+                                        {
+                                            await Console.Out.WriteLineAsync($"Just add new row with old data!");
+                                            newWorkerRecord.worker_unpaid = lastWorkerRecord.worker_unpaid;
+                                        }
+                                    }
+                                    else
+                                    {
+                                        await Console.Out.WriteLineAsync($"Just add new row with 0");
+                                        newWorkerRecord.worker_unpaid = 0;
+                                    }
+                                }
+                                else
+                                {
+                                    await Console.Out.WriteLineAsync($"Just add new row with 0");
+                                    newWorkerRecord.worker_unpaid = 0;
+                                }
+                                await Console.Out.WriteLineAsync($"newWorkerRecord worker unpaid : {newWorkerRecord.worker_unpaid}");
+
+                                var lastWokerRecord = Botdb.workers.Where(w => w.wallet == newWorkerRecord.worker).OrderByDescending(w=> w.time).FirstOrDefault();
                                 if (lastWokerRecord == null || lastWokerRecord.time !=
                                     newMinerRecord.time)
                                 {
                                     await Console.Out.WriteLineAsync(
                                         $"Create new record for {currentWorker.data[i].worker} finished");
-                                    Botdb.workers.Add(newWorkerRecord);
+                                    Botdb.workers.AddOrUpdate(newWorkerRecord);
                                     await Botdb.SaveChangesAsync();
                                     await Console.Out.WriteLineAsync($"Added new row for {currentWorker.data[i].worker}");
                                 }