diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-07-29 00:54:47 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-07-29 00:54:47 +0300 |
| commit | 70f9f4dcbe3d4537ff2bd503f18288b9a7b0e19e (patch) | |
| tree | ab7c70dbe23c04e9e6ea9a165b6840e0b2ed1df7 /Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs | |
| parent | d70056692f43b2a39dbaefebe7c6e096a1205fb4 (diff) | |
| download | Tango-70f9f4dcbe3d4537ff2bd503f18288b9a7b0e19e.tar.gz Tango-70f9f4dcbe3d4537ff2bd503f18288b9a7b0e19e.zip | |
Tango.Telemetry v1
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs b/Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs new file mode 100644 index 000000000..70903b833 --- /dev/null +++ b/Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs @@ -0,0 +1,80 @@ +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 TelemetryPendingStorageManager + { + private bool _disposed; + private LiteDatabase _database; + + public String DatabasePath { get; private set; } + + public TelemetryPendingStorageManager() + { + 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) + { + try + { + _disposed = true; + _database.Dispose(); + _database = null; + } + catch { } + } + } + + ~TelemetryPendingStorageManager() + { + Dispose(); + } + + private ILiteCollection<T> GetCollection<T>() where T : ITelemetry + { + return _database.GetCollection<T>(); + } + + public void InsertOrUpdateTelemetryObject<T>(T telemetry) where T : ITelemetry + { + var collection = GetCollection<T>(); + collection.Upsert(telemetry); + } + + public void DeleteTelemetryObject<T>(T telemetry) where T : ITelemetry + { + var collection = GetCollection<T>(); + collection.Delete(telemetry.Id); + } + + public List<ITelemetry> GetTelemetryAll() + { + var names = _database.GetCollectionNames(); + + List<ITelemetry> telemetryAll = new List<ITelemetry>(); + + foreach (var name in names) + { + var collection = _database.GetCollection<ITelemetry>(name); + telemetryAll.AddRange(collection.FindAll().ToList()); + } + + return telemetryAll.OrderBy(x => x.Time).ToList(); + } + } +} |
