openstamanager/src/API/Common/Task.php

73 lines
2.1 KiB
PHP
Raw Normal View History

2020-08-28 13:51:15 +02:00
<?php
namespace API\Common;
use API\Interfaces\CreateInterface;
use API\Interfaces\RetrieveInterface;
use API\Resource;
use Models\Cache;
use Tasks\Log;
class Task extends Resource implements RetrieveInterface, CreateInterface
{
public function retrieve($request)
{
$logs = Log::latest()
->take(1000)->get()
->groupBy('task.name');
return [
'results' => $logs->toArray(),
];
}
public function create($request)
{
// Rimozione della registrazione del cron attuale
$ultima_esecuzione = Cache::get('Ultima esecuzione del cron');
$ultima_esecuzione->set(null);
// Segnalazione della chiusura al cron attuale
$cron_id = Cache::get('ID del cron');
$cron_id->set(null);
// Rimozione dell'eventuale blocco sul cron
$disattiva = Cache::get('Disabilita cron');
$disattiva->set(null);
// Chiamata al cron per l'avvio
$this->request();
}
/**
* Richiesta HTTP fire-and-forget.
*
* @source https://cwhite.me/blog/fire-and-forget-http-requests-in-php
*/
protected function request()
{
$endpoint = BASEURL.'/cron.php';
$postData = json_encode([]);
$endpointParts = parse_url($endpoint);
$endpointParts['path'] = $endpointParts['path'] ?: '/';
$endpointParts['port'] = $endpointParts['port'] ?: $endpointParts['scheme'] === 'https' ? 443 : 80;
$contentLength = strlen($postData);
$request = "POST {$endpointParts['path']} HTTP/1.1\r\n";
$request .= "Host: {$endpointParts['host']}\r\n";
$request .= "User-Agent: OpenSTAManager API v1\r\n";
$request .= "Authorization: Bearer api_key\r\n";
$request .= "Content-Length: {$contentLength}\r\n";
$request .= "Content-Type: application/json\r\n\r\n";
$request .= $postData;
$prefix = substr($endpoint, 0, 8) === 'https://' ? 'tls://' : '';
$socket = fsockopen($prefix.$endpointParts['host'], $endpointParts['port']);
fwrite($socket, $request);
fclose($socket);
}
}