/**
  * {@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;
 }
Example #2
0
 /**
  * {@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']));
 }
Example #3
0
 /**
  * {@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;
 }