mirror of https://github.com/MISP/MISP
chg: [diagnostic:submodule] Started integration of update DB after pull
with workerspull/4435/head
parent
c8274c476e
commit
fe00c4d193
|
@ -44,6 +44,24 @@ class AdminShell extends AppShell
|
|||
echo PHP_EOL . 'Workers restarted.' . PHP_EOL;
|
||||
}
|
||||
|
||||
public function updateAfterPull() {
|
||||
$this->loadModel('Job');
|
||||
$this->loadModel('Server');
|
||||
$submodule_name = $this->args[0];
|
||||
$jobId = $this->args[1];
|
||||
$userId = $this->args[2];
|
||||
$this->Job->id = $jobId;
|
||||
$result = $this->Server->updateAfterPull($submodule_name, $userId) . PHP_EOL;
|
||||
$job['Job']['progress'] = 100;
|
||||
$job['Job']['date_modified'] = date("y-m-d H:i:s");
|
||||
if ($result) {
|
||||
$job['Job']['message'] = __('Database updated.');
|
||||
} else {
|
||||
$job['Job']['message'] = __('Could not update the database.');
|
||||
}
|
||||
$this->Job->save($job);
|
||||
}
|
||||
|
||||
public function updateGalaxies() {
|
||||
// The following is 7.x upwards only
|
||||
//$value = $this->args[0] ?? $this->args[0] ?? 0;
|
||||
|
|
|
@ -1555,7 +1555,7 @@ class ServersController extends AppController
|
|||
if ($this->request->is('post')) {
|
||||
$request = $this->request->data;
|
||||
$submodule = $request['Server']['submodule'];
|
||||
$res = $this->Server->updateSubmodule($submodule);
|
||||
$res = $this->Server->updateSubmodule($this->Auth->user(), $submodule);
|
||||
return new CakeResponse(array('body'=> json_encode($res), 'type' => 'json'));
|
||||
} else {
|
||||
throw new MethodNotAllowedException();
|
||||
|
|
|
@ -3841,7 +3841,7 @@ class Event extends AppModel
|
|||
}
|
||||
}
|
||||
|
||||
private function __getPrioWorkerIfPossible()
|
||||
public function __getPrioWorkerIfPossible()
|
||||
{
|
||||
$this->ResqueStatus = new ResqueStatus\ResqueStatus(Resque::redis());
|
||||
$workers = $this->ResqueStatus->getWorkers();
|
||||
|
|
|
@ -4636,24 +4636,78 @@ class Server extends AppModel
|
|||
return $status;
|
||||
}
|
||||
|
||||
public function updateSubmodule($submodule_name=false) {
|
||||
public function updateSubmodule($user, $submodule_name=false) {
|
||||
$path = APP . '../';
|
||||
if ($submodule_name == false) {
|
||||
$command = sprintf('cd %s; git submodule update 2>&1', $path);
|
||||
exec($command, $output, $return_code);
|
||||
// exec($command, $output, $return_code);
|
||||
$return_code = 0;
|
||||
$output = array();
|
||||
$output = implode("\n", $output);
|
||||
$res = array('status' => ($return_code==0 ? true : false), 'output' => $output);
|
||||
if ($return_code == 0) { // update all DB
|
||||
$this->updateDatabaseAfterPullRouter($submodule_name, $user);
|
||||
}
|
||||
} else if ($this->_isAcceptedSubmodule($submodule_name)) {
|
||||
$command = sprintf('cd %s; git submodule update -- %s 2>&1', $path, $submodule_name);
|
||||
exec($command, $output, $return_code);
|
||||
// exec($command, $output, $return_code);
|
||||
$return_code = 0;
|
||||
$output = array();
|
||||
$output = implode("\n", $output);
|
||||
$res = array('status' => ($return_code==0 ? true : false), 'output' => $output);
|
||||
if ($return_code == 0) { // update DB if necessary
|
||||
$this->updateDatabaseAfterPullRouter($submodule_name, $user);
|
||||
}
|
||||
} else {
|
||||
$res = array('status' => false, 'output' => __('Invalid submodule.'));
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
public function updateDatabaseAfterPullRouter($submodule_name, $user) {
|
||||
if (Configure::read('MISP.background_jobs')) {
|
||||
$job = ClassRegistry::init('Job');
|
||||
$job->create();
|
||||
$eventModel = ClassRegistry::init('Event');
|
||||
$data = array(
|
||||
'worker' => $eventModel->__getPrioWorkerIfPossible(),
|
||||
'job_type' => __('update_after_pull'),
|
||||
'job_input' => __('Updating: ' . $submodule_name),
|
||||
'status' => 0,
|
||||
'retries' => 0,
|
||||
'org_id' => $user['org_id'],
|
||||
'org' => $user['Organisation']['name'],
|
||||
'message' => 'Update database after PULL.',
|
||||
);
|
||||
$job->save($data);
|
||||
$jobId = $job->id;
|
||||
$process_id = CakeResque::enqueue(
|
||||
'prio',
|
||||
'AdminShell',
|
||||
array('updateAfterPull', $submodule_name, $jobId, $user['id']),
|
||||
true
|
||||
);
|
||||
$job->saveField('process_id', $process_id);
|
||||
return $process_id;
|
||||
} else {
|
||||
$result = $this->updateAfterPull($submodule_name, $userId);
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
public function updateAfterPull($submodule_name, $userId) {
|
||||
$user = $this->User->getAuthUser($userId);
|
||||
if ($user['Role']['perm_site_admin']) {
|
||||
if (empty($submodule_name)) { // update all
|
||||
|
||||
} else { // update specific
|
||||
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function update($status)
|
||||
{
|
||||
$final = '';
|
||||
|
|
Loading…
Reference in New Issue