syntax = "proto3"; package olivetin.api.v1; option go_package = "github.com/OliveTin/OliveTin/gen/olivetin/api/v1;apiv1"; message Action { string binding_id = 1; string title = 2; string icon = 3; bool can_exec = 4; repeated ActionArgument arguments = 5; string popup_on_start = 6; int32 order = 7; int32 timeout = 8; string datetime_rate_limit_expires = 9; // Datetime when rate limit expires (empty string if not rate limited), format: "2006-01-02 15:04:05" } message ActionArgument { string name = 1; string title = 2; string type = 3; string default_value = 4; repeated ActionArgumentChoice choices = 5; string description = 6; map suggestions = 7; string suggestions_browser_key = 8; } message ActionArgumentChoice { string value = 1; string title = 2; } message Entity { string title = 1; string unique_key = 2; string type = 3; repeated string directories = 4; map fields = 5; } message GetDashboardResponse { string title = 1; Dashboard dashboard = 4; } message EffectivePolicy { bool show_diagnostics = 1; bool show_log_list = 2; } message GetDashboardRequest { string title = 1; string entity_type = 2; string entity_key = 3; } message Dashboard { string title = 1; repeated DashboardComponent contents = 2; } message DashboardComponent { string title = 1; string type = 2; repeated DashboardComponent contents = 3; string icon = 4; string css_class = 5; Action action = 6; string entity_type = 7; string entity_key = 8; } message StartActionRequest { string binding_id = 1; repeated StartActionArgument arguments = 2; string unique_tracking_id = 3; } message StartActionArgument { string name = 1; string value = 2; } message StartActionResponse { string execution_tracking_id = 2; } message StartActionAndWaitRequest { string action_id = 1; repeated StartActionArgument arguments = 2; } message StartActionAndWaitResponse { LogEntry log_entry = 1; } message StartActionByGetRequest { string action_id = 1; } message StartActionByGetResponse { string execution_tracking_id = 2; } message StartActionByGetAndWaitRequest { string action_id = 1; } message StartActionByGetAndWaitResponse { LogEntry log_entry = 1; } message GetLogsRequest{ int64 start_offset = 1; string date_filter = 2; // Optional date filter in YYYY-MM-DD format }; message LogEntry { string datetime_started = 1; string action_title = 2; string output = 3; bool timed_out = 5; int32 exit_code = 6; string user = 7; string user_class = 8; string action_icon = 9; repeated string tags = 10; string execution_tracking_id = 11; string datetime_finished = 12; bool execution_started = 14; bool execution_finished = 15; bool blocked = 16; int64 datetime_index = 17; bool can_kill = 18; string datetime_rate_limit_expires = 19; // Datetime when rate limit expires (empty string if not rate limited), format: "2006-01-02 15:04:05" string binding_id = 20; // Binding ID for matching rate limits to action buttons } message GetLogsResponse { repeated LogEntry logs = 1; int64 count_remaining = 2; int64 page_size = 3; int64 total_count = 4; int64 start_offset = 5; } message GetActionLogsRequest { string action_id = 1; int64 start_offset = 2; } message GetActionLogsResponse { repeated LogEntry logs = 1; int64 count_remaining = 2; int64 page_size = 3; int64 total_count = 4; int64 start_offset = 5; } message ValidateArgumentTypeRequest { string value = 1; string type = 2; string binding_id = 3; string argument_name = 4; } message ValidateArgumentTypeResponse { bool valid = 1; string description = 2; } message WatchExecutionRequest { string execution_tracking_id = 1; } message WatchExecutionUpdate { string update = 1; } message ExecutionStatusRequest { string execution_tracking_id = 1; string action_id = 2; } message ExecutionStatusResponse { LogEntry log_entry = 1; } message WhoAmIRequest {} message WhoAmIResponse { string authenticated_user = 1; string usergroup = 2; string provider = 3; repeated string acls = 4; string sid = 5; } message SosReportRequest {} message SosReportResponse { string alert = 1; } message DumpVarsRequest {} message DumpVarsResponse { string alert = 1; map contents = 2; } message DebugBinding { string action_title = 1; string entity_prefix = 2; } message DumpPublicIdActionMapRequest {} message DumpPublicIdActionMapResponse { string alert = 1; map contents = 2; } message GetReadyzRequest {} message GetReadyzResponse { string status = 1; } message EventStreamRequest { } message EventStreamResponse { oneof event { EventEntityChanged entity_changed = 2; EventConfigChanged config_changed = 3; EventExecutionFinished execution_finished = 4; EventExecutionStarted execution_started = 5; EventOutputChunk output_chunk = 6; } } message EventOutputChunk { string execution_tracking_id = 1; string output = 2; } message EventEntityChanged {} message EventConfigChanged {} message EventExecutionFinished { LogEntry log_entry = 1; } message EventExecutionStarted { LogEntry log_entry = 1; } message KillActionRequest { string execution_tracking_id = 1; } message KillActionResponse { string execution_tracking_id = 1; bool killed = 2; bool already_completed = 3; bool found = 4; } message LocalUserLoginRequest { string username = 1; string password = 2; } message LocalUserLoginResponse { bool success = 1; } message PasswordHashRequest { string password = 1; } message PasswordHashResponse { string hash = 1; } message LogoutRequest {} message LogoutResponse { } message GetDiagnosticsRequest { } message GetDiagnosticsResponse { string SshFoundKey = 1; string SshFoundConfig = 2; } message InitRequest {} message InitResponse { bool showFooter = 1; bool showNavigation = 2; bool showNewVersions = 3; string availableVersion = 4; string currentVersion = 5; string pageTitle = 6; string sectionNavigationStyle = 7; string defaultIconForBack = 8; bool enableCustomJs = 9; string authLoginUrl = 10; bool authLocalLogin = 11; repeated string styleMods = 12; repeated OAuth2Provider oAuth2Providers = 13; repeated AdditionalLink additionalLinks = 14; repeated string rootDashboards = 15; string authenticated_user = 16; string authenticated_user_provider = 17; EffectivePolicy effective_policy = 18; string banner_message = 19; string banner_css = 20; bool show_diagnostics = 21; bool show_log_list = 22; bool login_required = 23; repeated string available_themes = 24; // List of available theme names bool show_navigate_on_start_icons = 25; } message AdditionalLink { string title = 1; string url = 2; } message OAuth2Provider { string title = 1; string icon = 3; string key = 4; } message GetActionBindingRequest { string binding_id = 1; } message GetActionBindingResponse { Action action = 1; } message GetEntitiesRequest { } message GetEntitiesResponse { repeated EntityDefinition entity_definitions = 1; } message EntityDefinition { string title = 1; repeated Entity instances = 2; repeated string used_on_dashboards = 3; } message GetEntityRequest { string unique_key = 1; string type = 2; } message RestartActionRequest { string execution_tracking_id = 1; } service OliveTinApiService { rpc GetDashboard(GetDashboardRequest) returns (GetDashboardResponse) {} rpc StartAction(StartActionRequest) returns (StartActionResponse) {} rpc StartActionAndWait(StartActionAndWaitRequest) returns (StartActionAndWaitResponse) {} rpc StartActionByGet(StartActionByGetRequest) returns (StartActionByGetResponse) {} rpc StartActionByGetAndWait(StartActionByGetAndWaitRequest) returns (StartActionByGetAndWaitResponse) {} rpc RestartAction(RestartActionRequest) returns (StartActionResponse) {} rpc KillAction(KillActionRequest) returns (KillActionResponse) {} rpc ExecutionStatus(ExecutionStatusRequest) returns (ExecutionStatusResponse) {} rpc GetLogs(GetLogsRequest) returns (GetLogsResponse) {} rpc GetActionLogs(GetActionLogsRequest) returns (GetActionLogsResponse) {} rpc ValidateArgumentType(ValidateArgumentTypeRequest) returns (ValidateArgumentTypeResponse) {} rpc WhoAmI(WhoAmIRequest) returns (WhoAmIResponse) {} rpc SosReport(SosReportRequest) returns (SosReportResponse) {} rpc DumpVars(DumpVarsRequest) returns (DumpVarsResponse) {} rpc DumpPublicIdActionMap(DumpPublicIdActionMapRequest) returns (DumpPublicIdActionMapResponse) {} rpc GetReadyz(GetReadyzRequest) returns (GetReadyzResponse) {} rpc LocalUserLogin(LocalUserLoginRequest) returns (LocalUserLoginResponse) {} rpc PasswordHash(PasswordHashRequest) returns (PasswordHashResponse) {} rpc Logout(LogoutRequest) returns (LogoutResponse) {} rpc EventStream(EventStreamRequest) returns (stream EventStreamResponse) {} rpc GetDiagnostics(GetDiagnosticsRequest) returns (GetDiagnosticsResponse) {} rpc Init(InitRequest) returns (InitResponse) {} rpc GetActionBinding(GetActionBindingRequest) returns (GetActionBindingResponse) {} rpc GetEntities(GetEntitiesRequest) returns (GetEntitiesResponse) {} rpc GetEntity(GetEntityRequest) returns (Entity) {} }