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 message Events { string uuid = 1; // I guess why not just have this on each file string version = 2; // maybe can be used for protobuf schema change violations 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; 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 }