fal-js/proto/controller.proto
2023-02-22 13:39:40 -08:00

199 lines
5.6 KiB
Protocol Buffer

syntax = "proto3";
import "common.proto";
import "server.proto";
import "google/protobuf/timestamp.proto";
package controller;
service IsolateController {
// Run the given function on the specified environment. Streams logs
// and the result originating from that function.
rpc Run (HostedRun) returns (stream HostedRunResult) {}
// Run the given function in parallel with the given inputs
rpc Map (HostedMap) returns (stream HostedRunResult) {}
// Schedule the given function to be run with the specified cron.
rpc Schedule (HostedRunCron) returns (ScheduleInfo) {}
// List scheduled runs.
rpc ListScheduledRuns (ListScheduledRunsRequest) returns (ListScheduledRunsResponse) {}
// Cancel a scheduled run.
rpc CancelScheduledRun (CancelScheduledRunRequest) returns (CancelScheduledRunResponse) {}
// List all the activations of one scheduled run.
rpc ListScheduledRunActivations (ListScheduledRunActivationsRequest) returns (ListScheduledRunActivationsResponse) {}
// Get logs from a particular activation of a scheduled run.
rpc GetScheduledActivationLogs (GetScheduledActivationLogsRequest) returns (GetScheduledActivationLogsResponse) {}
// Creates an authentication key for a user
rpc CreateUserKey (CreateUserKeyRequest) returns (CreateUserKeyResponse) {}
// Lists the user's authentication keys
rpc ListUserKeys (ListUserKeysRequest) returns (ListUserKeysResponse) {}
// Revokes an authentication key for a user
rpc RevokeUserKey (RevokeUserKeyRequest) returns (RevokeUserKeyResponse) {}
}
message HostedMap {
// Environment definitions.
repeated EnvironmentDefinition environments = 1;
// Machine requirements
optional MachineRequirements machine_requirements = 2;
// Function to run.
SerializedObject function = 3;
// Inputs to the function
repeated SerializedObject inputs = 4;
}
message HostedRun {
// Environment definitions.
repeated EnvironmentDefinition environments = 1;
// Machine requirements
optional MachineRequirements machine_requirements = 2;
// Function to run.
SerializedObject function = 3;
// Optional setup function to pass as the first argument to the function.
optional SerializedObject setup_func = 4;
}
message HostedRunCron {
// Environment definitions.
repeated EnvironmentDefinition environments = 1;
// Machine requirements
optional MachineRequirements machine_requirements = 2;
// Function to run.
SerializedObject function = 3;
// cron string to represent the run schedule
string cron = 4;
}
message CancelScheduledRunRequest {
// The id of the scheduled run to cancel.
string run_id = 1;
}
message CancelScheduledRunResponse {
// Empty. For future use.
}
message ListScheduledRunsRequest {
// Empty. For future use.
}
message ListScheduledRunActivationsRequest {
// The id of the scheduled run to list activations for.
string run_id = 1;
}
message ListScheduledRunActivationsResponse {
// The list of activations (which correspond to timestamps)
repeated string activation_ids = 1;
}
message ListScheduledRunsResponse {
repeated ScheduleInfo scheduled_runs = 1;
}
message GetScheduledActivationLogsRequest {
// The id of the scheduled run to get.
string run_id = 1;
// The id of the activation to get logs for.
string activation_id = 2;
}
message GetScheduledActivationLogsResponse {
// All the logs from this activation (the format is TBD, currently raw strings).
bytes raw_logs = 1;
}
message CreateUserKeyRequest {
// Empty. For future use.
}
message CreateUserKeyResponse {
string key_secret = 1;
string key_id = 2;
optional string description = 3;
}
message ListUserKeysRequest {
// Empty. For future use.
}
message ListUserKeysResponse {
repeated UserKeyInfo user_keys = 1;
}
message RevokeUserKeyRequest {
string key_id = 1;
}
message RevokeUserKeyResponse {
// Empty. For future use.
}
message UserKeyInfo {
string key_id = 1;
google.protobuf.Timestamp created_at = 2;
}
message ScheduleInfo {
// Unique run id / token.
string run_id = 1;
enum State {
// The run has been scheduled.
SCHEDULED = 0;
// The run has failed because of isolate.
INTERNAL_FAILURE = 1;
// The run has been cancelled.
CANCELLED = 2;
}
// The state of the run.
State state = 2;
// Cron string to represent the run schedule.
string cron = 3;
}
message HostedRunResult {
// Unique run id / token.
string run_id = 1;
// Optionally the status of the current run (in terms of
// fal cloud).
optional HostedRunStatus status = 2;
// The most recent logs from the run.
repeated Log logs = 3;
// The result of the run, if it is complete (indicated by
// status.is_complete).
optional SerializedObject return_value = 4;
}
message HostedRunStatus {
enum State {
// The run is in progress.
IN_PROGRESS = 0;
// The run has completed successfully.
SUCCESS = 1;
// The run has failed because of isolate.
INTERNAL_FAILURE = 2;
// TODO: probably QUEUED, etc.
}
// The state of the run.
State state = 1;
// TODO: probably a free form struct for more detailed
// information (how it crashed, position in queue, etc).
}
message MachineRequirements {
// Machine type. It is not an enum because we want to be able
// to dynamically add new machine types without regenerating
// both the client and the server. Validation is done at the
// server side.
string machine_type = 1;
optional int32 keep_alive = 2;
}