Skip to content

Commit

Permalink
allow to stop timing the current transaction before starting processi…
Browse files Browse the repository at this point in the history
…ng tasks in background
  • Loading branch information
deminy committed Jan 14, 2019
1 parent 547167a commit 057c3e6
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 2 deletions.
26 changes: 24 additions & 2 deletions src/CrowdStar/BackgroundProcessing/BackgroundProcessing.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
namespace CrowdStar\BackgroundProcessing;

use Closure;
use CrowdStar\BackgroundProcessing\Timer\AbstractTimer;

/**
* Class BackgroundProcessing
Expand All @@ -27,20 +28,26 @@
class BackgroundProcessing
{
/**
* @var array
* @var Closure[]
*/
protected static $closures = [];

/**
* @var AbstractTimer[]
*/
protected static $timers = [];

/**
* @var bool
*/
protected static $invoked = false;

/**
* @param bool $stopTiming Stop timing the current transaction or not before starting processing tasks in background
* @return void
* @throws Exception
*/
public static function run()
public static function run(bool $stopTiming = false)
{
if (self::isInvoked()) {
throw new Exception('background process invoked already');
Expand All @@ -53,6 +60,13 @@ public static function run()
session_write_close();
fastcgi_finish_request();

if ($stopTiming) {
// Stop timing the current transaction before starting processing tasks in background.
foreach (self::$timers as $timer) {
$timer->stopTiming();
}
}

foreach (self::$closures as $closure) {
$closure();
}
Expand Down Expand Up @@ -82,6 +96,14 @@ public static function add(Closure $op, ...$params)
};
}

/**
* @param AbstractTimer $timer
*/
public static function addTimer(AbstractTimer $timer)
{
self::$timers[] = $timer;
}

/**
* @param bool $invoked
* @return void
Expand Down
33 changes: 33 additions & 0 deletions src/CrowdStar/BackgroundProcessing/Timer/AbstractTimer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php
/**************************************************************************
* Copyright 2018 Glu Mobile Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*************************************************************************/

namespace CrowdStar\BackgroundProcessing\Timer;

/**
* Class AbstractTimer
*
* @package CrowdStar\BackgroundProcessing\Timer
*/
abstract class AbstractTimer
{
/**
* Stop timing the current transaction before starting processing tasks in background.
*
* @return AbstractTimer
*/
abstract public function stopTiming(): AbstractTimer;
}
39 changes: 39 additions & 0 deletions src/CrowdStar/BackgroundProcessing/Timer/NewRelicTimer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php
/**************************************************************************
* Copyright 2018 Glu Mobile Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*************************************************************************/

namespace CrowdStar\BackgroundProcessing\Timer;

/**
* Class NewRelicTimer
*
* @package CrowdStar\BackgroundProcessing\Timer
*/
class NewRelicTimer extends AbstractTimer
{
/**
* @inheritdoc
*/
public function stopTiming(): AbstractTimer
{
if (extension_loaded('newrelic')) {
// Stop timing the current transaction in New Relic.
newrelic_end_of_transaction();
}

return $this;
}
}

0 comments on commit 057c3e6

Please sign in to comment.