removing old position reports from SQLite storage
This commit is contained in:
parent
5c9dfd473c
commit
fbb9b29a09
@ -17,7 +17,8 @@ namespace bsmd.AIS2Service
|
|||||||
private static readonly ILog _log = LogManager.GetLogger(typeof(AISManager));
|
private static readonly ILog _log = LogManager.GetLogger(typeof(AISManager));
|
||||||
private static readonly ConcurrentDictionary<int, AIS_Target> _sitRepList = new ConcurrentDictionary<int, AIS_Target>();
|
private static readonly ConcurrentDictionary<int, AIS_Target> _sitRepList = new ConcurrentDictionary<int, AIS_Target>();
|
||||||
private static readonly ConcurrentQueue<AIS_Target> _dbSaveTargets = new ConcurrentQueue<AIS_Target>();
|
private static readonly ConcurrentQueue<AIS_Target> _dbSaveTargets = new ConcurrentQueue<AIS_Target>();
|
||||||
private static Timer _staleTargetTimer;
|
private static Timer _staleTargetTimer; // cleanup sitrep
|
||||||
|
private static Timer _stalePosReportTimer; // clean db
|
||||||
|
|
||||||
public static async void Start()
|
public static async void Start()
|
||||||
{
|
{
|
||||||
@ -41,8 +42,9 @@ namespace bsmd.AIS2Service
|
|||||||
task.FatalErrorOccurred += Task_FatalErrorOccurred;
|
task.FatalErrorOccurred += Task_FatalErrorOccurred;
|
||||||
}
|
}
|
||||||
|
|
||||||
_staleTargetTimer = new Timer(StaleTimerCheck, null, 0, 60000); // check every minute
|
// init timer tasks
|
||||||
|
_staleTargetTimer = new Timer(StaleTargetTimerCheck, null, 0, 60000); // check every minute, start immediately
|
||||||
|
_stalePosReportTimer = new Timer(StalePosReportCheck, sqliteStorage, 0, 60000 * 10); // every ten minutes,
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Task_FatalErrorOccurred(object sender, EventArgs e)
|
private static void Task_FatalErrorOccurred(object sender, EventArgs e)
|
||||||
@ -50,7 +52,7 @@ namespace bsmd.AIS2Service
|
|||||||
throw new NotImplementedException("TBD: shutdown the whole operation?");
|
throw new NotImplementedException("TBD: shutdown the whole operation?");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void StaleTimerCheck(object state)
|
private static void StaleTargetTimerCheck(object state)
|
||||||
{
|
{
|
||||||
List<int> removeKeyList = new List<int>();
|
List<int> removeKeyList = new List<int>();
|
||||||
foreach (int key in _sitRepList.Keys)
|
foreach (int key in _sitRepList.Keys)
|
||||||
@ -68,6 +70,14 @@ namespace bsmd.AIS2Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void StalePosReportCheck(object state)
|
||||||
|
{
|
||||||
|
if (state is AIS_SQLiteStorage storage)
|
||||||
|
{
|
||||||
|
storage.RemoveOldPosReports();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void Stop()
|
public static void Stop()
|
||||||
{
|
{
|
||||||
foreach (var task in _tasks)
|
foreach (var task in _tasks)
|
||||||
|
|||||||
@ -220,11 +220,33 @@ namespace bsmd.AIS2Service
|
|||||||
_storageTargets.Add(target.MMSI, target);
|
_storageTargets.Add(target.MMSI, target);
|
||||||
}
|
}
|
||||||
reader.Close();
|
reader.Close();
|
||||||
|
cmd.Dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
return _storageTargets;
|
return _storageTargets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// cleanup DB by removing past pos reports
|
||||||
|
/// </summary>
|
||||||
|
public void RemoveOldPosReports()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string removeQuery = string.Format("DELETE FROM posreport where timestamp <= datetime('now', '-{0} day')",
|
||||||
|
Properties.Settings.Default.PosReportDBCleanupDays);
|
||||||
|
SQLiteCommand cmd = new SQLiteCommand(removeQuery, _connection);
|
||||||
|
int rows = cmd.ExecuteNonQuery();
|
||||||
|
if(rows > 0)
|
||||||
|
_log.InfoFormat("Removed {0} position reports older than {1} days", rows, Properties.Settings.Default.PosReportDBCleanupDays);
|
||||||
|
cmd.Dispose();
|
||||||
|
}
|
||||||
|
catch(SQLiteException ex)
|
||||||
|
{
|
||||||
|
_log.ErrorFormat("Failed to delete stale position reports: {0}", ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IAISThread implementation
|
#region IAISThread implementation
|
||||||
|
|||||||
@ -52,6 +52,9 @@
|
|||||||
<setting name="SQLiteDBConnectionString" serializeAs="String">
|
<setting name="SQLiteDBConnectionString" serializeAs="String">
|
||||||
<value>Data Source=ais_initial.db;Version=3;</value>
|
<value>Data Source=ais_initial.db;Version=3;</value>
|
||||||
</setting>
|
</setting>
|
||||||
|
<setting name="PosReportDBCleanupDays" serializeAs="String">
|
||||||
|
<value>7</value>
|
||||||
|
</setting>
|
||||||
</bsmd.AIS2Service.Properties.Settings>
|
</bsmd.AIS2Service.Properties.Settings>
|
||||||
</applicationSettings>
|
</applicationSettings>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -76,5 +76,14 @@ namespace bsmd.AIS2Service.Properties {
|
|||||||
return ((string)(this["SQLiteDBConnectionString"]));
|
return ((string)(this["SQLiteDBConnectionString"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("7")]
|
||||||
|
public int PosReportDBCleanupDays {
|
||||||
|
get {
|
||||||
|
return ((int)(this["PosReportDBCleanupDays"]));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,5 +20,8 @@
|
|||||||
<Setting Name="SQLiteDBConnectionString" Type="System.String" Scope="Application">
|
<Setting Name="SQLiteDBConnectionString" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">Data Source=ais_initial.db;Version=3;</Value>
|
<Value Profile="(Default)">Data Source=ais_initial.db;Version=3;</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
|
<Setting Name="PosReportDBCleanupDays" Type="System.Int32" Scope="Application">
|
||||||
|
<Value Profile="(Default)">7</Value>
|
||||||
|
</Setting>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
Loading…
Reference in New Issue
Block a user