📍로그인, 로그아웃 이력으로 현재 로그인된 유저 파악하기
- 데이터 구조
class Event:
def __init__(self, event_date, event_type, machine_name, user):
self.date = event_date # 시간
self.type = event_type # 로그인 or 로그아웃
self.machine = machine_name # 접속 서버
self.user = user # 유저
- 데이터 예시
events = [
Event("2023-01-02 11:38:03", "logout", "webserver.local", "jordan"),
Event("2023-01-02 10:19:31", "login", "mailserver.local", "jane"),
Event("2023-01-02 09:24:52", "login", "webserver.local", "jordan"),
Event("2023-01-02 10:23:47", "logout", "myworkstation.local", "messi"),
Event("2023-01-01 17:33:16", "logout", "webserver.local", "messi"),
Event("2023-01-01 12:45:56", "login", "myworkstation.local", "messi"),
Event("2023-01-01 11:37:13", "login", "webserver.local", "messi"),
]
📍함수
# 클래스를 매개변수로 받아 date 프로퍼티를 반환하는 함수
def get_event_date(event):
return event.date
# 현재 로그인된 유저를 machine 키로 딕셔너리에 추가하여 반환하는 함수
def current_users(events):
events.sort(key=get_event_date)
machines = {}
for event in events:
if event.machine not in machines:
machines[event.machine] = set()
if event.type == "login":
machines[event.machine].add(event.user)
elif event.type == "logout":
machines[event.machine].remove(event.user)
return machines
# 머신별 유저 목록을 출력하는 함수
def generate_report(machines):
for machine, users in machines.items():
if len(users) > 0:
user_list = ", ".join(users)
print("{} : {}".format(machine, user_list))
else:
print("{} : no users".format(machine))
📍출력 결과
users = current_users(events)
print(users) # {'webserver.local': set(), 'myworkstation.local': set(), 'mailserver.local': {'jane'}}
generate_report(users)
# webserver.local : no users
# myworkstation.local : no users
# mailserver.local : jane