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
}
