Make upload report metrics optional

Bug: crashpad:30
Change-Id: I202e4571ee8dc8006550173c1cf0c735fae29103
Reviewed-on: https://chromium-review.googlesource.com/1148580
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
This commit is contained in:
Joshua Peraza 2018-07-24 09:13:49 -07:00 committed by Commit Bot
parent c11c8833f7
commit 2418cb8fbe
6 changed files with 36 additions and 13 deletions

View File

@ -69,7 +69,8 @@ CrashReportDatabase::UploadReport::UploadReport()
reader_(std::make_unique<FileReader>()), reader_(std::make_unique<FileReader>()),
database_(nullptr), database_(nullptr),
attachment_readers_(), attachment_readers_(),
attachment_map_() {} attachment_map_(),
report_metrics_(false) {}
CrashReportDatabase::UploadReport::~UploadReport() { CrashReportDatabase::UploadReport::~UploadReport() {
if (database_) { if (database_) {

View File

@ -178,6 +178,7 @@ class CrashReportDatabase {
CrashReportDatabase* database_; CrashReportDatabase* database_;
std::vector<std::unique_ptr<FileReader>> attachment_readers_; std::vector<std::unique_ptr<FileReader>> attachment_readers_;
std::map<std::string, FileReader*> attachment_map_; std::map<std::string, FileReader*> attachment_map_;
bool report_metrics_;
DISALLOW_COPY_AND_ASSIGN(UploadReport); DISALLOW_COPY_AND_ASSIGN(UploadReport);
}; };
@ -326,11 +327,16 @@ class CrashReportDatabase {
//! \param[in] uuid The unique identifier for the crash report record. //! \param[in] uuid The unique identifier for the crash report record.
//! \param[out] report A crash report record for the report to be uploaded. //! \param[out] report A crash report record for the report to be uploaded.
//! Only valid if this returns #kNoError. //! Only valid if this returns #kNoError.
//! \param[in] report_metrics If `false`, metrics will not be recorded for
//! this upload attempt when RecordUploadComplete() is called or \a report
//! is destroyed. Metadata for the upload attempt will still be recorded
//! in the database.
//! //!
//! \return The operation status code. //! \return The operation status code.
virtual OperationStatus GetReportForUploading( virtual OperationStatus GetReportForUploading(
const UUID& uuid, const UUID& uuid,
std::unique_ptr<const UploadReport>* report) = 0; std::unique_ptr<const UploadReport>* report,
bool report_metrics = true) = 0;
//! \brief Records a successful upload for a report and updates the last //! \brief Records a successful upload for a report and updates the last
//! upload attempt time as returned by //! upload attempt time as returned by

View File

@ -180,7 +180,8 @@ class CrashReportDatabaseGeneric : public CrashReportDatabase {
OperationStatus GetCompletedReports(std::vector<Report>* reports) override; OperationStatus GetCompletedReports(std::vector<Report>* reports) override;
OperationStatus GetReportForUploading( OperationStatus GetReportForUploading(
const UUID& uuid, const UUID& uuid,
std::unique_ptr<const UploadReport>* report) override; std::unique_ptr<const UploadReport>* report,
bool report_metrics) override;
OperationStatus SkipReportUpload(const UUID& uuid, OperationStatus SkipReportUpload(const UUID& uuid,
Metrics::CrashSkippedReason reason) override; Metrics::CrashSkippedReason reason) override;
OperationStatus DeleteReport(const UUID& uuid) override; OperationStatus DeleteReport(const UUID& uuid) override;
@ -455,7 +456,8 @@ OperationStatus CrashReportDatabaseGeneric::GetCompletedReports(
OperationStatus CrashReportDatabaseGeneric::GetReportForUploading( OperationStatus CrashReportDatabaseGeneric::GetReportForUploading(
const UUID& uuid, const UUID& uuid,
std::unique_ptr<const UploadReport>* report) { std::unique_ptr<const UploadReport>* report,
bool report_metrics) {
INITIALIZATION_STATE_DCHECK_VALID(initialized_); INITIALIZATION_STATE_DCHECK_VALID(initialized_);
auto upload_report = std::make_unique<LockfileUploadReport>(); auto upload_report = std::make_unique<LockfileUploadReport>();
@ -470,6 +472,7 @@ OperationStatus CrashReportDatabaseGeneric::GetReportForUploading(
if (!upload_report->Initialize(path, this)) { if (!upload_report->Initialize(path, this)) {
return kFileSystemError; return kFileSystemError;
} }
upload_report->report_metrics_ = report_metrics;
report->reset(upload_report.release()); report->reset(upload_report.release());
return kNoError; return kNoError;
@ -609,7 +612,9 @@ OperationStatus CrashReportDatabaseGeneric::RecordUploadAttempt(
const std::string& id) { const std::string& id) {
INITIALIZATION_STATE_DCHECK_VALID(initialized_); INITIALIZATION_STATE_DCHECK_VALID(initialized_);
Metrics::CrashUploadAttempted(successful); if (report->report_metrics_) {
Metrics::CrashUploadAttempted(successful);
}
time_t now = time(nullptr); time_t now = time(nullptr);
report->id = id; report->id = id;

View File

@ -141,7 +141,8 @@ class CrashReportDatabaseMac : public CrashReportDatabase {
OperationStatus GetCompletedReports(std::vector<Report>* reports) override; OperationStatus GetCompletedReports(std::vector<Report>* reports) override;
OperationStatus GetReportForUploading( OperationStatus GetReportForUploading(
const UUID& uuid, const UUID& uuid,
std::unique_ptr<const UploadReport>* report) override; std::unique_ptr<const UploadReport>* report,
bool report_metrics) override;
OperationStatus SkipReportUpload(const UUID& uuid, OperationStatus SkipReportUpload(const UUID& uuid,
Metrics::CrashSkippedReason reason) override; Metrics::CrashSkippedReason reason) override;
OperationStatus DeleteReport(const UUID& uuid) override; OperationStatus DeleteReport(const UUID& uuid) override;
@ -422,7 +423,8 @@ CrashReportDatabaseMac::GetCompletedReports(
CrashReportDatabase::OperationStatus CrashReportDatabase::OperationStatus
CrashReportDatabaseMac::GetReportForUploading( CrashReportDatabaseMac::GetReportForUploading(
const UUID& uuid, const UUID& uuid,
std::unique_ptr<const UploadReport>* report) { std::unique_ptr<const UploadReport>* report,
bool report_metrics) {
INITIALIZATION_STATE_DCHECK_VALID(initialized_); INITIALIZATION_STATE_DCHECK_VALID(initialized_);
auto upload_report = std::make_unique<UploadReportMac>(); auto upload_report = std::make_unique<UploadReportMac>();
@ -444,6 +446,7 @@ CrashReportDatabaseMac::GetReportForUploading(
upload_report->database_ = this; upload_report->database_ = this;
upload_report->lock_fd.reset(lock.release()); upload_report->lock_fd.reset(lock.release());
upload_report->report_metrics_ = report_metrics;
report->reset(upload_report.release()); report->reset(upload_report.release());
return kNoError; return kNoError;
} }
@ -454,7 +457,9 @@ CrashReportDatabaseMac::RecordUploadAttempt(UploadReport* report,
const std::string& id) { const std::string& id) {
INITIALIZATION_STATE_DCHECK_VALID(initialized_); INITIALIZATION_STATE_DCHECK_VALID(initialized_);
Metrics::CrashUploadAttempted(successful); if (report->report_metrics_) {
Metrics::CrashUploadAttempted(successful);
}
DCHECK(report); DCHECK(report);
DCHECK(successful || id.empty()); DCHECK(successful || id.empty());

View File

@ -594,7 +594,8 @@ class CrashReportDatabaseWin : public CrashReportDatabase {
OperationStatus GetCompletedReports(std::vector<Report>* reports) override; OperationStatus GetCompletedReports(std::vector<Report>* reports) override;
OperationStatus GetReportForUploading( OperationStatus GetReportForUploading(
const UUID& uuid, const UUID& uuid,
std::unique_ptr<const UploadReport>* report) override; std::unique_ptr<const UploadReport>* report,
bool report_metrics) override;
OperationStatus SkipReportUpload(const UUID& uuid, OperationStatus SkipReportUpload(const UUID& uuid,
Metrics::CrashSkippedReason reason) override; Metrics::CrashSkippedReason reason) override;
OperationStatus DeleteReport(const UUID& uuid) override; OperationStatus DeleteReport(const UUID& uuid) override;
@ -731,7 +732,8 @@ OperationStatus CrashReportDatabaseWin::GetCompletedReports(
OperationStatus CrashReportDatabaseWin::GetReportForUploading( OperationStatus CrashReportDatabaseWin::GetReportForUploading(
const UUID& uuid, const UUID& uuid,
std::unique_ptr<const UploadReport>* report) { std::unique_ptr<const UploadReport>* report,
bool report_metrics) {
INITIALIZATION_STATE_DCHECK_VALID(initialized_); INITIALIZATION_STATE_DCHECK_VALID(initialized_);
std::unique_ptr<Metadata> metadata(AcquireMetadata()); std::unique_ptr<Metadata> metadata(AcquireMetadata());
@ -749,6 +751,7 @@ OperationStatus CrashReportDatabaseWin::GetReportForUploading(
if (!upload_report->Initialize(upload_report->file_path, this)) { if (!upload_report->Initialize(upload_report->file_path, this)) {
return kFileSystemError; return kFileSystemError;
} }
upload_report->report_metrics_ = report_metrics;
report->reset(upload_report.release()); report->reset(upload_report.release());
} }
@ -761,7 +764,9 @@ OperationStatus CrashReportDatabaseWin::RecordUploadAttempt(
const std::string& id) { const std::string& id) {
INITIALIZATION_STATE_DCHECK_VALID(initialized_); INITIALIZATION_STATE_DCHECK_VALID(initialized_);
Metrics::CrashUploadAttempted(successful); if (report->report_metrics_) {
Metrics::CrashUploadAttempted(successful);
}
std::unique_ptr<Metadata> metadata(AcquireMetadata()); std::unique_ptr<Metadata> metadata(AcquireMetadata());
if (!metadata) if (!metadata)

View File

@ -41,9 +41,10 @@ class MockDatabase : public CrashReportDatabase {
MOCK_METHOD2(LookUpCrashReport, OperationStatus(const UUID&, Report*)); MOCK_METHOD2(LookUpCrashReport, OperationStatus(const UUID&, Report*));
MOCK_METHOD1(GetPendingReports, OperationStatus(std::vector<Report>*)); MOCK_METHOD1(GetPendingReports, OperationStatus(std::vector<Report>*));
MOCK_METHOD1(GetCompletedReports, OperationStatus(std::vector<Report>*)); MOCK_METHOD1(GetCompletedReports, OperationStatus(std::vector<Report>*));
MOCK_METHOD2(GetReportForUploading, MOCK_METHOD3(GetReportForUploading,
OperationStatus(const UUID&, OperationStatus(const UUID&,
std::unique_ptr<const UploadReport>*)); std::unique_ptr<const UploadReport>*,
bool report_metrics));
MOCK_METHOD3(RecordUploadAttempt, MOCK_METHOD3(RecordUploadAttempt,
OperationStatus(UploadReport*, bool, const std::string&)); OperationStatus(UploadReport*, bool, const std::string&));
MOCK_METHOD2(SkipReportUpload, MOCK_METHOD2(SkipReportUpload,