From 341f1b24787adfdc7c13f3c5394a31d752911ab7 Mon Sep 17 00:00:00 2001
From: cocoa-dev004 <66989461+cocoa-dev004@users.noreply.github.com>
Date: Tue, 19 Jul 2022 12:09:14 +0900
Subject: [PATCH] Fixed background task
---
.../Covid19Radar.Android.csproj | 2 -
.../Covid19Radar.Android/MainApplication.cs | 1 -
.../DataMaintainanceBackgroundService.cs | 73 ++++----
.../EventLogSubmissionBackgroundService.cs | 6 +-
.../Services/Logs/LogPeriodicDeleteService.cs | 80 ---------
.../Migration/MigrationProcessService.cs | 4 +
.../Services/Migration/WorkManagerMigrator.cs | 4 +
Covid19Radar/Covid19Radar.iOS/AppDelegate.cs | 5 +-
.../Covid19Radar.iOS/Covid19Radar.iOS.csproj | 2 -
Covid19Radar/Covid19Radar.iOS/Info.plist | 2 -
.../DataMaintainanceBackgroundService.cs | 29 ++--
.../EventLogSubmissionBackgroundService.cs | 122 +++++++-------
.../Services/Logs/LogPeriodicDeleteService.cs | 159 ------------------
Covid19Radar/Covid19Radar/App.xaml.cs | 4 -
.../AbsDataMaintainanceBackgroundService.cs | 5 +
.../Services/Logs/LogPeriodicDeleteService.cs | 11 --
16 files changed, 135 insertions(+), 374 deletions(-)
delete mode 100644 Covid19Radar/Covid19Radar.Android/Services/Logs/LogPeriodicDeleteService.cs
delete mode 100644 Covid19Radar/Covid19Radar.iOS/Services/Logs/LogPeriodicDeleteService.cs
delete mode 100644 Covid19Radar/Covid19Radar/Services/Logs/LogPeriodicDeleteService.cs
diff --git a/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj b/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj
index ab12167a6..192a6b06e 100644
--- a/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj
+++ b/Covid19Radar/Covid19Radar.Android/Covid19Radar.Android.csproj
@@ -175,7 +175,6 @@
-
@@ -611,7 +610,6 @@
-
diff --git a/Covid19Radar/Covid19Radar.Android/MainApplication.cs b/Covid19Radar/Covid19Radar.Android/MainApplication.cs
index 8d4c5f2e1..cd1b18d69 100644
--- a/Covid19Radar/Covid19Radar.Android/MainApplication.cs
+++ b/Covid19Radar/Covid19Radar.Android/MainApplication.cs
@@ -134,7 +134,6 @@ private void RegisterPlatformTypes(IContainer container)
// Services
container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
- container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
diff --git a/Covid19Radar/Covid19Radar.Android/Services/DataMaintainanceBackgroundService.cs b/Covid19Radar/Covid19Radar.Android/Services/DataMaintainanceBackgroundService.cs
index 33788b0f1..7e5e4f210 100644
--- a/Covid19Radar/Covid19Radar.Android/Services/DataMaintainanceBackgroundService.cs
+++ b/Covid19Radar/Covid19Radar.Android/Services/DataMaintainanceBackgroundService.cs
@@ -24,8 +24,9 @@ public class DataMaintainanceBackgroundService : AbsDataMaintainanceBackgroundSe
public DataMaintainanceBackgroundService(
ILoggerService loggerService,
+ ILogFileService logFileService,
IEventLogRepository eventLogRepository
- ) : base(loggerService, eventLogRepository)
+ ) : base(loggerService, logFileService, eventLogRepository)
{
// do nothing
}
@@ -49,7 +50,7 @@ public override void Schedule()
private PeriodicWorkRequest CreatePeriodicWorkRequest()
{
var workRequestBuilder = new PeriodicWorkRequest.Builder(
- typeof(DataMaintainanceBackgroundWorker),
+ typeof(BackgroundWorker),
INTERVAL_IN_HOURS, TimeUnit.Hours
)
.SetConstraints(new Constraints.Builder()
@@ -58,49 +59,49 @@ private PeriodicWorkRequest CreatePeriodicWorkRequest()
.SetBackoffCriteria(BackoffPolicy.Linear, BACKOFF_DELAY_IN_MINUTES, TimeUnit.Minutes);
return workRequestBuilder.Build();
}
- }
-
- [Preserve]
- public class DataMaintainanceBackgroundWorker : Worker
- {
- private Lazy _dataMaintainanceBackgroundService
- => new Lazy(() => ContainerLocator.Current.Resolve());
- private Lazy _loggerService => new Lazy(() => ContainerLocator.Current.Resolve());
-
- public DataMaintainanceBackgroundWorker(Context context, WorkerParameters workerParameters)
- : base(context, workerParameters)
- {
- // do nothing
- }
- public override Result DoWork()
+ [Preserve]
+ public class BackgroundWorker : Worker
{
- var dataMaintainanceBackgroundService = _dataMaintainanceBackgroundService.Value;
- var loggerService = _loggerService.Value;
-
- loggerService.StartMethod();
+ private Lazy _dataMaintainanceBackgroundService
+ => new Lazy(() => ContainerLocator.Current.Resolve());
+ private Lazy _loggerService => new Lazy(() => ContainerLocator.Current.Resolve());
- try
+ public BackgroundWorker(Context context, WorkerParameters workerParameters)
+ : base(context, workerParameters)
{
- dataMaintainanceBackgroundService.ExecuteAsync().GetAwaiter().GetResult();
- return Result.InvokeSuccess();
+ // do nothing
}
- catch (Exception exception)
- {
- loggerService.Exception("Exception", exception);
- return Result.InvokeFailure();
- }
- finally
+
+ public override Result DoWork()
{
- loggerService.EndMethod();
+ var dataMaintainanceBackgroundService = _dataMaintainanceBackgroundService.Value;
+ var loggerService = _loggerService.Value;
+
+ loggerService.StartMethod();
+
+ try
+ {
+ dataMaintainanceBackgroundService.ExecuteAsync().GetAwaiter().GetResult();
+ return Result.InvokeSuccess();
+ }
+ catch (Exception exception)
+ {
+ loggerService.Exception("Exception", exception);
+ return Result.InvokeFailure();
+ }
+ finally
+ {
+ loggerService.EndMethod();
+ }
}
- }
- public override void OnStopped()
- {
- base.OnStopped();
+ public override void OnStopped()
+ {
+ base.OnStopped();
- _loggerService.Value.Warning("OnStopped");
+ _loggerService.Value.Warning("OnStopped");
+ }
}
}
}
diff --git a/Covid19Radar/Covid19Radar.Android/Services/EventLogSubmissionBackgroundService.cs b/Covid19Radar/Covid19Radar.Android/Services/EventLogSubmissionBackgroundService.cs
index 774fe5966..52bfbcfc4 100644
--- a/Covid19Radar/Covid19Radar.Android/Services/EventLogSubmissionBackgroundService.cs
+++ b/Covid19Radar/Covid19Radar.Android/Services/EventLogSubmissionBackgroundService.cs
@@ -19,7 +19,7 @@ namespace Covid19Radar.Droid.Services
{
public class EventLogSubmissionBackgroundService : AbsEventLogSubmissionBackgroundService
{
- private const string CURRENT_WORK_NAME = "eventlog_submission_worker_20220112";
+ private const string CURRENT_WORK_NAME = "eventlog_submission_worker_20220628";
private const long INTERVAL_IN_HOURS = 24;
private const long BACKOFF_DELAY_IN_MINUTES = 60;
@@ -42,14 +42,14 @@ public override void Schedule()
PeriodicWorkRequest periodicWorkRequest = CreatePeriodicWorkRequest();
workManager.EnqueueUniquePeriodicWork(
CURRENT_WORK_NAME,
- ExistingPeriodicWorkPolicy.Replace,
+ ExistingPeriodicWorkPolicy.Keep,
periodicWorkRequest
);
_loggerService.EndMethod();
}
- private static PeriodicWorkRequest CreatePeriodicWorkRequest()
+ private PeriodicWorkRequest CreatePeriodicWorkRequest()
{
var workRequestBuilder = new PeriodicWorkRequest.Builder(
typeof(BackgroundWorker),
diff --git a/Covid19Radar/Covid19Radar.Android/Services/Logs/LogPeriodicDeleteService.cs b/Covid19Radar/Covid19Radar.Android/Services/Logs/LogPeriodicDeleteService.cs
deleted file mode 100644
index d88497c70..000000000
--- a/Covid19Radar/Covid19Radar.Android/Services/Logs/LogPeriodicDeleteService.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-using System;
-using Android.App;
-using Android.Content;
-using Covid19Radar.Services.Logs;
-using Prism.Ioc;
-using Xamarin.Essentials;
-
-namespace Covid19Radar.Droid.Services.Logs
-{
- public class LogPeriodicDeleteService : ILogPeriodicDeleteService
- {
- private static readonly int requestCode = 1000;
- private static readonly long executionIntervalMillis = 60 * 60 * 24 * 1000; // 24hours
-
- private readonly ILoggerService loggerService;
-
- public LogPeriodicDeleteService(
- ILoggerService loggerService
- )
- {
- this.loggerService = loggerService;
- }
-
- public void Init()
- {
- var nextScheduledTime = SetNextSchedule();
- loggerService.Info($"Next scheduled time: {DateTimeOffset.FromUnixTimeMilliseconds(nextScheduledTime).ToOffset(new TimeSpan(9, 0, 0))}");
- }
-
- public static long SetNextSchedule()
- {
- var nextScheduledTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + executionIntervalMillis;
-
- var context = Platform.AppContext;
- var intent = new Intent(context, typeof(LogPeriodicDeleteReceiver));
- var pendingIntent = PendingIntent.GetBroadcast(context, requestCode, intent, PendingIntentFlags.CancelCurrent);
-
- var alermService = context.GetSystemService(Context.AlarmService) as AlarmManager;
- if (alermService != null)
- {
- alermService.SetExactAndAllowWhileIdle(AlarmType.RtcWakeup, nextScheduledTime, pendingIntent);
- }
-
- return nextScheduledTime;
- }
- }
-
- [BroadcastReceiver]
- [IntentFilter(new[] { Intent.ActionBootCompleted })]
- public class LogPeriodicDeleteReceiver : BroadcastReceiver
- {
- private ILoggerService loggerService => ContainerLocator.Current.Resolve();
- private ILogFileService logFileService => ContainerLocator.Current.Resolve();
-
- public LogPeriodicDeleteReceiver()
- {
- // do nothing
- }
-
- public override void OnReceive(Context context, Intent intent)
- {
- try
- {
- loggerService.Info($"Action: {intent.Action}");
- logFileService.Rotate();
- loggerService.Info("Periodic deletion of old logs.");
- var nextScheduledTime = LogPeriodicDeleteService.SetNextSchedule();
- loggerService.Info($"Next scheduled time: {DateTimeOffset.FromUnixTimeMilliseconds(nextScheduledTime).ToOffset(new TimeSpan(9, 0, 0))}");
- }
- catch
- {
- // do nothing
- }
- }
- }
-}
diff --git a/Covid19Radar/Covid19Radar.Android/Services/Migration/MigrationProcessService.cs b/Covid19Radar/Covid19Radar.Android/Services/Migration/MigrationProcessService.cs
index a9209cafe..bef8a4738 100644
--- a/Covid19Radar/Covid19Radar.Android/Services/Migration/MigrationProcessService.cs
+++ b/Covid19Radar/Covid19Radar.Android/Services/Migration/MigrationProcessService.cs
@@ -70,17 +70,20 @@ public class MigrationProccessService : IMigrationProcessService
{
private readonly AbsExposureDetectionBackgroundService _exposureDetectionBackgroundService;
private readonly AbsDataMaintainanceBackgroundService _dataMaintainanceBackgroundService;
+ private readonly AbsEventLogSubmissionBackgroundService _eventLogSubmissionBackgroundService;
private readonly ILoggerService _loggerService;
public MigrationProccessService(
AbsExposureDetectionBackgroundService exposureDetectionBackgroundService,
AbsDataMaintainanceBackgroundService dataMaintainanceBackgroundService,
+ AbsEventLogSubmissionBackgroundService eventLogSubmissionBackgroundService,
ILoggerService loggerService
)
{
_exposureDetectionBackgroundService = exposureDetectionBackgroundService;
_dataMaintainanceBackgroundService = dataMaintainanceBackgroundService;
+ _eventLogSubmissionBackgroundService = eventLogSubmissionBackgroundService;
_loggerService = loggerService;
}
@@ -91,6 +94,7 @@ public async Task SetupAsync()
await new WorkManagerMigrator(
_exposureDetectionBackgroundService,
_dataMaintainanceBackgroundService,
+ _eventLogSubmissionBackgroundService,
_loggerService
).ExecuteAsync();
diff --git a/Covid19Radar/Covid19Radar.Android/Services/Migration/WorkManagerMigrator.cs b/Covid19Radar/Covid19Radar.Android/Services/Migration/WorkManagerMigrator.cs
index 5fc117812..c40b7b290 100644
--- a/Covid19Radar/Covid19Radar.Android/Services/Migration/WorkManagerMigrator.cs
+++ b/Covid19Radar/Covid19Radar.Android/Services/Migration/WorkManagerMigrator.cs
@@ -20,17 +20,20 @@ internal class WorkManagerMigrator
private readonly AbsExposureDetectionBackgroundService _exposureDetectionBackgroundService;
private readonly AbsDataMaintainanceBackgroundService _dataMaintainanceBackgroundService;
+ private readonly AbsEventLogSubmissionBackgroundService _eventLogSubmissionBackgroundService;
private readonly ILoggerService _loggerService;
public WorkManagerMigrator(
AbsExposureDetectionBackgroundService exposureDetectionBackgroundService,
AbsDataMaintainanceBackgroundService dataMaintainanceBackgroundService,
+ AbsEventLogSubmissionBackgroundService eventLogSubmissionBackgroundService,
ILoggerService loggerService
)
{
_exposureDetectionBackgroundService = exposureDetectionBackgroundService;
_dataMaintainanceBackgroundService = dataMaintainanceBackgroundService;
+ _eventLogSubmissionBackgroundService = eventLogSubmissionBackgroundService;
_loggerService = loggerService;
}
@@ -43,6 +46,7 @@ internal Task ExecuteAsync()
_exposureDetectionBackgroundService.Schedule();
_dataMaintainanceBackgroundService.Schedule();
+ _eventLogSubmissionBackgroundService.Schedule();
_loggerService.EndMethod();
diff --git a/Covid19Radar/Covid19Radar.iOS/AppDelegate.cs b/Covid19Radar/Covid19Radar.iOS/AppDelegate.cs
index b989d2dd0..c36334acb 100644
--- a/Covid19Radar/Covid19Radar.iOS/AppDelegate.cs
+++ b/Covid19Radar/Covid19Radar.iOS/AppDelegate.cs
@@ -115,12 +115,12 @@ public override bool FinishedLaunching(UIApplication app, NSDictionary launchOpt
UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval(UIApplication.BackgroundFetchIntervalMinimum);
- ScheduleBackgroundTask();
+ ScheduleBackgroundTasks();
return base.FinishedLaunching(app, launchOptions);
}
- private void ScheduleBackgroundTask()
+ private void ScheduleBackgroundTasks()
{
try
{
@@ -269,7 +269,6 @@ private void RegisterPlatformTypes(IContainer container)
// Services
container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
- container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
container.Register(Reuse.Singleton);
diff --git a/Covid19Radar/Covid19Radar.iOS/Covid19Radar.iOS.csproj b/Covid19Radar/Covid19Radar.iOS/Covid19Radar.iOS.csproj
index 874a138eb..2f1704fe3 100644
--- a/Covid19Radar/Covid19Radar.iOS/Covid19Radar.iOS.csproj
+++ b/Covid19Radar/Covid19Radar.iOS/Covid19Radar.iOS.csproj
@@ -256,7 +256,6 @@
-
@@ -546,7 +545,6 @@
-
diff --git a/Covid19Radar/Covid19Radar.iOS/Info.plist b/Covid19Radar/Covid19Radar.iOS/Info.plist
index 4b8d77ceb..7c84330af 100644
--- a/Covid19Radar/Covid19Radar.iOS/Info.plist
+++ b/Covid19Radar/Covid19Radar.iOS/Info.plist
@@ -54,7 +54,6 @@
BGTaskSchedulerPermittedIdentifiers
APP_PACKAGE_NAME.exposure-notification
- APP_PACKAGE_NAME.delete-old-logs
APP_PACKAGE_NAME.eventlog-submission
APP_PACKAGE_NAME.data-maintainance
@@ -62,7 +61,6 @@
LaunchScreen
UIBackgroundModes
- fetch
processing
UIUserInterfaceStyle
diff --git a/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs b/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs
index 3df569f1a..a93881e97 100644
--- a/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs
+++ b/Covid19Radar/Covid19Radar.iOS/Services/DataMaintainanceBackgroundService.cs
@@ -17,18 +17,15 @@ namespace Covid19Radar.iOS.Services
{
public class DataMaintainanceBackgroundService : AbsDataMaintainanceBackgroundService
{
- private const int TASK_INTERVAL_IN_DAYS = 1;
+ private const double BGTASK_INTERVAL = 24 * 60 * 60; // one day
private static readonly string BGTASK_IDENTIFIER = AppInfo.PackageName + ".data-maintainance";
- private readonly IDateTimeUtility _dateTimeUtility;
-
public DataMaintainanceBackgroundService(
ILoggerService loggerService,
- IEventLogRepository eventLogRepository,
- IDateTimeUtility dateTimeUtility
- ) : base(loggerService, eventLogRepository)
+ ILogFileService logFileService,
+ IEventLogRepository eventLogRepository
+ ) : base(loggerService, logFileService, eventLogRepository)
{
- _dateTimeUtility = dateTimeUtility;
}
public override void Schedule()
@@ -39,14 +36,15 @@ public override void Schedule()
{
LoggerService.Info("Background task has been started.");
- DateTime nextDateTime = _dateTimeUtility.UtcNow.Date.AddDays(TASK_INTERVAL_IN_DAYS);
- ScheduleBgTask(nextDateTime);
+ ScheduleBgTask();
var cancellationTokenSource = new CancellationTokenSource();
task.ExpirationHandler = cancellationTokenSource.Cancel;
_ = Task.Run(async () =>
{
+ LoggerService.Info("Task.Run() start");
+
try
{
await ExecuteAsync();
@@ -65,25 +63,26 @@ public override void Schedule()
finally
{
cancellationTokenSource.Dispose();
+ LoggerService.Info("Task.Run() end");
}
}, cancellationTokenSource.Token);
});
if (result)
{
- LoggerService.Debug("BGTaskScheduler.Shared.Register succeeded.");
+ LoggerService.Info("BGTaskScheduler.Shared.Register succeeded.");
}
else
{
- LoggerService.Info("BGTaskScheduler.Shared.Register failed.");
+ LoggerService.Error("BGTaskScheduler.Shared.Register failed.");
}
- ScheduleBgTask(_dateTimeUtility.UtcNow);
+ ScheduleBgTask();
LoggerService.EndMethod();
}
- private void ScheduleBgTask(DateTime nextDateTime)
+ private void ScheduleBgTask()
{
LoggerService.StartMethod();
@@ -91,9 +90,11 @@ private void ScheduleBgTask(DateTime nextDateTime)
{
BGProcessingTaskRequest bgTaskRequest = new BGProcessingTaskRequest(BGTASK_IDENTIFIER)
{
- EarliestBeginDate = NSDate.FromTimeIntervalSince1970(nextDateTime.ToUnixEpoch())
+ EarliestBeginDate = NSDate.FromTimeIntervalSinceNow(BGTASK_INTERVAL),
};
+ _loggerService.Info($"request.EarliestBeginDate: {bgTaskRequest.EarliestBeginDate}");
+
BGTaskScheduler.Shared.Submit(bgTaskRequest, out var error);
if (error != null)
{
diff --git a/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs b/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs
index 34736ba7b..6b63c9511 100644
--- a/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs
+++ b/Covid19Radar/Covid19Radar.iOS/Services/EventLogSubmissionBackgroundService.cs
@@ -17,9 +17,8 @@ namespace Covid19Radar.iOS.Services
{
public class EventLogSubmissionBackgroundService : AbsEventLogSubmissionBackgroundService
{
- private static readonly string IDENTIFIER = AppInfo.PackageName + ".eventlog-submission";
-
- private const double ONE_DAY_IN_SECONDS = 1 * 24 * 60 * 60;
+ private const double BGTASK_INTERVAL = 24 * 60 * 60; // one day
+ private static readonly string BGTASK_IDENTIFIER = AppInfo.PackageName + ".eventlog-submission";
private readonly IEventLogService _eventLogService;
private readonly IEventLogRepository _eventLogRepository;
@@ -40,79 +39,88 @@ public override void Schedule()
{
_loggerService.StartMethod();
- _ = BGTaskScheduler.Shared.Register(IDENTIFIER, null, task =>
+ bool result = BGTaskScheduler.Shared.Register(BGTASK_IDENTIFIER, null, task =>
{
- HandleSendLogAsync((BGAppRefreshTask)task);
- });
+ _loggerService.Info("Background task has been started.");
- ScheduleSendEventLog();
+ ScheduleBgTask();
- _loggerService.EndMethod();
- }
-
- private void HandleSendLogAsync(BGAppRefreshTask task)
- {
- _loggerService.StartMethod();
+ var cancellationTokenSource = new CancellationTokenSource();
+ task.ExpirationHandler = cancellationTokenSource.Cancel;
- ScheduleSendEventLog();
+ _ = Task.Run(async () =>
+ {
+ _loggerService.Info("Task.Run() start");
+
+ try
+ {
+ await _eventLogRepository.RotateAsync(
+ AppConstants.EventLogFileExpiredSeconds);
+
+ await _eventLogService.SendAllAsync(
+ AppConstants.EventLogMaxRequestSizeInBytes,
+ AppConstants.EventLogMaxRetry);
+
+ task.SetTaskCompleted(true);
+ }
+ catch (OperationCanceledException exception)
+ {
+ _loggerService.Exception($"Background task canceled.", exception);
+ task.SetTaskCompleted(false);
+ }
+ catch (Exception exception)
+ {
+ _loggerService.Exception($"Exception", exception);
+ task.SetTaskCompleted(false);
+ }
+ finally
+ {
+ cancellationTokenSource.Dispose();
+ _loggerService.Info("Task.Run() end");
+ }
+ }, cancellationTokenSource.Token);
+ });
- var cancellationTokenSource = new CancellationTokenSource();
- task.ExpirationHandler = cancellationTokenSource.Cancel;
+ ScheduleBgTask();
- _ = Task.Run(async () =>
+ if (result)
{
- _loggerService.Info("HandleSendLogAsync() Task.Run() start");
- try
- {
- await _eventLogRepository.RotateAsync(
- AppConstants.EventLogFileExpiredSeconds);
-
- await _eventLogService.SendAllAsync(
- AppConstants.EventLogMaxRequestSizeInBytes,
- AppConstants.EventLogMaxRetry);
- task.SetTaskCompleted(true);
- }
- catch (OperationCanceledException exception)
- {
- _loggerService.Exception($"Background task canceled.", exception);
- task.SetTaskCompleted(false);
- }
- catch (Exception exception)
- {
- _loggerService.Exception($"Exception", exception);
- task.SetTaskCompleted(false);
- }
- finally
- {
- cancellationTokenSource.Dispose();
- _loggerService.Info("HandleSendLogAsync() Task.Run() end");
- }
- });
+ _loggerService.Info("BGTaskScheduler.Shared.Register succeeded.");
+ }
+ else
+ {
+ _loggerService.Error("BGTaskScheduler.Shared.Register failed.");
+ }
_loggerService.EndMethod();
}
- private void ScheduleSendEventLog()
+ private void ScheduleBgTask()
{
_loggerService.StartMethod();
- var bgTaskRequest = new BGProcessingTaskRequest(IDENTIFIER)
+ try
{
- EarliestBeginDate = NSDate.FromTimeIntervalSinceNow(ONE_DAY_IN_SECONDS),
- RequiresNetworkConnectivity = true
- };
+ var bgTaskRequest = new BGProcessingTaskRequest(BGTASK_IDENTIFIER)
+ {
+ EarliestBeginDate = NSDate.FromTimeIntervalSinceNow(BGTASK_INTERVAL),
+ RequiresNetworkConnectivity = true
+ };
- _loggerService.Info($"request.EarliestBeginDate: {bgTaskRequest.EarliestBeginDate}");
+ _loggerService.Info($"request.EarliestBeginDate: {bgTaskRequest.EarliestBeginDate}");
- _ = BGTaskScheduler.Shared.Submit(bgTaskRequest, out var error);
- if (error != null)
+ _ = BGTaskScheduler.Shared.Submit(bgTaskRequest, out var error);
+ if (error != null)
+ {
+ NSErrorException exception = new NSErrorException(error);
+ _loggerService.Exception("BGTaskScheduler submit failed.", exception);
+ throw exception;
+ }
+ }
+ finally
{
- NSErrorException exception = new NSErrorException(error);
- _loggerService.Exception("BGTaskScheduler submit failed.", exception);
- throw exception;
+ _loggerService.EndMethod();
}
-
- _loggerService.EndMethod();
}
}
}
diff --git a/Covid19Radar/Covid19Radar.iOS/Services/Logs/LogPeriodicDeleteService.cs b/Covid19Radar/Covid19Radar.iOS/Services/Logs/LogPeriodicDeleteService.cs
deleted file mode 100644
index 8f3955de2..000000000
--- a/Covid19Radar/Covid19Radar.iOS/Services/Logs/LogPeriodicDeleteService.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-using BackgroundTasks;
-using Covid19Radar.Services.Logs;
-using Foundation;
-using Xamarin.Essentials;
-
-namespace Covid19Radar.iOS.Services.Logs
-{
- public class LogPeriodicDeleteService : ILogPeriodicDeleteService
- {
- #region Static Fields
-
- private static readonly string identifier = AppInfo.PackageName + ".delete-old-logs";
-
- #endregion
-
- #region Instance Fields
-
- private readonly ILoggerService loggerService;
- private readonly ILogFileService logFileService;
-
- #endregion
-
- #region Constructors
-
- public LogPeriodicDeleteService(
- ILoggerService loggerService,
- ILogFileService logFileService
- )
- {
- this.loggerService = loggerService;
- this.logFileService = logFileService;
- }
-
- #endregion
-
- #region ILogPeriodicDeleteService Methods
-
- public void Init()
- {
- loggerService.StartMethod();
-
- _ = BGTaskScheduler.Shared.Register(identifier, null, task =>
- {
- HandleAppRefresh((BGAppRefreshTask)task);
- });
-
- ScheduleAppRefresh();
-
- loggerService.EndMethod();
- }
-
- #endregion
-
- #region Other Private Methods
-
- private void HandleAppRefresh(BGAppRefreshTask task)
- {
- try
- {
- loggerService.StartMethod();
-
- ScheduleAppRefresh();
-
- var queue = new NSOperationQueue();
- queue.MaxConcurrentOperationCount = 1;
-
- task.ExpirationHandler = () =>
- {
- loggerService.Info("Task expired.");
- queue.CancelAllOperations();
- };
-
- var operation = new DeleteOldLogsOperation(loggerService, logFileService);
- operation.CompletionBlock = () =>
- {
- loggerService.Info($"Operation completed. operation.IsCancelled: {operation.IsCancelled}");
- task.SetTaskCompleted(!operation.IsCancelled);
- };
-
- queue.AddOperation(operation);
-
- loggerService.EndMethod();
- }
- catch
- {
- // do nothing
- }
- }
-
- private void ScheduleAppRefresh()
- {
- loggerService.StartMethod();
-
- var oneDay = 1 * 24 * 60 * 60;
- var request = new BGAppRefreshTaskRequest(identifier);
- request.EarliestBeginDate = NSDate.FromTimeIntervalSinceNow(oneDay); // Fetch no earlier than 1 day from now
-
- loggerService.Info($"request.EarliestBeginDate: {request.EarliestBeginDate}");
-
- _ = BGTaskScheduler.Shared.Submit(request, out var error);
-
- if (error != null)
- {
- loggerService.Error($"Could not schedule app refresh. Error: {error}");
- }
-
- loggerService.EndMethod();
- }
-
- #endregion
- }
-
- class DeleteOldLogsOperation : NSOperation
- {
- #region Instance Fields
-
- private readonly ILoggerService loggerService;
- private readonly ILogFileService logFileService;
-
- #endregion
-
- #region Constructors
-
- public DeleteOldLogsOperation(ILoggerService loggerService, ILogFileService logFileService)
- {
- this.loggerService = loggerService;
- this.logFileService = logFileService;
- }
-
- #endregion
-
- #region NSOperation Methods
-
- public override void Main()
- {
- base.Main();
-
- try
- {
- loggerService.StartMethod();
-
- logFileService.Rotate();
-
- loggerService.Info("Periodic deletion of old logs.");
- loggerService.EndMethod();
- }
- catch
- {
- // do nothing
- }
- }
-
- #endregion
- }
-}
diff --git a/Covid19Radar/Covid19Radar/App.xaml.cs b/Covid19Radar/Covid19Radar/App.xaml.cs
index 235eab879..448208526 100644
--- a/Covid19Radar/Covid19Radar/App.xaml.cs
+++ b/Covid19Radar/Covid19Radar/App.xaml.cs
@@ -243,10 +243,6 @@ private static void RegisterCommonTypes(IContainer container)
protected override async void OnStart()
{
- // Initialize periodic log delete service
- var logPeriodicDeleteService = Container.Resolve();
- logPeriodicDeleteService.Init();
-
LogFileService.Rotate();
await EventLogRepository.RotateAsync(
diff --git a/Covid19Radar/Covid19Radar/Services/AbsDataMaintainanceBackgroundService.cs b/Covid19Radar/Covid19Radar/Services/AbsDataMaintainanceBackgroundService.cs
index eefa1c0e1..60ac0e9b1 100644
--- a/Covid19Radar/Covid19Radar/Services/AbsDataMaintainanceBackgroundService.cs
+++ b/Covid19Radar/Covid19Radar/Services/AbsDataMaintainanceBackgroundService.cs
@@ -13,13 +13,16 @@ public abstract class AbsDataMaintainanceBackgroundService : IBackgroundService
{
protected ILoggerService LoggerService { get; private set; }
+ private readonly ILogFileService _logFileService;
private readonly IEventLogRepository _eventLogRepository;
protected AbsDataMaintainanceBackgroundService(
ILoggerService loggerService,
+ ILogFileService logFileService,
IEventLogRepository eventLogRepository)
{
LoggerService = loggerService;
+ _logFileService = logFileService;
_eventLogRepository = eventLogRepository;
}
@@ -31,6 +34,8 @@ public async Task ExecuteAsync()
try
{
+ _logFileService.Rotate();
+
await _eventLogRepository.RotateAsync(
AppConstants.EventLogFileExpiredSeconds);
}
diff --git a/Covid19Radar/Covid19Radar/Services/Logs/LogPeriodicDeleteService.cs b/Covid19Radar/Covid19Radar/Services/Logs/LogPeriodicDeleteService.cs
deleted file mode 100644
index 0a9711e44..000000000
--- a/Covid19Radar/Covid19Radar/Services/Logs/LogPeriodicDeleteService.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
-
-namespace Covid19Radar.Services.Logs
-{
- public interface ILogPeriodicDeleteService
- {
- void Init();
- }
-}