diff --git a/.env.dist b/.env.dist index 097da86..8930ded 100644 --- a/.env.dist +++ b/.env.dist @@ -4,6 +4,7 @@ ESB_BEANSTALKD_URL=tcp://beanstalkd:11300 ESB_CONSOLE_PORT=8080 # ESB_HTTP_SERVER is the port for the ESB's HTTP request producers ESB_HTTP_SERVER_PORT=34981 +#ESB_HTTP_SERVER_MAX_BODY_SIZE is an optional parameter. You shoud set it if you need a value larger then default, that is 10485760 # MAILHOG_WEB_PORT_HOST is the host's port binding of the MailHog 8025 web UI server port MAILHOG_WEB_PORT_HOST=8025 diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ba48a06..945df14 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,6 +22,7 @@ jobs: env: ESB_CONSOLE_PORT: 8080 ESB_HTTP_SERVER_PORT: 34981 + ESB_HTTP_SERVER_MAX_BODY_SIZE: 10485760 ESB_BEANSTALKD_URL: tcp://127.0.0.1:11300 ES_BASE_URI: http://127.0.0.1:9200 diff --git a/composer.json b/composer.json index bb416f9..7e7334e 100644 --- a/composer.json +++ b/composer.json @@ -13,9 +13,9 @@ "php": "~7.4.0|~8.0.0", "ext-pcntl": "*", "ext-json": "*", - "symfony/dependency-injection": "^3.3", - "symfony/config": "^3.3", - "symfony/yaml": "^3.3", + "symfony/dependency-injection": "^4.3", + "symfony/config": "^4.3", + "symfony/yaml": "^4.3", "amphp/beanstalk": "^0.3.2", "monolog/monolog": "^1.23", "dragonmantank/cron-expression": "^2.0", diff --git a/docker-compose.yml b/docker-compose.yml index 5c58db8..999865d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,7 +29,7 @@ services: - "${MAILHOG_WEB_PORT_HOST}:8025" elasticsearch: - image: "docker.elastic.co/elasticsearch/elasticsearch-oss:7.4.0" + image: "docker.elastic.co/elasticsearch/elasticsearch-oss:7.8.0" env_file: - .env environment: diff --git a/esb.yml.sample b/esb.yml.sample index 2833b2d..432348b 100644 --- a/esb.yml.sample +++ b/esb.yml.sample @@ -1,13 +1,13 @@ parameters: - beanstalkd: tcp://127.0.0.1:11300 # Beanstalkd connection URI - http_server_port: 34981 # HTTP Server Port - logger_mail_to: toemail@address.com # Email address where to send significant events mail notifications - logger_mail_from: "From Name " # From name/address for significant events mail notifications - console_port: 8080 # Web console port - console_username: admin # Web console username - console_password: password # Web console password - console_log_file: /tmp/esb_console.log # Web console server log file - elasticsearch_base_uri: '%env(string:ES_BASE_URI)%' # ElasticSearch base URI (i.e. http://elasticsearch:9200) + beanstalkd: tcp://127.0.0.1:11300 # Beanstalkd connection URI + http_server_port: 34981 # HTTP Server Port + logger_mail_to: toemail@address.com # Email address where to send significant events mail notifications + logger_mail_from: "From Name " # From name/address for significant events mail notifications + console_port: 8080 # Web console port + console_username: admin # Web console username + console_password: password # Web console password + console_log_file: /tmp/esb_console.log # Web console server log file + elasticsearch_base_uri: '%env(string:ES_BASE_URI)%' # ElasticSearch base URI (i.e. http://elasticsearch:9200) services: _defaults: diff --git a/services.yml b/services.yml index 3ecd9df..0aa2291 100644 --- a/services.yml +++ b/services.yml @@ -15,20 +15,22 @@ services: Webgriffe\Esb\Service\HttpProducersServer: arguments: $port: '%http_server_port%' + $logger: '@Psr\Log\LoggerInterface' + $maxBodySize: '%env(default::int:ESB_HTTP_SERVER_MAX_BODY_SIZE)%' Monolog\Handler\StreamHandler: class: \Monolog\Handler\StreamHandler - arguments: [ 'php://stdout', !php/const:Monolog\Logger::DEBUG ] + arguments: [ 'php://stdout', !php/const Monolog\Logger::DEBUG ] Monolog\Handler\ErrorLogHandler: class: \Monolog\Handler\ErrorLogHandler - arguments: [ !php/const:Monolog\Handler\ErrorLogHandler::OPERATING_SYSTEM, !php/const:Monolog\Logger::ERROR ] + arguments: [ !php/const Monolog\Handler\ErrorLogHandler::OPERATING_SYSTEM, !php/const Monolog\Logger::ERROR ] Monolog\Formatter\HtmlFormatter: {} Monolog\Handler\NativeMailerHandler: class: \Monolog\Handler\NativeMailerHandler - arguments: [ '%logger_mail_to%', 'Significant event from ESB', '%logger_mail_from%', !php/const:Monolog\Logger::WARNING ] + arguments: [ '%logger_mail_to%', 'Significant event from ESB', '%logger_mail_from%', !php/const Monolog\Logger::WARNING ] calls: - method: setFormatter arguments: @@ -74,6 +76,7 @@ services: $classMetadataFactory: '@serializer.class_metadata_factory' $propertyTypeExtractor: '@serializer.object_normalizer.reflection_extractor' serializer: + public: true class: \Symfony\Component\Serializer\Serializer arguments: - ['@serializer.array_denormalizer', '@serializer.date_time_normalizer', '@serializer.object_normalizer'] @@ -83,5 +86,6 @@ services: Symfony\Component\Serializer\Normalizer\DenormalizerInterface: '@serializer' Webgriffe\Esb\Service\ElasticSearch: + public: true arguments: $normalizer: '@serializer' diff --git a/src/Service/HttpProducersServer.php b/src/Service/HttpProducersServer.php index a18f7a1..36131ef 100644 --- a/src/Service/HttpProducersServer.php +++ b/src/Service/HttpProducersServer.php @@ -7,6 +7,7 @@ use function Amp\call; use Amp\CallableMaker; use Amp\Http\Server\HttpServer; +use Amp\Http\Server\Options; use Amp\Http\Server\Request; use Amp\Http\Server\RequestHandler\CallableRequestHandler; use Amp\Http\Server\Response; @@ -42,10 +43,16 @@ class HttpProducersServer */ private $httpServer; - public function __construct(int $port, LoggerInterface $logger) + /** + * @var int|null + */ + private $maxBodySize; + + public function __construct(int $port, LoggerInterface $logger, ?int $maxBodySize) { $this->port = $port; $this->logger = $logger; + $this->maxBodySize = $maxBodySize; } /** @@ -59,10 +66,17 @@ public function start(): Promise Socket\listen("[::]:{$this->port}"), ]; + $options = null; + if ($this->maxBodySize !== null) { + $options = new Options(); + $options->withBodySizeLimit($this->maxBodySize); + } + $this->httpServer = new HttpServer( $sockets, new CallableRequestHandler($this->callableFromInstanceMethod('requestHandler')), - new NullLogger() + new NullLogger(), + $options ); yield $this->httpServer->start();