Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 665208d7 authored by yro's avatar yro
Browse files

Add stats from storage manager to dumpsys result

Bug: 74601313
Test: manual test, statsd_test
Change-Id: Ifdde6bb10d29f3983b0c27a66a6e30f1f40308ee
parent cb7b04a5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <android/util/ProtoOutputStream.h>
#include "../stats_log_util.h"
#include "statslog.h"
#include "storage/StorageManager.h"

namespace android {
namespace os {
@@ -403,6 +404,8 @@ void StatsdStats::dumpStats(FILE* out) const {
            fprintf(out, "alert %lld declared %d times\n", (long long)stats.first, stats.second);
        }
    }
    fprintf(out, "********Disk Usage stats***********\n");
    StorageManager::printStats(out);
    fprintf(out, "********Pushed Atom stats***********\n");
    const size_t atomCounts = mPushedAtomStats.size();
    for (size_t i = 2; i < atomCounts; i++) {
+47 −0
Original line number Diff line number Diff line
@@ -345,6 +345,53 @@ void StorageManager::trimToFit(const char* path) {
    }
}

void StorageManager::printStats(FILE* out) {
    printDirStats(out, STATS_SERVICE_DIR);
    printDirStats(out, STATS_DATA_DIR);
}

void StorageManager::printDirStats(FILE* out, const char* path) {
    fprintf(out, "Printing stats of %s\n", path);
    unique_ptr<DIR, decltype(&closedir)> dir(opendir(path), closedir);
    if (dir == NULL) {
        VLOG("Path %s does not exist", path);
        return;
    }
    dirent* de;
    int fileCount = 0;
    int totalFileSize = 0;
    while ((de = readdir(dir.get()))) {
        char* name = de->d_name;
        if (name[0] == '.') {
            continue;
        }
        int64_t result[3];
        parseFileName(name, result);
        if (result[0] == -1) continue;
        int64_t timestamp = result[0];
        int64_t uid = result[1];
        int64_t configID = result[2];
        fprintf(out, "\t #%d, Last updated: %lld, UID: %d, Config ID: %lld",
                fileCount + 1,
                (long long)timestamp,
                (int)uid,
                (long long)configID);
        string file_name = getFilePath(path, timestamp, uid, configID);
        ifstream file(file_name.c_str(), ifstream::in | ifstream::binary);
        if (file.is_open()) {
            file.seekg(0, ios::end);
            int fileSize = file.tellg();
            file.close();
            fprintf(out, ", File Size: %d bytes", fileSize);
            totalFileSize += fileSize;
        }
        fprintf(out, "\n");
        fileCount++;
    }
    fprintf(out, "\tTotal number of files: %d, Total size of files: %d bytes.\n",
            fileCount, totalFileSize);
}

}  // namespace statsd
}  // namespace os
}  // namespace android
+11 −0
Original line number Diff line number Diff line
@@ -84,6 +84,17 @@ public:
     */
    static bool hasIdenticalConfig(const ConfigKey& key,
                                   const vector<uint8_t>& config);

    /**
     * Prints disk usage statistics related to statsd.
     */
    static void printStats(FILE* out);

private:
    /**
     * Prints disk usage statistics about a directory related to statsd.
     */
    static void printDirStats(FILE* out, const char* path);
};

}  // namespace statsd