-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Temporarily store signals in disk Part 2/3 (#172)
* Adding disk buffering otel lib * Created SignalDiskExporter * Adding convenience method to export a batch of each signal from disk * Validating null signal exporters * Adding methods to get the app's cache dir and available cache space into AppInfoService * Adding persistence configuration * Calculating max signal folder size in DiskManager * Ensuring dirs are available and temporary dir is cleaned up * Checking dirs are created * Clean up SignalDiskExporter * Moving DiskManager to internal * Making exporters visitable * Adding max cache file size to SignalPersistenceConfiguration * Adding license header * Created SimpleTemporaryFileProvider * Adding enabled option to PersistenceConfiguration * Initializing persistence * Adding debug logs * Fixing old tests * Adding tests to validate persistence initialization * Adding logs and docs * Updating the NOTICE files * Reorganizing single task background concurrency tools * Revert "Reorganizing single task background concurrency tools" This reverts commit 15b3694. * Creating PeriodicWorkService * Updating PeriodicWorkService * Updating time delay for PeriodicWorkService * Making PeriodicWorkService task manipulation thread safe * Using PeriodicWorkService to poll central config * Removing periodic tasks based on their last run's response * Adding periodic task delay logic to PeriodicTask * Adding PeriodicWorkService initialization separately from the service start process * Initializing CentralConfigurationInitializer through the PeriodicWorkExecutor tasks * Validating PeriodicWorkService initialization * Making NtpManager a PeriodicTask * Verifying ntpmanager agent initialization * Clean up * Adding tests to PeriodicWorkService * Renaming PeriodicTask method to better convey its intentions
- Loading branch information
1 parent
8508056
commit 2eac513
Showing
21 changed files
with
612 additions
and
305 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
...src/main/java/co/elastic/apm/android/sdk/internal/services/periodicwork/PeriodicTask.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
* Licensed to Elasticsearch B.V. under one or more contributor | ||
* license agreements. See the NOTICE file distributed with | ||
* this work for additional information regarding copyright | ||
* ownership. Elasticsearch B.V. licenses this file to you under | ||
* the Apache License, Version 2.0 (the "License"); you may | ||
* not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package co.elastic.apm.android.sdk.internal.services.periodicwork; | ||
|
||
import co.elastic.apm.android.sdk.internal.time.SystemTimeProvider; | ||
|
||
public abstract class PeriodicTask { | ||
private final SystemTimeProvider timeProvider; | ||
private long lastTimeItRan = 0; | ||
|
||
public PeriodicTask() { | ||
this(SystemTimeProvider.get()); | ||
} | ||
|
||
protected PeriodicTask(SystemTimeProvider timeProvider) { | ||
this.timeProvider = timeProvider; | ||
} | ||
|
||
/** | ||
* Calls {@link #onPeriodicTaskRun()} if the task is due to be run, noop otherwise. | ||
* | ||
* @return true when the task was run, false otherwise. | ||
*/ | ||
public final boolean runPeriodicTask() { | ||
if (isReadyToRun()) { | ||
onPeriodicTaskRun(); | ||
lastTimeItRan = timeProvider.getCurrentTimeMillis(); | ||
return true; | ||
} | ||
return false; | ||
} | ||
|
||
/** | ||
* Runs a task when it's due. | ||
*/ | ||
protected abstract void onPeriodicTaskRun(); | ||
|
||
/** | ||
* Returns the minimum amount of milliseconds that need to pass before this task gets to run again. | ||
* The actual time before running this task can be higher than the one provided in here, | ||
* given that tasks are run from the {@link PeriodicWorkService} class which has its own internal | ||
* delay between iterations. | ||
*/ | ||
protected abstract long getMinDelayBeforeNextRunInMillis(); | ||
|
||
/** | ||
* Indicates whether this task needs to keep running in future iterations or not. | ||
* | ||
* @return false if this task needs to be called again in the future, true otherwise. | ||
*/ | ||
public abstract boolean isFinished(); | ||
|
||
private boolean isReadyToRun() { | ||
if (lastTimeItRan < 1) { | ||
return true; | ||
} | ||
return timeProvider.getCurrentTimeMillis() >= (lastTimeItRan + getMinDelayBeforeNextRunInMillis()); | ||
} | ||
} |
Oops, something went wrong.