mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-29 16:55:05 +02:00
WIP Scheduled install & update of history database processes
This commit is contained in:
parent
25b15182e3
commit
dd4849f7c3
@ -149,7 +149,8 @@ class ConsoleSupervisor
|
|||||||
*/
|
*/
|
||||||
public function runBasic()
|
public function runBasic()
|
||||||
{
|
{
|
||||||
global $config;
|
// Ensure functions are installed and up to date.
|
||||||
|
enterprise_hook('cron_extension_install_functions');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PHP configuration warnings:
|
* PHP configuration warnings:
|
||||||
|
@ -393,9 +393,11 @@ final class DBMaintainer
|
|||||||
/**
|
/**
|
||||||
* Install PandoraFMS database schema in current target.
|
* Install PandoraFMS database schema in current target.
|
||||||
*
|
*
|
||||||
|
* @param boolean $check_only Check and return, do not perform actions.
|
||||||
|
*
|
||||||
* @return boolean Installation is success or not.
|
* @return boolean Installation is success or not.
|
||||||
*/
|
*/
|
||||||
public function install()
|
public function install(bool $check_only=false)
|
||||||
{
|
{
|
||||||
if ($this->connect() !== true) {
|
if ($this->connect() !== true) {
|
||||||
return false;
|
return false;
|
||||||
@ -407,6 +409,11 @@ final class DBMaintainer
|
|||||||
|
|
||||||
if ($this->ready !== true) {
|
if ($this->ready !== true) {
|
||||||
// Not ready, create database in target.
|
// Not ready, create database in target.
|
||||||
|
if ($check_only === true) {
|
||||||
|
$this->lastError = 'Database does not exist in target';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$rc = $this->dbh->query(
|
$rc = $this->dbh->query(
|
||||||
sprintf(
|
sprintf(
|
||||||
'CREATE DATABASE %s',
|
'CREATE DATABASE %s',
|
||||||
@ -428,9 +435,15 @@ final class DBMaintainer
|
|||||||
$this->ready = true;
|
$this->ready = true;
|
||||||
} else if ($this->verifySchema() === true) {
|
} else if ($this->verifySchema() === true) {
|
||||||
$this->installed = true;
|
$this->installed = true;
|
||||||
|
$this->lastError = null;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($check_only === true) {
|
||||||
|
$this->lastError = 'Schema not applied in target';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->applyDump(Config::get('homedir', '').'/pandoradb.sql');
|
$result = $this->applyDump(Config::get('homedir', '').'/pandoradb.sql');
|
||||||
|
|
||||||
// Set MR version according pandoradb_data.
|
// Set MR version according pandoradb_data.
|
||||||
@ -451,9 +464,11 @@ final class DBMaintainer
|
|||||||
/**
|
/**
|
||||||
* Updates PandoraFMS database schema in current target.
|
* Updates PandoraFMS database schema in current target.
|
||||||
*
|
*
|
||||||
|
* @param boolean $check_only Perform only test without update.
|
||||||
|
*
|
||||||
* @return boolean Current installation is up to date.
|
* @return boolean Current installation is up to date.
|
||||||
*/
|
*/
|
||||||
public function update()
|
public function update(bool $check_only=false)
|
||||||
{
|
{
|
||||||
if ($this->connect() !== true) {
|
if ($this->connect() !== true) {
|
||||||
return false;
|
return false;
|
||||||
@ -463,15 +478,43 @@ final class DBMaintainer
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$last_mr = (int) Config::get('MR', null);
|
// Set MR version according pandoradb_data.
|
||||||
|
$data_content = file_get_contents(
|
||||||
|
Config::get('homedir', '').'/pandoradb_data.sql'
|
||||||
|
);
|
||||||
|
if (preg_match('/\(\'MR\'\,\s*(\d+)\)/', $data_content, $matches) > 0) {
|
||||||
|
$target_mr = $matches[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
$active_mr = (int) Config::get('MR', null);
|
||||||
$last_mr_curr = (int) $this->getValue(
|
$last_mr_curr = (int) $this->getValue(
|
||||||
'tconfig',
|
'tconfig',
|
||||||
'value',
|
'value',
|
||||||
['token' => 'MR']
|
['token' => 'MR']
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($last_mr_curr < $last_mr) {
|
if ($check_only === true) {
|
||||||
while ($last_mr_curr < $last_mr) {
|
if ($active_mr === $last_mr_curr) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->lastError = sprintf(
|
||||||
|
'Database schema not up to date: #%d should be #%d',
|
||||||
|
$last_mr_curr,
|
||||||
|
$active_mr
|
||||||
|
);
|
||||||
|
if ($active_mr < $target_mr) {
|
||||||
|
$this->lastError .= sprintf(
|
||||||
|
' (latest available: #%d)',
|
||||||
|
$target_mr
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($last_mr_curr < $active_mr) {
|
||||||
|
while ($last_mr_curr < $active_mr) {
|
||||||
$last_mr_curr++;
|
$last_mr_curr++;
|
||||||
|
|
||||||
$path = Config::get('homedir', '');
|
$path = Config::get('homedir', '');
|
||||||
@ -501,7 +544,7 @@ final class DBMaintainer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($last_mr_curr === $last_mr) {
|
if ($last_mr_curr === $active_mr) {
|
||||||
$this->setConfigToken('MR', $last_mr_curr);
|
$this->setConfigToken('MR', $last_mr_curr);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -513,11 +556,12 @@ final class DBMaintainer
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies current target database is connected, installed and updated.
|
* Process database checks perform required actions.
|
||||||
|
* Returns true if it is connected, installed and updated.
|
||||||
*
|
*
|
||||||
* @return boolean Status of the installation.
|
* @return boolean Status of the installation.
|
||||||
*/
|
*/
|
||||||
public function check()
|
public function process()
|
||||||
{
|
{
|
||||||
if ($this->connect() !== true) {
|
if ($this->connect() !== true) {
|
||||||
return false;
|
return false;
|
||||||
@ -535,6 +579,52 @@ final class DBMaintainer
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if target has schema updated.
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function isUpdated()
|
||||||
|
{
|
||||||
|
return $this->update(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if target has schema installed.
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function isInstalled()
|
||||||
|
{
|
||||||
|
return $this->install(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if current target is connected, installed and updated.
|
||||||
|
*
|
||||||
|
* @return boolean Status of the database schema.
|
||||||
|
*/
|
||||||
|
public function check()
|
||||||
|
{
|
||||||
|
if ($this->connect() !== true) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isInstalled() !== true) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isUpdated() !== true) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function keeps same functionality as install.php:parse_mysqli_dump.
|
* This function keeps same functionality as install.php:parse_mysqli_dump.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user