mirror of https://github.com/MISP/MISP
chg: [internal] Cleanup Redis code
parent
f53063f8af
commit
5465bd8bd0
|
@ -537,8 +537,7 @@ class AdminShell extends AppShell
|
||||||
public function redisReady()
|
public function redisReady()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$redis = $this->Server->setupRedisWithException();
|
RedisTool::init()->ping();
|
||||||
$redis->ping();
|
|
||||||
$this->out('Successfully connected to Redis.');
|
$this->out('Successfully connected to Redis.');
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$this->error('Redis connection is not available', $e->getMessage());
|
$this->error('Redis connection is not available', $e->getMessage());
|
||||||
|
@ -979,36 +978,14 @@ class AdminShell extends AppShell
|
||||||
$this->out(__('New encryption key "%s" saved into config file.', $new));
|
$this->out(__('New encryption key "%s" saved into config file.', $new));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Redis $redis
|
|
||||||
* @param string $prefix
|
|
||||||
* @return array[int, int]
|
|
||||||
*/
|
|
||||||
private function redisSize($redis, $prefix)
|
|
||||||
{
|
|
||||||
$keyCount = 0;
|
|
||||||
$size = 0;
|
|
||||||
$it = null;
|
|
||||||
while ($keys = $redis->scan($it, $prefix, 1000)) {
|
|
||||||
$redis->pipeline();
|
|
||||||
foreach ($keys as $key) {
|
|
||||||
$redis->rawCommand("memory", "usage", $key);
|
|
||||||
}
|
|
||||||
$result = $redis->exec();
|
|
||||||
$keyCount += count($keys);
|
|
||||||
$size += array_sum($result);
|
|
||||||
}
|
|
||||||
return [$keyCount, $size];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function redisMemoryUsage()
|
public function redisMemoryUsage()
|
||||||
{
|
{
|
||||||
$redis = $this->Server->setupRedisWithException();
|
$redis = RedisTool::init();
|
||||||
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
|
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
|
||||||
|
|
||||||
$output = [];
|
$output = [];
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:feed_cache:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:feed_cache:*');
|
||||||
$output['feed_cache_count'] = $count;
|
$output['feed_cache_count'] = $count;
|
||||||
$output['feed_cache_size'] = $size;
|
$output['feed_cache_size'] = $size;
|
||||||
|
|
||||||
|
@ -1029,7 +1006,7 @@ class AdminShell extends AppShell
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:server_cache:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:server_cache:*');
|
||||||
$output['server_cache_count'] = $count;
|
$output['server_cache_count'] = $count;
|
||||||
$output['server_cache_size'] = $size;
|
$output['server_cache_size'] = $size;
|
||||||
|
|
||||||
|
@ -1050,35 +1027,35 @@ class AdminShell extends AppShell
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:wlc:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:wlc:*');
|
||||||
$output['warninglist_cache_count'] = $count;
|
$output['warninglist_cache_count'] = $count;
|
||||||
$output['warninglist_cache_size'] = $size;
|
$output['warninglist_cache_size'] = $size;
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:warninglist_entries_cache:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:warninglist_entries_cache:*');
|
||||||
$output['warninglist_entries_count'] = $count;
|
$output['warninglist_entries_count'] = $count;
|
||||||
$output['warninglist_entries_size'] = $size;
|
$output['warninglist_entries_size'] = $size;
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:top_correlation');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:top_correlation');
|
||||||
$output['top_correlation_count'] = $count;
|
$output['top_correlation_count'] = $count;
|
||||||
$output['top_correlation_size'] = $size;
|
$output['top_correlation_size'] = $size;
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:correlation_exclusions');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:correlation_exclusions');
|
||||||
$output['correlation_exclusions_count'] = $count;
|
$output['correlation_exclusions_count'] = $count;
|
||||||
$output['correlation_exclusions_size'] = $size;
|
$output['correlation_exclusions_size'] = $size;
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:event_lock:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:event_lock:*');
|
||||||
$output['event_lock_count'] = $count;
|
$output['event_lock_count'] = $count;
|
||||||
$output['event_lock_size'] = $size;
|
$output['event_lock_size'] = $size;
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:user_ip:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:user_ip:*');
|
||||||
$output['user_ip_count'] = $count;
|
$output['user_ip_count'] = $count;
|
||||||
$output['user_ip_size'] = $size;
|
$output['user_ip_size'] = $size;
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:ip_user:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:ip_user:*');
|
||||||
$output['user_ip_count'] += $count;
|
$output['user_ip_count'] += $count;
|
||||||
$output['user_ip_size'] += $size;
|
$output['user_ip_size'] += $size;
|
||||||
|
|
||||||
list($count, $size) = $this->redisSize($redis, 'misp:authkey_usage:*');
|
list($count, $size) = RedisTool::sizeByPrefix($redis, 'misp:authkey_usage:*');
|
||||||
$output['authkey_usage_count'] = $count;
|
$output['authkey_usage_count'] = $count;
|
||||||
$output['authkey_usage_size'] = $size;
|
$output['authkey_usage_size'] = $size;
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,29 @@ class RedisTool
|
||||||
return $unlinkSupported ? $redis->unlink($keys) : $redis->del($keys);
|
return $unlinkSupported ? $redis->unlink($keys) : $redis->del($keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Redis $redis
|
||||||
|
* @param string $prefix
|
||||||
|
* @return array[int, int]
|
||||||
|
* @throws RedisException
|
||||||
|
*/
|
||||||
|
public static function sizeByPrefix(Redis $redis, $prefix)
|
||||||
|
{
|
||||||
|
$keyCount = 0;
|
||||||
|
$size = 0;
|
||||||
|
$it = null;
|
||||||
|
while ($keys = $redis->scan($it, $prefix, 1000)) {
|
||||||
|
$redis->pipeline();
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
$redis->rawCommand("memory", "usage", $key);
|
||||||
|
}
|
||||||
|
$result = $redis->exec();
|
||||||
|
$keyCount += count($keys);
|
||||||
|
$size += array_sum($result);
|
||||||
|
}
|
||||||
|
return [$keyCount, $size];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param mixed $data
|
* @param mixed $data
|
||||||
* @return string
|
* @return string
|
||||||
|
|
|
@ -397,8 +397,7 @@ class Correlation extends AppModel
|
||||||
{
|
{
|
||||||
if ($this->exclusions === null) {
|
if ($this->exclusions === null) {
|
||||||
try {
|
try {
|
||||||
$redis = $this->setupRedisWithException();
|
$this->exclusions = RedisTool::init()->sMembers('misp:correlation_exclusions');
|
||||||
$this->exclusions = $redis->sMembers('misp:correlation_exclusions');
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,6 @@ class CorrelationExclusion extends AppModel
|
||||||
'Containable',
|
'Containable',
|
||||||
);
|
);
|
||||||
|
|
||||||
private $__redis = null;
|
|
||||||
|
|
||||||
public $validate = [
|
public $validate = [
|
||||||
'value' => [
|
'value' => [
|
||||||
'uniqueValue' => [
|
'uniqueValue' => [
|
||||||
|
@ -54,15 +52,15 @@ class CorrelationExclusion extends AppModel
|
||||||
public function cacheValues()
|
public function cacheValues()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->__redis = $this->setupRedisWithException();
|
$redis = RedisTool::init();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->__redis->del($this->key);
|
RedisTool::unlink($redis, $this->key);
|
||||||
$exclusions = $this->find('column', [
|
$exclusions = $this->find('column', [
|
||||||
'fields' => ['value']
|
'fields' => ['value']
|
||||||
]);
|
]);
|
||||||
$this->__redis->sAddArray($this->key, $exclusions);
|
$redis->sAddArray($this->key, $exclusions);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function cleanRouter($user)
|
public function cleanRouter($user)
|
||||||
|
|
|
@ -489,20 +489,22 @@ class Warninglist extends AppModel
|
||||||
|
|
||||||
private function cacheWarninglistEntries(array $warninglistEntries, $id)
|
private function cacheWarninglistEntries(array $warninglistEntries, $id)
|
||||||
{
|
{
|
||||||
$redis = $this->setupRedis();
|
try {
|
||||||
if ($redis !== false) {
|
$redis = RedisTool::init();
|
||||||
$key = 'misp:warninglist_entries_cache:' . $id;
|
} catch (Exception $e) {
|
||||||
$redis->del($key);
|
return false;
|
||||||
if (method_exists($redis, 'saddArray')) {
|
|
||||||
$redis->sAddArray($key, $warninglistEntries);
|
|
||||||
} else {
|
|
||||||
foreach ($warninglistEntries as $entry) {
|
|
||||||
$redis->sAdd($key, $entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
$key = 'misp:warninglist_entries_cache:' . $id;
|
||||||
|
RedisTool::unlink($redis, $key);
|
||||||
|
if (method_exists($redis, 'saddArray')) {
|
||||||
|
$redis->sAddArray($key, $warninglistEntries);
|
||||||
|
} else {
|
||||||
|
foreach ($warninglistEntries as $entry) {
|
||||||
|
$redis->sAdd($key, $entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue