1
0
Fork 0
mirror of synced 2024-07-01 20:50:49 +12:00

Merge pull request #2832 from appwrite/feat-implement-refactor-suggestions

Feat implement refactor suggestions
This commit is contained in:
Christy Jacob 2022-02-24 21:17:04 +04:00 committed by GitHub
commit 47ff5cf54d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 65 additions and 48 deletions

View file

@ -269,6 +269,7 @@ RUN chmod +x /usr/local/bin/doctor && \
chmod +x /usr/local/bin/install && \ chmod +x /usr/local/bin/install && \
chmod +x /usr/local/bin/migrate && \ chmod +x /usr/local/bin/migrate && \
chmod +x /usr/local/bin/realtime && \ chmod +x /usr/local/bin/realtime && \
chmod +x /usr/local/bin/executor && \
chmod +x /usr/local/bin/schedule && \ chmod +x /usr/local/bin/schedule && \
chmod +x /usr/local/bin/sdks && \ chmod +x /usr/local/bin/sdks && \
chmod +x /usr/local/bin/specs && \ chmod +x /usr/local/bin/specs && \
@ -282,8 +283,7 @@ RUN chmod +x /usr/local/bin/doctor && \
chmod +x /usr/local/bin/worker-functions && \ chmod +x /usr/local/bin/worker-functions && \
chmod +x /usr/local/bin/worker-builds && \ chmod +x /usr/local/bin/worker-builds && \
chmod +x /usr/local/bin/worker-mails && \ chmod +x /usr/local/bin/worker-mails && \
chmod +x /usr/local/bin/worker-webhooks && \ chmod +x /usr/local/bin/worker-webhooks
chmod +x /usr/local/bin/executor
# Letsencrypt Permissions # Letsencrypt Permissions
RUN mkdir -p /etc/letsencrypt/live/ && chmod -Rf 755 /etc/letsencrypt/live/ RUN mkdir -p /etc/letsencrypt/live/ && chmod -Rf 755 /etc/letsencrypt/live/

View file

