aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2025-07-29 19:53:35 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2025-07-29 19:53:35 +0300
commita802fe75f9538371004f1833e69a69b798892d0c (patch)
tree9d4612cf4dd6c543650b9ee10599db4b30782391 /Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs
parent72c6399ec345ec26bd7f79651667ffa585474919 (diff)
downloadTango-a802fe75f9538371004f1833e69a69b798892d0c.tar.gz
Tango-a802fe75f9538371004f1833e69a69b798892d0c.zip
Telemetry
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs')
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs113
1 files changed, 113 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs b/Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs
new file mode 100644
index 000000000..781b3f3e6
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs
@@ -0,0 +1,113 @@
+using LiteDB;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.Telemetry
+{
+ public class TelemetryLiteDBStorageManager : ITelemetryStorageManager
+ {
+ private bool _disposed;
+ private LiteDatabase _database;
+ private static Object _lock = new object();
+
+ public String DatabasePath { get; private set; }
+
+ public TelemetryLiteDBStorageManager()
+ {
+ DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Twine", "Tango", "Telemetry", Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName) + ".telemetry");
+ Directory.CreateDirectory(Path.GetDirectoryName(DatabasePath));
+
+ _database = new LiteDatabase($"Filename={DatabasePath}");
+ _database.Pragma("TIMEOUT", 10); //Read Timeout
+ _database.Pragma("UTC_DATE", true); //Keep time as UTC when getting data
+ _database.Commit();
+ }
+
+ public virtual void Dispose()
+ {
+ if (_database != null && !_disposed)
+ {
+ try
+ {
+ _disposed = true;
+ _database.Dispose();
+ _database = null;
+ }
+ catch { }
+ }
+ }
+
+ ~TelemetryLiteDBStorageManager()
+ {
+ Dispose();
+ }
+
+ private ILiteCollection<PendingTelemetry> GetPendingTelemetriesCollection()
+ {
+ return _database.GetCollection<PendingTelemetry>("PendingTelemetries");
+ }
+
+ private ILiteCollection<TelemetryHistoryModuleCheckPoint> GetModulesCheckpointCollection()
+ {
+ return _database.GetCollection<TelemetryHistoryModuleCheckPoint>("ModuleCheckPoints");
+ }
+
+ public void UpsertPendingTelemetry(PendingTelemetry pendingTelemetry)
+ {
+ lock (_lock)
+ {
+ var collection = GetPendingTelemetriesCollection();
+ collection.Upsert(pendingTelemetry);
+ }
+ }
+
+ public void DeletePendingTelemetry(PendingTelemetry pendingTelemetry)
+ {
+ lock (_lock)
+ {
+ var collection = GetPendingTelemetriesCollection();
+ collection.Delete(pendingTelemetry.Id);
+ }
+ }
+
+ public List<PendingTelemetry> GetPendingTelemetries(int maxCount)
+ {
+ lock (_lock)
+ {
+ var collection = GetPendingTelemetriesCollection();
+ return collection.FindAll().OrderBy(x => x.TelemetryObject.Time).Take(Math.Max(maxCount, 1)).ToList();
+ }
+ }
+
+ public TelemetryHistoryModuleCheckPoint GetHistoryModuleCheckPoint(ITelemetryHistoryModule historyModule)
+ {
+ lock (_lock)
+ {
+ var collection = GetModulesCheckpointCollection();
+ return collection.FindOne(x => x.ModuleName == historyModule.Name);
+ }
+ }
+
+ public void SetHistoryModuleCheckPoint(ITelemetryHistoryModule historyModule, DateTime time, int totalCount)
+ {
+ lock (_lock)
+ {
+ var collection = GetModulesCheckpointCollection();
+ collection.Upsert(new TelemetryHistoryModuleCheckPoint() { ModuleName = historyModule.Name, Time = time, TotalCount = totalCount });
+ }
+ }
+
+ public int GetPendingTelemetriesCount()
+ {
+ lock (_lock)
+ {
+ var collection = GetPendingTelemetriesCollection();
+ return collection.Count();
+ }
+ }
+ }
+}