/
search_logger.py
57 lines (48 loc) · 2.29 KB
/
search_logger.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import pymongo
import db_config
import time
import certifi
from motor.motor_asyncio import AsyncIOMotorClient
from bson import ObjectId # Import ObjectId from bson module
class SearchLogger:
def __init__(self):
self.search_requests = []
self.similar_courses_requests = []
async def insert_documents(self, docs, collection_name):
client = None
try:
# Connect to MongoDB
client = AsyncIOMotorClient(db_config.uri)
# client = pymongo.MongoClient(db_config.uri, tlsCAFile=certifi.where())
db = client[db_config.db_name]
collection = db[collection_name]
for doc in docs:
doc['_id'] = ObjectId()
# Insert documents
result = await collection.insert_many(docs)
print(f"Saved {len(result.inserted_ids)} searches")
except Exception as e:
print(f"Error when saving requests to {collection_name} database: {e}")
finally:
# Close the connection
if client:
client.close()
async def log_everything(self):
if len(self.search_requests) > 0:
await self.insert_documents(self.search_requests, db_config.search_requests_collection)
self.search_requests.clear()
if len(self.similar_courses_requests) > 0:
self.insert_documents(self.similar_courses_requests, db_config.similar_courses_requests_collection)
self.similar_courses_requests.clear()
async def log_search_request(self, search_request):
search_request['timestamp'] = time.time()
self.search_requests.append(search_request)
if len(self.search_requests) >= db_config.log_batch_size:
await self.insert_documents(self.search_requests, db_config.search_requests_collection)
self.search_requests.clear()
async def log_similar_courses_request(self, similar_courses_request):
similar_courses_request['timestamp'] = time.time()
self.similar_courses_requests.append(similar_courses_request)
if len(self.similar_courses_requests) >= db_config.log_batch_size:
await self.insert_documents(self.similar_courses_requests, db_config.similar_courses_requests_collection)
self.similar_courses_requests.clear()