You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.5 KiB

<?php
namespace App\Jobs;
use DB, Log;
use App\Jobs\Job;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
use DateTime, DateTimeZone;
class NotifyOfNewLocations extends Job implements SelfHandling, ShouldQueue
{
private $_dbid;
public function __construct($dbid) {
$this->_dbid = $dbid;
}
public function handle() {
$db = DB::table('databases')->where('id','=',$this->_dbid)->first();
$urls = preg_split('/\s+/', $db->ping_urls);
$location = [
'location' => json_decode($db->last_location, true)
];
if($db->current_trip)
$location['trip'] = json_decode($db->current_trip, true);
$location = json_encode($location, JSON_UNESCAPED_SLASHES);
foreach($urls as $url) {
if(trim($url)) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer '.$db->read_token,
'Compass-Url: '.env('BASE_URL').'api/last?token='.$db->read_token.'&geocode=1'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $location);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$timestamp = '';
if($db->last_location) {
$timestamp = json_decode($db->last_location)->properties->timestamp;
}
Log::info("Notifying ".$url." with current location: ".$timestamp);
}
}
}
}