syntax = "proto3"; package api; import "google/protobuf/timestamp.proto"; option go_package = "git.netflux.io/rob/octoplex/internal/generated/grpc"; service InternalAPI { rpc Communicate(stream Envelope) returns (stream Envelope); } message Envelope { oneof payload { Command command = 1; Event event = 2; } } message Command { oneof command_type { AddDestinationCommand add_destination = 1; RemoveDestinationCommand remove_destination = 2; StartDestinationCommand start_destination = 3; StopDestinationCommand stop_destination = 4; CloseOtherInstancesCommand close_other_instances = 5; QuitCommand quit = 6; } } message AddDestinationCommand { string name = 1; string url = 2; } message RemoveDestinationCommand { string url= 1; } message StartDestinationCommand { string url = 1; } message StopDestinationCommand { string url = 1; } message CloseOtherInstancesCommand {} message QuitCommand {} message Event { oneof event_type { AppStateChangedEvent app_state_changed = 1; DestinationStreamExitedEvent destination_stream_exited = 2; DestinationAddedEvent destination_added = 3; AddDestinationFailedEvent add_destination_failed = 4; DestinationRemovedEvent destination_removed = 5; RemoveDestinationFailedEvent remove_destination_failed = 6; StartDestinationFailedEvent start_destination_failed = 7; MediaServerStartedEvent media_server_started = 8; OtherInstanceDetectedEvent other_instance_detected = 9; FatalErrorEvent fatal_error = 10; } } message Container { string id = 1; string status = 2; string health_state = 3; double cpu_percent = 4; uint64 memory_usage_bytes = 5; int32 rx_rate = 6; int32 tx_rate = 7; google.protobuf.Timestamp rx_since = 8; string image_name = 9; string pull_status = 10; string pull_progress = 11; int32 pull_percent = 12; int32 restart_count = 13; optional int32 exit_code = 14; string err = 15; } message Source { Container container = 1; bool live = 2; google.protobuf.Timestamp live_changed_at = 3; repeated string tracks = 4; string exit_reason = 5; } message Destination { enum Status { STATUS_OFF_AIR = 0; STATUS_STARTING = 1; STATUS_LIVE = 2; } Container container = 1; Status status = 2; string name = 3; string url = 4; } message BuildInfo { string go_version = 1; string version = 2; string commit = 3; string date = 4; } message AppState { Source source = 1; repeated Destination destinations = 2; BuildInfo build_info = 3; } message AppStateChangedEvent { AppState app_state = 1; } message DestinationStreamExitedEvent { string name = 1; string error = 2; } message DestinationAddedEvent { string url = 1; } message AddDestinationFailedEvent { string url = 1; string error = 2; } message DestinationRemovedEvent { string url = 1; } message RemoveDestinationFailedEvent { string url = 1; string error = 2; } message StartDestinationFailedEvent { string url = 1; string message = 2; } message MediaServerStartedEvent { string rtmp_url = 1; string rtmps_url = 2; } message OtherInstanceDetectedEvent {} message FatalErrorEvent { string message = 1; }