This commit is contained in:
parent
57d25b637d
commit
2f65a538fa
|
@ -1,3 +1,4 @@
|
||||||
|
import asyncio
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
@ -33,10 +34,10 @@ class ViewedStorage:
|
||||||
start_date = datetime.now().strftime("%Y-%m-%d")
|
start_date = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def init():
|
async def init():
|
||||||
"""Подключение к клиенту Google Analytics с использованием аутентификации"""
|
"""Подключение к клиенту Google Analytics с использованием аутентификации"""
|
||||||
self = ViewedStorage
|
self = ViewedStorage
|
||||||
with self.lock:
|
async with self.lock:
|
||||||
# Загрузка предварительно подсчитанных просмотров из файла JSON
|
# Загрузка предварительно подсчитанных просмотров из файла JSON
|
||||||
self.load_precounted_views()
|
self.load_precounted_views()
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ class ViewedStorage:
|
||||||
logger.info(" * Клиент Google Analytics успешно авторизован")
|
logger.info(" * Клиент Google Analytics успешно авторизован")
|
||||||
|
|
||||||
# Запуск фоновой задачи
|
# Запуск фоновой задачи
|
||||||
self.worker()
|
_task = asyncio.create_task(self.worker())
|
||||||
else:
|
else:
|
||||||
logger.info(" * Пожалуйста, добавьте ключевой файл Google Analytics")
|
logger.info(" * Пожалуйста, добавьте ключевой файл Google Analytics")
|
||||||
self.disabled = True
|
self.disabled = True
|
||||||
|
@ -67,7 +68,7 @@ class ViewedStorage:
|
||||||
if now_date == self.start_date:
|
if now_date == self.start_date:
|
||||||
logger.info(" * Данные актуализованы!")
|
logger.info(" * Данные актуализованы!")
|
||||||
else:
|
else:
|
||||||
logger.warn(f" * Файл просмотров {VIEWS_FILEPATH} устарел: {self.start_date}")
|
logger.warning(f" * Файл просмотров {VIEWS_FILEPATH} устарел: {self.start_date}")
|
||||||
|
|
||||||
with open(VIEWS_FILEPATH, "r") as file:
|
with open(VIEWS_FILEPATH, "r") as file:
|
||||||
precounted_views = json.load(file)
|
precounted_views = json.load(file)
|
||||||
|
@ -78,15 +79,16 @@ class ViewedStorage:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Ошибка загрузки предварительно подсчитанных просмотров: {e}")
|
logger.error(f"Ошибка загрузки предварительно подсчитанных просмотров: {e}")
|
||||||
|
|
||||||
|
# noinspection PyTypeChecker
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def update_pages():
|
async def update_pages():
|
||||||
"""Запрос всех страниц от Google Analytics, отсортированных по количеству просмотров"""
|
"""Запрос всех страниц от Google Analytics, отсортированных по количеству просмотров"""
|
||||||
self = ViewedStorage
|
self = ViewedStorage
|
||||||
logger.info(" ⎧ Обновление данных просмотров от Google Analytics ---")
|
logger.info(" ⎧ Обновление данных просмотров от Google Analytics ---")
|
||||||
if not self.disabled:
|
if not self.disabled:
|
||||||
try:
|
try:
|
||||||
start = time.time()
|
start = time.time()
|
||||||
with self.lock:
|
async with self.lock:
|
||||||
if self.analytics_client:
|
if self.analytics_client:
|
||||||
request = RunReportRequest(
|
request = RunReportRequest(
|
||||||
property=f"properties/{GOOGLE_PROPERTY_ID}",
|
property=f"properties/{GOOGLE_PROPERTY_ID}",
|
||||||
|
@ -179,8 +181,8 @@ class ViewedStorage:
|
||||||
update_groups(self.shouts_by_author, author.slug, shout_slug)
|
update_groups(self.shouts_by_author, author.slug, shout_slug)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def worker():
|
async def worker():
|
||||||
"""Задача обновления"""
|
"""Асинхронная задача обновления"""
|
||||||
failed = 0
|
failed = 0
|
||||||
self = ViewedStorage
|
self = ViewedStorage
|
||||||
if self.disabled:
|
if self.disabled:
|
||||||
|
@ -188,7 +190,7 @@ class ViewedStorage:
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
self.update_pages()
|
await self.update_pages()
|
||||||
failed = 0
|
failed = 0
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
failed += 1
|
failed += 1
|
||||||
|
@ -203,7 +205,7 @@ class ViewedStorage:
|
||||||
logger.info(
|
logger.info(
|
||||||
" ⎩ Следующее обновление: %s" % (t.split("T")[0] + " " + t.split("T")[1].split(".")[0])
|
" ⎩ Следующее обновление: %s" % (t.split("T")[0] + " " + t.split("T")[1].split(".")[0])
|
||||||
)
|
)
|
||||||
time.sleep(self.period)
|
await asyncio.sleep(self.period)
|
||||||
else:
|
else:
|
||||||
time.sleep(10)
|
await asyncio.sleep(10)
|
||||||
logger.info(" - Попытка снова обновить данные")
|
logger.info(" - Попытка снова обновить данные")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user