Merge pull request #8493 from appwrite/fix-4xx-executions-status
Fix: 4XX execution status
This commit is contained in:
commit
4abb6bcabf
7 changed files with 70 additions and 5 deletions
|
@ -1878,7 +1878,7 @@ App::post('/v1/functions/:functionId/executions')
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Update execution status */
|
/** Update execution status */
|
||||||
$status = $executionResponse['statusCode'] >= 400 ? 'failed' : 'completed';
|
$status = $executionResponse['statusCode'] >= 500 ? 'failed' : 'completed';
|
||||||
$execution->setAttribute('status', $status);
|
$execution->setAttribute('status', $status);
|
||||||
$execution->setAttribute('responseStatusCode', $executionResponse['statusCode']);
|
$execution->setAttribute('responseStatusCode', $executionResponse['statusCode']);
|
||||||
$execution->setAttribute('responseHeaders', $headersFiltered);
|
$execution->setAttribute('responseHeaders', $headersFiltered);
|
||||||
|
|
|
@ -302,7 +302,7 @@ function router(App $utopia, Database $dbForConsole, callable $getProjectDB, Swo
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Update execution status */
|
/** Update execution status */
|
||||||
$status = $executionResponse['statusCode'] >= 400 ? 'failed' : 'completed';
|
$status = $executionResponse['statusCode'] >= 500 ? 'failed' : 'completed';
|
||||||
$execution->setAttribute('status', $status);
|
$execution->setAttribute('status', $status);
|
||||||
$execution->setAttribute('responseStatusCode', $executionResponse['statusCode']);
|
$execution->setAttribute('responseStatusCode', $executionResponse['statusCode']);
|
||||||
$execution->setAttribute('responseHeaders', $headersFiltered);
|
$execution->setAttribute('responseHeaders', $headersFiltered);
|
||||||
|
|
|
@ -494,7 +494,7 @@ class Functions extends Action
|
||||||
logging: $function->getAttribute('logging', true),
|
logging: $function->getAttribute('logging', true),
|
||||||
);
|
);
|
||||||
|
|
||||||
$status = $executionResponse['statusCode'] >= 400 ? 'failed' : 'completed';
|
$status = $executionResponse['statusCode'] >= 500 ? 'failed' : 'completed';
|
||||||
|
|
||||||
$headersFiltered = [];
|
$headersFiltered = [];
|
||||||
foreach ($executionResponse['headers'] as $key => $value) {
|
foreach ($executionResponse['headers'] as $key => $value) {
|
||||||
|
|
|
@ -24,6 +24,12 @@ class V18 extends Filter
|
||||||
|
|
||||||
protected function parseExecution(array $content)
|
protected function parseExecution(array $content)
|
||||||
{
|
{
|
||||||
|
if(!empty($content['status']) && !empty($content['statusCode'])) {
|
||||||
|
if($content['status'] === 'completed' && $content['statusCode'] >= 400 && $content['statusCode'] < 500) {
|
||||||
|
$content['status'] = 'failed';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unset($content['scheduledAt']);
|
unset($content['scheduledAt']);
|
||||||
return $content;
|
return $content;
|
||||||
}
|
}
|
||||||
|
|
|
@ -802,6 +802,23 @@ class FunctionsCustomServerTest extends Scope
|
||||||
$this->assertEquals('', $execution['body']['logs']);
|
$this->assertEquals('', $execution['body']['logs']);
|
||||||
$this->assertLessThan(10, $execution['body']['duration']);
|
$this->assertLessThan(10, $execution['body']['duration']);
|
||||||
|
|
||||||
|
$execution = $this->client->call(Client::METHOD_POST, '/functions/' . $data['functionId'] . '/executions', array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), [
|
||||||
|
'async' => false,
|
||||||
|
'path' => '/?code=400'
|
||||||
|
]);
|
||||||
|
$this->assertEquals(201, $execution['headers']['status-code']);
|
||||||
|
$this->assertEquals('completed', $execution['body']['status']);
|
||||||
|
$this->assertEquals(400, $execution['body']['responseStatusCode']);
|
||||||
|
|
||||||
|
$execution = $this->client->call(Client::METHOD_DELETE, '/functions/' . $data['functionId'] . '/executions/' . $execution['body']['$id'], array_merge([
|
||||||
|
'content-type' => 'application/json',
|
||||||
|
'x-appwrite-project' => $this->getProject()['$id'],
|
||||||
|
], $this->getHeaders()), []);
|
||||||
|
$this->assertEquals(204, $execution['headers']['status-code']);
|
||||||
|
|
||||||
return array_merge($data, ['executionId' => $executionId]);
|
return array_merge($data, ['executionId' => $executionId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return function ($context) {
|
return function ($context) {
|
||||||
|
$statusCode = $context->req->query['code'] ?? '200';
|
||||||
|
|
||||||
return $context->res->json([
|
return $context->res->json([
|
||||||
'APPWRITE_FUNCTION_ID' => \getenv('APPWRITE_FUNCTION_ID') ?: '',
|
'APPWRITE_FUNCTION_ID' => \getenv('APPWRITE_FUNCTION_ID') ?: '',
|
||||||
'APPWRITE_FUNCTION_NAME' => \getenv('APPWRITE_FUNCTION_NAME') ?: '',
|
'APPWRITE_FUNCTION_NAME' => \getenv('APPWRITE_FUNCTION_NAME') ?: '',
|
||||||
|
@ -11,5 +13,5 @@ return function ($context) {
|
||||||
'APPWRITE_REGION' => \getenv('APPWRITE_REGION') ?: '',
|
'APPWRITE_REGION' => \getenv('APPWRITE_REGION') ?: '',
|
||||||
'UNICODE_TEST' => "êä",
|
'UNICODE_TEST' => "êä",
|
||||||
'GLOBAL_VARIABLE' => \getenv('GLOBAL_VARIABLE') ?: ''
|
'GLOBAL_VARIABLE' => \getenv('GLOBAL_VARIABLE') ?: ''
|
||||||
]);
|
], \intval($statusCode));
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,7 +34,7 @@ class V18Test extends TestCase
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +60,46 @@ class V18Test extends TestCase
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
'update 404 status' => [
|
||||||
|
[
|
||||||
|
'statusCode' => '404',
|
||||||
|
'status' => 'completed'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'statusCode' => '404',
|
||||||
|
'status' => 'failed'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'update 400 status' => [
|
||||||
|
[
|
||||||
|
'statusCode' => '400',
|
||||||
|
'status' => 'completed'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'statusCode' => '400',
|
||||||
|
'status' => 'failed'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'dont update 200 status' => [
|
||||||
|
[
|
||||||
|
'statusCode' => '200',
|
||||||
|
'status' => 'completed'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'statusCode' => '200',
|
||||||
|
'status' => 'completed'
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'dont update 500 status' => [
|
||||||
|
[
|
||||||
|
'statusCode' => '500',
|
||||||
|
'status' => 'failed'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'statusCode' => '500',
|
||||||
|
'status' => 'failed'
|
||||||
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue