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

        // is it possible to have custom formatting in JSON and TEXT marshal/unmarshal ?
        StorageInfo humantest   = 5;
}

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
        google.protobuf.Any orig_val    = 9;    // original value
        google.protobuf.Any new_val     = 10;   // new value
}

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
}

message StorageInfo {
        int64 capacity = 1;  // Stores the storage capacity in bytes.
}
