Skip to content

Commit 78a496f

Browse files
authored
Merge pull request #3496 from dimagi/hotfix_add-file-cryptographic-operations-perf-monitoring-trace
[Hotfix] Add perf monitoring trace for file encryption time
2 parents dd74a99 + 9aa8df9 commit 78a496f

File tree

5 files changed

+41
-2
lines changed

5 files changed

+41
-2
lines changed

app/src/org/commcare/google/services/analytics/CCPerfMonitoring.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.commcare.google.services.analytics
22

33
import com.google.firebase.perf.FirebasePerformance
44
import com.google.firebase.perf.metrics.Trace
5+
import org.apache.commons.io.FilenameUtils
56
import org.commcare.android.logging.ReportingUtils
67
import org.javarosa.core.services.Logger
78

@@ -12,6 +13,7 @@ object CCPerfMonitoring {
1213
const val TRACE_APP_SYNC_DURATION = "app_sync_duration"
1314
const val TRACE_CASE_SEARCH_TIME = "case_search_time"
1415
const val TRACE_FORM_LOADING_TIME = "form_loading_time"
16+
const val TRACE_FILE_ENCRYPTION_TIME = "file_encryption_time"
1517

1618
// Attributes
1719
const val ATTR_NUM_CASES_LOADED = "number_of_cases_loaded"
@@ -22,6 +24,8 @@ object CCPerfMonitoring {
2224
const val ATTR_SYNC_TYPE = "sync_type"
2325
const val ATTR_FORM_NAME = "form_name"
2426
const val ATTR_FORM_XMLNS = "form_xmlns"
27+
const val ATTR_FILE_SIZE_BYTES = "file_size_bytes"
28+
const val ATTR_FILE_TYPE = "file_type"
2529

2630
fun startTracing(traceName: String): Trace? {
2731
try {
@@ -46,4 +50,16 @@ object CCPerfMonitoring {
4650
Logger.exception("Error stopping perf trace: ${trace.name}", exception)
4751
}
4852
}
53+
54+
fun stopFileEncryptionTracing(trace: Trace, fileSizeBytes: Long, fileName: String) {
55+
try {
56+
val attrs: MutableMap<String, String> = HashMap()
57+
attrs[ATTR_FILE_SIZE_BYTES] = fileSizeBytes.toString()
58+
attrs[ATTR_FILE_TYPE] = FilenameUtils.getExtension(fileName)
59+
stopTracing(trace, attrs)
60+
} catch (e: java.lang.Exception) {
61+
Logger.exception("Failed to stop tracing: ${trace.name}", e)
62+
}
63+
}
64+
4965
}

app/src/org/commcare/models/database/HybridFileBackedSqlStorage.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import android.content.ContentValues;
44
import android.database.Cursor;
55

6+
import com.google.firebase.perf.metrics.Trace;
7+
68
import org.commcare.CommCareApplication;
9+
import org.commcare.google.services.analytics.CCPerfMonitoring;
710
import org.commcare.interfaces.AppFilePathBuilder;
811
import org.commcare.models.encryption.EncryptionIO;
912
import org.commcare.modern.database.DatabaseHelper;
@@ -328,6 +331,8 @@ protected byte[] generateKeyAndAdd(ContentValues contentValues) {
328331

329332
private void writeStreamToFile(ByteArrayOutputStream bos, String filename,
330333
byte[] key) throws IOException {
334+
Trace trace = CCPerfMonitoring.INSTANCE.startTracing(CCPerfMonitoring.TRACE_FILE_ENCRYPTION_TIME);
335+
331336
DataOutputStream fileOutputStream = null;
332337
try {
333338
fileOutputStream = getOutputFileStream(filename, key);
@@ -340,6 +345,7 @@ private void writeStreamToFile(ByteArrayOutputStream bos, String filename,
340345
e.printStackTrace();
341346
}
342347
}
348+
CCPerfMonitoring.INSTANCE.stopFileEncryptionTracing(trace, bos.size(), filename);
343349
}
344350
}
345351

app/src/org/commcare/models/encryption/EncryptionIO.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.commcare.models.encryption;
22

3+
import com.google.firebase.perf.metrics.Trace;
4+
5+
import org.commcare.google.services.analytics.CCPerfMonitoring;
36
import org.commcare.util.LogTypes;
47
import org.javarosa.core.io.StreamsUtil;
58
import org.javarosa.core.services.Logger;
@@ -10,6 +13,7 @@
1013
import java.io.FileInputStream;
1114
import java.io.FileNotFoundException;
1215
import java.io.FileOutputStream;
16+
import java.io.IOException;
1317
import java.io.InputStream;
1418
import java.io.OutputStream;
1519
import java.security.InvalidKeyException;
@@ -28,13 +32,17 @@
2832
*/
2933
public class EncryptionIO {
3034

31-
public static void encryptFile(String sourceFilePath, String destPath, SecretKeySpec symetricKey) throws FileNotFoundException,
32-
StreamsUtil.InputIOException, StreamsUtil.OutputIOException {
35+
public static void encryptFile(String sourceFilePath, String destPath, SecretKeySpec symetricKey) throws IOException {
36+
Trace trace = CCPerfMonitoring.INSTANCE.startTracing(CCPerfMonitoring.TRACE_FILE_ENCRYPTION_TIME);
37+
3338
OutputStream os;
3439
FileInputStream is;
3540
os = createFileOutputStream(destPath, symetricKey);
3641
is = new FileInputStream(sourceFilePath);
42+
int fileSize = is.available();
3743
StreamsUtil.writeFromInputToOutputNew(is, os);
44+
45+
CCPerfMonitoring.INSTANCE.stopFileEncryptionTracing(trace, fileSize, sourceFilePath);
3846
}
3947

4048
public static OutputStream createFileOutputStream(String filename,

app/src/org/commcare/tasks/SaveToDiskTask.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package org.commcare.tasks;
22

3+
import com.google.firebase.perf.metrics.Trace;
4+
35
import org.commcare.CommCareApplication;
46
import org.commcare.activities.FormEntryActivity;
57
import org.commcare.activities.components.ImageCaptureProcessing;
68
import org.commcare.android.database.app.models.FormDefRecord;
79
import org.commcare.android.database.user.models.FormRecord;
810
import org.commcare.android.logging.ForceCloseLogger;
11+
import org.commcare.google.services.analytics.CCPerfMonitoring;
912
import org.commcare.interfaces.FormSavedListener;
1013
import org.commcare.logging.XPathErrorLogger;
1114
import org.commcare.models.database.SqlStorage;
@@ -36,6 +39,8 @@
3639

3740
import javax.crypto.spec.SecretKeySpec;
3841

42+
import static org.commcare.utils.FileUtil.XML_EXTENSION;
43+
3944
/**
4045
* @author Carl Hartung (carlhartung@gmail.com)
4146
* @author Yaw Anokwa (yanokwa@gmail.com)
@@ -257,11 +262,14 @@ private void exportData(boolean markCompleted)
257262
}
258263

259264
private void writeXmlToStream(ByteArrayPayload payload, OutputStream output) throws IOException {
265+
Trace trace = CCPerfMonitoring.INSTANCE.startTracing(CCPerfMonitoring.TRACE_FILE_ENCRYPTION_TIME);
266+
260267
try {
261268
InputStream is = payload.getPayloadStream();
262269
StreamsUtil.writeFromInputToOutput(is, output);
263270
} finally {
264271
output.close();
272+
CCPerfMonitoring.INSTANCE.stopFileEncryptionTracing(trace, payload.getLength(), XML_EXTENSION);
265273
}
266274
}
267275

app/src/org/commcare/utils/FileUtil.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public class FileUtil {
6767
private static final int WARNING_SIZE = 3000;
6868

6969
private static final String LOG_TOKEN = "cc-file-util";
70+
public static final String XML_EXTENSION = "xml";
7071

7172
private static final String[] EXIF_TAGS = {
7273
ExifInterface.TAG_GPS_LATITUDE,

0 commit comments

Comments
 (0)