{"sha":"9aa99c7f52ddba59c67d5929c8e718c0daed22e8","node_id":"MDY6Q29tbWl0NTQzNTAxMzE6OWFhOTljN2Y1MmRkYmE1OWM2N2Q1OTI5YzhlNzE4YzBkYWVkMjJlOA==","commit":{"author":{"name":"Chris J. Karr","email":"chris@audacious-software.com","date":"2019-05-27T02:17:17Z"},"committer":{"name":"Chris J. Karr","email":"chris@audacious-software.com","date":"2019-05-27T02:17:17Z"},"message":"Added pending transmissions to system status reports.\n\n* Added ability for app events table to clear itself when out of disk space.","tree":{"sha":"9174ede7cb6eca4ea03c44a5a26bb6c990eb3495","url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/git/trees/9174ede7cb6eca4ea03c44a5a26bb6c990eb3495"},"url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/git/commits/9aa99c7f52ddba59c67d5929c8e718c0daed22e8","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null}},"url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/commits/9aa99c7f52ddba59c67d5929c8e718c0daed22e8","html_url":"https://github.com/audacious-software/PassiveDataKit-Android/commit/9aa99c7f52ddba59c67d5929c8e718c0daed22e8","comments_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/commits/9aa99c7f52ddba59c67d5929c8e718c0daed22e8/comments","author":{"login":"audaciouscode","id":1141048,"node_id":"MDQ6VXNlcjExNDEwNDg=","avatar_url":"https://avatars.githubusercontent.com/u/1141048?v=4","gravatar_id":"","url":"https://api.github.com/users/audaciouscode","html_url":"https://github.com/audaciouscode","followers_url":"https://api.github.com/users/audaciouscode/followers","following_url":"https://api.github.com/users/audaciouscode/following{/other_user}","gists_url":"https://api.github.com/users/audaciouscode/gists{/gist_id}","starred_url":"https://api.github.com/users/audaciouscode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/audaciouscode/subscriptions","organizations_url":"https://api.github.com/users/audaciouscode/orgs","repos_url":"https://api.github.com/users/audaciouscode/repos","events_url":"https://api.github.com/users/audaciouscode/events{/privacy}","received_events_url":"https://api.github.com/users/audaciouscode/received_events","type":"User","site_admin":false},"committer":{"login":"audaciouscode","id":1141048,"node_id":"MDQ6VXNlcjExNDEwNDg=","avatar_url":"https://avatars.githubusercontent.com/u/1141048?v=4","gravatar_id":"","url":"https://api.github.com/users/audaciouscode","html_url":"https://github.com/audaciouscode","followers_url":"https://api.github.com/users/audaciouscode/followers","following_url":"https://api.github.com/users/audaciouscode/following{/other_user}","gists_url":"https://api.github.com/users/audaciouscode/gists{/gist_id}","starred_url":"https://api.github.com/users/audaciouscode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/audaciouscode/subscriptions","organizations_url":"https://api.github.com/users/audaciouscode/orgs","repos_url":"https://api.github.com/users/audaciouscode/repos","events_url":"https://api.github.com/users/audaciouscode/events{/privacy}","received_events_url":"https://api.github.com/users/audaciouscode/received_events","type":"User","site_admin":false},"parents":[{"sha":"26cf4cda9f99190bf1b3e1a6a3a8381d42f1723e","url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/commits/26cf4cda9f99190bf1b3e1a6a3a8381d42f1723e","html_url":"https://github.com/audacious-software/PassiveDataKit-Android/commit/26cf4cda9f99190bf1b3e1a6a3a8381d42f1723e"}],"stats":{"total":51,"additions":44,"deletions":7},"files":[{"sha":"debcae122f9b69ee6fb8ce7424081dc907780a29","filename":"res/values/databases.xml","status":"modified","additions":1,"deletions":0,"changes":1,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/9aa99c7f52ddba59c67d5929c8e718c0daed22e8/res%2Fvalues%2Fdatabases.xml","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/9aa99c7f52ddba59c67d5929c8e718c0daed22e8/res%2Fvalues%2Fdatabases.xml","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/res%2Fvalues%2Fdatabases.xml?ref=9aa99c7f52ddba59c67d5929c8e718c0daed22e8","patch":"@@ -44,6 +44,7 @@\n ALTER TABLE history ADD system_runtime INTEGER;\r\n ALTER TABLE history ADD gps_enabled INTEGER;\r\n ALTER TABLE history ADD network_enabled INTEGER;\r\n+ ALTER TABLE history ADD pending_transmissions INTEGER;\r\n \r\n \r\n CREATE TABLE history(_id INTEGER PRIMARY KEY AUTOINCREMENT, fetched INTEGER, transmitted INTEGER, observed INTEGER, latitude REAL, longitude REAL, timezone TEXT, sunrise INTEGER, sunset INTEGER);\r"},{"sha":"3a1de41a703daa26e3b12a982425c29b461b70db","filename":"src/com/audacious_software/passive_data_kit/generators/diagnostics/AppEvent.java","status":"modified","additions":30,"deletions":6,"changes":36,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/9aa99c7f52ddba59c67d5929c8e718c0daed22e8/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FAppEvent.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/9aa99c7f52ddba59c67d5929c8e718c0daed22e8/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FAppEvent.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FAppEvent.java?ref=9aa99c7f52ddba59c67d5929c8e718c0daed22e8","patch":"@@ -6,6 +6,7 @@\n import android.content.SharedPreferences;\r\n import android.database.Cursor;\r\n import android.database.sqlite.SQLiteDatabase;\r\n+import android.database.sqlite.SQLiteFullException;\r\n import android.os.Bundle;\r\n import android.preference.PreferenceManager;\r\n import android.view.LayoutInflater;\r\n@@ -31,8 +32,6 @@\n import java.io.PrintWriter;\r\n import java.io.StringWriter;\r\n import java.util.ArrayList;\r\n-import java.util.Calendar;\r\n-import java.util.Date;\r\n import java.util.HashMap;\r\n import java.util.List;\r\n import java.util.Map;\r\n@@ -94,12 +93,18 @@ public static AppEvent getInstance(Context context) {\n public AppEvent(Context context) {\r\n super(context);\r\n \r\n- File path = PassiveDataKit.getGeneratorsStorage(this.mContext);\r\n+ this.openDatabase();\r\n \r\n- path = new File(path, AppEvent.DATABASE_PATH);\r\n+ this.flushCachedData();\r\n+ }\r\n \r\n+ private void openDatabase() {\r\n this.mWorking = true;\r\n \r\n+ File path = PassiveDataKit.getGeneratorsStorage(this.mContext);\r\n+\r\n+ path = new File(path, AppEvent.DATABASE_PATH);\r\n+\r\n this.mDatabase = SQLiteDatabase.openOrCreateDatabase(path, null);\r\n \r\n int version = this.getDatabaseVersion(this.mDatabase);\r\n@@ -114,10 +119,25 @@ public AppEvent(Context context) {\n }\r\n \r\n this.mWorking = false;\r\n+ }\r\n \r\n- this.flushCachedData();\r\n+ private void resetDatabase() {\r\n+ this.mWorking = true;\r\n+\r\n+ this.mDatabase.close();\r\n+\r\n+ File path = PassiveDataKit.getGeneratorsStorage(this.mContext);\r\n+\r\n+ path = new File(path, AppEvent.DATABASE_PATH);\r\n+\r\n+ path.delete();\r\n+\r\n+ this.openDatabase();\r\n+\r\n+ this.mWorking = false;\r\n }\r\n \r\n+\r\n @SuppressWarnings(\"unused\")\r\n public static void start(final Context context) {\r\n AppEvent.getInstance(context).startGenerator();\r\n@@ -566,7 +586,11 @@ public void run() {\n where = AppEvent.HISTORY_OBSERVED + \" < ?\";\r\n args[0] = \"\" + start;\r\n \r\n- int deleted = me.mDatabase.delete(AppEvent.TABLE_HISTORY, where, args);\r\n+ try {\r\n+ me.mDatabase.delete(AppEvent.TABLE_HISTORY, where, args);\r\n+ } catch (SQLiteFullException ex) {\r\n+ me.resetDatabase();\r\n+ }\r\n \r\n me.mWorking = false;\r\n }\r"},{"sha":"3e3275c6898e302ea7185efb9d8f4d59717d6ce3","filename":"src/com/audacious_software/passive_data_kit/generators/diagnostics/SystemStatus.java","status":"modified","additions":13,"deletions":1,"changes":14,"blob_url":"https://github.com/audacious-software/PassiveDataKit-Android/blob/9aa99c7f52ddba59c67d5929c8e718c0daed22e8/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FSystemStatus.java","raw_url":"https://github.com/audacious-software/PassiveDataKit-Android/raw/9aa99c7f52ddba59c67d5929c8e718c0daed22e8/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FSystemStatus.java","contents_url":"https://api.github.com/repos/audacious-software/PassiveDataKit-Android/contents/src%2Fcom%2Faudacious_software%2Fpassive_data_kit%2Fgenerators%2Fdiagnostics%2FSystemStatus.java?ref=9aa99c7f52ddba59c67d5929c8e718c0daed22e8","patch":"@@ -30,6 +30,7 @@\n import com.audacious_software.passive_data_kit.diagnostics.DiagnosticAction;\r\n import com.audacious_software.passive_data_kit.generators.Generator;\r\n import com.audacious_software.passive_data_kit.generators.Generators;\r\n+import com.audacious_software.passive_data_kit.transmitters.Transmitter;\r\n import com.audacious_software.pdk.passivedatakit.R;\r\n import com.github.mikephil.charting.charts.LineChart;\r\n import com.github.mikephil.charting.components.AxisBase;\r\n@@ -68,7 +69,7 @@ public class SystemStatus extends Generator {\n private static final String ACTION_HEARTBEAT = \"com.audacious_software.passive_data_kit.generators.diagnostics.SystemStatus.ACTION_HEARTBEAT\";\r\n \r\n private static final String DATABASE_PATH = \"pdk-system-status.sqlite\";\r\n- private static final int DATABASE_VERSION = 3;\r\n+ private static final int DATABASE_VERSION = 4;\r\n \r\n private static final String TABLE_HISTORY = \"history\";\r\n \r\n@@ -82,6 +83,7 @@ public class SystemStatus extends Generator {\n private static final String HISTORY_STORAGE_PATH = \"storage_path\";\r\n private static final String HISTORY_LOCATION_GPS_ENABLED = \"gps_enabled\";\r\n private static final String HISTORY_LOCATION_NETWORK_ENABLED = \"network_enabled\";\r\n+ private static final String HISTORY_PENDING_TRANSMISSIONS = \"pending_transmissions\";\r\n \r\n private static final double GIGABYTE = (1024 * 1024 * 1024);\r\n \r\n@@ -139,6 +141,8 @@ private void startGenerator() {\n case 2:\r\n this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_diagnostics_system_status_history_table_add_gps_enabled));\r\n this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_diagnostics_system_status_history_table_add_network_enabled));\r\n+ case 3:\r\n+ this.mDatabase.execSQL(this.mContext.getString(R.string.pdk_generator_diagnostics_system_status_history_table_add_pending_transmissions));\r\n }\r\n \r\n if (version != SystemStatus.DATABASE_VERSION) {\r\n@@ -175,6 +179,12 @@ public void run() {\n \r\n long systemRuntime = SystemClock.elapsedRealtime();\r\n \r\n+ long pendingTransmissions = 0;\r\n+\r\n+ for (Transmitter transmitter : Generators.getInstance(context).activeTransmitters()) {\r\n+ pendingTransmissions += transmitter.pendingTransmissions();\r\n+ }\r\n+\r\n ContentValues values = new ContentValues();\r\n values.put(SystemStatus.HISTORY_OBSERVED, now);\r\n values.put(SystemStatus.HISTORY_RUNTIME, now - runtimeStart);\r\n@@ -184,6 +194,7 @@ public void run() {\n values.put(SystemStatus.HISTORY_STORAGE_AVAILABLE, bytesAvailable);\r\n values.put(SystemStatus.HISTORY_STORAGE_USED_APP, bytesAppUsed);\r\n values.put(SystemStatus.HISTORY_STORAGE_USED_OTHER, bytesOtherUsed);\r\n+ values.put(SystemStatus.HISTORY_PENDING_TRANSMISSIONS, pendingTransmissions);\r\n \r\n Bundle update = new Bundle();\r\n update.putLong(SystemStatus.HISTORY_OBSERVED, now);\r\n@@ -194,6 +205,7 @@ public void run() {\n update.putLong(SystemStatus.HISTORY_STORAGE_AVAILABLE, bytesAvailable);\r\n update.putLong(SystemStatus.HISTORY_STORAGE_USED_APP, bytesAppUsed);\r\n update.putLong(SystemStatus.HISTORY_STORAGE_USED_OTHER, bytesOtherUsed);\r\n+ update.putLong(SystemStatus.HISTORY_PENDING_TRANSMISSIONS, pendingTransmissions);\r\n \r\n if (ContextCompat.checkSelfPermission(me.mContext, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED ||\r\n ContextCompat.checkSelfPermission(me.mContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\r"}]}