Improve background workers

This commit is contained in:
Frederic Guillot
2016-06-05 14:19:07 -04:00
parent f48e545631
commit a08339059b
8 changed files with 194 additions and 9 deletions

View File

@@ -3,6 +3,7 @@
namespace Kanboard\Core\Http;
use Kanboard\Core\Base;
use Kanboard\Job\HttpAsyncJob;
/**
* HTTP client
@@ -79,6 +80,24 @@ class Client extends Base
);
}
/**
* Send a POST HTTP request encoded in JSON (Fire and forget)
*
* @access public
* @param string $url
* @param array $data
* @param string[] $headers
*/
public function postJsonAsync($url, array $data, array $headers = array())
{
$this->queueManager->push(HttpAsyncJob::getInstance($this->container)->withParams(
'POST',
$url,
json_encode($data),
array_merge(array('Content-type: application/json'), $headers)
));
}
/**
* Send a POST HTTP request encoded in www-form-urlencoded
*
@@ -98,22 +117,41 @@ class Client extends Base
);
}
/**
* Send a POST HTTP request encoded in www-form-urlencoded (fire and forget)
*
* @access public
* @param string $url
* @param array $data
* @param string[] $headers
*/
public function postFormAsync($url, array $data, array $headers = array())
{
$this->queueManager->push(HttpAsyncJob::getInstance($this->container)->withParams(
'POST',
$url,
http_build_query($data),
array_merge(array('Content-type: application/x-www-form-urlencoded'), $headers)
));
}
/**
* Make the HTTP request
*
* @access private
* @access public
* @param string $method
* @param string $url
* @param string $content
* @param string[] $headers
* @return string
*/
private function doRequest($method, $url, $content, array $headers)
public function doRequest($method, $url, $content, array $headers)
{
if (empty($url)) {
return '';
}
$startTime = microtime(true);
$stream = @fopen(trim($url), 'r', false, stream_context_create($this->getContext($method, $content, $headers)));
$response = '';
@@ -128,6 +166,7 @@ class Client extends Base
$this->logger->debug('HttpClient: payload='.$content);
$this->logger->debug('HttpClient: metadata='.var_export(@stream_get_meta_data($stream), true));
$this->logger->debug('HttpClient: response='.$response);
$this->logger->debug('HttpClient: executionTime='.(microtime(true) - $startTime));
}
return $response;