import os import sys import psycopg2 import pdb class Database(): name = 'database library' def __init__(self, config_file=None, db=None, db_user=None, db_user_password=None): self.config_file = "config/db_config.txt" self.db = self.__get_parameter("db", self.config_file) self.db_user = self.__get_parameter("db_user", self.config_file) self.db_user_password = self.__get_parameter("db_user_password", self.config_file) db_setup = self.__check_dbsetup(self) if not db_setup: self.db = input("\nversions database name: ") self.db_user = input("\nversions database user: ") self.db_user_password = input("\nversions database user password: ") self.__create_config(self) self.__write_config(self) def get_versions(self): topten_servers = [] topten_versions = [] topten_users = [] try: conn = None conn = psycopg2.connect(database = self.db, user = self.db_user, password = self.db_user_password, host = "/var/run/postgresql", port = "5432") cur = conn.cursor() cur.execute("select count(version), version, sum(users) from mau where software='mastodon' and alive group by version order by count(version) desc limit 10") rows = cur.fetchall() for row in rows: topten_servers.append(row[0]) topten_versions.append(row[1]) topten_users.append(row[2]) cur.execute("select count(version) from mau where software='mastodon' and alive") row = cur.fetchone() mast_servers = row[0] cur.execute ("select sum(users) from mau where software='mastodon' and alive") row = cur.fetchone() mast_users = row[0] cur.close() except (Exception, psycopg2.DatabaseError) as error: print(error) finally: if conn is not None: conn.close() return (topten_servers, topten_versions, topten_users, mast_servers, mast_users) @staticmethod def __check_dbsetup(self): db_setup = False try: conn = None conn = psycopg2.connect(database = self.db, user = self.db_user, password = self.db_user_password, host = "/var/run/postgresql", port = "5432") db_setup = True except (Exception, psycopg2.DatabaseError) as error: print(error) return db_setup def __get_parameter(self, parameter, config_file): if not os.path.isfile(config_file): print(f"File {config_file} not found..") return with open( config_file ) as f: for line in f: if line.startswith( parameter ): return line.replace(parameter + ":", "").strip() print(f"{config_file} Missing parameter {parameter}") sys.exit(0) @staticmethod def __create_config(self): if not os.path.exists('config'): os.makedirs('config') if not os.path.exists(self.config_file): print(self.config_file + " created!") with open(self.config_file, 'w'): pass @staticmethod def __write_config(self): with open(self.config_file, 'a') as the_file: the_file.write(f'db: {self.db}\ndb_user: {self.db_user}\ndb_user_password: {self.db_user_password}') print(f"adding parameters to {self.config_file}\n")