2016-06-04 01:10:45 +02:00
< ? php
2014-01-06 05:15:47 +01:00
App :: uses ( 'Folder' , 'Utility' );
App :: uses ( 'File' , 'Utility' );
require_once 'AppShell.php' ;
class ServerShell extends AppShell
{
2016-03-09 02:31:55 +01:00
public $uses = array ( 'Server' , 'Task' , 'Job' , 'User' , 'Feed' );
2016-06-04 01:08:16 +02:00
2014-01-06 05:15:47 +01:00
public function pull () {
$userId = $this -> args [ 0 ];
$serverId = $this -> args [ 1 ];
$technique = $this -> args [ 2 ];
$jobId = $this -> args [ 3 ];
$this -> Job -> read ( null , $jobId );
$this -> Server -> id = $serverId ;
2015-04-20 13:50:14 +02:00
$user = $this -> User -> getAuthUser ( $userId );
2014-01-06 05:15:47 +01:00
$server = $this -> Server -> read ( null , $serverId );
2015-10-06 01:16:48 +02:00
$result = $this -> Server -> pull ( $user , $serverId , $technique , $server , $jobId );
2014-02-20 17:28:39 +01:00
$this -> Job -> id = $jobId ;
2014-01-07 11:08:21 +01:00
$this -> Job -> save ( array (
'id' => $jobId ,
'message' => 'Job done.' ,
'progress' => 100 ,
'status' => 4
));
if ( is_numeric ( $result [ 0 ])) {
switch ( $result [ 0 ]) {
2014-01-06 05:15:47 +01:00
case '1' :
$this -> Job -> saveField ( 'message' , 'Not authorised. This is either due to an invalid auth key, or due to the sync user not having authentication permissions enabled on the remote server.' );
return ;
break ;
case '2' :
2014-01-07 11:08:21 +01:00
$this -> Job -> saveField ( 'message' , $result [ 1 ]);
2014-01-06 05:15:47 +01:00
return ;
break ;
case '3' :
$this -> Job -> saveField ( 'message' , 'Sorry, incremental pushes are not yet implemented.' );
return ;
break ;
case '4' :
$this -> Job -> saveField ( 'message' , 'Invalid technique chosen.' );
return ;
break ;
2016-06-04 01:08:16 +02:00
2014-01-06 05:15:47 +01:00
}
}
}
2016-06-04 01:08:16 +02:00
2014-01-06 05:15:47 +01:00
public function push () {
$serverId = $this -> args [ 0 ];
$jobId = $this -> args [ 2 ];
2015-01-15 13:46:11 +01:00
$userId = $this -> args [ 3 ];
2014-01-06 05:15:47 +01:00
$this -> Job -> read ( null , $jobId );
2014-01-29 15:52:09 +01:00
$server = $this -> Server -> read ( null , $serverId );
2014-01-16 08:47:25 +01:00
App :: uses ( 'SyncTool' , 'Tools' );
$syncTool = new SyncTool ();
$HttpSocket = $syncTool -> setupHttpSocket ( $server );
2015-04-20 13:50:14 +02:00
$user = $this -> User -> getAuthUser ( $userId );
2015-12-03 00:27:56 +01:00
$result = $this -> Server -> push ( $serverId , 'full' , $jobId , $HttpSocket , $user );
$message = 'Job done.' ;
if ( $result === false ) $message = 'Job failed. The remote instance is too far outdated to initiate a push.' ;
2014-01-07 11:08:21 +01:00
$this -> Job -> save ( array (
'id' => $jobId ,
2016-03-09 02:31:55 +01:00
'message' => $message ,
2014-01-07 11:08:21 +01:00
'progress' => 100 ,
'status' => 4
));
2015-01-15 13:46:11 +01:00
if ( isset ( $this -> args [ 4 ])) {
$this -> Task -> id = $this -> args [ 5 ];
2014-01-29 15:52:09 +01:00
$this -> Task -> saveField ( 'message' , 'Job(s) started at ' . date ( 'd/m/Y - H:i:s' ) . '.' );
}
}
2016-06-04 01:08:16 +02:00
2016-03-09 02:31:55 +01:00
public function fetchFeed () {
$userId = $this -> args [ 0 ];
$feedId = $this -> args [ 1 ];
$jobId = $this -> args [ 2 ];
$this -> Job -> read ( null , $jobId );
$user = $this -> User -> getAuthUser ( $userId );
$result = $this -> Feed -> downloadFromFeedInitiator ( $feedId , $user , $jobId );
$this -> Job -> id = $jobId ;
2016-10-07 20:08:57 +02:00
if ( ! $result ) {
$message = 'Job Failed.' ;
$this -> Job -> save ( array (
'id' => $jobId ,
'message' => $message ,
'progress' => 0 ,
'status' => 3
));
} else {
$message = 'Job done.' ;
$this -> Job -> save ( array (
'id' => $jobId ,
'message' => $message ,
'progress' => 100 ,
'status' => 4
));
}
2016-03-09 02:31:55 +01:00
}
2016-06-04 01:08:16 +02:00
2014-01-29 15:52:09 +01:00
public function enqueuePull () {
$timestamp = $this -> args [ 0 ];
$userId = $this -> args [ 1 ];
$taskId = $this -> args [ 2 ];
$task = $this -> Task -> read ( null , $taskId );
if ( $timestamp != $task [ 'Task' ][ 'next_execution_time' ]) {
return ;
}
2016-12-07 13:50:45 +01:00
if ( $task [ 'Task' ][ 'timer' ] > 0 ) $this -> Task -> reQueue ( $task , 'default' , 'ServerShell' , 'enqueuePull' , $userId , $taskId );
2015-04-20 13:50:14 +02:00
$user = $this -> User -> getAuthUser ( $userId );
2015-12-27 23:29:12 +01:00
$servers = $this -> Server -> find ( 'all' , array ( 'recursive' => - 1 , 'conditions' => array ( 'pull' => 1 )));
2014-01-29 15:52:09 +01:00
$count = count ( $servers );
2015-06-03 23:49:37 +02:00
$failCount = 0 ;
2014-01-29 15:52:09 +01:00
foreach ( $servers as $k => $server ) {
$this -> Job -> create ();
$data = array (
'worker' => 'default' ,
2015-01-27 10:42:31 +01:00
'job_type' => 'pull' ,
2014-01-29 15:52:09 +01:00
'job_input' => 'Server: ' . $server [ 'Server' ][ 'id' ],
'retries' => 0 ,
2015-04-20 13:50:14 +02:00
'org' => $user [ 'Organisation' ][ 'name' ],
'org_id' => $user [ 'org_id' ],
2015-01-15 13:46:11 +01:00
'process_id' => 'Part of scheduled pull' ,
2015-01-27 10:42:31 +01:00
'message' => 'Pulling.' ,
2014-01-29 15:52:09 +01:00
);
$this -> Job -> save ( $data );
$jobId = $this -> Job -> id ;
App :: uses ( 'SyncTool' , 'Tools' );
$syncTool = new SyncTool ();
2015-12-26 01:35:34 +01:00
$result = $this -> Server -> pull ( $user , $server [ 'Server' ][ 'id' ], 'full' , $server , $jobId );
2014-01-29 15:52:09 +01:00
$this -> Job -> save ( array (
'id' => $jobId ,
'message' => 'Job done.' ,
'progress' => 100 ,
'status' => 4
));
if ( is_numeric ( $result [ 0 ])) {
switch ( $result [ 0 ]) {
case '1' :
$this -> Job -> saveField ( 'message' , 'Not authorised. This is either due to an invalid auth key, or due to the sync user not having authentication permissions enabled on the remote server.' );
break ;
case '2' :
$this -> Job -> saveField ( 'message' , $result [ 1 ]);
break ;
case '3' :
$this -> Job -> saveField ( 'message' , 'Sorry, incremental pushes are not yet implemented.' );
break ;
case '4' :
$this -> Job -> saveField ( 'message' , 'Invalid technique chosen.' );
break ;
2016-06-04 01:08:16 +02:00
2014-01-29 15:52:09 +01:00
}
2015-06-03 23:49:37 +02:00
$failCount ++ ;
2014-01-29 15:52:09 +01:00
}
}
2015-06-03 23:49:37 +02:00
$this -> Task -> id = $task [ 'Task' ][ 'id' ];
$this -> Task -> saveField ( 'message' , count ( $servers ) . ' job(s) completed at ' . date ( 'd/m/Y - H:i:s' ) . '. Failed jobs: ' . $failCount . '/' . $count );
2014-01-29 15:52:09 +01:00
}
2016-06-04 01:08:16 +02:00
2014-01-29 15:52:09 +01:00
public function enqueuePush () {
$timestamp = $this -> args [ 0 ];
$taskId = $this -> args [ 1 ];
2015-11-28 23:49:52 +01:00
$userId = $this -> args [ 2 ];
2014-01-29 15:52:09 +01:00
$this -> Task -> id = $taskId ;
$task = $this -> Task -> read ( null , $taskId );
if ( $timestamp != $task [ 'Task' ][ 'next_execution_time' ]) {
return ;
}
2015-06-03 23:49:37 +02:00
if ( $task [ 'Task' ][ 'timer' ] > 0 ) $this -> Task -> reQueue ( $task , 'default' , 'ServerShell' , 'enqueuePush' , $userId , $taskId );
2016-06-04 01:08:16 +02:00
2015-01-12 17:35:08 +01:00
$this -> User -> recursive = - 1 ;
2015-04-20 13:50:14 +02:00
$user = $this -> User -> getAuthUser ( $userId );
2014-01-29 15:52:09 +01:00
$servers = $this -> Server -> find ( 'all' , array ( 'recursive' => - 1 , 'conditions' => array ( 'push' => 1 )));
foreach ( $servers as $k => $server ) {
$this -> Job -> create ();
$data = array (
'worker' => 'default' ,
'job_type' => 'push' ,
'job_input' => 'Server: ' . $server [ 'Server' ][ 'id' ],
'retries' => 0 ,
2015-04-20 13:50:14 +02:00
'org' => $user [ 'Organisation' ][ 'name' ],
'org_id' => $user [ 'org_id' ],
2015-01-15 13:46:11 +01:00
'process_id' => 'Part of scheduled push' ,
2014-01-29 15:52:09 +01:00
'message' => 'Pushing.' ,
);
$this -> Job -> save ( $data );
$jobId = $this -> Job -> id ;
App :: uses ( 'SyncTool' , 'Tools' );
$syncTool = new SyncTool ();
$HttpSocket = $syncTool -> setupHttpSocket ( $server );
2016-03-09 11:25:05 +01:00
$result = $this -> Server -> push ( $server [ 'Server' ][ 'id' ], 'full' , $jobId , $HttpSocket , $user );
2014-01-29 15:52:09 +01:00
}
2015-06-03 23:49:37 +02:00
$this -> Task -> id = $task [ 'Task' ][ 'id' ];
$this -> Task -> saveField ( 'message' , count ( $servers ) . ' job(s) completed at ' . date ( 'd/m/Y - H:i:s' ) . '.' );
2014-01-06 05:15:47 +01:00
}
}