Change exitCode to statusCode and move build to tag create
Change exitCode to statusCode and move build to tag create instead of tag deploy
This commit is contained in:
parent
37da3c5651
commit
3c26a08202
|
@ -2255,7 +2255,7 @@ $collections = [
|
|||
'filters' => [],
|
||||
],
|
||||
[
|
||||
'$id' => 'exitCode',
|
||||
'$id' => 'statusCode',
|
||||
'type' => Database::VAR_INTEGER,
|
||||
'format' => '',
|
||||
'size' => 0,
|
||||
|
|
|
@ -858,7 +858,7 @@ App::post('/v1/functions/:functionId/executions')
|
|||
'tagId' => $tag->getId(),
|
||||
'trigger' => 'http', // http / schedule / event
|
||||
'status' => 'waiting', // waiting / processing / completed / failed
|
||||
'exitCode' => 0,
|
||||
'statusCode' => 0,
|
||||
'stdout' => '',
|
||||
'stderr' => '',
|
||||
'time' => 0.0,
|
||||
|
|
|
@ -665,6 +665,10 @@ function createRuntimeServer(string $functionId, string $projectId, string $tagI
|
|||
return $database->getDocument('tags', $tagId);
|
||||
});
|
||||
|
||||
if ($tag->getAttribute('buildId') === null) {
|
||||
throw new Exception('Tag has no buildId');
|
||||
}
|
||||
|
||||
// Grab Build Document
|
||||
$build = Authorization::skip(function () use ($database, $tag) {
|
||||
return $database->getDocument('builds', $tag->getAttribute('buildId'));
|
||||
|
@ -856,7 +860,7 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
|||
'tagId' => $tag->getId(),
|
||||
'trigger' => $trigger, // http / schedule / event
|
||||
'status' => 'processing', // waiting / processing / completed / failed
|
||||
'exitCode' => 0,
|
||||
'statusCode' => 0,
|
||||
'stdout' => '',
|
||||
'stderr' => '',
|
||||
'time' => 0.0,
|
||||
|
@ -873,7 +877,7 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
|||
Console::error('Execution Failed. Reason: Code was still being built.');
|
||||
|
||||
$execution->setAttribute('status', 'failed')
|
||||
->setAttribute('exitCode', 1)
|
||||
->setAttribute('statusCode', 500)
|
||||
->setAttribute('stderr', 'Tag is still being built.')
|
||||
->setAttribute('time', 0);
|
||||
|
||||
|
@ -951,7 +955,7 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
|||
} catch (Exception $e) {
|
||||
Console::error('Something went wrong building the code. ' . $e->getMessage());
|
||||
$execution->setAttribute('status', 'failed')
|
||||
->setAttribute('exitCode', 1)
|
||||
->setAttribute('statusCode', 500)
|
||||
->setAttribute('stderr', \utf8_encode(\mb_substr($e->getMessage(), -4000))) // log last 4000 chars output
|
||||
->setAttribute('time', 0);
|
||||
|
||||
|
@ -972,7 +976,7 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
|||
Console::error('Something went wrong building the runtime server. ' . $e->getMessage());
|
||||
|
||||
$execution->setAttribute('status', 'failed')
|
||||
->setAttribute('exitCode', 1)
|
||||
->setAttribute('statusCode', 500)
|
||||
->setAttribute('stderr', \utf8_encode(\mb_substr($e->getMessage(), -4000))) // log last 4000 chars output
|
||||
->setAttribute('time', 0);
|
||||
|
||||
|
@ -1012,8 +1016,7 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
|||
|
||||
$executionStart = \microtime(true);
|
||||
|
||||
$exitCode = 0;
|
||||
$statusCode = 200;
|
||||
$statusCode = 0;
|
||||
|
||||
$errNo = -1;
|
||||
$attempts = 0;
|
||||
|
@ -1067,12 +1070,12 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
|||
|
||||
if ($attempts >= 5) {
|
||||
$stderr = 'Failed to connect to executor runtime after 5 attempts.';
|
||||
$exitCode = 124;
|
||||
$statusCode = 124;
|
||||
}
|
||||
|
||||
// If timeout error
|
||||
if ($errNo == CURLE_OPERATION_TIMEDOUT || $errNo == 110) {
|
||||
$exitCode = 124;
|
||||
$statusCode = 124;
|
||||
}
|
||||
|
||||
// 110 is the Swoole error code for timeout, see: https://www.swoole.co.uk/docs/swoole-error-code
|
||||
|
@ -1081,29 +1084,43 @@ function execute(string $trigger, string $projectId, string $executionId, string
|
|||
throw new Exception('Curl error: ' . $error, 500);
|
||||
}
|
||||
|
||||
$executionData = [];
|
||||
|
||||
if (!empty($executorResponse)) {
|
||||
$executionData = json_decode($executorResponse, true);
|
||||
}
|
||||
|
||||
if (isset($executionData['code'])) {
|
||||
$exitCode = $executionData['code'];
|
||||
$statusCode = $executionData['code'];
|
||||
}
|
||||
|
||||
if ($exitCode === 500) {
|
||||
$stderr = $executionData['message'];
|
||||
} else if ($exitCode === 0) {
|
||||
if ($statusCode === 500) {
|
||||
if (isset($executionData['message'])) {
|
||||
$stderr = $executionData['message'];
|
||||
} else {
|
||||
$stderr = 'Internal Runtime error';
|
||||
}
|
||||
} else if ($statusCode === 124) {
|
||||
$stderr = 'Execution timed out.';
|
||||
} else if ($statusCode === 0) {
|
||||
$stderr = 'Execution failed.';
|
||||
} else if ($statusCode >= 200 && $statusCode < 300) {
|
||||
$stdout = $executorResponse;
|
||||
} else {
|
||||
$stderr = 'Execution failed.';
|
||||
}
|
||||
|
||||
$executionEnd = \microtime(true);
|
||||
$executionTime = ($executionEnd - $executionStart);
|
||||
$functionStatus = ($exitCode === 0) ? 'completed' : 'failed';
|
||||
$functionStatus = ($statusCode >= 200 && $statusCode < 300) ? 'completed' : 'failed';
|
||||
|
||||
var_dump($statusCode);
|
||||
|
||||
Console::info('Function executed in ' . ($executionEnd - $executionStart) . ' seconds, status: ' . $functionStatus);
|
||||
|
||||
$execution->setAttribute('tagId', $tag->getId())
|
||||
->setAttribute('status', $functionStatus)
|
||||
->setAttribute('exitCode', $exitCode)
|
||||
->setAttribute('statusCode', $statusCode)
|
||||
->setAttribute('stdout', \utf8_encode(\mb_substr($stdout, -8000)))
|
||||
->setAttribute('stderr', \utf8_encode(\mb_substr($stderr, -8000)))
|
||||
->setAttribute('time', $executionTime);
|
||||
|
@ -1341,7 +1358,7 @@ function handleShutdown()
|
|||
// Mark all processing executions as failed
|
||||
foreach ($executions as $execution) {
|
||||
$execution->setAttribute('status', 'failed')
|
||||
->setAttribute('exitCode', 1)
|
||||
->setAttribute('statusCode', 1)
|
||||
->setAttribute('stderr', 'Appwrite was shutdown during execution');
|
||||
|
||||
Authorization::skip(function () use ($database, $execution) {
|
||||
|
|
|
@ -371,7 +371,7 @@ $usageStatsEnabled = $this->getParam('usageStatsEnabled', true);
|
|||
</td>
|
||||
<td data-title="Status: ">
|
||||
<span data-ls-bind="{{execution.status}}"></span>
|
||||
<span class="text-fade text-size-small" data-ls-if="{{execution.exitCode}} !== 0" data-ls-bind=" exit code: {{execution.exitCode}}"></span>
|
||||
<span class="text-fade text-size-small" data-ls-if="{{execution.statusCode}} < 200 && {{execution.statusCode}} >= 300" data-ls-bind=" exit code: {{execution.statusCode}}"></span>
|
||||
</td>
|
||||
<td data-title="Trigger: ">
|
||||
<span data-ls-bind="{{execution.trigger}}"></span>
|
||||
|
|
|
@ -47,9 +47,9 @@ class Execution extends Model
|
|||
'default' => '',
|
||||
'example' => 'processing',
|
||||
])
|
||||
->addRule('exitCode', [
|
||||
->addRule('statusCode', [
|
||||
'type' => self::TYPE_INTEGER,
|
||||
'description' => 'The script exit code.',
|
||||
'description' => 'The script status code.',
|
||||
'default' => 0,
|
||||
'example' => 0,
|
||||
])
|
||||
|
|
|
@ -86,6 +86,9 @@ class FunctionsCustomClientTest extends Scope
|
|||
|
||||
$this->assertEquals(201, $tag['headers']['status-code']);
|
||||
|
||||
// Wait for tag to be built.
|
||||
sleep(5);
|
||||
|
||||
$function = $this->client->call(Client::METHOD_PATCH, '/functions/'.$function['body']['$id'].'/tag', [
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
|
@ -96,9 +99,6 @@ class FunctionsCustomClientTest extends Scope
|
|||
|
||||
$this->assertEquals(200, $function['headers']['status-code']);
|
||||
|
||||
// Wait for tag to be built.
|
||||
sleep(5);
|
||||
|
||||
$execution = $this->client->call(Client::METHOD_POST, '/functions/'.$function['body']['$id'].'/executions', [
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
|
@ -169,6 +169,9 @@ class FunctionsCustomClientTest extends Scope
|
|||
|
||||
$tagId = $tag['body']['$id'] ?? '';
|
||||
|
||||
// Wait for tag to be built.
|
||||
sleep(5);
|
||||
|
||||
$this->assertEquals(201, $tag['headers']['status-code']);
|
||||
|
||||
$function = $this->client->call(Client::METHOD_PATCH, '/functions/'.$functionId.'/tag', [
|
||||
|
@ -181,9 +184,6 @@ class FunctionsCustomClientTest extends Scope
|
|||
|
||||
$this->assertEquals(200, $function['headers']['status-code']);
|
||||
|
||||
// Wait for tag to be built.
|
||||
sleep(5);
|
||||
|
||||
$execution = $this->client->call(Client::METHOD_POST, '/functions/'.$functionId.'/executions', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $projectId,
|
||||
|
@ -319,6 +319,9 @@ class FunctionsCustomClientTest extends Scope
|
|||
|
||||
$this->assertEquals(201, $tag['headers']['status-code']);
|
||||
|
||||
// Wait for tag to be built.
|
||||
sleep(5);
|
||||
|
||||
$function = $this->client->call(Client::METHOD_PATCH, '/functions/'.$functionId.'/tag', [
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $projectId,
|
||||
|
@ -329,9 +332,6 @@ class FunctionsCustomClientTest extends Scope
|
|||
|
||||
$this->assertEquals(200, $function['headers']['status-code']);
|
||||
|
||||
// Wait for tag to be built.
|
||||
sleep(5);
|
||||
|
||||
$execution = $this->client->call(Client::METHOD_POST, '/functions/'.$functionId.'/executions', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $projectId,
|
||||
|
|
|
@ -292,6 +292,9 @@ class FunctionsCustomServerTest extends Scope
|
|||
$this->assertIsInt($tag['body']['dateCreated']);
|
||||
$this->assertEquals('index.php', $tag['body']['entrypoint']);
|
||||
// $this->assertGreaterThan(10000, $tag['body']['size']);
|
||||
|
||||
// Wait for tag to build.
|
||||
sleep(5);
|
||||
|
||||
/**
|
||||
* Test for FAILURE
|
||||
|
@ -320,9 +323,6 @@ class FunctionsCustomServerTest extends Scope
|
|||
$this->assertIsInt($response['body']['dateCreated']);
|
||||
$this->assertIsInt($response['body']['dateUpdated']);
|
||||
$this->assertEquals($data['tagId'], $response['body']['tag']);
|
||||
|
||||
// Wait for tag to be built.
|
||||
sleep(5);
|
||||
|
||||
/**
|
||||
* Test for FAILURE
|
||||
|
@ -445,7 +445,7 @@ class FunctionsCustomServerTest extends Scope
|
|||
$this->assertIsInt($execution['body']['dateCreated']);
|
||||
$this->assertEquals($data['functionId'], $execution['body']['functionId']);
|
||||
$this->assertEquals('waiting', $execution['body']['status']);
|
||||
$this->assertEquals(0, $execution['body']['exitCode']);
|
||||
$this->assertEquals(0, $execution['body']['statusCode']);
|
||||
$this->assertEquals('', $execution['body']['stdout']);
|
||||
$this->assertEquals('', $execution['body']['stderr']);
|
||||
$this->assertEquals(0, $execution['body']['time']);
|
||||
|
@ -462,7 +462,7 @@ class FunctionsCustomServerTest extends Scope
|
|||
$this->assertIsInt($execution['body']['dateCreated']);
|
||||
$this->assertEquals($data['functionId'], $execution['body']['functionId']);
|
||||
$this->assertEquals('completed', $execution['body']['status']);
|
||||
$this->assertEquals(0, $execution['body']['exitCode']);
|
||||
$this->assertEquals(200, $execution['body']['statusCode']);
|
||||
$this->assertStringContainsString($execution['body']['functionId'], $execution['body']['stdout']);
|
||||
$this->assertStringContainsString($data['tagId'], $execution['body']['stdout']);
|
||||
$this->assertStringContainsString('Test1', $execution['body']['stdout']);
|
||||
|
@ -685,6 +685,9 @@ class FunctionsCustomServerTest extends Scope
|
|||
$tagId = $tag['body']['$id'] ?? '';
|
||||
$this->assertEquals(201, $tag['headers']['status-code']);
|
||||
|
||||
// Allow build step to run
|
||||
sleep(5);
|
||||
|
||||
$tag = $this->client->call(Client::METHOD_PATCH, '/functions/'.$functionId.'/tag', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
|
@ -694,9 +697,6 @@ class FunctionsCustomServerTest extends Scope
|
|||
]);
|
||||
|
||||
$this->assertEquals(200, $tag['headers']['status-code']);
|
||||
|
||||
// Allow build step to run
|
||||
sleep(5);
|
||||
|
||||
$execution = $this->client->call(Client::METHOD_POST, '/functions/'.$functionId.'/executions', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
|
@ -723,11 +723,11 @@ class FunctionsCustomServerTest extends Scope
|
|||
$this->assertEquals($executions['body']['executions'][0]['$id'], $executionId);
|
||||
$this->assertEquals($executions['body']['executions'][0]['trigger'], 'http');
|
||||
$this->assertEquals($executions['body']['executions'][0]['status'], 'failed');
|
||||
$this->assertEquals($executions['body']['executions'][0]['exitCode'], 124);
|
||||
$this->assertEquals($executions['body']['executions'][0]['statusCode'], 124);
|
||||
$this->assertGreaterThan(2, $executions['body']['executions'][0]['time']);
|
||||
$this->assertLessThan(3, $executions['body']['executions'][0]['time']);
|
||||
$this->assertEquals($executions['body']['executions'][0]['stdout'], '');
|
||||
$this->assertEquals($executions['body']['executions'][0]['stderr'], '');
|
||||
$this->assertEquals($executions['body']['executions'][0]['stderr'], 'Execution timed out.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -768,6 +768,9 @@ class FunctionsCustomServerTest extends Scope
|
|||
$tagId = $tag['body']['$id'] ?? '';
|
||||
$this->assertEquals(201, $tag['headers']['status-code']);
|
||||
|
||||
// Allow build step to run
|
||||
sleep(5);
|
||||
|
||||
$tag = $this->client->call(Client::METHOD_PATCH, '/functions/'.$functionId.'/tag', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
|
@ -776,9 +779,6 @@ class FunctionsCustomServerTest extends Scope
|
|||
]);
|
||||
|
||||
$this->assertEquals(200, $tag['headers']['status-code']);
|
||||
|
||||
// Allow build step to run
|
||||
sleep(5);
|
||||
|
||||
$execution = $this->client->call(Client::METHOD_POST, '/functions/'.$functionId.'/executions', array_merge([
|
||||
'content-type' => 'application/json',
|
||||
|
|
Loading…
Reference in a new issue