syntax = "proto3"; package virtbuf; import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp import "google/protobuf/any.proto"; // Import the well-known type for Timestamp // global settings for autogenpb `autogenpb:no-sort` `autogenpb:mutex` message Events { // `autogenpb:marshal` string uuid = 1; // `autogenpb:uuid:1e3a50c7-5916-4423-b33c-f0b977a7e446` string version = 2; // `autogenpb:version:v0.0.1` int64 event_size = 3; // max events to store in a single repeated Event events = 4; // all the events } // this information leans towards being human readable not programatic // in other words, it's better to just have the droplet name here rather than the uuid // at least for now in the early days. but maybe forever. // homelab clouds normally don't have many events. // we are talking less than 1 a minute. even 1 an hour is often a lot message Event { int32 id = 1; // `autogenpb:unique` // should be unique across the cluster EventType etype = 2; string droplet = 3; // name of the droplet string droplet_uuid = 4; // uuid of the droplet string hypervisor = 5; // name of the hypervisor string hypervisor_uuid = 6; // uuid of the hypervisor google.protobuf.Timestamp start = 7; // start time google.protobuf.Timestamp end = 8; // end time string field_name = 9; // the field name that changed string orig_val = 10; // original value string new_val = 11; // new value google.protobuf.Any orig_any = 12; // anypb format. probably overkill google.protobuf.Any new_any = 13; // anypb format } enum EventType { ADD = 0; DELETE = 1; POWERON = 2; POWEROFF = 3; // should indicate a "normal" shutdown HIBERNATE = 4; MIGRATE = 5; DEMO = 6; GET = 7; // request something LOGIN = 8; // attempt to login OK = 9; // everything is ok FAIL = 10; // everything failed CRASH = 11; // droplet hard crashed CHANGE = 12; // droplet or hypervisor config change }