Skip to content

Commit

Permalink
xxx
Browse files Browse the repository at this point in the history
  • Loading branch information
DeepDiver1975 committed Apr 29, 2016
1 parent 2ab4b1c commit 26e2d12
Show file tree
Hide file tree
Showing 7 changed files with 294 additions and 1 deletion.
14 changes: 14 additions & 0 deletions .htaccess
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,17 @@ Options -Indexes
<IfModule pagespeed_module>
ModPagespeed Off
</IfModule>
#### DO NOT CHANGE ANYTHING ABOVE THIS LINE ####

ErrorDocument 403 //core/templates/403.php
ErrorDocument 404 //core/templates/404.php
<IfModule mod_rewrite.c>
RewriteRule . index.php [PT,E=PATH_INFO:$1]
RewriteBase /
<IfModule mod_env.c>
SetEnv front_controller_active true
<IfModule mod_dir.c>
DirectorySlash off
</IfModule>
</IfModule>
</IfModule>
61 changes: 61 additions & 0 deletions core/Command/Background/Worker.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

namespace OC\Core\Command\Background;

use OC\Console\CommandLogger;
use OCP\ILogger;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class Worker extends Command {

/** @var \OCP\BackgroundJob\IJobList */
private $jobList;
/** @var ILogger */
private $logger;

public function __construct() {
$this->jobList = \OC::$server->getJobList();
parent::__construct();
}

protected function configure() {
$this
->setName("background:worker")
->setDescription("Listen to the background job queue and execute the jobs")
->addOption('sleep', null, InputOption::VALUE_OPTIONAL, 'Number of seconds to sleep when no job is available', 3);
}

/**
* @param InputInterface $input
* @param OutputInterface $output
*/
protected function execute(InputInterface $input, OutputInterface $output) {
$this->logger = new CommandLogger($output);

$waitTime = $input->getOption('sleep');
while (true) {
if (is_null($this->executeNext())) {
sleep($waitTime);
}
}
}

private function executeNext() {
$job = $this->jobList->getNext();
if (is_null($job)) {
return null;
}
$jobId = $job->getId();
$this->logger->debug('Run job with ID ' . $job->getId(), ['app' => 'cron']);
$job->execute($this->jobList, $this->logger);
$this->logger->debug('Finished job with ID ' . $job->getId(), ['app' => 'cron']);

$this->jobList->setLastJob($job);
unset($job);

return $jobId;
}
}
1 change: 1 addition & 0 deletions core/register_command.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
$application->add(new OC\Core\Command\Background\Cron(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\Background\WebCron(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\Background\Ajax(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\Background\Worker());

$application->add(new OC\Core\Command\Config\App\DeleteConfig(\OC::$server->getConfig()));
$application->add(new OC\Core\Command\Config\App\GetConfig(\OC::$server->getConfig()));
Expand Down
12 changes: 12 additions & 0 deletions db_structure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -973,6 +973,18 @@
<default></default>
<notnull>false</notnull>
</field>
<field>
<name>reserved</name>
<type>integer</type>
<default>0</default>
<notnull>false</notnull>
</field>
<field>
<name>reserved_at</name>
<type>timestamp</type>
<default></default>
<notnull>false</notnull>
</field>

<index>
<name>job_class_index</name>
Expand Down
1 change: 1 addition & 0 deletions lib/private/BackgroundJob/JobList.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ public function getNext() {
$query->select('*')
->from('jobs')
->where($query->expr()->lt('id', $query->createNamedParameter($lastId, IQueryBuilder::PARAM_INT)))
->andWhere($query->expr()->eq('reserved', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
->orderBy('id', 'DESC')
->setMaxResults(1);
$result = $query->execute();
Expand Down
204 changes: 204 additions & 0 deletions lib/private/Console/CommandLogger.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
<?php
/**
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/

namespace OC\Console;

use OCP\ILogger;
use OCP\Util;
use Symfony\Component\Console\Output\OutputInterface;

class CommandLogger implements ILogger {

/** @var OutputInterface */
private $output;

/**
* CommandLogger constructor.
*
* @param OutputInterface $output
*/
public function __construct(OutputInterface $output) {
$this->output = $output;
}

/**
* System is unusable.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function emergency($message, array $context = array()) {
$this->log(Util::FATAL, $message, $context);
}

/**
* Action must be taken immediately.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function alert($message, array $context = array()) {
$this->log(Util::ERROR, $message, $context);
}

/**
* Critical conditions.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function critical($message, array $context = array()) {
$this->log(Util::ERROR, $message, $context);
}

/**
* Runtime errors that do not require immediate action but should typically
* be logged and monitored.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function error($message, array $context = array()) {
$this->log(Util::ERROR, $message, $context);
}

/**
* Exceptional occurrences that are not errors.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function warning($message, array $context = array()) {
$this->log(Util::WARN, $message, $context);
}

/**
* Normal but significant events.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function notice($message, array $context = array()) {
$this->log(Util::INFO, $message, $context);
}

/**
* Interesting events.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function info($message, array $context = array()) {
$this->log(Util::ERROR, $message, $context);
}

/**
* Detailed debug information.
*
* @param string $message
* @param array $context
* @return null
* @since 7.0.0
*/
public function debug($message, array $context = array()) {
$this->log(Util::DEBUG, $message, $context);
}

/**
* Logs with an arbitrary level.
*
* @param mixed $level
* @param string $message
* @param array $context
* @return mixed
* @since 7.0.0
*/
public function log($level, $message, array $context = array()) {
$minLevel = Util::INFO;
$verbosity = $this->output->getVerbosity();
if ($verbosity === OutputInterface::VERBOSITY_DEBUG) {
$minLevel = Util::DEBUG;
}
if ($verbosity === OutputInterface::VERBOSITY_QUIET) {
$minLevel = Util::ERROR;
}
if ($level < $minLevel) {
return;
}

// interpolate $message as defined in PSR-3
$replace = array();
foreach ($context as $key => $val) {
$replace['{' . $key . '}'] = $val;
}

// interpolate replacement values into the message and return
$message = strtr($message, $replace);
$style = ($level > 2) ?'error' : 'info';

$this->output->writeln("<$style>$message</$style>");
}

/**
* Logs an exception very detailed
* An additional message can we written to the log by adding it to the
* context.
*
* <code>
* $logger->logException($ex, [
* 'message' => 'Exception during cron job execution'
* ]);
* </code>
*
* @param \Exception | \Throwable $exception
* @param array $context
* @return void
* @since 8.2.0
*/
public function logException($exception, array $context = array()) {
$exception = array(
'Exception' => get_class($exception),
'Message' => $exception->getMessage(),
'Code' => $exception->getCode(),
'Trace' => $exception->getTraceAsString(),
'File' => $exception->getFile(),
'Line' => $exception->getLine(),
);
$exception['Trace'] = preg_replace('!(login|checkPassword|updatePrivateKeyPassword)\(.*\)!', '$1(*** username and password replaced ***)', $exception['Trace']);
$msg = isset($context['message']) ? $context['message'] : 'Exception';
$msg .= ': ' . json_encode($exception);
$this->error($msg, $context);
}
}
2 changes: 1 addition & 1 deletion version.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
// We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades
// between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
// when updating major/minor version number.
$OC_Version = array(9, 1, 0, 0);
$OC_Version = array(9, 1, 0, 1);

// The human readable string
$OC_VersionString = '9.1.0 pre alpha';
Expand Down

0 comments on commit 26e2d12

Please sign in to comment.