Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add metrics
Browse files Browse the repository at this point in the history
BennyThink committed Dec 6, 2024
1 parent b671bce commit 661d06d
Showing 4 changed files with 59 additions and 12 deletions.
21 changes: 17 additions & 4 deletions yyetsweb/databases/grafana.py
Original file line number Diff line number Diff line change
@@ -16,17 +16,30 @@ def get_grafana_data(self, date_series) -> str:


class Metrics(Mongo):
def set_metrics(self, metrics_type: str):
def set_metrics(self, metrics_type: str, data: str):
today = time.strftime("%Y-%m-%d", time.localtime())
self.db["metrics"].update_one({"date": today}, {"$inc": {metrics_type: 1}}, upsert=True)
if metrics_type == "viewSubtitle":
self.db["subtitle"].find_one_and_update(
{"_id": data}, {"$inc": {"views": 1}}
)
else:
self.db["metrics"].update_one(
{"date": today}, {"$inc": {metrics_type: 1}}, upsert=True
)

def get_metrics(self, from_date: str, to_date: str) -> dict:
start_int = [int(i) for i in from_date.split("-")]
end_int = [int(i) for i in to_date.split("-")]
sdate = date(*start_int) # start date
edate = date(*end_int) # end date
date_range = [str(sdate + timedelta(days=x)) for x in range((edate - sdate).days + 1)]
date_range = [
str(sdate + timedelta(days=x)) for x in range((edate - sdate).days + 1)
]
condition = {"date": {"$in": date_range}}
result = self.db["metrics"].find(condition, {"_id": False}).sort("date", pymongo.DESCENDING)
result = (
self.db["metrics"]
.find(condition, {"_id": False})
.sort("date", pymongo.DESCENDING)
)

return dict(metrics=list(result))
39 changes: 33 additions & 6 deletions yyetsweb/databases/resources.py
Original file line number Diff line number Diff line change
@@ -14,6 +14,13 @@
from databases.comment import CommentSearch


class SubtitleDownload(Mongo):
def add_download(self, _id):
self.db["subtitle"].find_one_and_update(
{"_id": _id}, {"$inc": {"downloads": 1}}
)


class Resource(SearchEngine):
def fansub_search(self, class_name: str, kw: str):
class_ = globals().get(class_name)
@@ -79,8 +86,18 @@ def search_resource():
data = self.db["yyets"].find(
{
"$or": [
{"data.info.cnname": {"$regex": f".*{keyword}.*", "$options": "i"}},
{"data.info.enname": {"$regex": f".*{keyword}.*", "$options": "i"}},
{
"data.info.cnname": {
"$regex": f".*{keyword}.*",
"$options": "i",
}
},
{
"data.info.enname": {
"$regex": f".*{keyword}.*",
"$options": "i",
}
},
{
"data.info.aliasname": {
"$regex": f".*{keyword}.*",
@@ -113,7 +130,9 @@ def search_comment():
hide_phone(comments.get("data", []))
for c in comments.get("data", []):
comment_rid = c["resource_id"]
res = self.db["yyets"].find_one({"data.info.id": comment_rid}, projection={"data.info": True})
res = self.db["yyets"].find_one(
{"data.info.id": comment_rid}, projection={"data.info": True}
)
if res:
comment_data.append(
{
@@ -227,11 +246,17 @@ def get_most(self) -> list:
most_like[_id] = most_like.get(_id, 0) + 1
most = sorted(most_like, key=most_like.get)
most.reverse()
most_like_data = self.db["yyets"].find({"data.info.id": {"$in": most}}, self.projection).limit(15)
most_like_data = (
self.db["yyets"]
.find({"data.info.id": {"$in": most}}, self.projection)
.limit(15)
)
return list(most_like_data)

def get_top_resource(self) -> dict:
area_dict = dict(ALL={"$regex": ".*"}, US="美国", JP="日本", KR="韩国", UK="英国")
area_dict = dict(
ALL={"$regex": ".*"}, US="美国", JP="日本", KR="韩国", UK="英国"
)
all_data = {"ALL": "全部"}
for abbr, area in area_dict.items():
data = (
@@ -283,7 +308,9 @@ def query_db(self) -> dict:
"date": ts_date(int(ts)),
}

sorted_res: list = sorted(episode_data.items(), key=lambda x: x[1]["timestamp"], reverse=True)
sorted_res: list = sorted(
episode_data.items(), key=lambda x: x[1]["timestamp"], reverse=True
)
limited_res = dict(sorted_res[:100])
ok = []
for k, v in limited_res.items():
3 changes: 2 additions & 1 deletion yyetsweb/handlers/grafana.py
Original file line number Diff line number Diff line change
@@ -21,8 +21,9 @@ class MetricsHandler(BaseHandler):
def set_metrics(self):
payload = self.json
metrics_type = payload.get("type", self.get_query_argument("type", "unknown"))
metrics_data = payload.get("data" )

self.instance.set_metrics(metrics_type)
self.instance.set_metrics(metrics_type,metrics_data)
self.set_status(HTTPStatus.CREATED)
return {}

8 changes: 7 additions & 1 deletion yyetsweb/handlers/resources.py
Original file line number Diff line number Diff line change
@@ -13,14 +13,18 @@


class SubtitleDownloadHandler(BaseHandler):
filename = filename

@run_on_executor()
def find_and_download(self):
file = self.json.get("file")
_id = self.json.get("_id")
self.set_header("x-filename", Path(file).name)
p = Path(__file__).parent.parent.joinpath("subtitle_data", file)
self.set_header("Content-Type", "application/bin")
try:
data = p.read_bytes()
self.instance.add_download(_id)
return data
except FileNotFoundError:
self.set_status(HTTPStatus.NOT_FOUND)
@@ -52,7 +56,9 @@ def get_resource_data(self):
def search_resource(self):
kw = self.get_query_argument("keyword").lower()
search_type = self.get_query_argument("type", "default")
self.set_header("search-engine", "Meilisearch" if os.getenv("MEILISEARCH") else "MongoDB")
self.set_header(
"search-engine", "Meilisearch" if os.getenv("MEILISEARCH") else "MongoDB"
)
return self.instance.search_resource(kw, search_type)

@gen.coroutine

0 comments on commit 661d06d

Please sign in to comment.