Add MongoDB support

This commit is contained in:
2026-04-20 16:12:23 +03:00
parent aa974ce1b4
commit 95768e8dfd
4 changed files with 66 additions and 3 deletions
+50
View File
@@ -1,3 +1,4 @@
import importlib
import os
import sys
@@ -10,6 +11,8 @@ from psycopg2.errors import DuplicateDatabase
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtWidgets import QApplication, QGridLayout, QHeaderView, QMainWindow, QTableWidget, QTableWidgetItem, QWidget
MongoClient = importlib.import_module("pymongo").MongoClient
load_dotenv()
POSTGRES_USER = os.getenv("POSTGRES_USER")
@@ -37,6 +40,11 @@ INFLUXDB3_HOST = os.getenv("INFLUXDB3_HOST", "http://localhost:8181")
INFLUXDB3_AUTH_TOKEN = os.getenv("INFLUXDB3_AUTH_TOKEN")
INFLUXDB3_DATABASE = os.getenv("INFLUXDB3_DATABASE", "sensors")
MONGO_ACTIVE = os.getenv("MONGO_ACTIVE", "false").lower() == "true"
MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:27017")
MONGO_DB = os.getenv("MONGO_DB", "movie_data")
MONGO_COLLECTION = os.getenv("MONGO_COLLECTION", "movies")
USER_SEED_DATA = [
(1, "Ivan", 15),
(2, "Igor", 22),
@@ -203,6 +211,34 @@ ORDER BY time, measurement
return headers, values
def connect_mongo():
return MongoClient(MONGO_URI)
def insert_mongo_movies(collection):
if collection.count_documents({}) > 0:
print("MongoDB collection is already seeded.")
return
collection.insert_many(
[
{"title": "Apollo 13", "released": 1995},
{"title": "The Matrix", "released": 1999},
{"title": "Toy Story", "released": 1995},
{"title": "Alien", "released": 1979},
]
)
print("MongoDB movies inserted.")
def select_mongo_movies(collection):
cursor = collection.find(
{"released": {"$gte": 1990, "$lt": 2000}},
{"_id": 0, "title": 1},
).sort("title", 1)
return [document["title"] for document in cursor]
def load_users():
admin_conn = connect_postgres("postgres")
try:
@@ -378,4 +414,18 @@ if __name__ == "__main__":
except Exception as error:
print(f"InfluxDB 3 Core load failed: {error}")
if MONGO_ACTIVE:
try:
with connect_mongo() as mongo_client:
movies_collection = mongo_client[MONGO_DB][MONGO_COLLECTION]
insert_mongo_movies(movies_collection)
mongo_movies = select_mongo_movies(movies_collection)
mongo_window = DataWindow("mongodb", ["Info"], main_window, len(graph_windows))
mongo_window.load_data([(title,) for title in mongo_movies])
mongo_window.show()
graph_windows.append(mongo_window)
except Exception as error:
print(f"MongoDB load failed: {error}")
sys.exit(app.exec())