104 lines
3.5 KiB
Python
104 lines
3.5 KiB
Python
import json
|
|
import logging
|
|
import os
|
|
|
|
import markdown
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.setLevel(logging.INFO)
|
|
|
|
|
|
class ApiLogger:
|
|
action = ""
|
|
infer_id = ""
|
|
title = ""
|
|
file_path = ""
|
|
file_path_html = ""
|
|
template_html = ""
|
|
|
|
def __init__(self, action: str, append: bool = False, infer_id: str = ""):
|
|
|
|
# if outputs dir not exists, create it
|
|
if not os.path.exists('outputs'):
|
|
os.makedirs('outputs')
|
|
|
|
self.action = action
|
|
self.infer_id = infer_id
|
|
self.file_path = f'outputs/{infer_id}.md'
|
|
self.file_path_html = f'outputs/{infer_id}.html'
|
|
self.template_html = f'extensions/stable-diffusion-aws-extension/aws_extension/cloud_api_manager/api.html'
|
|
self.title = f'Inference Job API Request Process - {infer_id}'
|
|
|
|
if append is False:
|
|
self.file = open(self.file_path, 'w')
|
|
self.file.write(f"# {self.title}\n")
|
|
else:
|
|
if os.path.exists(self.file_path):
|
|
self.file = open(self.file_path, 'a')
|
|
else:
|
|
self.file = open(self.file_path, 'w')
|
|
|
|
def req_log(self, sub_action: str, method: str, path: str, headers=None, data=None, params=None, response=None,
|
|
desc: str = ""):
|
|
self.file.write(f"## {sub_action}\n")
|
|
self.file.write(f"_{desc}_\n")
|
|
self.file.write(f"\n")
|
|
|
|
self.file.write(f"##### {method} {path}\n")
|
|
self.file.write(f"\n")
|
|
|
|
if headers:
|
|
headers['x-api-key'] = 'xxxx'
|
|
self.file.write(f"#### headers: \n")
|
|
self.file.write(f"\n")
|
|
self.file.write(f"```\n")
|
|
self.file.write(f"{json.dumps(headers)}\n")
|
|
self.file.write(f"```\n")
|
|
self.file.write(f"\n")
|
|
if data:
|
|
self.file.write(f"#### data:\n")
|
|
self.file.write(f"\n")
|
|
self.file.write(f"```\n")
|
|
if isinstance(data, str):
|
|
self.file.write(f"{json.dumps(json.loads(data))}\n")
|
|
else:
|
|
self.file.write(f"{json.dumps(data)}\n")
|
|
self.file.write(f"```\n")
|
|
self.file.write(f"\n")
|
|
if params:
|
|
self.file.write(f"#### params: \n")
|
|
self.file.write(f"\n")
|
|
self.file.write(f"```\n")
|
|
self.file.write(f"{json.dumps(params)}\n")
|
|
self.file.write(f"```\n")
|
|
self.file.write(f"\n")
|
|
if response:
|
|
self.file.write(f"#### response:\n")
|
|
self.file.write(f"\n")
|
|
self.file.write(f"```\n")
|
|
self.file.write(f"{json.dumps(response.json())}\n")
|
|
self.file.write(f"```\n")
|
|
self.file.write("\n")
|
|
|
|
try:
|
|
with open(self.file_path, 'r') as file:
|
|
file_content = file.read()
|
|
html = markdown.markdown(file_content)
|
|
html_content = self.generate_html(html)
|
|
with open(self.file_path_html, 'w') as html_file:
|
|
html_file.write(html_content)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
|
|
def generate_html(self, content: str):
|
|
try:
|
|
with open(self.template_html, 'r') as file:
|
|
file_content = file.read()
|
|
file_content = file_content.replace("{{content}}", content)
|
|
file_content = file_content.replace("{{title}}", self.title)
|
|
return file_content
|
|
except Exception as e:
|
|
logger.error(e)
|
|
return content
|
|
|