@ -942,7 +942,6 @@ App::post('/v1/functions/:functionId/executions')
try { try {
$executionResponse = $executor->createExecution( $executionResponse = $executor->createExecution(
projectId: $project->getId(), projectId: $project->getId(),
functionId: $function->getId(),
deploymentId: $deployment->getId(), deploymentId: $deployment->getId(),
path: $build->getAttribute('outputPath', ''), path: $build->getAttribute('outputPath', ''),
vars: $vars, vars: $vars,

View file

@ -395,17 +395,13 @@ App::delete('/v1/runtimes/:runtimeId')
App::post('/v1/execution') App::post('/v1/execution')
->desc('Create an execution') ->desc('Create an execution')
->param('runtimeId', '', new Text(64), 'The runtimeID to execute') ->param('runtimeId', '', new Text(64), 'The runtimeID to execute')
->param('path', '', new Text(0), 'Path containing the built files.', false)
->param('vars', [], new Assoc(), 'Environment variables required for the build', false) ->param('vars', [], new Assoc(), 'Environment variables required for the build', false)
->param('data', '', new Text(8192), 'Data to be forwarded to the function, this is user specified.', true) ->param('data', '', new Text(8192), 'Data to be forwarded to the function, this is user specified.', true)
->param('runtime', '', new Text(128), 'Runtime for the cloud function', false)
->param('entrypoint', '', new Text(256), 'Entrypoint of the code file')
->param('timeout', 15, new ValidatorRange(1, 900), 'Function maximum execution time in seconds.', true) ->param('timeout', 15, new ValidatorRange(1, 900), 'Function maximum execution time in seconds.', true)
->param('baseImage', '', new Text(128), 'Base image name of the runtime', false)
->inject('activeRuntimes') ->inject('activeRuntimes')
->inject('response') ->inject('response')
->action( ->action(
function (string $runtimeId, string $path, array $vars, string $data, string $runtime, string $entrypoint, $timeout, string $baseImage, $activeRuntimes, Response $response) { function (string $runtimeId, array $vars, string $data, $timeout, $activeRuntimes, Response $response) {
if (!$activeRuntimes->exists($runtimeId)) { if (!$activeRuntimes->exists($runtimeId)) {
throw new Exception('Runtime not found. Please create the runtime.', 404); throw new Exception('Runtime not found. Please create the runtime.', 404);

View file

@ -174,16 +174,6 @@ services:
- appwrite - appwrite
environment: environment:
- _APP_ENV - _APP_ENV
- _APP_OPENSSL_KEY_V1
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_REDIS_USER
- _APP_REDIS_PASS
- _APP_DB_HOST
- _APP_DB_PORT
- _APP_DB_SCHEMA
- _APP_DB_USER
- _APP_DB_PASS
- _APP_FUNCTIONS_TIMEOUT - _APP_FUNCTIONS_TIMEOUT
- _APP_FUNCTIONS_BUILD_TIMEOUT - _APP_FUNCTIONS_BUILD_TIMEOUT
- _APP_FUNCTIONS_CONTAINERS - _APP_FUNCTIONS_CONTAINERS
@ -193,13 +183,11 @@ services:
- _APP_FUNCTIONS_MEMORY_SWAP - _APP_FUNCTIONS_MEMORY_SWAP
- _APP_EXECUTOR_SECRET - _APP_EXECUTOR_SECRET
- _APP_EXECUTOR_RUNTIME_NETWORK - _APP_EXECUTOR_RUNTIME_NETWORK
- _APP_USAGE_STATS
- _APP_STATSD_HOST
- _APP_STATSD_PORT
- _APP_LOGGING_PROVIDER - _APP_LOGGING_PROVIDER
- _APP_LOGGING_CONFIG - _APP_LOGGING_CONFIG
- DOCKERHUB_PULL_USERNAME - DOCKERHUB_PULL_USERNAME
- DOCKERHUB_PULL_PASSWORD - DOCKERHUB_PULL_PASSWORD
- OPENRUNTIMES_INACTIVE_THRESHOLD
appwrite-worker-database: appwrite-worker-database:
image: <?php echo $organization; ?>/<?php echo $image; ?>:<?php echo $version."\n"; ?> image: <?php echo $organization; ?>/<?php echo $image; ?>:<?php echo $version."\n"; ?>

View file

@ -114,7 +114,6 @@ class BuildsV1 extends Worker
try { try {
$response = $this->executor->createRuntime( $response = $this->executor->createRuntime(
projectId: $projectId, projectId: $projectId,
functionId: $functionId,
deploymentId: $deploymentId, deploymentId: $deploymentId,
entrypoint: $deployment->getAttribute('entrypoint'), entrypoint: $deployment->getAttribute('entrypoint'),
source: $source, source: $source,

View file

@ -371,7 +371,7 @@ class DeletesV1 extends Worker
$executor = new Executor(); $executor = new Executor();
foreach ($deploymentIds as $deploymentId) { foreach ($deploymentIds as $deploymentId) {
try { try {
$executor->deleteRuntime($projectId, $functionId, $deploymentId); $executor->deleteRuntime($projectId, $deploymentId);
} catch (Throwable $th) { } catch (Throwable $th) {
Console::error($th->getMessage()); Console::error($th->getMessage());
} }
@ -421,7 +421,7 @@ class DeletesV1 extends Worker
Console::info("Requesting executor to delete deployment container for deployment " . $deploymentId); Console::info("Requesting executor to delete deployment container for deployment " . $deploymentId);
try { try {
$executor = new Executor(); $executor = new Executor();
$executor->deleteRuntime($projectId, $functionId, $deploymentId); $executor->deleteRuntime($projectId, $deploymentId);
} catch (Throwable $th) { } catch (Throwable $th) {
Console::error($th->getMessage()); Console::error($th->getMessage());
} }

View file

@ -290,7 +290,6 @@ class FunctionsV1 extends Worker
try { try {
$executionResponse = $this->executor->createExecution( $executionResponse = $this->executor->createExecution(
projectId: $projectId, projectId: $projectId,
functionId: $functionId,
deploymentId: $deploymentId, deploymentId: $deploymentId,
path: $build->getAttribute('outputPath', ''), path: $build->getAttribute('outputPath', ''),
vars: $vars, vars: $vars,

View file

@ -24,7 +24,7 @@ class Build extends Model
]) ])
->addRule('deploymentId', [ ->addRule('deploymentId', [
'type' => self::TYPE_STRING, 'type' => self::TYPE_STRING,
'description' => 'The deployment that created this build', 'description' => 'The deployment that created this build.',
'default' => '', 'default' => '',
'example' => '5e5ea5c16897e', 'example' => '5e5ea5c16897e',
]) ])
@ -35,7 +35,7 @@ class Build extends Model
// Building - The deployment is currently being built // Building - The deployment is currently being built
->addRule('status', [ ->addRule('status', [
'type' => self::TYPE_STRING, 'type' => self::TYPE_STRING,
'description' => 'The build status.', 'description' => 'The build status. There are a few different types and each one means something different. \nFailed - The deployment build has failed. More details can usually be found in buildStderr\nReady - The deployment build was successful and the deployment is ready to be deployed\nProcessing - The deployment is currently waiting to have a build triggered\nBuilding - The deployment is currently being built',
'default' => '', 'default' => '',
'example' => 'ready', 'example' => 'ready',
]) ])
@ -71,17 +71,17 @@ class Build extends Model
* *
* @return string * @return string
*/ */
public function getName():string public function getName(): string
{ {
return 'Build'; return 'Build';
} }
/** /**
* Get Collection * Get Type
* *
* @return string * @return string
*/ */
public function getType():string public function getType(): string
{ {
return Response::MODEL_BUILD; return Response::MODEL_BUILD;
} }

View file

@ -122,9 +122,12 @@ class Func extends Model
} }
/** /**
* Get Collection * Filter Function
* *
* @return string * Automatically converts a [] default to a stdClass, this is called while grabbing the document.
*
* @param Document $document
* @return Document
*/ */
public function filter(Document $document): Document public function filter(Document $document): Document
{ {

View file

@ -31,8 +31,25 @@ class Executor
$this->endpoint = $endpoint; $this->endpoint = $endpoint;
} }
/**
* Create runtime
*
* Launches a runtime container for a deployment ready for execution
*
* @param string $deploymentId
* @param string $projectId
* @param string $source
* @param string $runtime
* @param string $baseImage
* @param bool $remove
* @param string $entrypoint
* @param string $workdir
* @param string $destinaction
* @param string $network
* @param array $vars
* @param array $commands
*/
public function createRuntime( public function createRuntime(
string $functionId,
string $deploymentId, string $deploymentId,
string $projectId, string $projectId,
string $source, string $source,
@ -75,7 +92,15 @@ class Executor
return $response['body']; return $response['body'];
} }
public function deleteRuntime(string $projectId, string $functionId, string $deploymentId) /**
* Delete Runtime
*
* Deletes a runtime and cleans up any containers remaining.
*
* @param string $projectId
* @param string $deploymentId
*/
public function deleteRuntime(string $projectId, string $deploymentId)
{ {
$runtimeId = "$projectId-$deploymentId"; $runtimeId = "$projectId-$deploymentId";
$route = "/runtimes/$runtimeId"; $route = "/runtimes/$runtimeId";
@ -96,9 +121,23 @@ class Executor
return $response['body']; return $response['body'];
} }
/**
* Create an execution
*
* @param string $projectId
* @param string $deploymentId
* @param string $path
* @param array $vars
* @param string $entrypoint
* @param string $data
* @param string runtime
* @param string $baseImage
* @param int $timeout
*
* @return array
*/
public function createExecution( public function createExecution(
string $projectId, string $projectId,
string $functionId,
string $deploymentId, string $deploymentId,
string $path, string $path,
array $vars, array $vars,
@ -108,7 +147,6 @@ class Executor
string $baseImage, string $baseImage,
$timeout $timeout
) { ) {
$route = "/execution"; $route = "/execution";
$headers = [ $headers = [
'content-type' => 'application/json', 'content-type' => 'application/json',
@ -116,13 +154,9 @@ class Executor
]; ];
$params = [ $params = [
'runtimeId' => "$projectId-$deploymentId", 'runtimeId' => "$projectId-$deploymentId",
'path' => $path,
'vars' => $vars, 'vars' => $vars,
'data' => $data, 'data' => $data,
'runtime' => $runtime,
'entrypoint' => $entrypoint,
'timeout' => $timeout, 'timeout' => $timeout,
'baseImage' => $baseImage,
]; ];
$response = $this->call(self::METHOD_POST, $route, $headers, $params, true, 30); $response = $this->call(self::METHOD_POST, $route, $headers, $params, true, 30);
@ -133,7 +167,6 @@ class Executor
switch ($status) { switch ($status) {
case 404: case 404:
$response = $this->createRuntime( $response = $this->createRuntime(
functionId: $functionId,
deploymentId: $deploymentId, deploymentId: $deploymentId,
projectId: $projectId, projectId: $projectId,
source: $path, source: $path,

View file

@ -383,7 +383,7 @@ class FunctionsCustomClientTest extends Scope
'async' => false 'async' => false
]); ]);
$output = json_decode($execution['body']['response'], true); $output = json_decode($execution['body']['stdout'], true);
$this->assertEquals(201, $execution['headers']['status-code']); $this->assertEquals(201, $execution['headers']['status-code']);
$this->assertEquals('completed', $execution['body']['status']); $this->assertEquals('completed', $execution['body']['status']);
$this->assertEquals($functionId, $output['APPWRITE_FUNCTION_ID']); $this->assertEquals($functionId, $output['APPWRITE_FUNCTION_ID']);

View file

@ -594,12 +594,12 @@ class FunctionsCustomServerTest extends Scope
]); ]);
$this->assertEquals('completed', $execution['body']['status']); $this->assertEquals('completed', $execution['body']['status']);
$this->assertStringContainsString($data['deploymentId'], $execution['body']['response']); $this->assertStringContainsString($data['deploymentId'], $execution['body']['stdout']);
$this->assertStringContainsString('Test1', $execution['body']['response']); $this->assertStringContainsString('Test1', $execution['body']['stdout']);
$this->assertStringContainsString('http', $execution['body']['response']); $this->assertStringContainsString('http', $execution['body']['stdout']);
$this->assertStringContainsString('PHP', $execution['body']['response']); $this->assertStringContainsString('PHP', $execution['body']['stdout']);
$this->assertStringContainsString('8.0', $execution['body']['response']); $this->assertStringContainsString('8.0', $execution['body']['stdout']);
// $this->assertStringContainsString('êä', $execution['body']['response']); // tests unknown utf-8 chars // $this->assertStringContainsString('êä', $execution['body']['sdtout']); // tests unknown utf-8 chars
$this->assertLessThan(0.500, $execution['body']['time']); $this->assertLessThan(0.500, $execution['body']['time']);
return $data; return $data;