async-fix

This commit is contained in:
Tony Rewin 2023-10-06 01:45:32 +03:00
parent 12c43dbf32
commit 8de2eb385b
2 changed files with 18 additions and 20 deletions

View File

@ -1,9 +1,9 @@
aredis>=1.1.8
httpx>=0.23.0
gql[requests] # TODO: replace with httpx when stable
git+https://github.com/graphql-python/gql.git#master
git+https://github.com/encode/starlette.git#main
sqlalchemy>=1.4.41
ariadne>=0.17.0
git+https://dev.discours.io/discours.io/ariadne.git#master
uvicorn>=0.18.3
python-frontmatter~=1.0.0
PyYAML>=5.4

View File

@ -1,10 +1,10 @@
import asyncio
import time
from datetime import timedelta, timezone, datetime
from os import environ
from os import environ, path
from gql import Client, gql
from gql.transport.requests import RequestsHTTPTransport
from gql.transport.httpx import HTTPXAsyncTransport
from services.db import local_session
from orm import Topic
@ -39,14 +39,14 @@ load_pages = gql(
} } """
)
schema_str = open("schemas/ackee.graphql").read()
schema_str = open(path.dirname(__file__) + "/ackee.graphql").read()
token = environ.get("ACKEE_TOKEN", "")
def create_client(headers=None, schema=None):
return Client(
schema=schema,
transport=RequestsHTTPTransport(
transport=HTTPXAsyncTransport(
url="https://ackee.discours.io/api",
headers=headers,
),
@ -75,16 +75,17 @@ class ViewedStorage:
{"Authorization": "Bearer %s" % str(token)}, schema=schema_str
)
print(
"[stat] * authorized permanentely by ackee.discours.io: %s" % token
"[stat.viewed] * authorized permanentely by ackee.discours.io: %s"
% token
)
else:
print("[stat] * please set ACKEE_TOKEN")
print("[stat.viewed] * please set ACKEE_TOKEN")
self.disabled = True
@staticmethod
async def update_pages():
"""query all the pages from ackee sorted by views count"""
print("[stat] ⎧ updating ackee pages data ---")
print("[stat.viewed] ⎧ updating ackee pages data ---")
start = time.time()
self = ViewedStorage
try:
@ -100,12 +101,12 @@ class ViewedStorage:
await ViewedStorage.increment(slug, shouts[slug])
except Exception:
pass
print("[stat] ⎪ %d pages collected " % len(shouts.keys()))
print("[stat.viewed] ⎪ %d pages collected " % len(shouts.keys()))
except Exception as e:
raise e
end = time.time()
print("[stat] ⎪ update_pages took %fs " % (end - start))
print("[stat.viewed] ⎪ update_pages took %fs " % (end - start))
@staticmethod
async def get_facts():
@ -196,29 +197,26 @@ class ViewedStorage:
self = ViewedStorage
if self.disabled:
return
print("[stat] worker started")
while True:
try:
print("[stat] - updating views...")
print("[stat.viewed] - updating views...")
await self.update_pages()
failed = 0
except Exception:
import traceback
traceback.print_exc()
failed += 1
print("[stat] - update failed #%d, wait 10 seconds" % failed)
print("[stat.viewed] - update failed #%d, wait 10 seconds" % failed)
if failed > 3:
print("[stat] - not trying to update anymore")
print("[stat.viewed] - not trying to update anymore")
break
if failed == 0:
when = datetime.now(timezone.utc) + timedelta(seconds=self.period)
t = format(when.astimezone().isoformat())
print(
"[stat] ⎩ next update: %s"
"[stat.viewed] ⎩ next update: %s"
% (t.split("T")[0] + " " + t.split("T")[1].split(".")[0])
)
await asyncio.sleep(self.period)
else:
await asyncio.sleep(10)
print("[stat] - trying to update data again")
print("[stat.viewed] - trying to update data again")