diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-07-29 19:53:35 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-07-29 19:53:35 +0300 |
| commit | a802fe75f9538371004f1833e69a69b798892d0c (patch) | |
| tree | 9d4612cf4dd6c543650b9ee10599db4b30782391 /Software/Visual_Studio/Tango.Telemetry/TelemetryLiteDBStorageManager.cs | |
| parent | 72c6399ec345ec26bd7f79651667ffa585474919 (diff) | |
| download | Tango-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.cs | 113 |
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(); + } + } + } +} |
