- added "WAIT_TIMEOUT" and "INTERACTIVE_TIMEOUT" as _MySQL_ required vars to requirements.ini (relevant for persistent DB connections)

- improved DB requirements shown on `/setup` page
- improved _Redis_ Client connections. Added "client name" (https://redis.io/commands/client-setname)
This commit is contained in:
Mark Friedrich
2019-04-18 18:27:46 +02:00
parent a33615445e
commit 5d17f81bb8
7 changed files with 56 additions and 23 deletions

View File

@@ -499,7 +499,7 @@ class Sso extends Api\User{
protected function updateCharacter(\stdClass $characterData) : ?Pathfinder\CharacterModel {
$character = null;
if( !empty($characterData->character) ){
if(!empty($characterData->character)){
/**
* @var $character Pathfinder\CharacterModel
*/
@@ -511,7 +511,7 @@ class Sso extends Api\User{
$character->corporationId = $characterData->corporation;
$character->allianceId = $characterData->alliance;
$character = $character->save();
$character->save();
}
return $character;

View File

@@ -1410,6 +1410,7 @@ class Setup extends Controller {
* @return array
*/
protected function checkDBConfig(\Base $f3, \lib\db\SQL $db) : array {
$checkAll = true;
// some db like "Maria DB" have some strange version strings....
$dbVersionString = $db->version();
$dbVersionParts = explode('-', $dbVersionString);
@@ -1423,11 +1424,13 @@ class Setup extends Controller {
}
$dbConfig = [
'version' => [
'label' => 'DB version',
'required' => $f3->get('REQUIREMENTS.MYSQL.VERSION'),
'version' => $dbVersion,
'check' => version_compare($dbVersion, $f3->get('REQUIREMENTS.MYSQL.VERSION'), '>=' )
'data' => [
'version' => [
'label' => 'DB version',
'required' => $f3->get('REQUIREMENTS.MYSQL.VERSION'),
'version' => $dbVersion,
'check' => version_compare($dbVersion, $f3->get('REQUIREMENTS.MYSQL.VERSION'), '>=' ) ? : $checkAll = false
]
]
];
@@ -1443,16 +1446,32 @@ class Setup extends Controller {
return !empty($match) ? end(reset($match)) : 'unknown';
};
$checkValue = function($requiredValue, $value) : bool {
$check = true;
if(!empty($requiredValue)){
if(is_int($requiredValue)){
$check = $requiredValue <= $value;
}else{
$check = $requiredValue == $value;
}
}
return $check;
};
foreach($mySQLConfig as $param => $requiredValue){
$value = $getValue($param);
$dbConfig[] = [
$dbConfig['data'][] = [
'label' => $param,
'required' => $requiredValue,
'version' => $value,
'check' => !empty($requiredValue) ? ($requiredValue == $value) : true
'check' => $checkValue($requiredValue, $value) ? : $checkAll = false
];
}
$dbConfig['meta'] = [
'check' => $checkAll
];
return $dbConfig;
}

View File

@@ -131,6 +131,12 @@ abstract class AbstractClient extends \Prefab {
Config::REDIS_OPT_READ_TIMEOUT
)
){
if(isset($poolConfig['tag'])){
$name = 'pathfinder|php|tag:' . strtolower($poolConfig['tag']) . '|pid:' . getmypid();
$client->client('setname', $name);
}
if(isset($poolConfig['db'])){
$client->select($poolConfig['db']);
}
@@ -179,7 +185,8 @@ abstract class AbstractClient extends \Prefab {
* @return array
*/
protected function getCachePoolConfig(\Base $f3) : array {
$dsn = (string)$f3->get('API_CACHE');
$tag = 'API_CACHE';
$dsn = (string)$f3->get($tag);
// fallback
$conf = ['type' => 'array'];
@@ -195,6 +202,10 @@ abstract class AbstractClient extends \Prefab {
// redis or filesystem -> overwrites $conf
Config::parseDSN($dsn, $conf);
// tag name is used as alias name e.g. for debugging
// -> e.g. for Redis https://redis.io/commands/client-setname
$conf['tag'] = $tag;
return $conf;
}

View File

@@ -234,7 +234,6 @@ class Config extends \Prefab {
$f3->set(self::HIVE_KEY_ENVIRONMENT, $environmentData);
}
return $environmentData;
}

View File

@@ -108,6 +108,6 @@ abstract class AbstractPathfinderModel extends AbstractModel {
// parent::save() resets the schema and old values get replaced with new values
$this->fieldChanges = $this->getFieldChanges();
parent::save();
return parent::save();
}
}

View File

@@ -70,6 +70,8 @@ COLLATION_DATABASE = utf8_general_ci
COLLATION_CONNECTION = utf8_general_ci
FOREIGN_KEY_CHECKS = ON
INNODB_FILE_PER_TABLE = ON
WAIT_TIMEOUT = 28800
INTERACTIVE_TIMEOUT = {{ @REQUIREMENTS.MYSQL.VARS.WAIT_TIMEOUT }}
[REQUIREMENTS.REDIS]
VERSION = 3.0

View File

@@ -476,7 +476,7 @@
<check if="{{ @dbInformation.info.connected }}">
<true>
<kbd class="txt-color txt-color-success">
connected<check if="{{ @dbInformation.info.persistent }}"> (persistent)</check>
connected<check if="{{ @dbInformation.info.persistent }}">&nbsp;(persistent)</check>
</kbd>
</true>
<false>
@@ -505,20 +505,22 @@
<check if="{{ @dbInformation.info.dbConfig }}">
<tr>
<th></th>
<th class="text-right">required</th>
<th class="text-right">installed</th>
<th class="text-right"></th>
<td data-target=".{{ @dbInformation.info.name }}_dbConfig_col" data-toggle="collapse" aria-expanded="false" aria-controls="{{ @dbInformation.info.name }}__dbConfig_col">
<i class="fas fa-fw fa-chevron-right pf-animate-rotate"></i>
</td>
<td class="col-sm-3 col-md-3 text-right">required</td>
<td class="col-sm-3 col-md-3 text-right">installed</td>
<td class="col-sm-1 col-md-1 text-right"></td>
</tr>
<repeat group="{{ @dbInformation.info.dbConfig }}" value="{{ @setting }}">
<tr>
<td>{{ @setting.label }}</td>
<td class="text-right">
<repeat group="{{ @dbInformation.info.dbConfig.data }}" value="{{ @setting }}">
<tr class="{{ @dbInformation.info.name }}_dbConfig_col {{ @dbInformation.info.dbConfig.meta.check ? 'collapse' : '' }}">
<td class="bg-color bg-color-tealDarker">{{ @setting.label }}</td>
<td class="text-right bg-color bg-color-tealDarker">
<check if="{{ @setting.required }}">
<kbd>{{ @setting.required }}</kbd>
</check>
</td>
<td class="text-right">
<td class="text-right bg-color bg-color-tealDarker">
<check if="{{ @setting.check }}">
<true>
<kbd class="txt-color txt-color-success">{{ @setting.version }}</kbd>
@@ -528,7 +530,7 @@
</false>
</check>
</td>
<td class="text-right">
<td class="text-right bg-color bg-color-tealDarker">
<check if="{{ @setting.check }}">
<true>
<i class="fas fa-fw fa-check txt-color txt-color-success"></i>