From 9c1765355bbbb3f6cf370dfe2a078e3794509c10 Mon Sep 17 00:00:00 2001 From: Jamorham <jamorham@users.noreply.github.com> Date: Fri, 18 Nov 2016 16:17:38 +0000 Subject: [PATCH] PebbleMovement: Improve data storage efficiency --- .../dexdrip/Models/PebbleMovement.java | 27 ++++++++++++++++++ .../dexdrip/Services/DailyIntentService.java | 8 +++++- .../UtilityModels/pebble/PebbleWatchSync.java | 5 +--- .../res/raw/xdrip_pebble_classic_trend.bin | Bin 64108 -> 64271 bytes 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/eveningoutpost/dexdrip/Models/PebbleMovement.java b/app/src/main/java/com/eveningoutpost/dexdrip/Models/PebbleMovement.java index 412d22dcca..a26bebba22 100644 --- a/app/src/main/java/com/eveningoutpost/dexdrip/Models/PebbleMovement.java +++ b/app/src/main/java/com/eveningoutpost/dexdrip/Models/PebbleMovement.java @@ -5,8 +5,10 @@ import com.activeandroid.Model; import com.activeandroid.annotation.Column; import com.activeandroid.annotation.Table; +import com.activeandroid.query.Delete; import com.activeandroid.query.Select; import com.activeandroid.util.SQLiteUtils; +import com.eveningoutpost.dexdrip.UtilityModels.BgGraphBuilder; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.Expose; @@ -24,6 +26,7 @@ public class PebbleMovement extends Model { private static boolean patched = false; private final static String TAG = "PebbleMovement"; + private final static boolean d = false; @Expose @Column(name = "timestamp", unique = true, onUniqueConflicts = Column.ConflictAction.IGNORE) @@ -50,6 +53,23 @@ public String toS() { // static methods + public static PebbleMovement createEfficientRecord(long timestamp_ms, int data) + { + PebbleMovement pm = last(); + if ((pm == null) || (data < pm.metric) || ((timestamp_ms - pm.timestamp) > (1000 * 30 * 5))) { + pm = new PebbleMovement(); + pm.timestamp = timestamp_ms; + if (d) UserError.Log.d(TAG,"Creating new record for timestamp: "+JoH.dateTimeText(timestamp_ms)); + } else { + if (d) UserError.Log.d(TAG,"Merging pebble movement record: "+JoH.dateTimeText(timestamp_ms)+" vs old "+JoH.dateTimeText(pm.timestamp)); + } + + pm.metric = (int) (long) data; + if(d) UserError.Log.d(TAG, "Saving Movement: " + pm.toS()); + pm.saveit(); + return pm; + } + public static PebbleMovement last() { try { return new Select() @@ -108,6 +128,13 @@ public static List<PebbleMovement> deltaListFromMovementList(List<PebbleMovement return mList; } + public static List<PebbleMovement> cleanup(int retention_days) { + return new Delete() + .from(PebbleMovement.class) + .where("timestamp < ?", JoH.tsl() - (retention_days * 86400000L)) + .execute(); + } + // create the table ourselves without worrying about model versioning and downgrading private static void fixUpTable() { diff --git a/app/src/main/java/com/eveningoutpost/dexdrip/Services/DailyIntentService.java b/app/src/main/java/com/eveningoutpost/dexdrip/Services/DailyIntentService.java index 59e961bd61..bd036346ce 100644 --- a/app/src/main/java/com/eveningoutpost/dexdrip/Services/DailyIntentService.java +++ b/app/src/main/java/com/eveningoutpost/dexdrip/Services/DailyIntentService.java @@ -4,7 +4,9 @@ import android.content.Intent; import android.os.PowerManager; +import com.eveningoutpost.dexdrip.Home; import com.eveningoutpost.dexdrip.Models.JoH; +import com.eveningoutpost.dexdrip.Models.PebbleMovement; import com.eveningoutpost.dexdrip.Models.UserError; import com.eveningoutpost.dexdrip.UtilityModels.BgSendQueue; import com.eveningoutpost.dexdrip.UtilityModels.CalibrationSendQueue; @@ -44,7 +46,11 @@ protected void onHandleIntent(Intent intent) { } catch (Exception e) { // } - + try { + PebbleMovement.cleanup(Home.getPreferencesInt("retention_pebble_movement", 180)); + } catch (Exception e) { + // + } try { checkForAnUpdate(getApplicationContext()); } catch (Exception e) { diff --git a/app/src/main/java/com/eveningoutpost/dexdrip/UtilityModels/pebble/PebbleWatchSync.java b/app/src/main/java/com/eveningoutpost/dexdrip/UtilityModels/pebble/PebbleWatchSync.java index 3d6eb97df2..94aeb2ab0f 100644 --- a/app/src/main/java/com/eveningoutpost/dexdrip/UtilityModels/pebble/PebbleWatchSync.java +++ b/app/src/main/java/com/eveningoutpost/dexdrip/UtilityModels/pebble/PebbleWatchSync.java @@ -205,11 +205,8 @@ public void receiveData(Context context, UUID logUuid, Long timestamp, } else { if (data > 0) { if (last_movement_timestamp > 0) { - final PebbleMovement pm = new PebbleMovement(); - pm.timestamp = last_movement_timestamp * 1000; - pm.metric = (int) (long) data; + final PebbleMovement pm = PebbleMovement.createEfficientRecord(last_movement_timestamp * 1000, (int)(long) data); Log.d(TAG, "Saving Movement: " + pm.toS()); - pm.saveit(); last_movement_timestamp = 0; // reset state } else { Log.e(TAG, "Out of sequence movement value received!"); diff --git a/app/src/main/res/raw/xdrip_pebble_classic_trend.bin b/app/src/main/res/raw/xdrip_pebble_classic_trend.bin index b90071bc5664c9bf5e5e38688970f983b2f7cd42..39d80722906c5697694d43865a6f6338b871c073 100644 GIT binary patch delta 14772 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 HjWqE;^rIu9 delta 14698 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