blob: c13390ebb65bcf8db8435676a72310d2da2e0c92 [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Protos used by crash_serializer.
// This should exactly match the messages in config's
// proto/chromiumos/config/api/test/tls/common.proto
syntax = "proto3";
package crash;
// When this response is streamed, the first proto with a given crash ID will
// always contain the CrashInfo.
// Files and core dumps (if present) may be streamed. If they are,
// subsequent protos with the same crash ID will follow, each containing a chunk
// of file/coredump. To reassemble these, concatenate the bytes received from
// each subsequent proto with a matching crash_id (concatenate blobs that have
// matching crash_ids and keys).
// Additional crashes may be reported in the same stream with a new crash ID.
message FetchCrashesResponse {
// Crash id. unique only within responses to a single FetchCrashes request.
// Used to assemble multiple streamed |FetchCrashesResponse| protos into a
// single crash report.
int64 crash_id = 1;
oneof data {
// Full details of crash report.
CrashInfo crash = 2;
// Misc file (e.g. minidump, large binary log, etc)
CrashBlob blob = 3;
// Coredump. Present iff fetch_core was true in FetchCrashesRequest and
// the crash has a coredump. (kernel warnings, for example, do not have
// one).
bytes core = 4;
}
}
// The data in this proto matches the metadata from crash-reporter's meta files.
// Sender::CreateCrashFormData puts this data into crash upload POST requests.
// (See src/platform2/crash-reporter/crash_sender_util.cc.)
// The names in this proto MUST match the names that crash-reporter uses so
// that, when crashes are uploaded to the crash server, they are interpreted
// as they are when crash-reporter uploads them.
// Similarly, when this proto is converted into a POST request to send to the
// crash server, the names must not be altered.
message CrashInfo {
// Name of executable that crashed (e.g. "chrome")
string exec_name = 1;
// Product name (e.g. "Chrome_ChromeOS" or "ChromeOS")
string prod = 2;
// Product version (e.g. "12345.0.0")
string ver = 3;
// Crash signature (may not be populated for all crashes)
string sig = 4;
// The name of the integration test that was running when this crash
// happened, if any.
string in_progress_integration_test = 5;
// The name of the collector (e.g. chrome_collector, arc_collector)
string collector = 6;
// Additional key-value pairs of metadata (e.g. "crash_loop_mode = true").
// These should be included in any POSTs to the crash server in a standard
// POST form, as seen in CreateCrashFormData.
// (despite the fact that this message is a subfield, it should be a flat
// structure in any POSTs).
repeated CrashMetadata fields = 7;
}
// Arbitrary text-only key-value pair corresponding to the key-value pairs in
// crash report metadata files.
message CrashMetadata {
// This value is a UTF8, human-readable, description of the data.
string key = 1;
// The value will be a human-readable string (e.g. "12345.0.0"), which must
// be valid UTF-8.
string text = 2;
};
// Arbitrary non-UTF8 key-value pair from crash report metadata files.
message CrashBlob {
// This value is a UTF8, human-readable, description of the data.
// This should be passed as the 'name' to the crash server.
// For instance, upload_file_fake_payload
string key = 1;
// The value is a blob (e.g. a file from sysfs or a minidump), which need
// not be valid UTF-8, and may be large.
bytes blob = 2;
// The basename of the file. Must be specified as the filename in data
// uploaded to the crash server.
// e.g. foo_binary.20201027.102345.0.dmp
string filename = 3;
};