Skip to content

Commit

Permalink
feat: add fal aliases runners (#46)
Browse files Browse the repository at this point in the history
* feat: add fal aliases runners

* don't display counter when it is 0
  • Loading branch information
isidentical authored and badayvedat committed Jan 23, 2024
1 parent 2e23a53 commit 5b2c562
Show file tree
Hide file tree
Showing 6 changed files with 211 additions and 16 deletions.
29 changes: 29 additions & 0 deletions projects/fal/src/fal/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,7 @@ def _alias_table(aliases: list[AliasInfo]):
table.add_column("Max Concurrency")
table.add_column("Max Multiplexing")
table.add_column("Keep Alive")
table.add_column("Active Workers")

for app_alias in aliases:
table.add_row(
Expand All @@ -373,6 +374,7 @@ def _alias_table(aliases: list[AliasInfo]):
str(app_alias.max_concurrency),
str(app_alias.max_multiplexing),
str(app_alias.keep_alive),
str(app_alias.active_runners),
)

return table
Expand Down Expand Up @@ -453,6 +455,33 @@ def alias_update(
console.print(table)


@alias_cli.command("runners")
@click.argument("alias", required=True)
@click.pass_obj
def alias_list_runners(
client: api.FalServerlessClient,
alias: str,
):
with client.connect() as connection:
runners = connection.list_alias_runners(alias=alias)

table = Table(title="Application Runners")
table.add_column("Runner ID")
table.add_column("In Flight Requests")
table.add_column("Expires in")

for runner in runners:
table.add_row(
runner.runner_id,
str(runner.in_flight_requests),
"N/A (active)"
if not runner.expiration_countdown
else f"{runner.expiration_countdown}s",
)

console.print(table)


@alias_cli.command("scale")
@click.argument("alias", required=True)
@click.argument("max_concurrency", required=True, type=int)
Expand Down
23 changes: 23 additions & 0 deletions projects/fal/src/fal/sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,14 @@ class AliasInfo:
keep_alive: int
max_concurrency: int
max_multiplexing: int
active_runners: int


@dataclass
class RunnerInfo:
runner_id: str
in_flight_requests: int
expiration_countdown: int


@dataclass
Expand Down Expand Up @@ -263,6 +271,16 @@ def _from_grpc_alias_info(message: isolate_proto.AliasInfo) -> AliasInfo:
keep_alive=message.keep_alive,
max_concurrency=message.max_concurrency,
max_multiplexing=message.max_multiplexing,
active_runners=message.active_runners,
)


@from_grpc.register(isolate_proto.RunnerInfo)
def _from_grpc_runner_info(message: isolate_proto.RunnerInfo) -> RunnerInfo:
return RunnerInfo(
runner_id=message.runner_id,
in_flight_requests=message.in_flight_requests,
expiration_countdown=message.expiration_countdown,
)


Expand Down Expand Up @@ -524,6 +542,11 @@ def list_aliases(self) -> list[AliasInfo]:
response: isolate_proto.ListAliasesResult = self.stub.ListAliases(request)
return [from_grpc(alias) for alias in response.aliases]

def list_alias_runners(self, alias: str) -> list[RunnerInfo]:
request = isolate_proto.ListAliasRunnersRequest(alias=alias)
response = self.stub.ListAliasRunners(request)
return [from_grpc(runner) for runner in response.runners]

def set_secret(self, name: str, value: str) -> None:
request = isolate_proto.SetSecretRequest(name=name, value=value)
self.stub.SetSecret(request)
Expand Down
17 changes: 17 additions & 0 deletions projects/isolate_proto/src/isolate_proto/controller.proto
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ service IsolateController {
rpc SetSecret (SetSecretRequest) returns (SetSecretResponse) {}
// Lists all secrets
rpc ListSecrets (ListSecretsRequest) returns (ListSecretsResponse) {}
// List alias runners in detail
rpc ListAliasRunners (ListAliasRunnersRequest) returns (ListAliasRunnersResponse) {}
}

message HostedMap {
Expand Down Expand Up @@ -226,6 +228,7 @@ message AliasInfo {
int32 max_concurrency = 4;
int32 max_multiplexing = 5;
int32 keep_alive = 6;
int32 active_runners = 7;
}

message SetSecretRequest {
Expand All @@ -250,3 +253,17 @@ message Secret {
message ListSecretsResponse {
repeated Secret secrets = 1;
}

message ListAliasRunnersRequest {
string alias = 1;
}

message ListAliasRunnersResponse {
repeated RunnerInfo runners = 1;
}

message RunnerInfo {
string runner_id = 1;
int32 in_flight_requests = 2;
int32 expiration_countdown = 3;
}
Loading

0 comments on commit 5b2c562

Please sign in to comment.