|
|
@@ -533,22 +533,23 @@ namespace BulkPrinting
|
|
533
|
533
|
new SQLiteParameter("@value", SessionDataJson));
|
|
534
|
534
|
LogEvent(Globals.DB, VendorEvent.VendorEventType.Logout);
|
|
535
|
535
|
|
|
536
|
|
- CancelLogUploadWorker();
|
|
|
536
|
+ if (Globals.LogUploader != null)
|
|
|
537
|
+ Globals.LogUploader.Cancel();
|
|
|
538
|
+
|
|
537
|
539
|
CancelLogDownloadWorker();
|
|
538
|
540
|
|
|
539
|
|
- if (Globals.LogUploadThread != null)
|
|
|
541
|
+ if (Globals.LogUploader != null)
|
|
540
|
542
|
{
|
|
541
|
|
- Globals.LogUploadThread.Join();
|
|
542
|
|
- Globals.LogUploadThread = null;
|
|
|
543
|
+ Globals.LogUploader.Join();
|
|
|
544
|
+ Globals.LogUploader = null;
|
|
543
|
545
|
}
|
|
|
546
|
+
|
|
544
|
547
|
if (Globals.LogDownloadThread != null)
|
|
545
|
548
|
{
|
|
546
|
549
|
Globals.LogDownloadThread.Join();
|
|
547
|
550
|
Globals.LogDownloadThread = null;
|
|
548
|
551
|
}
|
|
549
|
552
|
|
|
550
|
|
- Globals.UploadNewLogs = false;
|
|
551
|
|
- Globals.LogUploadThreadCancelled = false;
|
|
552
|
553
|
Globals.LogDownloadThreadCancelled = false;
|
|
553
|
554
|
|
|
554
|
555
|
Globals.DB.Close();
|
|
|
@@ -709,122 +710,16 @@ namespace BulkPrinting
|
|
709
|
710
|
}
|
|
710
|
711
|
}
|
|
711
|
712
|
|
|
712
|
|
- public static void CancelLogUploadWorker()
|
|
713
|
|
- {
|
|
714
|
|
- lock (Globals.LogUploadThreadLock)
|
|
715
|
|
- {
|
|
716
|
|
- Globals.LogUploadThreadCancelled = true;
|
|
717
|
|
- Monitor.Pulse(Globals.LogUploadThreadLock);
|
|
718
|
|
- }
|
|
719
|
|
- }
|
|
720
|
|
-
|
|
721
|
|
- public static void LogUploadWorker()
|
|
722
|
|
- {
|
|
723
|
|
- const int uploadPageSize = 1000;
|
|
724
|
|
- var retryInterval = 30000;
|
|
725
|
|
-
|
|
726
|
|
- var db = Globals.DB;
|
|
727
|
|
- //using (var db = OpenDBConnection())
|
|
728
|
|
- {
|
|
729
|
|
- var cancelled = false;
|
|
730
|
|
- while (! cancelled)
|
|
731
|
|
- {
|
|
732
|
|
- var uploadFailed = false;
|
|
733
|
|
- int lastSyncedLogId = GetLastSyncedLogID();
|
|
734
|
|
-
|
|
735
|
|
- var result = db.ExecuteScalar("SELECT MAX(Id) FROM Logs")?.ToString() ?? "0";
|
|
736
|
|
- if (string.IsNullOrWhiteSpace(result))
|
|
737
|
|
- {
|
|
738
|
|
- result = "0";
|
|
739
|
|
- }
|
|
740
|
|
- int lastRecordedLogId = int.Parse(result.ToString());
|
|
741
|
|
-
|
|
742
|
|
- if (lastRecordedLogId > lastSyncedLogId)
|
|
743
|
|
- {
|
|
744
|
|
- List<RemoteVendorEvent> eventList = new List<RemoteVendorEvent>();
|
|
745
|
|
- int counter = 0;
|
|
746
|
|
- using (var Command = db.CreateCommand("Select Id,UserId,VoucherId,EventDate,EventType From Logs WHERE Id > @id",
|
|
747
|
|
- new SQLiteParameter("@id", lastSyncedLogId)))
|
|
748
|
|
- {
|
|
749
|
|
- using (SQLiteDataReader read = Command.ExecuteReader())
|
|
750
|
|
- {
|
|
751
|
|
- while (read.Read())
|
|
752
|
|
- {
|
|
753
|
|
- counter += 1;
|
|
754
|
|
- var nextEvent = new RemoteVendorEvent();
|
|
755
|
|
- nextEvent.Id = read.GetInt32(0);
|
|
756
|
|
- nextEvent.UserId = read.GetInt32(1);
|
|
757
|
|
- if (read.IsDBNull(2) == true)
|
|
758
|
|
- {
|
|
759
|
|
- nextEvent.VoucherId = null;
|
|
760
|
|
- }
|
|
761
|
|
- else
|
|
762
|
|
- {
|
|
763
|
|
- nextEvent.VoucherId = read.GetInt32(2);
|
|
764
|
|
- }
|
|
765
|
|
- nextEvent.EventDate = read.GetDateTime(3);
|
|
766
|
|
- nextEvent.EventType = (VendorEvent.VendorEventType)Enum.Parse(typeof(VendorEvent.VendorEventType), read.GetValue(4).ToString());
|
|
767
|
|
- nextEvent.VendorId = Globals.SessionData.Credentials.Payload.Vendor.id;
|
|
768
|
|
- eventList.Add(nextEvent);
|
|
769
|
|
-
|
|
770
|
|
- if (counter == uploadPageSize)
|
|
771
|
|
- {
|
|
772
|
|
- var response = new RemoteVendorEventResponse();
|
|
773
|
|
- if (RESTRequest(eventList, ref response, "/api/vendorevents/"))
|
|
774
|
|
- {
|
|
775
|
|
- counter = 0;
|
|
776
|
|
- eventList.Clear();
|
|
777
|
|
- }
|
|
778
|
|
- else
|
|
779
|
|
- {
|
|
780
|
|
- uploadFailed = true;
|
|
781
|
|
- break;
|
|
782
|
|
- }
|
|
783
|
|
- }
|
|
784
|
|
- }
|
|
785
|
|
- if (counter > 0)
|
|
786
|
|
- {
|
|
787
|
|
- var response = new RemoteVendorEventResponse();
|
|
788
|
|
- if (!RESTRequest(eventList, ref response, "/api/vendorevents/"))
|
|
789
|
|
- {
|
|
790
|
|
- uploadFailed = true;
|
|
791
|
|
- }
|
|
792
|
|
- }
|
|
793
|
|
- }
|
|
794
|
|
- }
|
|
795
|
|
- }
|
|
796
|
|
-
|
|
797
|
|
- lock (Globals.LogUploadThreadLock)
|
|
798
|
|
- {
|
|
799
|
|
- while (! Globals.LogUploadThreadCancelled && ! Globals.UploadNewLogs)
|
|
800
|
|
- {
|
|
801
|
|
- Monitor.Wait(Globals.LogUploadThreadLock, uploadFailed ? retryInterval : Timeout.Infinite);
|
|
802
|
|
- if (uploadFailed)
|
|
803
|
|
- {
|
|
804
|
|
- break;
|
|
805
|
|
- }
|
|
806
|
|
- }
|
|
807
|
|
- Globals.UploadNewLogs = false;
|
|
808
|
|
- cancelled = Globals.LogUploadThreadCancelled;
|
|
809
|
|
- }
|
|
810
|
|
- }
|
|
811
|
|
- }
|
|
812
|
|
- }
|
|
813
|
|
-
|
|
814
|
713
|
public static void TriggerLogUpload()
|
|
815
|
714
|
{
|
|
816
|
|
- if (Globals.LogUploadThread == null)
|
|
|
715
|
+ if (Globals.LogUploader == null)
|
|
817
|
716
|
{
|
|
818
|
|
- Globals.LogUploadThread = new Thread(() => LogUploadWorker());
|
|
819
|
|
- Globals.LogUploadThread.Start();
|
|
|
717
|
+ Globals.LogUploader = new LogUploader(Globals.DB);
|
|
|
718
|
+ Globals.LogUploader.Start();
|
|
820
|
719
|
}
|
|
821
|
720
|
else
|
|
822
|
721
|
{
|
|
823
|
|
- lock (Globals.LogUploadThreadLock)
|
|
824
|
|
- {
|
|
825
|
|
- Globals.UploadNewLogs = true;
|
|
826
|
|
- Monitor.Pulse(Globals.LogUploadThreadLock);
|
|
827
|
|
- }
|
|
|
722
|
+ Globals.LogUploader.TriggerUpload();
|
|
828
|
723
|
}
|
|
829
|
724
|
}
|
|
830
|
725
|
|