blob: 7bc7195d9ef0315951a0845e3710c643c6b2d603 [file] [log] [blame]
// Copyright 2017 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.
syntax = "proto3";
option cc_enable_arenas = true;
// This file defines services that will be running on the host for the VM.
package vm_tools;
import "common.proto";
// Used to indicate a crash of an application inside the VM.
message CrashReportRequest {
// Name of the program that crashed.
string exe_name = 1;
// The core dump after it’s been converted to a minidump.
bytes minidump = 2;
// Any additional metadata that we want to upload with the minidump.
map<string, string> metadata = 3;
}
// Timestamp message as defined by google.protobuf.timestamp.proto
message Timestamp {
// Represents seconds of UTC time since Unix epoch
// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
// 9999-12-31T23:59:59Z inclusive.
int64 seconds = 1;
// Non-negative fractions of a second at nanosecond resolution. Negative
// second values with fractions must still have non-negative nanos values
// that count forward in time. Must be from 0 to 999,999,999
// inclusive.
int32 nanos = 2;
}
// Log severity levels as described by RFC3164. The values don't line up with
// the ones defined by RFC3164 because proto3 requires all fields to have
// default values and the default value for an enum is 0. In case the severity
// field is missing it's better to default to UNKNOWN instead of EMERGENCY.
enum LogSeverity {
MISSING = 0; // Default value.
EMERGENCY = 1; // System is unusable.
ALERT = 2; // Action must be taken immediately.
CRITICAL = 3; // Critical conditions.
ERROR = 4; // Error conditions.
WARNING = 5; // Warning conditions.
NOTICE = 6; // Normal but significant condition.
INFO = 7; // Informational messages.
DEBUG = 8; // Debug-level messages.
}
// Serialized log message.
message LogRecord {
// Severity of the message.
LogSeverity severity = 1;
// Time that the message was created.
Timestamp timestamp = 2;
// Actual content of the message.
bytes content = 5;
}
// A request to log information. Multiple records may be coalesced into a
// single request.
message LogRequest {
repeated LogRecord records = 1;
}
// The LogCollector service stores log records that were generated from within
// a VM in a persistent location outside the VM.
service LogCollector {
// Collect and store logs generated by the VM kernel.
rpc CollectKernelLogs(LogRequest) returns (EmptyMessage);
// Collect and store logs generated by userspace applications inside the VM.
rpc CollectUserLogs(LogRequest) returns (EmptyMessage);
}
// Service responsible for collecting crash reports from Chrome OS-controlled
// applications within the VM.
service CrashCollector {
// When an application in the VM crashes, maitre’d prepares
// the crash report by converting the core dump to a minidump,
// and then sends this request to concierge so that it
// can launch crash-reporter to report the crash.
rpc CollectCrashReport(CrashReportRequest) returns (EmptyMessage);
}
// Service that is notified whenever a new VM starts up.
service StartupListener {
// Called by each VM when it starts up to indicate that it is ready to handle
// incoming requests.
rpc VmReady(EmptyMessage) returns (EmptyMessage);
}