public function __invoke(array $record) { if ($record['level'] < $this->level) { return $record; } // pid indicates a background process $pid = Process::get('pid'); if ($pid) { $record['extra']['pid'] = $pid; } return $record; }
public function __invoke(array $record) { if ($record['level'] < $this->level) { return $record; } if (Session::current()) { $record['extra']['user'] = (int) Session::current('UserID'); } else { if (is_numeric(@Process::get('type'))) { $record['extra']['user'] = (int) Process::get('type'); } } return $record; }
public function resolve(Request $req, Response $res) { $req->user = new User(); // User from CLI switch ($req->client('type')) { case 'cli': // Retrieve user context from process data, then CLI argument. $userId = (int) Process::get('type'); if (!$userId) { $req->cli()->options('u', array('alias' => 'user', 'type' => 'integer', 'describe' => 'Idenitfier of target context user.')); $userId = (int) $req->meta('user'); } if ($userId) { $req->user->load($userId); } unset($userId); break; default: // Session ID provided, validate it. $sid = $req->meta('sid'); if ($sid) { $ret = Session::ensure($sid, $req->meta('token'), $req->fingerprint()); // Session doesn't exist, delete the cookie. if ($ret === false || $ret === Session::ERR_EXPIRED) { $res->cookie('__sid', '', time() - 3600); } else { if (is_integer($ret)) { switch ($ret) { // note: System should treat as public user. case Session::ERR_INVALID: break; } } else { // Success, proceed. $req->user->load(Session::current('username')); unset($req->user->password); } } } else { if ($this->setupSession && !@\core\Node::get('User')) { $req->user->data(['id' => 0, 'groups' => ['Administrators'], 'username' => '__default']); } } break; } }
$stdout = stream_get_contents($pipes[1]); $stderr = stream_get_contents($pipes[2]); if ("{$stdout}{$stderr}") { $method = $stderr ? 'error' : 'info'; Log::$method(sprintf('Output captured from command line: %s', $process['command']), array_filter(array('stdout' => $stdout, 'stderr' => $stderr))); unset($method); } unset($stdout, $stderr); // Handles cleanup after process exit switch (strtolower($process['type'])) { // Permanent processes will be restarted upon death case 'permanent': core\Database::query('UPDATE `' . FRAMEWORK_COLLECTION_PROCESS . '` SET `pid` = NULL WHERE `id` = ?', $process['id']); Log::debug('Permanent process died, clearing pid.', [$res, $process]); break; // Sets pid to 0, prevents it fire again and double enqueue of the same time slot. // Sets pid to 0, prevents it fire again and double enqueue of the same time slot. case 'cron': core\Database::query('UPDATE `' . FRAMEWORK_COLLECTION_PROCESS . '` SET `pid` = 0 WHERE `id` = ?', $process['id']); break; // Deletes the process object upon exit // Deletes the process object upon exit default: $process = array_select($process, array(Node::FIELD_COLLECTION, 'id', 'pid')); $res = Node::delete($process); Log::debug("Deleting finished process, affected rows: {$res}.", [$res, $process]); break; } // Recursive process, spawn another worker. Process::spawnWorker(@$_SERVER['env']);