Reduced amount of settings data stored in datapoints table to reduce storage. Modified sdserver so that remote logging is disabled when using network datasource to avoid duplication of data.

This commit is contained in:
Graham Jones
2022-04-12 17:05:55 +01:00
parent 3e9ec5ed81
commit 0d772f230b
92 changed files with 113 additions and 44 deletions

View File

@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="uk.org.openseizuredetector"
android:versionCode="100"
android:versionName="4.0.4">
android:versionName="4.0.4a">
<!-- android:allowBackup="false" -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

View File

@@ -289,7 +289,7 @@ public class LogManager {
+ " VALUES("
+ "'" + dateStr + "',"
+ sdData.alarmState + ","
+ DatabaseUtils.sqlEscapeString(sdData.toJSON(true)) + ","
+ DatabaseUtils.sqlEscapeString(sdData.toDatapointJSON()) + ","
+ 0
+ ")";
mOsdDb.execSQL(SQLStr);
@@ -314,7 +314,7 @@ public class LogManager {
public boolean createLocalEvent(String dataTime, long status, String type, String subType, String desc, String dataJSON) {
// Expects dataTime to be in format: SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Log.d(TAG, "createLocalEvent() - dataTime=" + dataTime + ", status=" + status + ", dataJSON="+dataJSON);
// Write Datapoint to database
// Write Event to database
String SQLStr = "INSERT INTO " + mEventsTableName
+ "(dataTime, status, type, subtype, notes, dataJSON)"
+ " VALUES("

View File

@@ -139,12 +139,12 @@ public class SdData implements Parcelable {
alarmPhrase = jo.optString("alarmPhrase");
alarmThresh = jo.optInt("alarmThresh");
alarmRatioThresh = jo.optInt("alarmRatioThresh");
mHRAlarmActive=jo.optBoolean("hrAlarmActive");
mHRAlarmActive = jo.optBoolean("hrAlarmActive");
mHRAlarmStanding = jo.optBoolean("hrAlarmStanding");
mHRThreshMin = jo.optDouble("hrThreshMin");
mHRThreshMax = jo.optDouble("hrThreshMax");
mHR = jo.optDouble("hr");
if (mHR>=0.0) {
if (mHR >= 0.0) {
mHRAlarmActive = true;
}
JSONArray specArr = jo.optJSONArray("simpleSpec");
@@ -155,7 +155,7 @@ public class SdData implements Parcelable {
Log.v(TAG, "fromJSON(): sdData = " + this.toString());
return true;
} catch (Exception e) {
Log.v(TAG, "fromJSON() - error parsing result"+e.toString());
Log.v(TAG, "fromJSON() - error parsing result" + e.toString());
haveData = false;
return false;
}
@@ -170,6 +170,49 @@ public class SdData implements Parcelable {
return toDataString(includeRawData);
}
public String toDatapointJSON() {
String retval;
retval = "SdData.toDatapointJSON() Output";
try {
JSONObject jsonObj = new JSONObject();
if (dataTime != null) {
jsonObj.put("dataTime", dataTime.format("%d-%m-%Y %H:%M:%S"));
jsonObj.put("dataTimeStr", dataTime.format("%Y%m%dT%H%M%S"));
} else {
jsonObj.put("dataTimeStr", "00000000T000000");
jsonObj.put("dataTime", "00-00-00 00:00:00");
}
Log.v(TAG, "mSdData.dataTime = " + dataTime);
jsonObj.put("maxVal", maxVal);
jsonObj.put("maxFreq", maxFreq);
jsonObj.put("specPower", specPower);
jsonObj.put("roiPower", roiPower);
jsonObj.put("roiRatio", 10 * roiPower / specPower);
jsonObj.put("alarmState", alarmState);
jsonObj.put("alarmPhrase", alarmPhrase);
jsonObj.put("hr", mHR);
jsonObj.put("o2Sat", mO2Sat);
JSONArray arr = new JSONArray();
for (int i = 0; i < simpleSpec.length; i++) {
arr.put(simpleSpec[i]);
}
jsonObj.put("simpleSpec", arr);
JSONArray rawArr = new JSONArray();
for (int i = 0; i < rawData.length; i++) {
rawArr.put(rawData[i]);
}
jsonObj.put("rawData", rawArr);
retval = jsonObj.toString();
} catch (Exception ex) {
Log.v(TAG, "Error Creating Data Object - " + ex.toString());
retval = "Error Creating Data Object - " + ex.toString();
}
return (retval);
}
public String toSettingsJSON() {
String retval;
retval = "SdData.toSettingsJSON() Output";
@@ -178,31 +221,31 @@ public class SdData implements Parcelable {
if (dataTime != null) {
jsonObj.put("dataTime", dataTime.format("%d-%m-%Y %H:%M:%S"));
jsonObj.put("dataTimeStr", dataTime.format("%Y%m%dT%H%M%S"));
}else{
} else {
jsonObj.put("dataTimeStr", "00000000T000000");
jsonObj.put("dataTime", "00-00-00 00:00:00");
}
jsonObj.put("batteryPc", batteryPc);
jsonObj.put("alarmState", alarmState);
jsonObj.put("alarmPhrase", alarmPhrase);
jsonObj.put("sdMode",mSdMode);
jsonObj.put("sampleFreq",mSampleFreq);
jsonObj.put("analysisPeriod",analysisPeriod);
jsonObj.put("alarmFreqMin",alarmFreqMin);
jsonObj.put("alarmFreqMax",alarmFreqMax);
jsonObj.put("sdMode", mSdMode);
jsonObj.put("sampleFreq", mSampleFreq);
jsonObj.put("analysisPeriod", analysisPeriod);
jsonObj.put("alarmFreqMin", alarmFreqMin);
jsonObj.put("alarmFreqMax", alarmFreqMax);
jsonObj.put("alarmThresh", alarmThresh);
jsonObj.put("alarmRatioThresh", alarmRatioThresh);
jsonObj.put("hrAlarmActive", mHRAlarmActive);
jsonObj.put("hrAlarmStanding", mHRAlarmStanding);
jsonObj.put("hrThreshMin",mHRThreshMin);
jsonObj.put("hrThreshMin", mHRThreshMin);
jsonObj.put("hrThreshMax", mHRThreshMax);
jsonObj.put("o2SatAlarmActive", mO2SatAlarmActive);
jsonObj.put("o2SatAlarmStanding", mO2SatAlarmStanding);
jsonObj.put("o2SatThreshMin",mO2SatThreshMin);
jsonObj.put("watchPartNo",watchPartNo);
jsonObj.put("watchSdName",watchSdName);
jsonObj.put("watchFwVersion",watchFwVersion);
jsonObj.put("watchSdVersion",watchSdVersion);
jsonObj.put("o2SatThreshMin", mO2SatThreshMin);
jsonObj.put("watchPartNo", watchPartNo);
jsonObj.put("watchSdName", watchSdName);
jsonObj.put("watchFwVersion", watchFwVersion);
jsonObj.put("watchSdVersion", watchSdVersion);
retval = jsonObj.toString();
} catch (Exception ex) {
@@ -220,7 +263,7 @@ public class SdData implements Parcelable {
if (dataTime != null) {
jsonObj.put("dataTime", dataTime.format("%d-%m-%Y %H:%M:%S"));
jsonObj.put("dataTimeStr", dataTime.format("%Y%m%dT%H%M%S"));
}else{
} else {
jsonObj.put("dataTimeStr", "00000000T000000");
jsonObj.put("dataTime", "00-00-00 00:00:00");
}
@@ -235,22 +278,22 @@ public class SdData implements Parcelable {
jsonObj.put("haveSettings", haveSettings);
jsonObj.put("alarmState", alarmState);
jsonObj.put("alarmPhrase", alarmPhrase);
jsonObj.put("sdMode",mSdMode);
jsonObj.put("sampleFreq",mSampleFreq);
jsonObj.put("analysisPeriod",analysisPeriod);
jsonObj.put("alarmFreqMin",alarmFreqMin);
jsonObj.put("alarmFreqMax",alarmFreqMax);
jsonObj.put("sdMode", mSdMode);
jsonObj.put("sampleFreq", mSampleFreq);
jsonObj.put("analysisPeriod", analysisPeriod);
jsonObj.put("alarmFreqMin", alarmFreqMin);
jsonObj.put("alarmFreqMax", alarmFreqMax);
jsonObj.put("alarmThresh", alarmThresh);
jsonObj.put("alarmRatioThresh", alarmRatioThresh);
jsonObj.put("hrAlarmActive", mHRAlarmActive);
jsonObj.put("hrAlarmStanding", mHRAlarmStanding);
jsonObj.put("hrThreshMin",mHRThreshMin);
jsonObj.put("hrThreshMin", mHRThreshMin);
jsonObj.put("hrThreshMax", mHRThreshMax);
jsonObj.put("hr",mHR);
jsonObj.put("hr", mHR);
jsonObj.put("o2SatAlarmActive", mO2SatAlarmActive);
jsonObj.put("o2SatAlarmStanding", mO2SatAlarmStanding);
jsonObj.put("o2SatThreshMin",mO2SatThreshMin);
jsonObj.put("o2Sat",mO2Sat);
jsonObj.put("o2SatThreshMin", mO2SatThreshMin);
jsonObj.put("o2Sat", mO2Sat);
JSONArray arr = new JSONArray();
for (int i = 0; i < simpleSpec.length; i++) {
arr.put(simpleSpec[i]);
@@ -258,10 +301,10 @@ public class SdData implements Parcelable {
jsonObj.put("simpleSpec", arr);
if (includeRawData) {
JSONArray rawArr = new JSONArray();
for (int i = 0; i< rawData.length;i++) {
for (int i = 0; i < rawData.length; i++) {
rawArr.put(rawData[i]);
}
jsonObj.put("rawData",rawArr);
jsonObj.put("rawData", rawArr);
}
retval = jsonObj.toString();
@@ -279,7 +322,7 @@ public class SdData implements Parcelable {
retval = "";
if (dataTime != null) {
retval = dataTime.format("%d-%m-%Y %H:%M:%S");
}else{
} else {
retval = "00-00-00 00:00:00";
}
for (int i = 0; i < simpleSpec.length; i++) {
@@ -292,31 +335,35 @@ public class SdData implements Parcelable {
retval = retval + ", " + mHR;
retval = retval + ", " + mO2Sat;
if (includeRawData) {
for (int i = 0; i< mNsamp;i++) {
for (int i = 0; i < mNsamp; i++) {
retval = retval + ", " + rawData[i];
}
}
return(retval);
return (retval);
}
/** Return the average acceleration value in the dataset */
/**
* Return the average acceleration value in the dataset
*/
public double getAvAcc() {
double sumAcc = 0.0;
for (int i = 0; i< mNsamp;i++) {
for (int i = 0; i < mNsamp; i++) {
sumAcc += rawData[i];
}
return(sumAcc/mNsamp);
return (sumAcc / mNsamp);
}
/** Return the standard deviation of the acceleration values */
/**
* Return the standard deviation of the acceleration values
*/
public double getSdAcc() {
double avAcc = 0.0;
double varAcc = 0.0;
avAcc = getAvAcc();
for (int i = 0; i< mNsamp;i++) {
varAcc += Math.pow(rawData[i]-avAcc,2);
for (int i = 0; i < mNsamp; i++) {
varAcc += Math.pow(rawData[i] - avAcc, 2);
}
return(Math.sqrt(varAcc/(mNsamp-1)));
return (Math.sqrt(varAcc / (mNsamp - 1)));
}

View File

@@ -227,10 +227,6 @@ public class SdServer extends Service implements SdDataReceiver {
Log.v(TAG, "onStartCommand() - calling updatePrefs()");
updatePrefs();
// Create our log manager.
mLm = new LogManager(this, mLogDataRemote, mLogDataRemoteMobile, mAuthToken, mEventDuration,
mRemoteLogPeriod, mAutoPruneDb, mDataRetentionPeriod);
Log.v(TAG, "onStartCommand: Datasource =" + mSdDataSourceName);
switch (mSdDataSourceName) {
case "Pebble":
@@ -247,6 +243,8 @@ public class SdServer extends Service implements SdDataReceiver {
Log.v(TAG, "Selecting Network DataSource");
mUtil.writeToSysLogFile("SdServer.onStartCommand() - creating SdDataSourceNetwork");
mSdDataSource = new SdDataSourceNetwork(this.getApplicationContext(), mHandler, this);
Log.i(TAG,"Disabling remote logging when using network data source");
mLogDataRemote = false;
break;
case "Garmin":
Log.v(TAG, "Selecting Garmin DataSource");
@@ -271,6 +269,10 @@ public class SdServer extends Service implements SdDataReceiver {
mSdDataSource = new SdDataSourcePhone(this.getApplicationContext(), mHandler, this);
}
// Create our log manager.
mLm = new LogManager(this, mLogDataRemote, mLogDataRemoteMobile, mAuthToken, mEventDuration,
mRemoteLogPeriod, mAutoPruneDb, mDataRetentionPeriod);
if (mSMSAlarm) {
Log.v(TAG, "Creating LocationFinder");
mLocationFinder = new LocationFinder(getApplicationContext());