mirror of https://github.com/MISP/misp-dashboard
68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
import datetime
|
|
import json
|
|
import logging
|
|
import os
|
|
import random
|
|
import sys
|
|
import time
|
|
|
|
|
|
class Live_helper:
|
|
def __init__(self, serv_live, cfg):
|
|
self.serv_live = serv_live
|
|
self.cfg = cfg
|
|
self.maxCacheHistory = cfg.get('Dashboard', 'maxCacheHistory')
|
|
# REDIS keys
|
|
self.CHANNEL = cfg.get('RedisLog', 'channel')
|
|
self.prefix_redis_key = "TEMP_CACHE_LIVE:"
|
|
|
|
# logger
|
|
logDir = cfg.get('Log', 'directory')
|
|
logfilename = cfg.get('Log', 'helpers_filename')
|
|
logPath = os.path.join(logDir, logfilename)
|
|
if not os.path.exists(logDir):
|
|
os.makedirs(logDir)
|
|
try:
|
|
handler = logging.FileHandler(logPath)
|
|
except PermissionError as error:
|
|
print(error)
|
|
print("Please fix the above and try again.")
|
|
sys.exit(126)
|
|
formatter = logging.Formatter('%(asctime)s:%(levelname)s:%(name)s:%(message)s')
|
|
handler.setFormatter(formatter)
|
|
self.logger = logging.getLogger(__name__)
|
|
self.logger.setLevel(logging.INFO)
|
|
self.logger.addHandler(handler)
|
|
|
|
def publish_log(self, zmq_name, name, content, channel=None):
|
|
channel = channel if channel is not None else self.CHANNEL
|
|
to_send = { 'name': name, 'log': json.dumps(content), 'zmqName': zmq_name }
|
|
to_send_keep = { 'name': name, 'log': content, 'zmqName': zmq_name }
|
|
j_to_send = json.dumps(to_send)
|
|
j_to_send_keep = json.dumps(to_send_keep)
|
|
self.serv_live.publish(channel, j_to_send)
|
|
self.logger.debug('Published: {}'.format(j_to_send))
|
|
if name != 'Keepalive':
|
|
name = 'Attribute' if 'ObjectAttribute' else name
|
|
self.add_to_stream_log_cache(name, j_to_send_keep)
|
|
|
|
|
|
def get_stream_log_cache(self, cacheKey):
|
|
rKey = self.prefix_redis_key+cacheKey
|
|
entries = self.serv_live.lrange(rKey, 0, -1)
|
|
to_ret = []
|
|
for entry in entries:
|
|
jentry = json.loads(entry)
|
|
to_ret.append(jentry)
|
|
return to_ret
|
|
|
|
|
|
def add_to_stream_log_cache(self, cacheKey, item):
|
|
rKey = self.prefix_redis_key+cacheKey
|
|
if type(item) != str:
|
|
item = json.dumps(item)
|
|
self.serv_live.lpush(rKey, item)
|
|
r = random.randint(0, 8)
|
|
if r == 0:
|
|
self.serv_live.ltrim(rKey, 0, 100)
|