Copy log files to crash report directory

Signed-off-by: Max Risuhin <risuhin.max@gmail.com>
This commit is contained in:
Max Risuhin 2018-09-06 19:51:49 +03:00
parent 252d09ee05
commit aa949c64e3
No known key found for this signature in database
GPG Key ID: BF733F5ACA0B4448
4 changed files with 57 additions and 31 deletions

View File

@ -167,6 +167,19 @@ void exceptionPostHandledCallback() {
#endif #endif
} }
QString getDataStoragePath() {
QString dataStoragePath;
#ifdef BUILD_FOR_BUNDLE
dataStoragePath =
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir dir(dataStoragePath);
if (!dir.exists()) {
dir.mkpath(".");
}
#endif
return dataStoragePath;
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
@ -179,9 +192,9 @@ int main(int argc, char **argv) {
appPath.append(CRASH_REPORT_EXECUTABLE_RELATIVE_PATH); appPath.append(CRASH_REPORT_EXECUTABLE_RELATIVE_PATH);
#endif #endif
ExceptionGlobalHandler exceptionHandler(appPath + QDir::separator() + ExceptionGlobalHandler exceptionHandler(
CRASH_REPORT_EXECUTABLE, appPath + QDir::separator() + CRASH_REPORT_EXECUTABLE,
exceptionPostHandledCallback); exceptionPostHandledCallback, getDataStoragePath());
Q_INIT_RESOURCE(react_resources); Q_INIT_RESOURCE(react_resources);
@ -243,16 +256,6 @@ int main(int argc, char **argv) {
#ifdef BUILD_FOR_BUNDLE #ifdef BUILD_FOR_BUNDLE
QString getDataStoragePath() {
QString dataStoragePath =
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir dir(dataStoragePath);
if (!dir.exists()) {
dir.mkpath(".");
}
return dataStoragePath;
}
void writeLogsToFile() { void writeLogsToFile() {
QMutexLocker locker(&consoleOutputMutex); QMutexLocker locker(&consoleOutputMutex);
QFile logFile(getDataStoragePath() + "/StatusIm.log"); QFile logFile(getDataStoragePath() + "/StatusIm.log");

View File

@ -17,7 +17,11 @@
const int MAIN_WINDOW_WIDTH = 1024; const int MAIN_WINDOW_WIDTH = 1024;
const int MAIN_WINDOW_HEIGHT = 768; const int MAIN_WINDOW_HEIGHT = 768;
const int INPUT_ARGUMENTS_COUNT = 5; const int INPUT_ARGUMENTS_COUNT = 6;
const int MINIDUMP_FILE_PATH_ARG_INDEX = 1;
const int CRASHED_EXECUTABLE_PATH_ARG_INDEX = 2;
const int LOGS_PATH_INDEX = 5;
int main(int argc, char **argv) { int main(int argc, char **argv) {
@ -30,7 +34,9 @@ int main(int argc, char **argv) {
app.setApplicationName("Crash Report"); app.setApplicationName("Crash Report");
ReportPublisher reportPublisher(argv[1], argv[2]); ReportPublisher reportPublisher(argv[MINIDUMP_FILE_PATH_ARG_INDEX],
argv[CRASHED_EXECUTABLE_PATH_ARG_INDEX],
argv[LOGS_PATH_INDEX]);
QQuickView view; QQuickView view;
view.rootContext()->setContextProperty("reportPublisher", &reportPublisher); view.rootContext()->setContextProperty("reportPublisher", &reportPublisher);

View File

@ -14,6 +14,7 @@
#include <QDebug> #include <QDebug>
#include <QDesktopServices> #include <QDesktopServices>
#include <QDir> #include <QDir>
#include <QDirIterator>
#include <QFile> #include <QFile>
#include <QProcess> #include <QProcess>
#include <QUrl> #include <QUrl>
@ -22,9 +23,10 @@ const QString REPORT_SUBMIT_URL =
QStringLiteral("https://goo.gl/forms/0705ZN0EMW3xLDpI2"); QStringLiteral("https://goo.gl/forms/0705ZN0EMW3xLDpI2");
ReportPublisher::ReportPublisher(QString minidumpFilePath, ReportPublisher::ReportPublisher(QString minidumpFilePath,
QString crashedExecutablePath, QObject *parent) QString crashedExecutablePath,
QString logsPath, QObject *parent)
: QObject(parent), m_minidumpFilePath(minidumpFilePath), : QObject(parent), m_minidumpFilePath(minidumpFilePath),
m_crashedExecutablePath(crashedExecutablePath) {} m_logsPath(logsPath), m_crashedExecutablePath(crashedExecutablePath) {}
void ReportPublisher::submit() { void ReportPublisher::submit() {
QDesktopServices::openUrl(QUrl(REPORT_SUBMIT_URL)); QDesktopServices::openUrl(QUrl(REPORT_SUBMIT_URL));
@ -73,7 +75,21 @@ bool ReportPublisher::prepareReportFiles(QString reportDirPath) {
reportDirPath + QDir::separator() + "crash.dmp") && reportDirPath + QDir::separator() + "crash.dmp") &&
QFile::copy(m_crashedExecutablePath, QFile::copy(m_crashedExecutablePath,
reportDirPath + QDir::separator() + reportDirPath + QDir::separator() +
crashedExecutableFileInfo.fileName()); crashedExecutableFileInfo.fileName()) &&
prepareLogFiles(reportDirPath);
}
bool ReportPublisher::prepareLogFiles(QString reportDirPath) {
if (reportDirPath.isEmpty())
return true;
QDirIterator filesIterator(m_logsPath, QStringList() << "*.log", QDir::Files);
while (filesIterator.hasNext()) {
QFileInfo logFile(filesIterator.next());
QFile::copy(logFile.absoluteFilePath(),
reportDirPath + QDir::separator() + logFile.fileName());
}
return true;
} }
QString ReportPublisher::resolveDataStoragePath() { QString ReportPublisher::resolveDataStoragePath() {

View File

@ -15,25 +15,26 @@
#include <QString> #include <QString>
class ReportPublisher : public QObject { class ReportPublisher : public QObject {
Q_OBJECT Q_OBJECT
public: public:
ReportPublisher(QString minidumpFilePath, QString crashedExecutablePath, QObject* parent = 0); ReportPublisher(QString minidumpFilePath, QString crashedExecutablePath,
QString logsPath, QObject *parent = 0);
Q_INVOKABLE void submit(); Q_INVOKABLE void submit();
Q_INVOKABLE void restartAndQuit(); Q_INVOKABLE void restartAndQuit();
Q_INVOKABLE void quit(); Q_INVOKABLE void quit();
Q_INVOKABLE void showDirectory(); Q_INVOKABLE void showDirectory();
Q_INVOKABLE QString resolveDataStoragePath(); Q_INVOKABLE QString resolveDataStoragePath();
private: private:
bool prepareReportFiles(QString reportDirPath);
bool prepareLogFiles(QString reportDirPath);
bool prepareReportFiles(QString reportDirPath); QString m_minidumpFilePath;
QString m_crashedExecutablePath;
QString m_minidumpFilePath; QString m_logsPath;
QString m_crashedExecutablePath; bool m_logFilesPrepared = false;
bool m_logFilesPrepared = false;
}; };
#endif // REPORTPUBLISHER #endif // REPORTPUBLISHER