use of android.os.DropBoxManager in project android_frameworks_base by AOSPA.
the class BootReceiver method logBootEvents.
private void logBootEvents(Context ctx) throws IOException {
final DropBoxManager db = (DropBoxManager) ctx.getSystemService(Context.DROPBOX_SERVICE);
final String headers = getBootHeadersToLogAndUpdate();
final String bootReason = SystemProperties.get("ro.boot.bootreason", null);
String recovery = RecoverySystem.handleAftermath(ctx);
if (recovery != null && db != null) {
db.addText("SYSTEM_RECOVERY_LOG", headers + recovery);
}
String lastKmsgFooter = "";
if (bootReason != null) {
lastKmsgFooter = new StringBuilder(512).append("\n").append("Boot info:\n").append("Last boot reason: ").append(bootReason).append("\n").toString();
}
HashMap<String, Long> timestamps = readTimestamps();
if (SystemProperties.getLong("ro.runtime.firstboot", 0) == 0) {
if (StorageManager.inCryptKeeperBounce()) {
// Encrypted, first boot to get PIN/pattern/password so data is tmpfs
// Don't set ro.runtime.firstboot so that we will do this again
// when data is properly mounted
} else {
String now = Long.toString(System.currentTimeMillis());
SystemProperties.set("ro.runtime.firstboot", now);
}
if (db != null)
db.addText("SYSTEM_BOOT", headers);
// Negative sizes mean to take the *tail* of the file (see FileUtils.readTextFile())
addFileWithFootersToDropBox(db, timestamps, headers, lastKmsgFooter, "/proc/last_kmsg", -LOG_SIZE, "SYSTEM_LAST_KMSG");
addFileWithFootersToDropBox(db, timestamps, headers, lastKmsgFooter, "/sys/fs/pstore/console-ramoops", -LOG_SIZE, "SYSTEM_LAST_KMSG");
addFileToDropBox(db, timestamps, headers, "/cache/recovery/log", -LOG_SIZE, "SYSTEM_RECOVERY_LOG");
addFileToDropBox(db, timestamps, headers, "/cache/recovery/last_kmsg", -LOG_SIZE, "SYSTEM_RECOVERY_KMSG");
addAuditErrorsToDropBox(db, timestamps, headers, -LOG_SIZE, "SYSTEM_AUDIT");
addFsckErrorsToDropBox(db, timestamps, headers, -LOG_SIZE, "SYSTEM_FSCK");
} else {
if (db != null)
db.addText("SYSTEM_RESTART", headers);
}
// Scan existing tombstones (in case any new ones appeared)
File[] tombstoneFiles = TOMBSTONE_DIR.listFiles();
for (int i = 0; tombstoneFiles != null && i < tombstoneFiles.length; i++) {
if (tombstoneFiles[i].isFile()) {
addFileToDropBox(db, timestamps, headers, tombstoneFiles[i].getPath(), LOG_SIZE, "SYSTEM_TOMBSTONE");
}
}
writeTimestamps(timestamps);
// Start watching for new tombstone files; will record them as they occur.
// This gets registered with the singleton file observer thread.
sTombstoneObserver = new FileObserver(TOMBSTONE_DIR.getPath(), FileObserver.CLOSE_WRITE) {
@Override
public void onEvent(int event, String path) {
HashMap<String, Long> timestamps = readTimestamps();
try {
File file = new File(TOMBSTONE_DIR, path);
if (file.isFile()) {
addFileToDropBox(db, timestamps, headers, file.getPath(), LOG_SIZE, "SYSTEM_TOMBSTONE");
}
} catch (IOException e) {
Slog.e(TAG, "Can't log tombstone", e);
}
writeTimestamps(timestamps);
}
};
sTombstoneObserver.startWatching();
}
use of android.os.DropBoxManager in project android_frameworks_base by ResurrectionRemix.
the class SamplingProfilerService method startWorking.
private void startWorking(Context context) {
if (LOCAL_LOGV)
Slog.v(TAG, "starting SamplingProfilerService!");
final DropBoxManager dropbox = (DropBoxManager) context.getSystemService(Context.DROPBOX_SERVICE);
// before FileObserver is ready, there could have already been some snapshots
// in the directory, we don't want to miss them
File[] snapshotFiles = new File(SNAPSHOT_DIR).listFiles();
for (int i = 0; snapshotFiles != null && i < snapshotFiles.length; i++) {
handleSnapshotFile(snapshotFiles[i], dropbox);
}
// detect new snapshot and put it in dropbox
// delete it afterwards no matter what happened before
// Note: needs listening at event ATTRIB rather than CLOSE_WRITE, because we set the
// readability of snapshot files after writing them!
snapshotObserver = new FileObserver(SNAPSHOT_DIR, FileObserver.ATTRIB) {
@Override
public void onEvent(int event, String path) {
handleSnapshotFile(new File(SNAPSHOT_DIR, path), dropbox);
}
};
snapshotObserver.startWatching();
if (LOCAL_LOGV)
Slog.v(TAG, "SamplingProfilerService activated");
}
use of android.os.DropBoxManager in project android_frameworks_base by ResurrectionRemix.
the class DropBoxTest method testAddEntriesInTheFuture.
public void testAddEntriesInTheFuture() throws Exception {
File dir = getEmptyDir("testAddEntriesInTheFuture");
long before = System.currentTimeMillis();
// Near future: should be allowed to persist
FileWriter w0 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 5000) + ".txt"));
w0.write("FUTURE0");
w0.close();
// Far future: should be collapsed
FileWriter w1 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 100000) + ".txt"));
w1.write("FUTURE1");
w1.close();
// Another far future item, this one gzipped
File f2 = new File(dir, "DropBoxTest@" + (before + 100001) + ".txt.gz");
GZIPOutputStream gz2 = new GZIPOutputStream(new FileOutputStream(f2));
gz2.write("FUTURE2".getBytes());
gz2.close();
// Tombstone in the far future
new FileOutputStream(new File(dir, "DropBoxTest@" + (before + 100002) + ".lost")).close();
DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
// Until a write, the timestamps are taken at face value
DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before);
DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis());
DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis());
DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis());
assertTrue(null == dropbox.getNextEntry(null, e3.getTimeMillis()));
assertEquals("FUTURE0", e0.getText(80));
assertEquals("FUTURE1", e1.getText(80));
assertEquals("FUTURE2", e2.getText(80));
assertEquals(null, e3.getText(80));
assertEquals(before + 5000, e0.getTimeMillis());
assertEquals(before + 100000, e1.getTimeMillis());
assertEquals(before + 100001, e2.getTimeMillis());
assertEquals(before + 100002, e3.getTimeMillis());
e0.close();
e1.close();
e2.close();
e3.close();
// Write something to force a collapse
dropbox.addText("NotDropBoxTest", "FUTURE");
e0 = dropbox.getNextEntry(null, before);
e1 = dropbox.getNextEntry(null, e0.getTimeMillis());
e2 = dropbox.getNextEntry(null, e1.getTimeMillis());
e3 = dropbox.getNextEntry(null, e2.getTimeMillis());
assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis()));
assertEquals("FUTURE0", e0.getText(80));
assertEquals("FUTURE1", e1.getText(80));
assertEquals("FUTURE2", e2.getText(80));
assertEquals(null, e3.getText(80));
assertEquals(before + 5000, e0.getTimeMillis());
assertEquals(before + 5001, e1.getTimeMillis());
assertEquals(before + 5002, e2.getTimeMillis());
assertEquals(before + 5003, e3.getTimeMillis());
e0.close();
e1.close();
e2.close();
e3.close();
}
use of android.os.DropBoxManager in project android_frameworks_base by ResurrectionRemix.
the class DropBoxTest method testAddFile.
public void testAddFile() throws Exception {
File dir = getEmptyDir("testAddFile");
long before = System.currentTimeMillis();
File f0 = new File(dir, "f0.txt");
File f1 = new File(dir, "f1.txt.gz");
File f2 = new File(dir, "f2.dat");
File f3 = new File(dir, "f2.dat.gz");
FileWriter w0 = new FileWriter(f0);
GZIPOutputStream gz1 = new GZIPOutputStream(new FileOutputStream(f1));
FileOutputStream os2 = new FileOutputStream(f2);
GZIPOutputStream gz3 = new GZIPOutputStream(new FileOutputStream(f3));
w0.write("FILE0");
gz1.write("FILE1".getBytes());
os2.write("DATA2".getBytes());
gz3.write("DATA3".getBytes());
w0.close();
gz1.close();
os2.close();
gz3.close();
DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
dropbox.addFile("DropBoxTest", f0, DropBoxManager.IS_TEXT);
dropbox.addFile("DropBoxTest", f1, DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED);
dropbox.addFile("DropBoxTest", f2, 0);
dropbox.addFile("DropBoxTest", f3, DropBoxManager.IS_GZIPPED);
DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before);
DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis());
DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis());
DropBoxManager.Entry e3 = dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis());
assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis()));
assertTrue(e0.getTimeMillis() > before);
assertTrue(e1.getTimeMillis() > e0.getTimeMillis());
assertTrue(e2.getTimeMillis() > e1.getTimeMillis());
assertTrue(e3.getTimeMillis() > e2.getTimeMillis());
assertEquals(DropBoxManager.IS_TEXT, e0.getFlags());
assertEquals(DropBoxManager.IS_TEXT, e1.getFlags());
assertEquals(0, e2.getFlags());
assertEquals(0, e3.getFlags());
assertEquals("FILE0", e0.getText(80));
byte[] buf1 = new byte[80];
assertEquals("FILE1", new String(buf1, 0, e1.getInputStream().read(buf1)));
assertTrue(null == e2.getText(80));
byte[] buf2 = new byte[80];
assertEquals("DATA2", new String(buf2, 0, e2.getInputStream().read(buf2)));
assertTrue(null == e3.getText(80));
byte[] buf3 = new byte[80];
assertEquals("DATA3", new String(buf3, 0, e3.getInputStream().read(buf3)));
e0.close();
e1.close();
e2.close();
e3.close();
}
use of android.os.DropBoxManager in project android_frameworks_base by ResurrectionRemix.
the class DropBoxTest method testAgeLimits.
public void testAgeLimits() throws Exception {
File dir = getEmptyDir("testAgeLimits");
int blockSize = new StatFs(dir.getPath()).getBlockSize();
// Limit storage to 10 blocks with an expiration of 1 second
int kb = blockSize * 10 / 1024;
ContentResolver cr = getContext().getContentResolver();
Settings.Global.putString(cr, Settings.Global.DROPBOX_AGE_SECONDS, "1");
Settings.Global.putString(cr, Settings.Global.DROPBOX_QUOTA_KB, Integer.toString(kb));
// Write one normal entry and another so big that it is instantly tombstoned
long before = System.currentTimeMillis();
DropBoxManagerService service = new DropBoxManagerService(getContext(), dir);
DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub());
dropbox.addText("DropBoxTest", "TEST");
addRandomEntry(dropbox, "DropBoxTest", blockSize * 20);
// Verify that things are as expected
DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before);
DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis());
assertTrue(null == dropbox.getNextEntry(null, e1.getTimeMillis()));
assertEquals("TEST", e0.getText(80));
assertEquals(null, e1.getText(80));
assertEquals(-1, getEntrySize(e1));
e0.close();
e1.close();
// Wait a second and write another entry -- old ones should be expunged
Thread.sleep(2000);
dropbox.addText("DropBoxTest", "TEST1");
e0 = dropbox.getNextEntry(null, before);
assertTrue(null == dropbox.getNextEntry(null, e0.getTimeMillis()));
assertEquals("TEST1", e0.getText(80));
e0.close();
}
Aggregations