62 lines
2.5 KiB
Python
Executable File
62 lines
2.5 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
import argparse
|
|
import time
|
|
import pymysql.cursors
|
|
|
|
class DatabaseQuery:
|
|
def __init__(self, user, password, db, host='localhost'):
|
|
self._user = user
|
|
self._password = password
|
|
self._db = db
|
|
self._host = host
|
|
|
|
def __query_db(self):
|
|
connection = pymysql.connect(host=self._host,
|
|
user=self._user,
|
|
password=self._password,
|
|
db=self._db,
|
|
cursorclass=pymysql.cursors.DictCursor)
|
|
try:
|
|
with connection.cursor() as cursor:
|
|
_query = "SELECT Email,(Sessions.LastActivityAt/1000) AS LastActivityAt FROM Users \
|
|
JOIN Sessions on Sessions.UserId=Users.ID WHERE Users.Roles='system_guest';"
|
|
cursor.execute(_query)
|
|
return cursor.fetchall()
|
|
finally:
|
|
connection.close()
|
|
|
|
def __filter_dict(self, query_output, days):
|
|
filtered = {}
|
|
blacklist = []
|
|
for dict in query_output:
|
|
if dict['Email'] in filtered:
|
|
if time.time() - float(dict['LastActivityAt']) < 86400 * days:
|
|
del filtered[dict['Email']]
|
|
blacklist.append(dict['Email'])
|
|
else:
|
|
if time.time() - float(dict['LastActivityAt']) >= 86400 * days and dict['Email'] not in blacklist:
|
|
filtered[dict['Email']] = float(dict['LastActivityAt'])
|
|
return filtered
|
|
|
|
def get_guests(self, days):
|
|
guests = self.__filter_dict(self.__query_db(), days)
|
|
return guests
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser("Get inactive users from Mysql database.")
|
|
parser.add_argument("-d", "--days", help="days of inactivity", required=True, type=int)
|
|
parser.add_argument("-u", "--username", help="username for database", required=True)
|
|
parser.add_argument("-p", "--password", help="password for database", required=True)
|
|
parser.add_argument("-D", "--database", help="database name", required=True)
|
|
parser.add_argument("-H", "--host", help="database host (e.g. localhost, 127.0.0.1")
|
|
args = parser.parse_args()
|
|
|
|
if args.host:
|
|
result = DatabaseQuery(args.username, args.password, args.database, args.host)
|
|
else:
|
|
result = DatabaseQuery(args.username, args.password, args.database)
|
|
|
|
for key in result.get_guests(args.days):
|
|
print(key)
|