php-censor/src/PHPCensor/Store/BuildErrorWriter.php

120 lines
3.4 KiB
PHP
Raw Normal View History

2017-05-08 07:32:01 +02:00
<?php
namespace PHPCensor\Store;
use b8\Database;
/**
* Class BuildErrorWriter
*/
class BuildErrorWriter
{
/** @var int */
protected $build_id;
/** @var array */
protected $errors = [];
/** @var int */
protected $buffer_size;
/**
* BuildErrorWriter constructor.
*
* @param int $build_id
* @param int $buffer_size
*/
public function __construct($build_id, $buffer_size = 10000)
{
$this->build_id = $build_id;
$this->buffer_size = max((int) $buffer_size, 1);
}
/**
* Destructor
*/
public function __destruct()
{
$this->flush();
}
/**
* Write error
*
* @param string $plugin
* @param string $message
* @param int $severity
* @param string $file
* @param int $line_start
* @param int $line_end
* @param \DateTime $created_date
*/
public function write($plugin, $message, $severity, $file = null, $line_start = null, $line_end = null, $created_date = null)
{
if (is_null($created_date)) {
$created_date = new \DateTime();
}
$this->errors[] = array(
'plugin' => (string)$plugin,
'message' => (string)$message,
'severity' => (int)$severity,
'file' => !is_null($file) ? (string)$file : null,
'line_start' => !is_null($line_start) ? (int)$line_start : null,
'line_end' => !is_null($line_end) ? (int)$line_end : null,
'created_date' => $created_date->format('Y-m-d H:i:s'),
);
if (count($this->errors) >= $this->buffer_size) {
$this->flush();
}
}
/**
* Flush buffer
*/
public function flush()
{
if (empty($this->errors)) {
return;
}
$insert_values_placeholders = [];
$insert_values_data = [];
foreach ($this->errors as $i => $error) {
$insert_values_placeholders[] = '(
:build_id' . $i . ',
:plugin' . $i . ',
:file' . $i . ',
:line_start' . $i . ',
:line_end' . $i . ',
:severity' . $i . ',
:message' . $i . ',
:created_date' . $i . '
)';
$insert_values_data['build_id' . $i] = $this->build_id;
$insert_values_data['plugin' . $i] = $error['plugin'];
$insert_values_data['file' . $i] = $error['file'];
$insert_values_data['line_start' . $i] = $error['line_start'];
$insert_values_data['line_end' . $i] = $error['line_end'];
$insert_values_data['severity' . $i] = $error['severity'];
$insert_values_data['message' . $i] = $error['message'];
$insert_values_data['created_date' . $i] = $error['created_date'];
}
$query = '
INSERT INTO {{build_error}} (
{{build_id}},
{{plugin}},
{{file}},
{{line_start}},
{{line_end}},
{{severity}},
{{message}},
{{created_date}}
)
VALUES ' . join(', ', $insert_values_placeholders) . '
';
$stmt = Database::getConnection('write')->prepareCommon($query);
$stmt->execute($insert_values_data);
$this->errors = [];
}
}