syntax = "proto3"; package admin; import "google/protobuf/timestamp.proto"; // --------------------------------------------------------------------------- // Session entities // --------------------------------------------------------------------------- message UserSession { string session_id = 1; string user_id = 2; string workspace_id = 3; optional string ip_address = 4; optional string user_agent = 5; google.protobuf.Timestamp connected_at = 6; google.protobuf.Timestamp last_heartbeat = 7; } message SessionInfo { string user_id = 1; uint32 session_count = 2; repeated string workspaces = 3; optional UserSession latest_session = 4; } enum OnlineStatus { ONLINE_STATUS_UNSPECIFIED = 0; ONLINE_STATUS_ONLINE = 1; ONLINE_STATUS_IDLE = 2; ONLINE_STATUS_OFFLINE = 3; } // --------------------------------------------------------------------------- // Requests & Responses // --------------------------------------------------------------------------- message ListWorkspaceSessionsRequest { string workspace_id = 1; } message ListWorkspaceSessionsResponse { repeated UserSession sessions = 1; } message ListUserSessionsRequest { string user_id = 1; } message ListUserSessionsResponse { repeated UserSession sessions = 1; } message KickUserFromWorkspaceRequest { string user_id = 1; string workspace_id = 2; } message KickUserFromWorkspaceResponse { uint32 kicked_count = 1; } message KickUserRequest { string user_id = 1; } message KickUserResponse { uint32 kicked_count = 1; } message GetUserStatusRequest { string user_id = 1; } message GetUserStatusResponse { OnlineStatus status = 1; } message GetUserInfoRequest { string user_id = 1; } message GetUserInfoResponse { optional SessionInfo info = 1; } message GetWorkspaceOnlineUsersRequest { string workspace_id = 1; } message GetWorkspaceOnlineUsersResponse { repeated string user_ids = 1; } message IsUserOnlineRequest { string user_id = 1; } message IsUserOnlineResponse { bool online = 1; } // --------------------------------------------------------------------------- // Service // --------------------------------------------------------------------------- service SessionAdmin { rpc ListWorkspaceSessions(ListWorkspaceSessionsRequest) returns (ListWorkspaceSessionsResponse); rpc ListUserSessions(ListUserSessionsRequest) returns (ListUserSessionsResponse); rpc KickUserFromWorkspace(KickUserFromWorkspaceRequest) returns (KickUserFromWorkspaceResponse); rpc KickUser(KickUserRequest) returns (KickUserResponse); rpc GetUserStatus(GetUserStatusRequest) returns (GetUserStatusResponse); rpc GetUserInfo(GetUserInfoRequest) returns (GetUserInfoResponse); rpc GetWorkspaceOnlineUsers(GetWorkspaceOnlineUsersRequest) returns (GetWorkspaceOnlineUsersResponse); rpc IsUserOnline(IsUserOnlineRequest) returns (IsUserOnlineResponse); }