63 lines
2.0 KiB
PHP
63 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Libraries\MySocket;
|
|
|
|
|
|
use Cloudflare\API\Auth\APIKey;
|
|
use Cloudflare\API\Adapter\Guzzle;
|
|
use App\Libraries\CommonLibrary;
|
|
|
|
abstract class CloudflareSocket extends CommonLibrary
|
|
{
|
|
private static int $_request = 0;
|
|
private static int $_request_max = 100;
|
|
private static int $_request_timewait = 60;
|
|
private $_adapter = null;
|
|
protected function __construct()
|
|
{
|
|
parent::__construct();
|
|
self::$_request_max = getenv("cfmgr.request.max");
|
|
}
|
|
abstract public function getArrayByResult($result, array $formDatas = []): array;
|
|
final protected function setAdapter(string $email, string $auth_key): void
|
|
{
|
|
$this->_adapter = new Guzzle(new APIKey($email, $auth_key));
|
|
}
|
|
final public function request(): Guzzle
|
|
{
|
|
if ($this->_adapter === null) {
|
|
throw new \Exception(+__FUNCTION__ . " => Adapter를 정의하지 않았습니다.");
|
|
}
|
|
if (self::$_request >= self::$_request_max) {
|
|
log_message('warning', sprintf("--Cloudflare API Call %s초 대기 시작--", self::$_request_timewait));
|
|
sleep(intval(getenv("cf.mgr.request.time.wait")));
|
|
self::$_request = 0;
|
|
log_message('warning', sprintf("--Cloudflare API Call %s초 대기 종료--", self::$_request_timewait));
|
|
}
|
|
self::$_request++;
|
|
return $this->_adapter;
|
|
}
|
|
final protected function reload_procedure($uri): array
|
|
{
|
|
$page = 1; //Page는 1부터 시작해야함
|
|
$perpage_max = getenv("cfmgr.request.perpage.max");
|
|
$results = [];
|
|
do {
|
|
$query = [
|
|
'page' => $page,
|
|
'per_page' => $perpage_max,
|
|
'match' => 'all',
|
|
];
|
|
$cf = $this->request()->get($uri, $query);
|
|
$cf = json_decode($cf->getBody());
|
|
if (!$cf->success) {
|
|
throw new \Exception(__FUNCTION__ . "에서 실패:\n" . var_export($cf, true));
|
|
}
|
|
$results[] = $cf->result;
|
|
//Loop 제한 : 한페이지에서 가져온 갯수가 perpage_max보다 적다는것은 더이상 다음페이지기 없으므로 0로 종료시키기 위함
|
|
$page = count($cf->result) < $perpage_max ? 0 : $page + 1;
|
|
} while (0 < $page);
|
|
return $results;
|
|
}
|
|
}
|