mirror of https://github.com/MISP/MISP
Merge branch 'workerForDBUpdate' into revisedUpdateProcess
commit
0fe9b490b8
|
@ -318,45 +318,20 @@ class AdminShell extends AppShell
|
|||
$whoami = exec('whoami');
|
||||
if ($whoami === 'httpd' || $whoami === 'www-data' || $whoami === 'apache') {
|
||||
echo 'Executing all updates to bring the database up to date with the current version.' . PHP_EOL;
|
||||
$this->Server->runUpdates(true);
|
||||
$this->Server->runUpdates(true, false);
|
||||
if (!empty($this->args[0])) {
|
||||
$processId = $this->args[0];
|
||||
$job = $this->Job->read(null, $processId);
|
||||
$job['Job']['progress'] = 100;
|
||||
$job['Job']['message'] = 'Update done';
|
||||
$this->Job->save($job);
|
||||
}
|
||||
echo 'All updates completed.' . PHP_EOL;
|
||||
} else {
|
||||
die('This OS user is not allowed to run this command.'. PHP_EOL. 'Run it under `www-data` or `httpd`.' . PHP_EOL . 'You tried to run this command as: ' . $whoami . PHP_EOL);
|
||||
}
|
||||
}
|
||||
|
||||
public function updateApp() {
|
||||
$whoami = exec('whoami');
|
||||
if ($whoami === 'httpd' || $whoami === 'www-data' || $whoami === 'apache') {
|
||||
$command = $this->args[0];
|
||||
if (!empty($this->args[1])) {
|
||||
$processId = $this->args[1];
|
||||
$job = $this->Job->read(null, $processId);
|
||||
} else { // create worker
|
||||
$this->Job->create();
|
||||
$job_data = array(
|
||||
'worker' => 'prio',
|
||||
'job_type' => 'update_app',
|
||||
'job_input' => 'command: ' . $command,
|
||||
'status' => 0,
|
||||
'retries' => 0,
|
||||
'org_id' => '',
|
||||
'org' => '',
|
||||
'message' => 'Updating.',
|
||||
);
|
||||
$this->Job->save($job_data);
|
||||
$job = $this->Job->read(null, $this->Job->id);
|
||||
}
|
||||
$result = $this->Server->updateDatabase($command, false);
|
||||
$job['Job']['progress'] = 100;
|
||||
$job['Job']['message'] = 'Update done';
|
||||
$this->Job->save($job);
|
||||
} else {
|
||||
die('This OS user is not allowed to run this command.' . PHP_EOL . 'Run it under `www-data` or `httpd`.' . PHP_EOL . 'You tried to run this command as: ' . $whoami . PHP_EOL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function getAuthkey() {
|
||||
if (empty($this->args[0])) {
|
||||
echo 'Invalid parameters. Usage: ' . APP . 'Console/cake Admin getAuthkey [user_email]' . PHP_EOL;
|
||||
|
|
|
@ -226,7 +226,7 @@ class AppModel extends Model
|
|||
}
|
||||
|
||||
// SQL scripts for updates
|
||||
public function updateDatabase($command, $useWorker=false)
|
||||
public function updateDatabase($command)
|
||||
{
|
||||
// Exit if updates are locked
|
||||
if ($this->isUpdateLocked()) {
|
||||
|
@ -244,31 +244,6 @@ class AppModel extends Model
|
|||
return false;
|
||||
}
|
||||
$this->__resetUpdateProgress();
|
||||
// restart this function by a worker
|
||||
if ($useWorker && Configure::read('MISP.background_jobs')) {
|
||||
$job = ClassRegistry::init('Job');
|
||||
$job->create();
|
||||
$data = array(
|
||||
'worker' => 'prio',
|
||||
'job_type' => 'update_app',
|
||||
'job_input' => 'command: ' . $command,
|
||||
'status' => 0,
|
||||
'retries' => 0,
|
||||
'org_id' => 0,
|
||||
'org' => '',
|
||||
'message' => 'Updating.',
|
||||
);
|
||||
$job->save($data);
|
||||
$jobId = $job->id;
|
||||
$process_id = CakeResque::enqueue(
|
||||
'prio',
|
||||
'AdminShell',
|
||||
array('updateApp', $command, $jobId),
|
||||
true
|
||||
);
|
||||
$job->saveField('process_id', $process_id);
|
||||
return true;
|
||||
}
|
||||
|
||||
$liveOff = false;
|
||||
$exitOnError = false;
|
||||
|
@ -1516,7 +1491,7 @@ class AppModel extends Model
|
|||
return true;
|
||||
}
|
||||
|
||||
public function runUpdates($verbose = false)
|
||||
public function runUpdates($verbose = false, $useWorker = true)
|
||||
{
|
||||
$this->AdminSetting = ClassRegistry::init('AdminSetting');
|
||||
$db = ConnectionManager::getDataSource('default');
|
||||
|
@ -1540,6 +1515,31 @@ class AppModel extends Model
|
|||
$db_version = $db_version[0];
|
||||
$updates = $this->__findUpgrades($db_version['AdminSetting']['value']);
|
||||
if (!empty($updates)) {
|
||||
// restart this function by a worker
|
||||
if ($useWorker && Configure::read('MISP.background_jobs')) {
|
||||
$job = ClassRegistry::init('Job');
|
||||
$job->create();
|
||||
$data = array(
|
||||
'worker' => 'prio',
|
||||
'job_type' => 'update_database',
|
||||
'job_input' => 'command: ' . implode(',', $updates),
|
||||
'status' => 0,
|
||||
'retries' => 0,
|
||||
'org_id' => 0,
|
||||
'org' => '',
|
||||
'message' => 'Updating.',
|
||||
);
|
||||
$job->save($data);
|
||||
$jobId = $job->id;
|
||||
$process_id = CakeResque::enqueue(
|
||||
'prio',
|
||||
'AdminShell',
|
||||
array('updateDatabase', $jobId),
|
||||
true
|
||||
);
|
||||
$job->saveField('process_id', $process_id);
|
||||
return true;
|
||||
}
|
||||
foreach ($updates as $update => $temp) {
|
||||
if ($verbose) {
|
||||
echo str_pad('Executing ' . $update, 30, '.');
|
||||
|
|
Loading…
Reference in New Issue