File "class-gf-telemetry-service-provider.php"
Full Path: /home/theinspectionboy/public_html/suffolk/plugins/gravityforms/includes/telemetry/class-gf-telemetry-service-provider.php
File size: 2.42 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Gravity_Forms\Gravity_Forms\Telemetry;
use Gravity_Forms\Gravity_Forms\GF_Service_Container;
use Gravity_Forms\Gravity_Forms\GF_Service_Provider;
use GFCommon;
use GFFormsModel;
/**
* Class GF_Telemetry_Service_Provider
*
* Service provider for the telemetry Service.
*
* @package Gravity_Forms\Gravity_Forms\Telemetry;
*/
class GF_Telemetry_Service_Provider extends GF_Service_Provider {
const TELEMETRY_SCHEDULED_TASK = 'gravityforms_telemetry_dispatcher';
const BATCH_SIZE = 10;
/**
* Register services to the container.
*
* @since
*
* @param GF_Service_Container $container
*/
public function register( GF_Service_Container $container ) {
require_once GF_PLUGIN_DIR_PATH . 'includes/telemetry/class-gf-telemetry-data.php';
require_once GF_PLUGIN_DIR_PATH . 'includes/telemetry/class-gf-telemetry-snapshot-data.php';
}
/**
* Initialize the scheduler.
*
* @since
*
* @param GF_Service_Container $container
*
* @return void
*/
public function init( GF_Service_Container $container ) {
add_action( self::TELEMETRY_SCHEDULED_TASK, array( $this, 'enqueue_telemetry_batches' ) );
}
/**
* Enqueue batches of telemetry events to be processed in the background.
*
* @since
*
* @return void
*/
public function enqueue_telemetry_batches() {
// Only run once a week.
$last_run = get_option( 'gf_last_telemetry_run', 0 );
$current_time = time();
if ( $current_time - $last_run < 60 * 60 * 24 * 7 ) {
return;
}
update_option( 'gf_last_telemetry_run', $current_time );
\GFCommon::log_debug( __METHOD__ . sprintf( '(): Enqueuing telemetry batches' ) );
GF_Telemetry_Data::take_snapshot();
$processor = $this->container->get( \Gravity_Forms\Gravity_Forms\Async\GF_Background_Process_Service_Provider::TELEMETRY );
$full_telemetry_data = GF_Telemetry_Data::get_data();
$snapshot = $full_telemetry_data['snapshot'];
// Enqueue the snapshot first, alone, to be sent to its own endpoint.
$processor->push_to_queue( $snapshot );
$processor->save()->dispatch();
$full_telemetry_data = array_chunk( $full_telemetry_data['events'], self::BATCH_SIZE, true );
foreach ( $full_telemetry_data as $batch ) {
$processor->push_to_queue( $batch );
$processor->save()->dispatch();
}
// Clear saved telemetry data except the snapshot.
update_option(
'gf_telemetry_data',
array(
'snapshot' => $snapshot,
'events' => array(),
),
false
);
}
}