1
0
Fork 0
mirror of https://github.com/ThomasGsp/HyperProxmox.git synced 2025-03-09 15:40:18 +00:00

Changes for redis

- Cache system
- Internal working
- Code clean
This commit is contained in:
Tlams 2018-02-08 14:30:00 +00:00
parent 78fca2bef4
commit a7d66036c0
5 changed files with 52 additions and 65 deletions

View file

@ -16,6 +16,7 @@ from netaddr import iter_iprange
import threading
import time
import base64
import hashlib
def RunAnalyse(clusters_conf, generalconf, delay=300):
@ -29,19 +30,23 @@ def RunAnalyse(clusters_conf, generalconf, delay=300):
class Core:
def __init__(self, generalconf, Lredis):
# def __init__(self, generalconf, Lredis):
def __init__(self, generalconf):
self.generalconf = generalconf
self.Lredis = Lredis
""" LOAD MONGODB """
self.mongo = MongoDB(generalconf["mongodb"]["ip"])
self.mongo.client = self.mongo.connect()
""" LOAD REDIS """
self.redis_msg = Lredis
self.redis_msg = Redis_wrapper(generalconf["redis"]["ip"],
generalconf["redis"]["port"], 0).connect()
if self.mongo.client and self.redis_msg.connect():
self.redis_cache = Redis_wrapper(generalconf["redis"]["ip"],
generalconf["redis"]["port"], 3).connect()
if self.mongo.client and self.redis_msg:
self.mongo.db = self.mongo.client.db
""" Others """
@ -78,15 +83,27 @@ class Core:
return json_decode({"value": "Bad request"})
def generalquerycacheinfra(self, dest, date, cluster=None, node=None, vmid=None):
if dest == "instances":
return self.mongo.get_instance(date, cluster, node, vmid)
elif dest == "nodes":
return self.mongo.get_nodes_informations(date, cluster, node)
elif dest == "clusters":
return self.mongo.get_clusters_conf(date, cluster)
else:
json_decode({"value": "Bad request"})
""" Test Redis Cache """
hash_object = hashlib.md5(b"{0}-{1}-{2}-{3}-{4}".format(dest, date, cluster, node, vmid))
hash_hex = hash_object.hexdigest()
cache = self.redis_cache.get_message(hash_hex)
if cache is None:
if dest == "instances":
resultmbrequest = self.mongo.get_instance(date, cluster, node, vmid)
elif dest == "nodes":
resultmbrequest = self.mongo.get_nodes_informations(date, cluster, node)
elif dest == "clusters":
resultmbrequest = self.mongo.get_clusters_conf(date, cluster)
else:
resultmbrequest = json_decode({"value": "Bad request"})
self.redis_cache.insert_message(hash_hex, resultmbrequest)
return resultmbrequest
else:
return cache
"""
@ -189,6 +206,7 @@ class Core:
data["cluster"] = node_informations["cluster"]
data["node"] = target
data["ip"] = ip
data["date"] = lastkeyvalid["value"]
self.mongo.insert_instance(data)
""" Limit creation DDOS based on digest """

View file

@ -4,8 +4,14 @@ import json
import redis
import time
class Redis_instance_queue:
def __init__(self, server="127.0.0.1", port=6379, db=3, password=None):
class Redis_wrapper:
def __init__(self, server="127.0.0.1", port=6379, db=0, password=None):
# DB =
# messages: 0
# logs: 1
# queue : 2
# cache : 3
self.server = server
self.port = port
self.r = None
@ -26,49 +32,9 @@ class Redis_instance_queue:
def insert_instance_queue(self, logtext, expir=3000):
self.r.set(time.time(), logtext, expir)
class Redis_logger:
def __init__(self, server="127.0.0.1", port=6379, db=2, password=None):
self.server = server
self.port = port
self.r = None
self.db = db
self.password = password
def connect(self):
try:
conn = self.r = redis.Redis(
host=self.server, port=self.port, db=self.db, password=self.password,
charset="utf-8", decode_responses=True)
self.r.client_list()
except BaseException as err:
print("Redis connexion error on {0}:{1} ({2})".format(self.server, self.port, err))
conn = False
return conn
def insert_logs(self, logtext, expir=86400*4):
self.r.set(time.time(), logtext, expir)
class Redis_messages:
def __init__(self, server="127.0.0.1", port=6379, db=1, password=None):
self.server = server
self.port = port
self.r = None
self.db = db
self.password = password
def connect(self):
try:
conn = self.r = redis.Redis(
host=self.server, port=self.port, db=self.db, password=self.password,
charset="utf-8", decode_responses=True)
self.r.client_list()
except BaseException as err:
print("Redis connexion error on {0}:{1} ({2})".format(self.server, self.port, err))
conn = False
return conn
def insert_message(self, key, value, expir=86400):
self.r.set(key, value, expir)