/** * {@inheritdoc} * @see Scalr\Logger.LoggerStorageInterface::write() */ public function write(LogRecord $record) { $data = $record->getData(); $this->getDb()->Execute('START TRANSACTION'); $res = $this->getDb()->Execute("\n INSERT `auditlog`\n SET `id` = ?,\n `sessionid` = ?,\n `accountid` = ?,\n `userid` = ?,\n `email` = ?,\n `envid` = ?,\n `ip` = ?,\n `time` = ?,\n `message` = ?,\n `datatype` = ?\n ", array($record->getUuid(), $record->getSessionid(), $record->getAccountid(), $record->getUserid(), $record->getEmail(), $record->getEnvid(), $record->getIp(), $record->getTime()->format('Y-m-d H:i:s'), $record->getMessage(), $record->getDatatype())); if ($res) { $stmt = ''; $rt = array(); foreach ($record->getTags()->get() as $v) { $stmt .= ",('" . $record->getUuid() . "', ?)"; $rt[] = $v; } if ($stmt != '') { $res = $this->getDb()->Execute("\n INSERT `auditlog_tags` (`logid`, `tag`)\n VALUES " . substr($stmt, 1) . "\n ", $rt); } if ($data instanceof KeyValueRecord) { $diff = get_object_vars($data); if (!empty($diff)) { $stmt = ''; $rt = array(); foreach ($diff as $k => $v) { $stmt .= ", ('" . $record->getUuid() . "', ?, ?, ?)"; $rt[] = $k; $rt[] = $v['old_value']; $rt[] = $v['new_value']; } if ($stmt != '') { $res = $this->getDb()->Execute("\n INSERT `auditlog_data` (`logid`, `key`, `old_value`, `new_value`)\n VALUES " . substr($stmt, 1) . "\n ", $rt); } } } } if ($res) { $this->getDb()->Execute('COMMIT'); } else { $this->getDb()->Execute('ROLLBACK'); } return $res ? true : false; }
/** * {@inheritdoc} * @see Scalr\Logger.LoggerStorageInterface::write() */ public function write(LogRecord $record) { $data = $record->getData(); $r = array('_id' => $record->getUuid(), 'sessionid' => $record->getSessionid(), 'accountid' => $record->getAccountid(), 'userid' => $record->getUserid(), 'email' => $record->getEmail(), 'envid' => $record->getEnvid(), 'ip' => $record->getIp(), 'time' => new MongoDate($record->getTime()->getTimestamp()), 'message' => $record->getMessage(), 'tags' => $record->getTags()->get(), 'data' => $data instanceof KeyValueRecord ? get_object_vars($data) : array(), 'datatype' => $record->getDatatype()); return $this->getMongo()->insert($r, array('safe' => $this->options['safe'], 'fsync' => $this->options['fsync'], 'timeout' => $this->options['timeout'])); }
/** * {@inheritdoc} * @see Scalr\Logger.AuditLogInterface::log() */ public function log($message, $tags, $object = null, $objectBefore = null) { if (!$this->isEnabled()) { return true; } $user = $this->getUser(); if (!$this->getContainer()->initialized('request') || !$this->getContainer()->request instanceof \Scalr_UI_Request) { $ip = '127.0.0.1'; $envid = 0; } else { /* @var $request \Scalr_UI_Request */ $request = $this->getContainer()->request; $ip = $request->getClientIp(); if ($request->getEnvironment() === null) { $envid = 0; } else { $envid = $request->getEnvironment()->id; } } if (!$tags instanceof AuditLogTags) { $tags = new AuditLogTags(!empty($tags) && is_array($tags) ? $tags : null); } $record = new LogRecord(); $record->setEnvid($envid)->setUserid($user->getId())->setEmail($user->getEmail())->setAccountid($user->getAccountId())->setIp(ip2long($ip))->setTime(new \DateTime(null, new \DateTimeZone('UTC')))->setMessage($message)->setTags($tags); if ($object !== null || $objectBefore !== null) { $classes = array(); if ($object !== null) { if (!$object instanceof AbstractAuditLogDocument) { $object = $this->getObjectDocument($object); } $classes[0] = get_class($object); } if ($objectBefore !== null) { if (!$objectBefore instanceof AbstractAuditLogDocument) { $objectBefore = $this->getObjectDocument($objectBefore); } $classes[1] = get_class($objectBefore); } if (count($classes) != 2) { //Empty state has been before or will be after the change. list($index, $dataClass) = each($classes); if ($index == 0) { $objectBefore = new $dataClass(); } else { $object = new $dataClass(); } } $keyValueRecord = $this->getKeyValueRecord($objectBefore, $object); if ($keyValueRecord == null) { //No changes found. return true; } $record->setData($keyValueRecord); } try { $res = $this->storage->write($record); } catch (\Exception $e) { error_log(sprintf('AuditLog::log() failed. %s %s.', get_class($e), $e->getMessage())); $res = true; } return $res; }