mirror of
https://github.com/friendica/friendica
synced 2024-11-10 03:02:54 +00:00
Merge pull request #13298 from nupplaphil/feat/strategies
[Hook] Introduce some more strategies
This commit is contained in:
commit
4073400bfb
66 changed files with 261 additions and 254 deletions
|
@ -1,4 +1,4 @@
|
||||||
pipeline:
|
steps:
|
||||||
restore_cache:
|
restore_cache:
|
||||||
image: meltwater/drone-cache:dev
|
image: meltwater/drone-cache:dev
|
||||||
settings:
|
settings:
|
||||||
|
|
|
@ -11,7 +11,7 @@ labels:
|
||||||
|
|
||||||
skip_clone: true
|
skip_clone: true
|
||||||
|
|
||||||
pipeline:
|
steps:
|
||||||
clone:
|
clone:
|
||||||
image: alpine/git
|
image: alpine/git
|
||||||
commands:
|
commands:
|
||||||
|
|
|
@ -6,7 +6,11 @@ matrix:
|
||||||
branches:
|
branches:
|
||||||
exclude: [ stable ]
|
exclude: [ stable ]
|
||||||
|
|
||||||
pipeline:
|
# This forces CI executions at the "opensocial" labeled location (because of much more power...)
|
||||||
|
labels:
|
||||||
|
location: opensocial
|
||||||
|
|
||||||
|
steps:
|
||||||
db_version_match:
|
db_version_match:
|
||||||
image: friendicaci/transifex
|
image: friendicaci/transifex
|
||||||
commands:
|
commands:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
pipeline:
|
steps:
|
||||||
check:
|
check:
|
||||||
image: friendicaci/php-cs
|
image: friendicaci/php-cs
|
||||||
commands:
|
commands:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
pipeline:
|
steps:
|
||||||
build_xgettext:
|
build_xgettext:
|
||||||
image: friendicaci/transifex
|
image: friendicaci/transifex
|
||||||
commands:
|
commands:
|
||||||
|
|
|
@ -15,12 +15,12 @@ matrix:
|
||||||
labels:
|
labels:
|
||||||
location: opensocial
|
location: opensocial
|
||||||
|
|
||||||
pipeline:
|
steps:
|
||||||
php-lint:
|
php-lint:
|
||||||
image: php:${PHP_MAJOR_VERSION}
|
image: php:${PHP_MAJOR_VERSION}
|
||||||
group: lint
|
group: lint
|
||||||
commands:
|
commands:
|
||||||
- ./bin/composer.phar run lint
|
- find . -name \*.php -not -path './vendor/*' -not -path './view/asset/*' -print0 | xargs -0 -n1 php -l
|
||||||
restore_cache:
|
restore_cache:
|
||||||
image: meltwater/drone-cache:dev
|
image: meltwater/drone-cache:dev
|
||||||
settings:
|
settings:
|
||||||
|
|
|
@ -9,7 +9,7 @@ labels:
|
||||||
|
|
||||||
skip_clone: true
|
skip_clone: true
|
||||||
|
|
||||||
pipeline:
|
steps:
|
||||||
clone:
|
clone:
|
||||||
image: alpine/git
|
image: alpine/git
|
||||||
commands:
|
commands:
|
||||||
|
|
|
@ -58,7 +58,7 @@ if (php_sapi_name() !== 'cli') {
|
||||||
|
|
||||||
use Dice\Dice;
|
use Dice\Dice;
|
||||||
use Friendica\App\Mode;
|
use Friendica\App\Mode;
|
||||||
use Friendica\Core\Logger\Capabilities\LogChannel;
|
use Friendica\Core\Logger\Capability\LogChannel;
|
||||||
use Friendica\Security\ExAuth;
|
use Friendica\Security\ExAuth;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
@ -79,8 +79,8 @@ chdir($directory);
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
/** @var \Friendica\Core\Addon\Capabilities\ICanLoadAddons $addonLoader */
|
/** @var \Friendica\Core\Addon\Capability\ICanLoadAddons $addonLoader */
|
||||||
$addonLoader = $dice->create(\Friendica\Core\Addon\Capabilities\ICanLoadAddons::class);
|
$addonLoader = $dice->create(\Friendica\Core\Addon\Capability\ICanLoadAddons::class);
|
||||||
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
||||||
$dice = $dice->addRule(LoggerInterface::class,['constructParams' => [LogChannel::AUTH_JABBERED]]);
|
$dice = $dice->addRule(LoggerInterface::class,['constructParams' => [LogChannel::AUTH_JABBERED]]);
|
||||||
|
|
||||||
|
|
|
@ -26,15 +26,15 @@ if (php_sapi_name() !== 'cli') {
|
||||||
}
|
}
|
||||||
|
|
||||||
use Dice\Dice;
|
use Dice\Dice;
|
||||||
use Friendica\Core\Logger\Capabilities\LogChannel;
|
use Friendica\Core\Logger\Capability\LogChannel;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
/** @var \Friendica\Core\Addon\Capabilities\ICanLoadAddons $addonLoader */
|
/** @var \Friendica\Core\Addon\Capability\ICanLoadAddons $addonLoader */
|
||||||
$addonLoader = $dice->create(\Friendica\Core\Addon\Capabilities\ICanLoadAddons::class);
|
$addonLoader = $dice->create(\Friendica\Core\Addon\Capability\ICanLoadAddons::class);
|
||||||
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
||||||
$dice = $dice->addRule(LoggerInterface::class, ['constructParams' => [LogChannel::CONSOLE]]);
|
$dice = $dice->addRule(LoggerInterface::class, ['constructParams' => [LogChannel::CONSOLE]]);
|
||||||
|
|
||||||
|
|
|
@ -60,10 +60,10 @@ if (!file_exists('index.php') && (sizeof($_SERVER['argv']) != 0)) {
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
/** @var \Friendica\Core\Addon\Capabilities\ICanLoadAddons $addonLoader */
|
/** @var \Friendica\Core\Addon\Capability\ICanLoadAddons $addonLoader */
|
||||||
$addonLoader = $dice->create(\Friendica\Core\Addon\Capabilities\ICanLoadAddons::class);
|
$addonLoader = $dice->create(\Friendica\Core\Addon\Capability\ICanLoadAddons::class);
|
||||||
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
||||||
$dice = $dice->addRule(LoggerInterface::class, ['constructParams' => [Logger\Capabilities\LogChannel::DAEMON]]);
|
$dice = $dice->addRule(LoggerInterface::class, ['constructParams' => [Logger\Capability\LogChannel::DAEMON]]);
|
||||||
|
|
||||||
DI::init($dice);
|
DI::init($dice);
|
||||||
\Friendica\Core\Logger\Handler\ErrorHandler::register($dice->create(\Psr\Log\LoggerInterface::class));
|
\Friendica\Core\Logger\Handler\ErrorHandler::register($dice->create(\Psr\Log\LoggerInterface::class));
|
||||||
|
|
|
@ -29,7 +29,7 @@ if (php_sapi_name() !== 'cli') {
|
||||||
use Dice\Dice;
|
use Dice\Dice;
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\App\Mode;
|
use Friendica\App\Mode;
|
||||||
use Friendica\Core\Logger\Capabilities\LogChannel;
|
use Friendica\Core\Logger\Capability\LogChannel;
|
||||||
use Friendica\Core\Update;
|
use Friendica\Core\Update;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
@ -55,8 +55,8 @@ if (!file_exists("index.php") && (sizeof($_SERVER["argv"]) != 0)) {
|
||||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/../static/dependencies.config.php');
|
||||||
/** @var \Friendica\Core\Addon\Capabilities\ICanLoadAddons $addonLoader */
|
/** @var \Friendica\Core\Addon\Capability\ICanLoadAddons $addonLoader */
|
||||||
$addonLoader = $dice->create(\Friendica\Core\Addon\Capabilities\ICanLoadAddons::class);
|
$addonLoader = $dice->create(\Friendica\Core\Addon\Capability\ICanLoadAddons::class);
|
||||||
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
||||||
$dice = $dice->addRule(LoggerInterface::class, ['constructParams' => [LogChannel::WORKER]]);
|
$dice = $dice->addRule(LoggerInterface::class, ['constructParams' => [LogChannel::WORKER]]);
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,9 @@ This type of hook is based on the [Strategy Design Pattern](https://refactoring.
|
||||||
A strategy class defines a possible implementation of a given interface based on a unique name.
|
A strategy class defines a possible implementation of a given interface based on a unique name.
|
||||||
Every name is possible as long as it's unique and not `null`.
|
Every name is possible as long as it's unique and not `null`.
|
||||||
Using an empty name (`''`) is possible as well and should be used as the "default" implementation.
|
Using an empty name (`''`) is possible as well and should be used as the "default" implementation.
|
||||||
To register a strategy, use the [`ICanRegisterInstance`](../src/Core/Hooks/Capabilities/ICanRegisterInstances.php) interface.
|
To register a strategy, use the [`ICanRegisterInstance`](../src/Core/Hooks/Capability/ICanRegisterInstances.php) interface.
|
||||||
|
|
||||||
After registration, a caller can automatically create this instance with the [`ICanCreateInstances`](../src/Core/Hooks/Capabilities/ICanCreateInstances.php) interface and the chosen name.
|
After registration, a caller can automatically create this instance with the [`ICanCreateInstances`](../src/Core/Hooks/Capability/ICanCreateInstances.php) interface and the chosen name.
|
||||||
|
|
||||||
This is useful in case there are different, possible implementations for the same purpose, like for logging, locking, caching, ...
|
This is useful in case there are different, possible implementations for the same purpose, like for logging, locking, caching, ...
|
||||||
|
|
||||||
|
@ -43,11 +43,11 @@ public class ConcreteClassB implements ExampleInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var \Friendica\Core\Hooks\Capabilities\ICanRegisterStrategies $instanceRegister */
|
/** @var \Friendica\Core\Hooks\Capability\ICanRegisterStrategies $instanceRegister */
|
||||||
$instanceRegister->registerStrategy(ExampleInterface::class, ConcreteClassA::class, 'A');
|
$instanceRegister->registerStrategy(ExampleInterface::class, ConcreteClassA::class, 'A');
|
||||||
$instanceRegister->registerStrategy(ExampleInterface::class, ConcreteClassB::class, 'B');
|
$instanceRegister->registerStrategy(ExampleInterface::class, ConcreteClassB::class, 'B');
|
||||||
|
|
||||||
/** @var \Friendica\Core\Hooks\Capabilities\ICanCreateInstances $instanceManager */
|
/** @var \Friendica\Core\Hooks\Capability\ICanCreateInstances $instanceManager */
|
||||||
/** @var ConcreteClassA $concreteClass */
|
/** @var ConcreteClassA $concreteClass */
|
||||||
$concreteClass = $instanceManager->create(ExampleInterface::class, 'A');
|
$concreteClass = $instanceManager->create(ExampleInterface::class, 'A');
|
||||||
|
|
||||||
|
@ -62,14 +62,14 @@ To avoid registering all strategies manually inside the code, Friendica introduc
|
||||||
|
|
||||||
There, you can register all kind of strategies in one file.
|
There, you can register all kind of strategies in one file.
|
||||||
|
|
||||||
### [`HookType::STRATEGY`](../src/Core/Hooks/Capabilities/HookType.php)
|
### [`HookType::STRATEGY`](../src/Core/Hooks/Capability/HookType.php)
|
||||||
|
|
||||||
For each given interface, a list of key-value pairs can be set, where the key is the concrete implementation class and the value is an array of unique names.
|
For each given interface, a list of key-value pairs can be set, where the key is the concrete implementation class and the value is an array of unique names.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
```php
|
```php
|
||||||
use Friendica\Core\Hooks\Capabilities\BehavioralHookType as H;
|
use Friendica\Core\Hooks\Capability\BehavioralHookType as H;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
H::STRATEGY => [
|
H::STRATEGY => [
|
||||||
|
|
|
@ -30,8 +30,8 @@ if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
|
||||||
require __DIR__ . '/vendor/autoload.php';
|
require __DIR__ . '/vendor/autoload.php';
|
||||||
|
|
||||||
$dice = (new Dice())->addRules(include __DIR__ . '/static/dependencies.config.php');
|
$dice = (new Dice())->addRules(include __DIR__ . '/static/dependencies.config.php');
|
||||||
/** @var \Friendica\Core\Addon\Capabilities\ICanLoadAddons $addonLoader */
|
/** @var \Friendica\Core\Addon\Capability\ICanLoadAddons $addonLoader */
|
||||||
$addonLoader = $dice->create(\Friendica\Core\Addon\Capabilities\ICanLoadAddons::class);
|
$addonLoader = $dice->create(\Friendica\Core\Addon\Capability\ICanLoadAddons::class);
|
||||||
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
$dice = $dice->addRules($addonLoader->getActiveAddonConfig('dependencies'));
|
||||||
$dice = $dice->addRule(Friendica\App\Mode::class, ['call' => [['determineRunMode', [false, $_SERVER], Dice::CHAIN_CALL]]]);
|
$dice = $dice->addRule(Friendica\App\Mode::class, ['call' => [['determineRunMode', [false, $_SERVER], Dice::CHAIN_CALL]]]);
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
namespace Friendica\Console;
|
namespace Friendica\Console;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\KeyValueStorage\Capabilities\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
use Friendica\Core\Update;
|
use Friendica\Core\Update;
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Addon\Capabilities;
|
namespace Friendica\Core\Addon\Capability;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for loading Addons specific content
|
* Interface for loading Addons specific content
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Addon\Model;
|
namespace Friendica\Core\Addon\Model;
|
||||||
|
|
||||||
use Friendica\Core\Addon\Capabilities\ICanLoadAddons;
|
use Friendica\Core\Addon\Capability\ICanLoadAddons;
|
||||||
use Friendica\Core\Addon\Exception\AddonInvalidConfigFileException;
|
use Friendica\Core\Addon\Exception\AddonInvalidConfigFileException;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
|
|
|
@ -21,16 +21,13 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Cache\Factory;
|
namespace Friendica\Core\Cache\Factory;
|
||||||
|
|
||||||
use Friendica\App\BaseURL;
|
|
||||||
use Friendica\Core\Cache\Enum;
|
|
||||||
use Friendica\Core\Cache\Capability\ICanCache;
|
use Friendica\Core\Cache\Capability\ICanCache;
|
||||||
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
||||||
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
||||||
use Friendica\Core\Cache\Type;
|
use Friendica\Core\Cache\Type;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Core\Hooks\Capability\ICanCreateInstances;
|
||||||
use Friendica\Util\Profiler;
|
use Friendica\Util\Profiler;
|
||||||
use Psr\Log\LoggerInterface;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CacheFactory
|
* Class CacheFactory
|
||||||
|
@ -44,59 +41,32 @@ class Cache
|
||||||
/**
|
/**
|
||||||
* @var string The default cache if nothing set
|
* @var string The default cache if nothing set
|
||||||
*/
|
*/
|
||||||
const DEFAULT_TYPE = Enum\Type::DATABASE;
|
const DEFAULT_TYPE = Type\DatabaseCache::NAME;
|
||||||
|
/** @var ICanCreateInstances */
|
||||||
|
protected $instanceCreator;
|
||||||
|
/** @var IManageConfigValues */
|
||||||
|
protected $config;
|
||||||
|
/** @var Profiler */
|
||||||
|
protected $profiler;
|
||||||
|
|
||||||
/**
|
public function __construct(ICanCreateInstances $instanceCreator, IManageConfigValues $config, Profiler $profiler)
|
||||||
* @var IManageConfigValues The IConfiguration to read parameters out of the config
|
|
||||||
*/
|
|
||||||
private $config;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var Database The database connection in case that the cache is used the dba connection
|
|
||||||
*/
|
|
||||||
private $dba;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string The hostname, used as Prefix for Caching
|
|
||||||
*/
|
|
||||||
private $hostname;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var Profiler The optional profiler if the cached should be profiled
|
|
||||||
*/
|
|
||||||
private $profiler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var LoggerInterface The Friendica Logger
|
|
||||||
*/
|
|
||||||
private $logger;
|
|
||||||
|
|
||||||
public function __construct(BaseURL $baseURL, IManageConfigValues $config, Database $dba, Profiler $profiler, LoggerInterface $logger)
|
|
||||||
{
|
{
|
||||||
$this->hostname = $baseURL->getHost();
|
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->dba = $dba;
|
$this->instanceCreator = $instanceCreator;
|
||||||
$this->profiler = $profiler;
|
$this->profiler = $profiler;
|
||||||
$this->logger = $logger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method creates a CacheDriver for distributed caching with the given cache driver name
|
* This method creates a CacheDriver for distributed caching
|
||||||
*
|
|
||||||
* @param string|null $type The cache type to create (default is per config)
|
|
||||||
*
|
*
|
||||||
* @return ICanCache The instance of the CacheDriver
|
* @return ICanCache The instance of the CacheDriver
|
||||||
*
|
*
|
||||||
* @throws InvalidCacheDriverException In case the underlying cache driver isn't valid or not configured properly
|
* @throws InvalidCacheDriverException In case the underlying cache driver isn't valid or not configured properly
|
||||||
* @throws CachePersistenceException In case the underlying cache has errors during persistence
|
* @throws CachePersistenceException In case the underlying cache has errors during persistence
|
||||||
*/
|
*/
|
||||||
public function createDistributed(string $type = null): ICanCache
|
public function createDistributed(): ICanCache
|
||||||
{
|
{
|
||||||
if ($type === Enum\Type::APCU) {
|
return $this->create($this->config->get('system', 'distributed_cache_driver', self::DEFAULT_TYPE));
|
||||||
throw new InvalidCacheDriverException('apcu doesn\'t support distributed caching.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->create($type ?? $this->config->get('system', 'distributed_cache_driver', self::DEFAULT_TYPE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -117,31 +87,17 @@ class Cache
|
||||||
/**
|
/**
|
||||||
* Creates a new Cache instance
|
* Creates a new Cache instance
|
||||||
*
|
*
|
||||||
* @param string $type The type of cache
|
* @param string $strategy The strategy, which cache instance should be used
|
||||||
*
|
*
|
||||||
* @return ICanCache
|
* @return ICanCache
|
||||||
*
|
*
|
||||||
* @throws InvalidCacheDriverException In case the underlying cache driver isn't valid or not configured properly
|
* @throws InvalidCacheDriverException In case the underlying cache driver isn't valid or not configured properly
|
||||||
* @throws CachePersistenceException In case the underlying cache has errors during persistence
|
* @throws CachePersistenceException In case the underlying cache has errors during persistence
|
||||||
*/
|
*/
|
||||||
protected function create(string $type): ICanCache
|
protected function create(string $strategy): ICanCache
|
||||||
{
|
{
|
||||||
switch ($type) {
|
/** @var ICanCache $cache */
|
||||||
case Enum\Type::MEMCACHE:
|
$cache = $this->instanceCreator->create(ICanCache::class, $strategy);
|
||||||
$cache = new Type\MemcacheCache($this->hostname, $this->config);
|
|
||||||
break;
|
|
||||||
case Enum\Type::MEMCACHED:
|
|
||||||
$cache = new Type\MemcachedCache($this->hostname, $this->config, $this->logger);
|
|
||||||
break;
|
|
||||||
case Enum\Type::REDIS:
|
|
||||||
$cache = new Type\RedisCache($this->hostname, $this->config);
|
|
||||||
break;
|
|
||||||
case Enum\Type::APCU:
|
|
||||||
$cache = new Type\APCuCache($this->hostname);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$cache = new Type\DatabaseCache($this->hostname, $this->dba);
|
|
||||||
}
|
|
||||||
|
|
||||||
$profiling = $this->config->get('system', 'profiling', false);
|
$profiling = $this->config->get('system', 'profiling', false);
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ namespace Friendica\Core\Cache\Type;
|
||||||
|
|
||||||
use Friendica\Core\Cache\Enum\Duration;
|
use Friendica\Core\Cache\Enum\Duration;
|
||||||
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Enum\Type;
|
|
||||||
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,12 +30,12 @@ use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
||||||
*/
|
*/
|
||||||
class APCuCache extends AbstractCache implements ICanCacheInMemory
|
class APCuCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
|
const NAME = 'apcu';
|
||||||
|
|
||||||
use CompareSetTrait;
|
use CompareSetTrait;
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $hostname
|
|
||||||
*
|
|
||||||
* @throws InvalidCacheDriverException
|
* @throws InvalidCacheDriverException
|
||||||
*/
|
*/
|
||||||
public function __construct(string $hostname)
|
public function __construct(string $hostname)
|
||||||
|
@ -173,12 +172,4 @@ class APCuCache extends AbstractCache implements ICanCacheInMemory
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return Type::APCU;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,8 @@ use Friendica\Core\Cache\Capability\ICanCache;
|
||||||
*/
|
*/
|
||||||
abstract class AbstractCache implements ICanCache
|
abstract class AbstractCache implements ICanCache
|
||||||
{
|
{
|
||||||
|
const NAME = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string The hostname
|
* @var string The hostname
|
||||||
*/
|
*/
|
||||||
|
@ -105,4 +107,10 @@ abstract class AbstractCache implements ICanCache
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
public function getName(): string
|
||||||
|
{
|
||||||
|
return static::NAME;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,8 @@ use Friendica\Core\Cache\Enum;
|
||||||
*/
|
*/
|
||||||
class ArrayCache extends AbstractCache implements ICanCacheInMemory
|
class ArrayCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
|
const NAME = 'array';
|
||||||
|
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
|
|
||||||
/** @var array Array with the cached data */
|
/** @var array Array with the cached data */
|
||||||
|
@ -108,12 +110,4 @@ class ArrayCache extends AbstractCache implements ICanCacheInMemory
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return Enum\Type::ARRAY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,8 @@ use Friendica\Util\DateTimeFormat;
|
||||||
*/
|
*/
|
||||||
class DatabaseCache extends AbstractCache implements ICanCache
|
class DatabaseCache extends AbstractCache implements ICanCache
|
||||||
{
|
{
|
||||||
|
const NAME = 'database';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Database
|
* @var Database
|
||||||
*/
|
*/
|
||||||
|
@ -154,12 +156,4 @@ class DatabaseCache extends AbstractCache implements ICanCache
|
||||||
throw new CachePersistenceException('Cannot clear cache', $exception);
|
throw new CachePersistenceException('Cannot clear cache', $exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return Enum\Type::DATABASE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ namespace Friendica\Core\Cache\Type;
|
||||||
|
|
||||||
use Friendica\Core\Cache\Enum\Duration;
|
use Friendica\Core\Cache\Enum\Duration;
|
||||||
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Enum\Type;
|
|
||||||
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
||||||
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
|
@ -34,6 +33,8 @@ use Memcache;
|
||||||
*/
|
*/
|
||||||
class MemcacheCache extends AbstractCache implements ICanCacheInMemory
|
class MemcacheCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
|
const NAME = 'memcache';
|
||||||
|
|
||||||
use CompareSetTrait;
|
use CompareSetTrait;
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
use MemcacheCommandTrait;
|
use MemcacheCommandTrait;
|
||||||
|
@ -169,12 +170,4 @@ class MemcacheCache extends AbstractCache implements ICanCacheInMemory
|
||||||
$cacheKey = $this->getCacheKey($key);
|
$cacheKey = $this->getCacheKey($key);
|
||||||
return $this->memcache->add($cacheKey, serialize($value), MEMCACHE_COMPRESSED, $ttl);
|
return $this->memcache->add($cacheKey, serialize($value), MEMCACHE_COMPRESSED, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return Type::MEMCACHE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ namespace Friendica\Core\Cache\Type;
|
||||||
|
|
||||||
use Friendica\Core\Cache\Enum\Duration;
|
use Friendica\Core\Cache\Enum\Duration;
|
||||||
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Enum\Type;
|
|
||||||
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
||||||
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
|
@ -35,6 +34,8 @@ use Psr\Log\LoggerInterface;
|
||||||
*/
|
*/
|
||||||
class MemcachedCache extends AbstractCache implements ICanCacheInMemory
|
class MemcachedCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
|
const NAME = 'memcached';
|
||||||
|
|
||||||
use CompareSetTrait;
|
use CompareSetTrait;
|
||||||
use CompareDeleteTrait;
|
use CompareDeleteTrait;
|
||||||
use MemcacheCommandTrait;
|
use MemcacheCommandTrait;
|
||||||
|
@ -185,12 +186,4 @@ class MemcachedCache extends AbstractCache implements ICanCacheInMemory
|
||||||
$cacheKey = $this->getCacheKey($key);
|
$cacheKey = $this->getCacheKey($key);
|
||||||
return $this->memcached->add($cacheKey, $value, $ttl);
|
return $this->memcached->add($cacheKey, $value, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return Type::MEMCACHED;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,8 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Cache\Type;
|
namespace Friendica\Core\Cache\Type;
|
||||||
|
|
||||||
use Exception;
|
|
||||||
use Friendica\Core\Cache\Enum\Duration;
|
use Friendica\Core\Cache\Enum\Duration;
|
||||||
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Enum\Type;
|
|
||||||
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
use Friendica\Core\Cache\Exception\CachePersistenceException;
|
||||||
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
use Friendica\Core\Cache\Exception\InvalidCacheDriverException;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
|
@ -35,6 +33,8 @@ use Redis;
|
||||||
*/
|
*/
|
||||||
class RedisCache extends AbstractCache implements ICanCacheInMemory
|
class RedisCache extends AbstractCache implements ICanCacheInMemory
|
||||||
{
|
{
|
||||||
|
const NAME = 'redis';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Redis
|
* @var Redis
|
||||||
*/
|
*/
|
||||||
|
@ -59,9 +59,11 @@ class RedisCache extends AbstractCache implements ICanCacheInMemory
|
||||||
$redis_pw = $config->get('system', 'redis_password');
|
$redis_pw = $config->get('system', 'redis_password');
|
||||||
$redis_db = $config->get('system', 'redis_db', 0);
|
$redis_db = $config->get('system', 'redis_db', 0);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
if (!empty($redis_port) && !@$this->redis->connect($redis_host, $redis_port)) {
|
if (!empty($redis_port) && !@$this->redis->connect($redis_host, $redis_port)) {
|
||||||
throw new CachePersistenceException('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available');
|
throw new CachePersistenceException('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available');
|
||||||
} elseif (!@$this->redis->connect($redis_host)) {
|
} else if (!@$this->redis->connect($redis_host)) {
|
||||||
throw new CachePersistenceException('Expected Redis server at ' . $redis_host . ' isn\'t available');
|
throw new CachePersistenceException('Expected Redis server at ' . $redis_host . ' isn\'t available');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,6 +74,9 @@ class RedisCache extends AbstractCache implements ICanCacheInMemory
|
||||||
if ($redis_db !== 0 && !$this->redis->select($redis_db)) {
|
if ($redis_db !== 0 && !$this->redis->select($redis_db)) {
|
||||||
throw new CachePersistenceException('Cannot switch to redis db ' . $redis_db . ' at ' . $redis_host . ':' . $redis_port);
|
throw new CachePersistenceException('Cannot switch to redis db ' . $redis_db . ' at ' . $redis_host . ':' . $redis_port);
|
||||||
}
|
}
|
||||||
|
} catch (\RedisException $exception) {
|
||||||
|
throw new CachePersistenceException('Redis connection fails unexpectedly', $exception);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -211,12 +216,4 @@ class RedisCache extends AbstractCache implements ICanCacheInMemory
|
||||||
$this->redis->unwatch();
|
$this->redis->unwatch();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function getName(): string
|
|
||||||
{
|
|
||||||
return Type::REDIS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Hooks\Capabilities;
|
namespace Friendica\Core\Hooks\Capability;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An enum of hook types, based on behavioral design patterns
|
* An enum of hook types, based on behavioral design patterns
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Hooks\Capabilities;
|
namespace Friendica\Core\Hooks\Capability;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* creates special instances for given classes
|
* creates special instances for given classes
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Hooks\Capabilities;
|
namespace Friendica\Core\Hooks\Capability;
|
||||||
|
|
||||||
use Friendica\Core\Hooks\Exceptions\HookRegisterArgumentException;
|
use Friendica\Core\Hooks\Exceptions\HookRegisterArgumentException;
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
namespace Friendica\Core\Hooks\Model;
|
namespace Friendica\Core\Hooks\Model;
|
||||||
|
|
||||||
use Dice\Dice;
|
use Dice\Dice;
|
||||||
use Friendica\Core\Hooks\Capabilities\ICanCreateInstances;
|
use Friendica\Core\Hooks\Capability\ICanCreateInstances;
|
||||||
use Friendica\Core\Hooks\Capabilities\ICanRegisterStrategies;
|
use Friendica\Core\Hooks\Capability\ICanRegisterStrategies;
|
||||||
use Friendica\Core\Hooks\Exceptions\HookInstanceException;
|
use Friendica\Core\Hooks\Exceptions\HookInstanceException;
|
||||||
use Friendica\Core\Hooks\Exceptions\HookRegisterArgumentException;
|
use Friendica\Core\Hooks\Exceptions\HookRegisterArgumentException;
|
||||||
use Friendica\Core\Hooks\Util\StrategiesFileManager;
|
use Friendica\Core\Hooks\Util\StrategiesFileManager;
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Hooks\Util;
|
namespace Friendica\Core\Hooks\Util;
|
||||||
|
|
||||||
use Friendica\Core\Addon\Capabilities\ICanLoadAddons;
|
use Friendica\Core\Addon\Capability\ICanLoadAddons;
|
||||||
use Friendica\Core\Hooks\Capabilities\ICanRegisterStrategies;
|
use Friendica\Core\Hooks\Capability\ICanRegisterStrategies;
|
||||||
use Friendica\Core\Hooks\Exceptions\HookConfigException;
|
use Friendica\Core\Hooks\Exceptions\HookConfigException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,6 +30,11 @@ use Friendica\Core\Hooks\Exceptions\HookConfigException;
|
||||||
*/
|
*/
|
||||||
class StrategiesFileManager
|
class StrategiesFileManager
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* The default hook-file-key of strategies
|
||||||
|
* -> it's an empty string to cover empty/missing config values
|
||||||
|
*/
|
||||||
|
const STRATEGY_DEFAULT_KEY = '';
|
||||||
const STATIC_DIR = 'static';
|
const STATIC_DIR = 'static';
|
||||||
const CONFIG_NAME = 'strategies';
|
const CONFIG_NAME = 'strategies';
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\KeyValueStorage\Capabilities;
|
namespace Friendica\Core\KeyValueStorage\Capability;
|
||||||
|
|
||||||
use Friendica\Core\KeyValueStorage\Exceptions\KeyValueStoragePersistenceException;
|
use Friendica\Core\KeyValueStorage\Exceptions\KeyValueStoragePersistenceException;
|
||||||
|
|
|
@ -19,17 +19,17 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Cache\Enum;
|
namespace Friendica\Core\KeyValueStorage\Factory;
|
||||||
|
|
||||||
/**
|
use Friendica\Core\Hooks\Capability\ICanCreateInstances;
|
||||||
* Enumeration for cache types
|
use Friendica\Core\Hooks\Util\StrategiesFileManager;
|
||||||
*/
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
abstract class Type
|
|
||||||
|
class KeyValueStorage
|
||||||
{
|
{
|
||||||
const APCU = 'apcu';
|
public function create(ICanCreateInstances $instanceCreator): IManageKeyValuePairs
|
||||||
const REDIS = 'redis';
|
{
|
||||||
const ARRAY = 'array';
|
/** @var IManageKeyValuePairs */
|
||||||
const MEMCACHE = 'memcache';
|
return $instanceCreator->create(IManageKeyValuePairs::class, StrategiesFileManager::STRATEGY_DEFAULT_KEY);
|
||||||
const DATABASE = 'database';
|
}
|
||||||
const MEMCACHED = 'memcached';
|
|
||||||
}
|
}
|
|
@ -21,13 +21,15 @@
|
||||||
|
|
||||||
namespace Friendica\Core\KeyValueStorage\Type;
|
namespace Friendica\Core\KeyValueStorage\Type;
|
||||||
|
|
||||||
use Friendica\Core\KeyValueStorage\Capabilities\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An abstract helper class for Key-Value storage classes
|
* An abstract helper class for Key-Value storage classes
|
||||||
*/
|
*/
|
||||||
abstract class AbstractKeyValueStorage implements IManageKeyValuePairs
|
abstract class AbstractKeyValueStorage implements IManageKeyValuePairs
|
||||||
{
|
{
|
||||||
|
const NAME = '';
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
public function get(string $key)
|
public function get(string $key)
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,6 +30,7 @@ use Friendica\Database\Database;
|
||||||
*/
|
*/
|
||||||
class DBKeyValueStorage extends AbstractKeyValueStorage
|
class DBKeyValueStorage extends AbstractKeyValueStorage
|
||||||
{
|
{
|
||||||
|
const NAME = 'database';
|
||||||
const DB_KEY_VALUE_TABLE = 'key-value';
|
const DB_KEY_VALUE_TABLE = 'key-value';
|
||||||
|
|
||||||
/** @var Database */
|
/** @var Database */
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Lock\Enum;
|
namespace Friendica\Core\Lock\Enum;
|
||||||
|
|
||||||
use Friendica\Core\Cache\Enum\Type as CacheType;
|
use Friendica\Core\Cache\Type\DatabaseCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enumeration for lock types
|
* Enumeration for lock types
|
||||||
|
@ -30,6 +30,6 @@ use Friendica\Core\Cache\Enum\Type as CacheType;
|
||||||
*/
|
*/
|
||||||
abstract class Type
|
abstract class Type
|
||||||
{
|
{
|
||||||
const DATABASE = CacheType::DATABASE;
|
const DATABASE = DatabaseCache::NAME;
|
||||||
const SEMAPHORE = 'semaphore';
|
const SEMAPHORE = 'semaphore';
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,10 +23,10 @@ namespace Friendica\Core\Lock\Factory;
|
||||||
|
|
||||||
use Friendica\Core\Cache\Factory\Cache;
|
use Friendica\Core\Cache\Factory\Cache;
|
||||||
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
use Friendica\Core\Cache\Enum;
|
use Friendica\Core\Cache\Type as CacheType;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Lock\Capability\ICanLock;
|
use Friendica\Core\Lock\Capability\ICanLock;
|
||||||
use Friendica\Core\Lock\Type;
|
use Friendica\Core\Lock\Type as LockType;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
@ -78,20 +78,20 @@ class Lock
|
||||||
|
|
||||||
try {
|
try {
|
||||||
switch ($lock_type) {
|
switch ($lock_type) {
|
||||||
case Enum\Type::MEMCACHE:
|
case CacheType\MemcacheCache::NAME:
|
||||||
case Enum\Type::MEMCACHED:
|
case CacheType\MemcachedCache::NAME:
|
||||||
case Enum\Type::REDIS:
|
case CacheType\RedisCache::NAME:
|
||||||
case Enum\Type::APCU:
|
case CacheType\APCuCache::NAME:
|
||||||
$cache = $this->cacheFactory->createLocal($lock_type);
|
$cache = $this->cacheFactory->createLocal($lock_type);
|
||||||
if ($cache instanceof ICanCacheInMemory) {
|
if ($cache instanceof ICanCacheInMemory) {
|
||||||
return new Type\CacheLock($cache);
|
return new LockType\CacheLock($cache);
|
||||||
} else {
|
} else {
|
||||||
throw new \Exception(sprintf('Incompatible cache driver \'%s\' for lock used', $lock_type));
|
throw new \Exception(sprintf('Incompatible cache driver \'%s\' for lock used', $lock_type));
|
||||||
}
|
}
|
||||||
case 'database':
|
case 'database':
|
||||||
return new Type\DatabaseLock($this->dba);
|
return new LockType\DatabaseLock($this->dba);
|
||||||
case 'semaphore':
|
case 'semaphore':
|
||||||
return new Type\SemaphoreLock();
|
return new LockType\SemaphoreLock();
|
||||||
default:
|
default:
|
||||||
return self::useAutoDriver();
|
return self::useAutoDriver();
|
||||||
}
|
}
|
||||||
|
@ -116,7 +116,7 @@ class Lock
|
||||||
// 1. Try to use Semaphores for - local - locking
|
// 1. Try to use Semaphores for - local - locking
|
||||||
if (function_exists('sem_get')) {
|
if (function_exists('sem_get')) {
|
||||||
try {
|
try {
|
||||||
return new Type\SemaphoreLock();
|
return new LockType\SemaphoreLock();
|
||||||
} catch (\Exception $exception) {
|
} catch (\Exception $exception) {
|
||||||
$this->logger->warning('Using Semaphore driver for locking failed.', ['exception' => $exception]);
|
$this->logger->warning('Using Semaphore driver for locking failed.', ['exception' => $exception]);
|
||||||
}
|
}
|
||||||
|
@ -124,11 +124,11 @@ class Lock
|
||||||
|
|
||||||
// 2. Try to use Cache Locking (don't use the DB-Cache Locking because it works different!)
|
// 2. Try to use Cache Locking (don't use the DB-Cache Locking because it works different!)
|
||||||
$cache_type = $this->config->get('system', 'cache_driver', 'database');
|
$cache_type = $this->config->get('system', 'cache_driver', 'database');
|
||||||
if ($cache_type != Enum\Type::DATABASE) {
|
if ($cache_type != CacheType\DatabaseCache::NAME) {
|
||||||
try {
|
try {
|
||||||
$cache = $this->cacheFactory->createLocal($cache_type);
|
$cache = $this->cacheFactory->createLocal($cache_type);
|
||||||
if ($cache instanceof ICanCacheInMemory) {
|
if ($cache instanceof ICanCacheInMemory) {
|
||||||
return new Type\CacheLock($cache);
|
return new LockType\CacheLock($cache);
|
||||||
}
|
}
|
||||||
} catch (\Exception $exception) {
|
} catch (\Exception $exception) {
|
||||||
$this->logger->warning('Using Cache driver for locking failed.', ['exception' => $exception]);
|
$this->logger->warning('Using Cache driver for locking failed.', ['exception' => $exception]);
|
||||||
|
@ -136,6 +136,6 @@ class Lock
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Use Database Locking as a Fallback
|
// 3. Use Database Locking as a Fallback
|
||||||
return new Type\DatabaseLock($this->dba);
|
return new LockType\DatabaseLock($this->dba);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ abstract class AbstractLock implements ICanLock
|
||||||
/**
|
/**
|
||||||
* Check if we've locally acquired a lock
|
* Check if we've locally acquired a lock
|
||||||
*
|
*
|
||||||
* @param string key The Name of the lock
|
* @param string $key The Name of the lock
|
||||||
*
|
*
|
||||||
* @return bool Returns true if the lock is set
|
* @return bool Returns true if the lock is set
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Logger\Capabilities;
|
namespace Friendica\Core\Logger\Capability;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whenever a logging specific check is necessary, use this interface to encapsulate and centralize this logic
|
* Whenever a logging specific check is necessary, use this interface to encapsulate and centralize this logic
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Logger\Capabilities;
|
namespace Friendica\Core\Logger\Capability;
|
||||||
|
|
||||||
interface IHaveCallIntrospections
|
interface IHaveCallIntrospections
|
||||||
{
|
{
|
|
@ -19,7 +19,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Core\Logger\Capabilities;
|
namespace Friendica\Core\Logger\Capability;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An enum class for the Log channels
|
* An enum class for the Log channels
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Logger\Factory;
|
namespace Friendica\Core\Logger\Factory;
|
||||||
|
|
||||||
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
|
use Friendica\Core\Logger\Capability\IHaveCallIntrospections;
|
||||||
use Psr\Log\LogLevel;
|
use Psr\Log\LogLevel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
namespace Friendica\Core\Logger\Factory;
|
namespace Friendica\Core\Logger\Factory;
|
||||||
|
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Hooks\Capabilities\ICanCreateInstances;
|
use Friendica\Core\Hooks\Capability\ICanCreateInstances;
|
||||||
use Friendica\Core\Logger\Capabilities\LogChannel;
|
use Friendica\Core\Logger\Capability\LogChannel;
|
||||||
use Friendica\Core\Logger\Type\ProfilerLogger as ProfilerLoggerClass;
|
use Friendica\Core\Logger\Type\ProfilerLogger as ProfilerLoggerClass;
|
||||||
use Friendica\Util\Profiler;
|
use Friendica\Util\Profiler;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
namespace Friendica\Core\Logger\Factory;
|
namespace Friendica\Core\Logger\Factory;
|
||||||
|
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Logger\Capabilities\LogChannel;
|
use Friendica\Core\Logger\Capability\LogChannel;
|
||||||
use Friendica\Core\Logger\Exception\LoggerArgumentException;
|
use Friendica\Core\Logger\Exception\LoggerArgumentException;
|
||||||
use Friendica\Core\Logger\Exception\LoggerException;
|
use Friendica\Core\Logger\Exception\LoggerException;
|
||||||
use Friendica\Core\Logger\Exception\LogLevelException;
|
use Friendica\Core\Logger\Exception\LogLevelException;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Logger\Type;
|
namespace Friendica\Core\Logger\Type;
|
||||||
|
|
||||||
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
|
use Friendica\Core\Logger\Capability\IHaveCallIntrospections;
|
||||||
use Friendica\Core\Logger\Exception\LoggerException;
|
use Friendica\Core\Logger\Exception\LoggerException;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
@ -38,6 +38,8 @@ use Psr\Log\LogLevel;
|
||||||
*/
|
*/
|
||||||
abstract class AbstractLogger implements LoggerInterface
|
abstract class AbstractLogger implements LoggerInterface
|
||||||
{
|
{
|
||||||
|
const NAME = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The output channel of this logger
|
* The output channel of this logger
|
||||||
* @var string
|
* @var string
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Logger\Type;
|
namespace Friendica\Core\Logger\Type;
|
||||||
|
|
||||||
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
|
use Friendica\Core\Logger\Capability\IHaveCallIntrospections;
|
||||||
use Friendica\Core\Logger\Exception\LoggerException;
|
use Friendica\Core\Logger\Exception\LoggerException;
|
||||||
use Friendica\Core\Logger\Exception\LogLevelException;
|
use Friendica\Core\Logger\Exception\LogLevelException;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
@ -32,6 +32,8 @@ use Psr\Log\LogLevel;
|
||||||
*/
|
*/
|
||||||
class StreamLogger extends AbstractLogger
|
class StreamLogger extends AbstractLogger
|
||||||
{
|
{
|
||||||
|
const NAME = 'stream';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The minimum loglevel at which this logger will be triggered
|
* The minimum loglevel at which this logger will be triggered
|
||||||
* @var string
|
* @var string
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Core\Logger\Type;
|
namespace Friendica\Core\Logger\Type;
|
||||||
|
|
||||||
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
|
use Friendica\Core\Logger\Capability\IHaveCallIntrospections;
|
||||||
use Friendica\Core\Logger\Exception\LoggerException;
|
use Friendica\Core\Logger\Exception\LoggerException;
|
||||||
use Friendica\Core\Logger\Exception\LogLevelException;
|
use Friendica\Core\Logger\Exception\LogLevelException;
|
||||||
use Psr\Log\LogLevel;
|
use Psr\Log\LogLevel;
|
||||||
|
@ -32,6 +32,8 @@ use Psr\Log\LogLevel;
|
||||||
*/
|
*/
|
||||||
class SyslogLogger extends AbstractLogger
|
class SyslogLogger extends AbstractLogger
|
||||||
{
|
{
|
||||||
|
const NAME = 'syslog';
|
||||||
|
|
||||||
const IDENT = 'Friendica';
|
const IDENT = 'Friendica';
|
||||||
|
|
||||||
/** @var int The default syslog flags */
|
/** @var int The default syslog flags */
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
namespace Friendica\Core\Logger\Util;
|
namespace Friendica\Core\Logger\Util;
|
||||||
|
|
||||||
use Friendica\App\Request;
|
use Friendica\App\Request;
|
||||||
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
|
use Friendica\Core\Logger\Capability\IHaveCallIntrospections;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Introspection information about the current call
|
* Get Introspection information about the current call
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace Friendica\Core\Logger\Util;
|
||||||
|
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
use Friendica\Core\Logger\Capabilities\ICheckLoggerSettings;
|
use Friendica\Core\Logger\Capability\ICheckLoggerSettings;
|
||||||
use Friendica\Core\Logger\Exception\LoggerUnusableException;
|
use Friendica\Core\Logger\Exception\LoggerUnusableException;
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
|
|
|
@ -22,28 +22,16 @@
|
||||||
namespace Friendica\Core\PConfig\Factory;
|
namespace Friendica\Core\PConfig\Factory;
|
||||||
|
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
|
use Friendica\Core\Hooks\Capability\ICanCreateInstances;
|
||||||
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
|
use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
|
||||||
use Friendica\Core\PConfig\Repository;
|
|
||||||
use Friendica\Core\PConfig\Type;
|
|
||||||
use Friendica\Core\PConfig\ValueObject;
|
|
||||||
|
|
||||||
class PConfig
|
class PConfig
|
||||||
{
|
{
|
||||||
/**
|
public function create(ICanCreateInstances $instanceCreator, IManageConfigValues $config): IManagePersonalConfigValues
|
||||||
* @param IManageConfigValues $config The config
|
|
||||||
* @param ValueObject\Cache $pConfigCache The personal config cache
|
|
||||||
* @param Repository\PConfig $configRepo The configuration model
|
|
||||||
*
|
|
||||||
* @return IManagePersonalConfigValues
|
|
||||||
*/
|
|
||||||
public function create(IManageConfigValues $config, ValueObject\Cache $pConfigCache, Repository\PConfig $configRepo): IManagePersonalConfigValues
|
|
||||||
{
|
{
|
||||||
if ($config->get('system', 'config_adapter') === 'preload') {
|
$strategy = $config->get('system', 'config_adapter');
|
||||||
$configuration = new Type\PreloadPConfig($pConfigCache, $configRepo);
|
|
||||||
} else {
|
|
||||||
$configuration = new Type\JitPConfig($pConfigCache, $configRepo);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $configuration;
|
/** @var IManagePersonalConfigValues */
|
||||||
|
return $instanceCreator->create(IManagePersonalConfigValues::class, $strategy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,8 @@ use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
|
||||||
*/
|
*/
|
||||||
abstract class AbstractPConfigValues implements IManagePersonalConfigValues
|
abstract class AbstractPConfigValues implements IManagePersonalConfigValues
|
||||||
{
|
{
|
||||||
|
const NAME = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Cache
|
* @var Cache
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -33,6 +33,8 @@ use Friendica\Core\PConfig\ValueObject;
|
||||||
*/
|
*/
|
||||||
class JitPConfig extends AbstractPConfigValues
|
class JitPConfig extends AbstractPConfigValues
|
||||||
{
|
{
|
||||||
|
const NAME = 'jit';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array Array of already loaded db values (even if there was no value)
|
* @var array Array of already loaded db values (even if there was no value)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -32,6 +32,8 @@ use Friendica\Core\PConfig\ValueObject;
|
||||||
*/
|
*/
|
||||||
class PreloadPConfig extends AbstractPConfigValues
|
class PreloadPConfig extends AbstractPConfigValues
|
||||||
{
|
{
|
||||||
|
const NAME = 'preload';
|
||||||
|
|
||||||
/** @var array */
|
/** @var array */
|
||||||
private $config_loaded;
|
private $config_loaded;
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
namespace Friendica\Core\Session\Factory;
|
namespace Friendica\Core\Session\Factory;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Cache\Enum;
|
|
||||||
use Friendica\Core\Cache\Factory\Cache;
|
use Friendica\Core\Cache\Factory\Cache;
|
||||||
|
use Friendica\Core\Cache\Type\DatabaseCache;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Session\Capability\IHandleSessions;
|
use Friendica\Core\Session\Capability\IHandleSessions;
|
||||||
use Friendica\Core\Session\Type;
|
use Friendica\Core\Session\Type;
|
||||||
|
@ -74,7 +74,7 @@ class Session
|
||||||
$cache = $cacheFactory->createDistributed();
|
$cache = $cacheFactory->createDistributed();
|
||||||
|
|
||||||
// In case we're using the db as cache driver, use the native db session, not the cache
|
// In case we're using the db as cache driver, use the native db session, not the cache
|
||||||
if ($config->get('system', 'cache_driver') === Enum\Type::DATABASE) {
|
if ($config->get('system', 'cache_driver') === DatabaseCache::NAME) {
|
||||||
$handler = new Handler\Database($dba, $logger, $server);
|
$handler = new Handler\Database($dba, $logger, $server);
|
||||||
} else {
|
} else {
|
||||||
$handler = new Handler\Cache($cache, $logger);
|
$handler = new Handler\Cache($cache, $logger);
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
namespace Friendica;
|
namespace Friendica;
|
||||||
|
|
||||||
use Dice\Dice;
|
use Dice\Dice;
|
||||||
use Friendica\Core\Logger\Capabilities\ICheckLoggerSettings;
|
use Friendica\Core\Logger\Capability\ICheckLoggerSettings;
|
||||||
use Friendica\Core\Logger\Util\LoggerSettingsCheck;
|
use Friendica\Core\Logger\Util\LoggerSettingsCheck;
|
||||||
use Friendica\Core\Session\Capability\IHandleSessions;
|
use Friendica\Core\Session\Capability\IHandleSessions;
|
||||||
use Friendica\Core\Session\Capability\IHandleUserSessions;
|
use Friendica\Core\Session\Capability\IHandleUserSessions;
|
||||||
|
@ -210,9 +210,9 @@ abstract class DI
|
||||||
return self::$dice->create(Core\Config\Util\ConfigFileManager::class);
|
return self::$dice->create(Core\Config\Util\ConfigFileManager::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function keyValue(): Core\KeyValueStorage\Capabilities\IManageKeyValuePairs
|
public static function keyValue(): Core\KeyValueStorage\Capability\IManageKeyValuePairs
|
||||||
{
|
{
|
||||||
return self::$dice->create(Core\KeyValueStorage\Capabilities\IManageKeyValuePairs::class);
|
return self::$dice->create(Core\KeyValueStorage\Capability\IManageKeyValuePairs::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -26,7 +26,7 @@ use Friendica\BaseModule;
|
||||||
use Friendica\Core\Addon;
|
use Friendica\Core\Addon;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\Hook;
|
use Friendica\Core\Hook;
|
||||||
use Friendica\Core\KeyValueStorage\Capabilities\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\Core\Session\Capability\IHandleUserSessions;
|
use Friendica\Core\Session\Capability\IHandleUserSessions;
|
||||||
|
|
|
@ -25,7 +25,7 @@ use Friendica\App;
|
||||||
use Friendica\BaseModule;
|
use Friendica\BaseModule;
|
||||||
use Friendica\Core\Addon;
|
use Friendica\Core\Addon;
|
||||||
use Friendica\Core\Config\Capability\IManageConfigValues;
|
use Friendica\Core\Config\Capability\IManageConfigValues;
|
||||||
use Friendica\Core\KeyValueStorage\Capabilities\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
use Friendica\Network\HTTPException\NotFoundException;
|
use Friendica\Network\HTTPException\NotFoundException;
|
||||||
|
|
|
@ -37,8 +37,8 @@ use Dice\Dice;
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Cache;
|
use Friendica\Core\Cache;
|
||||||
use Friendica\Core\Config;
|
use Friendica\Core\Config;
|
||||||
use Friendica\Core\Hooks\Capabilities\ICanCreateInstances;
|
use Friendica\Core\Hooks\Capability\ICanCreateInstances;
|
||||||
use Friendica\Core\Hooks\Capabilities\ICanRegisterStrategies;
|
use Friendica\Core\Hooks\Capability\ICanRegisterStrategies;
|
||||||
use Friendica\Core\Hooks\Model\DiceInstanceManager;
|
use Friendica\Core\Hooks\Model\DiceInstanceManager;
|
||||||
use Friendica\Core\PConfig;
|
use Friendica\Core\PConfig;
|
||||||
use Friendica\Core\L10n;
|
use Friendica\Core\L10n;
|
||||||
|
@ -63,7 +63,7 @@ return [
|
||||||
// one instance for the whole execution
|
// one instance for the whole execution
|
||||||
'shared' => true,
|
'shared' => true,
|
||||||
],
|
],
|
||||||
\Friendica\Core\Addon\Capabilities\ICanLoadAddons::class => [
|
\Friendica\Core\Addon\Capability\ICanLoadAddons::class => [
|
||||||
'instanceOf' => \Friendica\Core\Addon\Model\AddonLoader::class,
|
'instanceOf' => \Friendica\Core\Addon\Model\AddonLoader::class,
|
||||||
'constructParams' => [
|
'constructParams' => [
|
||||||
[Dice::INSTANCE => '$basepath'],
|
[Dice::INSTANCE => '$basepath'],
|
||||||
|
@ -178,6 +178,20 @@ return [
|
||||||
$_SERVER,
|
$_SERVER,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
'$hostname' => [
|
||||||
|
'instanceOf' => App\BaseURL::class,
|
||||||
|
'constructParams' => [
|
||||||
|
$_SERVER,
|
||||||
|
],
|
||||||
|
'call' => [
|
||||||
|
['getHost', [], Dice::CHAIN_CALL],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
Cache\Type\AbstractCache::class => [
|
||||||
|
'constructParams' => [
|
||||||
|
[Dice::INSTANCE => '$hostname'],
|
||||||
|
],
|
||||||
|
],
|
||||||
App\Page::class => [
|
App\Page::class => [
|
||||||
'constructParams' => [
|
'constructParams' => [
|
||||||
[Dice::INSTANCE => '$basepath'],
|
[Dice::INSTANCE => '$basepath'],
|
||||||
|
@ -201,10 +215,10 @@ return [
|
||||||
['create', [], Dice::CHAIN_CALL],
|
['create', [], Dice::CHAIN_CALL],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
\Friendica\Core\Logger\Capabilities\IHaveCallIntrospections::class => [
|
\Friendica\Core\Logger\Capability\IHaveCallIntrospections::class => [
|
||||||
'instanceOf' => \Friendica\Core\Logger\Util\Introspection::class,
|
'instanceOf' => \Friendica\Core\Logger\Util\Introspection::class,
|
||||||
'constructParams' => [
|
'constructParams' => [
|
||||||
\Friendica\Core\Logger\Capabilities\IHaveCallIntrospections::IGNORE_CLASS_LIST,
|
\Friendica\Core\Logger\Capability\IHaveCallIntrospections::IGNORE_CLASS_LIST,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'$devLogger' => [
|
'$devLogger' => [
|
||||||
|
@ -276,8 +290,11 @@ return [
|
||||||
['getBackend', [], Dice::CHAIN_CALL],
|
['getBackend', [], Dice::CHAIN_CALL],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
\Friendica\Core\KeyValueStorage\Capabilities\IManageKeyValuePairs::class => [
|
\Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs::class => [
|
||||||
'instanceOf' => \Friendica\Core\KeyValueStorage\Type\DBKeyValueStorage::class,
|
'instanceOf' => \Friendica\Core\KeyValueStorage\Factory\KeyValueStorage::class,
|
||||||
|
'call' => [
|
||||||
|
['create', [], Dice::CHAIN_CALL],
|
||||||
|
],
|
||||||
],
|
],
|
||||||
Network\HTTPClient\Capability\ICanSendHttpRequests::class => [
|
Network\HTTPClient\Capability\ICanSendHttpRequests::class => [
|
||||||
'instanceOf' => Network\HTTPClient\Factory\HttpClient::class,
|
'instanceOf' => Network\HTTPClient\Factory\HttpClient::class,
|
||||||
|
|
|
@ -19,14 +19,31 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Friendica\Core\Hooks\Capabilities\BehavioralHookType as H;
|
use Friendica\Core\Cache;
|
||||||
|
use Friendica\Core\Hooks\Util\StrategiesFileManager;
|
||||||
use Friendica\Core\Logger\Type;
|
use Friendica\Core\Logger\Type;
|
||||||
|
use Friendica\Core\KeyValueStorage;
|
||||||
|
use Friendica\Core\PConfig;
|
||||||
use Psr\Log;
|
use Psr\Log;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
Log\LoggerInterface::class => [
|
Log\LoggerInterface::class => [
|
||||||
Log\NullLogger::class => [''],
|
Log\NullLogger::class => [StrategiesFileManager::STRATEGY_DEFAULT_KEY],
|
||||||
Type\SyslogLogger::class => ['syslog'],
|
Type\SyslogLogger::class => [Type\SyslogLogger::NAME],
|
||||||
Type\StreamLogger::class => ['stream'],
|
Type\StreamLogger::class => [Type\StreamLogger::NAME],
|
||||||
|
],
|
||||||
|
Cache\Capability\ICanCache::class => [
|
||||||
|
Cache\Type\DatabaseCache::class => [Cache\Type\DatabaseCache::NAME, StrategiesFileManager::STRATEGY_DEFAULT_KEY],
|
||||||
|
Cache\Type\APCuCache::class => [Cache\Type\APCuCache::NAME],
|
||||||
|
Cache\Type\MemcacheCache::class => [Cache\Type\MemcacheCache::NAME],
|
||||||
|
Cache\Type\MemcachedCache::class => [Cache\Type\MemcachedCache::NAME],
|
||||||
|
Cache\Type\RedisCache::class => [Cache\Type\RedisCache::NAME],
|
||||||
|
],
|
||||||
|
KeyValueStorage\Capability\IManageKeyValuePairs::class => [
|
||||||
|
KeyValueStorage\Type\DBKeyValueStorage::class => [KeyValueStorage\Type\DBKeyValueStorage::NAME, StrategiesFileManager::STRATEGY_DEFAULT_KEY],
|
||||||
|
],
|
||||||
|
PConfig\Capability\IManagePersonalConfigValues::class => [
|
||||||
|
PConfig\Type\JitPConfig::class => [PConfig\Type\JitPConfig::NAME],
|
||||||
|
PConfig\Type\PreloadPConfig::class => [PConfig\Type\PreloadPConfig::NAME, StrategiesFileManager::STRATEGY_DEFAULT_KEY],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
24
tests/phpunit-addons.xml
Normal file
24
tests/phpunit-addons.xml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<phpunit
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
bootstrap="bootstrap.php"
|
||||||
|
verbose="true"
|
||||||
|
timeoutForSmallTests="900"
|
||||||
|
timeoutForMediumTests="900"
|
||||||
|
timeoutForLargeTests="900"
|
||||||
|
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
|
||||||
|
<testsuite name="friendica-addons">
|
||||||
|
<directory suffix=".php">../addon/*/tests/</directory>
|
||||||
|
</testsuite>
|
||||||
|
<!-- Filters for Code Coverage -->
|
||||||
|
<coverage>
|
||||||
|
<include>
|
||||||
|
<directory suffix=".php">../addon/</directory>
|
||||||
|
</include>
|
||||||
|
<exclude>
|
||||||
|
<directory suffix=".php">../addon/*/tests/</directory>
|
||||||
|
<directory suffix=".php">../addon/*/view/</directory>
|
||||||
|
<directory suffix=".php">../addon/*/vendor/</directory>
|
||||||
|
</exclude>
|
||||||
|
</coverage>
|
||||||
|
</phpunit>
|
|
@ -54,7 +54,7 @@ class AddonLoaderTest extends MockedTest
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
\Friendica\Core\Hooks\Capabilities\BehavioralHookType::STRATEGY => [
|
\Friendica\Core\Hooks\Capability\BehavioralHookType::STRATEGY => [
|
||||||
\Psr\Log\LoggerInterface::class => [
|
\Psr\Log\LoggerInterface::class => [
|
||||||
\Psr\Log\NullLogger::class => [''],
|
\Psr\Log\NullLogger::class => [''],
|
||||||
],
|
],
|
||||||
|
@ -79,7 +79,7 @@ EOF;
|
||||||
'addon/testaddon1/static/hooks.config.php' => $this->content,
|
'addon/testaddon1/static/hooks.config.php' => $this->content,
|
||||||
],
|
],
|
||||||
'assertion' => [
|
'assertion' => [
|
||||||
\Friendica\Core\Hooks\Capabilities\BehavioralHookType::STRATEGY => [
|
\Friendica\Core\Hooks\Capability\BehavioralHookType::STRATEGY => [
|
||||||
\Psr\Log\LoggerInterface::class => [
|
\Psr\Log\LoggerInterface::class => [
|
||||||
\Psr\Log\NullLogger::class => [''],
|
\Psr\Log\NullLogger::class => [''],
|
||||||
],
|
],
|
||||||
|
@ -94,7 +94,7 @@ EOF;
|
||||||
'addon/testaddon2/static/hooks.config.php' => $this->content,
|
'addon/testaddon2/static/hooks.config.php' => $this->content,
|
||||||
],
|
],
|
||||||
'assertion' => [
|
'assertion' => [
|
||||||
\Friendica\Core\Hooks\Capabilities\BehavioralHookType::STRATEGY => [
|
\Friendica\Core\Hooks\Capability\BehavioralHookType::STRATEGY => [
|
||||||
\Psr\Log\LoggerInterface::class => [
|
\Psr\Log\LoggerInterface::class => [
|
||||||
\Psr\Log\NullLogger::class => ['', ''],
|
\Psr\Log\NullLogger::class => ['', ''],
|
||||||
],
|
],
|
||||||
|
@ -118,7 +118,7 @@ EOF;
|
||||||
'addon/testaddon2/static/hooks.config.php' => $this->content,
|
'addon/testaddon2/static/hooks.config.php' => $this->content,
|
||||||
],
|
],
|
||||||
'assertion' => [
|
'assertion' => [
|
||||||
\Friendica\Core\Hooks\Capabilities\BehavioralHookType::STRATEGY => [
|
\Friendica\Core\Hooks\Capability\BehavioralHookType::STRATEGY => [
|
||||||
\Psr\Log\LoggerInterface::class => [
|
\Psr\Log\LoggerInterface::class => [
|
||||||
\Psr\Log\NullLogger::class => [''],
|
\Psr\Log\NullLogger::class => [''],
|
||||||
],
|
],
|
||||||
|
|
|
@ -23,6 +23,7 @@ namespace Friendica\Test\src\Core\Cache;
|
||||||
|
|
||||||
use Friendica\Core\Cache\Capability\ICanCache;
|
use Friendica\Core\Cache\Capability\ICanCache;
|
||||||
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
use Friendica\Core\Cache\Capability\ICanCacheInMemory;
|
||||||
|
use Friendica\Core\Cache\Type\AbstractCache;
|
||||||
use Friendica\Test\MockedTest;
|
use Friendica\Test\MockedTest;
|
||||||
use Friendica\Util\PidFile;
|
use Friendica\Util\PidFile;
|
||||||
|
|
||||||
|
@ -246,4 +247,13 @@ abstract class CacheTest extends MockedTest
|
||||||
self::assertTrue($this->instance->set('key space', 'value'));
|
self::assertTrue($this->instance->set('key space', 'value'));
|
||||||
self::assertEquals('value', $this->instance->get('key space'));
|
self::assertEquals('value', $this->instance->get('key space'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetName()
|
||||||
|
{
|
||||||
|
if (defined(get_class($this->instance) . '::NAME')) {
|
||||||
|
self::assertEquals($this->instance::NAME, $this->instance->getName());
|
||||||
|
} else {
|
||||||
|
self::expectNotToPerformAssertions();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\Cache;
|
namespace Friendica\Test\src\Core\Cache;
|
||||||
|
|
||||||
|
use Friendica\App\BaseURL;
|
||||||
use Friendica\Core\Cache;
|
use Friendica\Core\Cache;
|
||||||
use Friendica\Test\DatabaseTestTrait;
|
use Friendica\Test\DatabaseTestTrait;
|
||||||
use Friendica\Test\Util\CreateDatabaseTrait;
|
use Friendica\Test\Util\CreateDatabaseTrait;
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\Hooks\Util;
|
namespace Friendica\Test\src\Core\Hooks\Util;
|
||||||
|
|
||||||
use Friendica\Core\Addon\Capabilities\ICanLoadAddons;
|
use Friendica\Core\Addon\Capability\ICanLoadAddons;
|
||||||
use Friendica\Core\Hooks\Capabilities\ICanRegisterStrategies;
|
use Friendica\Core\Hooks\Capability\ICanRegisterStrategies;
|
||||||
use Friendica\Core\Hooks\Exceptions\HookConfigException;
|
use Friendica\Core\Hooks\Exceptions\HookConfigException;
|
||||||
use Friendica\Core\Hooks\Util\StrategiesFileManager;
|
use Friendica\Core\Hooks\Util\StrategiesFileManager;
|
||||||
use Friendica\Test\MockedTest;
|
use Friendica\Test\MockedTest;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\KeyValueStorage;
|
namespace Friendica\Test\src\Core\KeyValueStorage;
|
||||||
|
|
||||||
use Friendica\Core\KeyValueStorage\Capabilities\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
use Friendica\Core\KeyValueStorage\Type\DBKeyValueStorage;
|
use Friendica\Core\KeyValueStorage\Type\DBKeyValueStorage;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Friendica\Test\Util\CreateDatabaseTrait;
|
use Friendica\Test\Util\CreateDatabaseTrait;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\KeyValueStorage;
|
namespace Friendica\Test\src\Core\KeyValueStorage;
|
||||||
|
|
||||||
use Friendica\Core\KeyValueStorage\Capabilities\IManageKeyValuePairs;
|
use Friendica\Core\KeyValueStorage\Capability\IManageKeyValuePairs;
|
||||||
use Friendica\Test\MockedTest;
|
use Friendica\Test\MockedTest;
|
||||||
|
|
||||||
abstract class KeyValueStorageTest extends MockedTest
|
abstract class KeyValueStorageTest extends MockedTest
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\Logger;
|
namespace Friendica\Test\src\Core\Logger;
|
||||||
|
|
||||||
use Friendica\Core\Logger\Capabilities\IHaveCallIntrospections;
|
use Friendica\Core\Logger\Capability\IHaveCallIntrospections;
|
||||||
use Friendica\Core\Logger\Type\SyslogLogger;
|
use Friendica\Core\Logger\Type\SyslogLogger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue