Selaa lähdekoodia

mzinfo first commit

LancXu 1 vuosi sitten
commit
80db990c5f
9 muutettua tiedostoa jossa 162 lisäystä ja 0 poistoa
  1. 0 0
      README.md
  2. 11 0
      V1/Dockerfile
  3. 17 0
      V1/db.py
  4. 76 0
      V1/main.py
  5. 4 0
      V1/requirements.txt
  6. 17 0
      V1/schema.sql
  7. 7 0
      V1/settings.py
  8. 2 0
      V1/start.sh
  9. 28 0
      compose.yaml

+ 0 - 0
README.md


+ 11 - 0
V1/Dockerfile

@@ -0,0 +1,11 @@
+FROM python:3.8.10-alpine
+
+RUN apk add libffi-dev gcc libc-dev
+
+COPY . /workspace
+
+WORKDIR /workspace
+
+RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
+
+CMD ./start.sh

+ 17 - 0
V1/db.py

@@ -0,0 +1,17 @@
+import pymysql
+
+from settings import url_dict
+
+class DB():
+	def __init__(self):
+		print(url_dict)
+		self.db = pymysql.connect(host=url_dict['host'], port=url_dict['port'], 
+		user=url_dict['user'], passwd=url_dict['passwd'], 
+		db=url_dict['db_name'],autocommit=True)
+
+	def __del__(self):
+		self.db.close()
+
+	def get_cursor(self):
+		cursor = self.db.cursor()
+		return self.db, cursor

+ 76 - 0
V1/main.py

@@ -0,0 +1,76 @@
+from typing import Optional
+from datetime import datetime
+from fastapi import FastAPI
+from fastapi.middleware.cors import CORSMiddleware
+from pydantic import BaseModel
+from db import DB
+
+
+app = FastAPI(title='梅州插件日志记录', description='梅州插件日志记录')
+
+app.add_middleware(
+    CORSMiddleware,
+    # 允许跨域的源列表
+    allow_origins=["*"],
+    # 跨域请求是否支持cookie
+    allow_credentials=False,
+    # 允许跨域的请求方法
+    allow_methods=["*"],
+    # 允许跨域请求的请求头列表
+    allow_headers=["*"],
+    # 可以被浏览器访问的响应头
+    expose_headers=["*"],
+    # 设定浏览器缓存CORS响应的最长时间
+    max_age=1000
+)
+
+class Recorder(BaseModel):
+	record_Time: datetime
+	current_Url: str
+	full_Url: str
+	sim_Url: Optional[str] = None
+	user_Id: str
+	device_Id: str
+	request_Method: str
+	event_Type: str
+	form_Data: Optional[str] = None
+	json_Data: Optional[str] = None
+	value_Data: Optional[str] = None
+	status_Code: Optional[str] = None
+	target_Url: Optional[str] = None
+	iframe_Url: Optional[str] = None
+	button_Text: Optional[str] = None
+
+
+
+
+@app.post(path='/record', summary='日志记录', description='接收插件日志记录')
+def record(recorder: Recorder):
+	recorder_dict = recorder.dict()
+	# print(recorder_dict)
+	record_time, current_url, full_url, sim_url, user_id, device_id, request_nethod,event_type, form_data, json_data, value_data, status_code, target_url, iframe_url, button_text = recorder_dict['record_Time'], recorder_dict['current_Url'], recorder_dict['full_Url'], recorder_dict['sim_Url'], recorder_dict['user_Id'], recorder_dict['device_Id'], recorder_dict['request_Method'], recorder_dict['event_Type'], recorder_dict['form_Data'], recorder_dict['json_Data'], recorder_dict['value_Data'], recorder_dict['status_Code'], recorder_dict['target_Url'], recorder_dict['iframe_Url'], recorder_dict['button_Text']
+	db, cursor = DB().get_cursor()
+	db.ping(reconnect=True)
+	try:		
+		sql = """INSERT INTO recoder(
+					record_time, current_url, full_url, sim_url, user_id, device_id, request_method,event_type, form_data, json_data, value_data, status_code, target_url, iframe_url, button_text
+				) VALUES (
+					'%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'
+				)""" % (
+             	record_time, current_url, full_url, sim_url, user_id, device_id, request_nethod,event_type, form_data, json_data, value_data, status_code, target_url, iframe_url, button_text
+             )    
+		# print(sql)
+		cursor.execute(sql)
+		db.commit()
+	except Exception as e:
+		print('--->', e)
+		db.rollback()
+		return {"status": "failed"}
+	cursor.close()
+	db.close()
+	return {"status": "success"}
+
+# if __name__ == '__main__':
+# 	# uvicorn main:app --host 0.0.0.0 --port 8000 --workers 20 --log-level warning
+# 	uvicorn.run(app, host='0.0.0.0', port=7900, workers=1)
+# # db, cursor = DB().get_cursor()

+ 4 - 0
V1/requirements.txt

@@ -0,0 +1,4 @@
+pymysql
+fastapi
+uvicorn
+cryptography

+ 17 - 0
V1/schema.sql

@@ -0,0 +1,17 @@
+CREATE TABLE recoder (
+	record_Time		TIMESTAMP,
+	current_Url		TEXT,
+	full_Url		TEXT,
+	sim_Url			TEXT,
+	user_Id			TEXT,
+	device_Id		TEXT,
+	request_Method	TEXT,
+	event_Type		TEXT,
+	form_Data		TEXT,
+	json_Data		TEXT,
+	value_Data		TEXT,
+	status_Code		TEXT,
+	target_Url		TEXT,
+	iframe_Url		TEXT,
+	button_Text		TEXT
+)

+ 7 - 0
V1/settings.py

@@ -0,0 +1,7 @@
+url_dict = {
+	"host": "db",
+	"port": 3306,
+	"user": "root",
+	"passwd": "zh123456",
+	'db_name': "mzinfo",
+}

+ 2 - 0
V1/start.sh

@@ -0,0 +1,2 @@
+#!/bin/sh
+uvicorn main:app --host 0.0.0.0 --port 8000 --workers 20 --log-level info

+ 28 - 0
compose.yaml

@@ -0,0 +1,28 @@
+version: "3"
+services:
+  db:
+    image: "mysql:latest"
+    environment:
+      TZ: "Asia/Shanghai"
+      MYSQL_ROOT_PASSWORD: zh123456
+      MYSQL_DATABASE: mzinfo
+    volumes:
+      - "/data/mysql/data:/var/lib/mysql"
+    restart: always
+  backend:
+    image: "mzinfo:v1"
+    environment:
+      TZ: "Asia/Shanghai"
+    ports:
+      - 8000:8000
+    depends_on:
+      - db
+    volumes:
+      - "$PWD/V1/main.py:/workspace/main.py"
+      - "$PWD/V1/settings.py:/workspace/settings.py"
+    restart: always
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "1G"
+        max-file: "10"