cleanup, move redis to separate file

This commit is contained in:
simon 2022-12-21 18:51:31 +07:00
parent a43ef63277
commit 1a32b0a51d
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4
4 changed files with 92 additions and 86 deletions

View File

@ -27,7 +27,7 @@ class DockerBackup:
def _get_image_stats(self):
"""return dict for image"""
response = requests.get(self.URL).json()
response = requests.get(self.URL, timeout=20).json()
now = datetime.now()
last_updated = response["last_updated"]

View File

@ -0,0 +1,88 @@
"""handle redis interactions"""
import json
from datetime import datetime
import redis
class RedisBase:
"""connection base for redis"""
REDIS_HOST = "redis"
REDIS_PORT = 6379
NAME_SPACE = "ta:"
def __init__(self):
self.conn = redis.Redis(host=self.REDIS_HOST, port=self.REDIS_PORT)
class TaskHandler(RedisBase):
"""handle buildx task queue"""
def __init__(self, repo_conf, tag_name=False):
super().__init__()
self.key = self.NAME_SPACE + "task:buildx"
self.repo_conf = repo_conf
self.tag_name = tag_name
def create_task(self, task_name):
"""create task"""
self.create_queue()
self.set_task(task_name)
self.set_pub()
def create_queue(self):
"""set initial json object for queue"""
if self.conn.execute_command(f"EXISTS {self.key}"):
print(f"{self.key} already exists")
return
message = {
"created": int(datetime.now().strftime("%s")),
"tasks": {}
}
self.conn.execute_command(
"JSON.SET", self.key, ".", json.dumps(message)
)
def set_task(self, task_name):
"""publish new task to queue"""
user = self.repo_conf.get("gh_user")
repo = self.repo_conf.get("gh_repo")
build_command = self.build_command(task_name)
task = {
"timestamp": int(datetime.now().strftime("%s")),
"clone": f"https://github.com/{user}/{repo}.git",
"name": self.repo_conf.get("gh_repo"),
"build": build_command,
}
if task_name == "sync_es":
task.update({"clone": False})
self.conn.json().set(self.key, f".tasks.{repo}", task)
def build_command(self, task_name):
"""return build command"""
if not self.tag_name:
return self.repo_conf.get(task_name)
all_commands = self.repo_conf.get(task_name)
if all(isinstance(i, list) for i in all_commands):
to_build_commands = []
for command in all_commands:
to_build_commands.append(self._replace_version(command))
else:
to_build_commands = self._replace_version(all_commands)
return to_build_commands
def _replace_version(self, command):
"""replace version in str"""
return [i.replace("$VERSION", self.tag_name) for i in command]
def set_pub(self):
"""set message to pub"""
self.conn.publish(self.key, self.repo_conf.get("gh_repo"))

View File

@ -74,7 +74,7 @@ class DockerHook(WebhookBase):
user = self.repo_conf.get("gh_user")
repo = self.repo_conf.get("gh_repo")
url = f"https://api.github.com/repos/{user}/{repo}/commits/master"
response = requests.get(url).json()
response = requests.get(url, timeout=20).json()
commit_url = response["html_url"]
first_line_message = response["commit"]["message"].split("\n")[0]
@ -83,7 +83,7 @@ class DockerHook(WebhookBase):
@staticmethod
def _forward_message(message_data, url):
"""forward message to discrod"""
response = requests.post(url, json=message_data)
response = requests.post(url, json=message_data, timeout=20)
if not response.ok:
print(response.json())
return {"success": False}

View File

@ -8,9 +8,9 @@ from hmac import HMAC, compare_digest
from bs4 import BeautifulSoup
import requests
import redis
from src.db import DatabaseConnect
from src.ta_redis import TaskHandler
from src.webhook_base import WebhookBase
@ -544,85 +544,3 @@ class EsVersionSync:
"""build task for builder"""
task = TaskHandler(self.repo_conf, tag_name=self.expected)
task.create_task("sync_es")
class RedisBase:
"""connection base for redis"""
REDIS_HOST = "redis"
REDIS_PORT = 6379
NAME_SPACE = "ta:"
def __init__(self):
self.conn = redis.Redis(host=self.REDIS_HOST, port=self.REDIS_PORT)
class TaskHandler(RedisBase):
"""handle buildx task queue"""
def __init__(self, repo_conf, tag_name=False):
super().__init__()
self.key = self.NAME_SPACE + "task:buildx"
self.repo_conf = repo_conf
self.tag_name = tag_name
def create_task(self, task_name):
"""create task"""
self.create_queue()
self.set_task(task_name)
self.set_pub()
def create_queue(self):
"""set initial json object for queue"""
if self.conn.execute_command(f"EXISTS {self.key}"):
print(f"{self.key} already exists")
return
message = {
"created": int(datetime.now().strftime("%s")),
"tasks": {}
}
self.conn.execute_command(
"JSON.SET", self.key, ".", json.dumps(message)
)
def set_task(self, task_name):
"""publish new task to queue"""
user = self.repo_conf.get("gh_user")
repo = self.repo_conf.get("gh_repo")
build_command = self.build_command(task_name)
task = {
"timestamp": int(datetime.now().strftime("%s")),
"clone": f"https://github.com/{user}/{repo}.git",
"name": self.repo_conf.get("gh_repo"),
"build": build_command,
}
if task_name == "sync_es":
task.update({"clone": False})
self.conn.json().set(self.key, f".tasks.{repo}", task)
def build_command(self, task_name):
"""return build command"""
if not self.tag_name:
return self.repo_conf.get(task_name)
all_commands = self.repo_conf.get(task_name)
if all(isinstance(i, list) for i in all_commands):
to_build_commands = []
for command in all_commands:
to_build_commands.append(self._replace_version(command))
else:
to_build_commands = self._replace_version(all_commands)
return to_build_commands
def _replace_version(self, command):
"""replace version in str"""
return [i.replace("$VERSION", self.tag_name) for i in command]
def set_pub(self):
"""set message to pub"""
self.conn.publish(self.key, self.repo_conf.get("gh_repo"))