2023-07-09 11:55:31 +02:00
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 ( " \n versions database name: " )
self . db_user = input ( " \n versions database user: " )
self . db_user_password = input ( " \n versions database user password: " )
self . __create_config ( self )
self . __write_config ( self )
def get_versions ( self ) :
topten_servers = [ ]
topten_versions = [ ]
2023-07-10 11:58:17 +02:00
topten_users = [ ]
2023-07-09 11:55:31 +02:00
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 ( )
2023-07-10 11:58:17 +02:00
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 " )
2023-07-09 11:55:31 +02:00
rows = cur . fetchall ( )
for row in rows :
topten_servers . append ( row [ 0 ] )
topten_versions . append ( row [ 1 ] )
2023-07-10 11:58:17 +02:00
topten_users . append ( row [ 2 ] )
2023-07-09 11:55:31 +02:00
cur . execute ( " select count(version) from mau where software= ' mastodon ' and alive " )
row = cur . fetchone ( )
mast_servers = row [ 0 ]
2023-07-10 11:58:17 +02:00
cur . execute ( " select sum(users) from mau where software= ' mastodon ' and alive " )
row = cur . fetchone ( )
mast_users = row [ 0 ]
2023-07-09 11:55:31 +02:00
cur . close ( )
except ( Exception , psycopg2 . DatabaseError ) as error :
print ( error )
finally :
if conn is not None :
conn . close ( )
2023-07-10 11:58:17 +02:00
return ( topten_servers , topten_versions , topten_users , mast_servers , mast_users )
2023-07-09 11:55:31 +02:00
@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 } \n db_user: { self . db_user } \n db_user_password: { self . db_user_password } ' )
print ( f " adding parameters to { self . config_file } \n " )