From 53faa084c29e094451e380de98b277e4149c7f7c Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 21 Dec 2020 17:14:11 -0500 Subject: [PATCH 1/4] Adding some basic ldap cache --- proxstar/ldapdb.py | 5 +++++ requirements.txt | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/proxstar/ldapdb.py b/proxstar/ldapdb.py index c737310..1f71f59 100644 --- a/proxstar/ldapdb.py +++ b/proxstar/ldapdb.py @@ -1,5 +1,6 @@ from csh_ldap import CSHLDAP from flask import current_app as app +from functools import lru_cache from proxstar import logging @@ -13,24 +14,28 @@ def connect_ldap(): return ldap +@lru_cache(maxsize=64) def is_rtp(user): ldap = connect_ldap() rtp_group = ldap.get_group('rtp') return rtp_group.check_member(ldap.get_member(user, uid=True)) +@lru_cache(maxsize=256) def is_active(user): ldap = connect_ldap() active_group = ldap.get_group('active') return active_group.check_member(ldap.get_member(user, uid=True)) +@lru_cache(maxsize=256) def is_current_student(user): ldap = connect_ldap() current_student_group = ldap.get_group('current_student') return current_student_group.check_member(ldap.get_member(user, uid=True)) +@lru_cache(maxsize=256) def is_user(user): ldap = connect_ldap() try: diff --git a/requirements.txt b/requirements.txt index 7eaa98d..6fdbea7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ black~=20.8b1 -csh-ldap~=2.2.0 +csh-ldap~=2.3.0 flask==1.0.2 flask-pyoidc==1.3.0 gunicorn==19.9.0 From d4e42555f2f9bd71f4bd22ae476b80fadafba9cc Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 21 Dec 2020 17:14:48 -0500 Subject: [PATCH 2/4] Slightly smaller cache for active --- proxstar/ldapdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proxstar/ldapdb.py b/proxstar/ldapdb.py index 1f71f59..224e34c 100644 --- a/proxstar/ldapdb.py +++ b/proxstar/ldapdb.py @@ -21,7 +21,7 @@ def is_rtp(user): return rtp_group.check_member(ldap.get_member(user, uid=True)) -@lru_cache(maxsize=256) +@lru_cache(maxsize=128) def is_active(user): ldap = connect_ldap() active_group = ldap.get_group('active') From e1c64cb322d2f05391a8e069e0fb39255d15d282 Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 21 Dec 2020 17:25:24 -0500 Subject: [PATCH 3/4] Using single ldap connection --- proxstar/__init__.py | 2 ++ proxstar/ldapdb.py | 28 ++++++++++++---------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/proxstar/__init__.py b/proxstar/__init__.py index a6c3ae6..34b9cf0 100644 --- a/proxstar/__init__.py +++ b/proxstar/__init__.py @@ -44,6 +44,7 @@ from proxstar.vnc import ( ) from proxstar.auth import get_auth from proxstar.util import gen_password +from proxstar.ldapdb import connect_ldap from proxstar.starrs import check_hostname, renew_ip from proxstar.proxmox import connect_proxmox, get_isos, get_pools, get_ignored_pools @@ -82,6 +83,7 @@ engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI']) Base.metadata.bind = engine DBSession = sessionmaker(bind=engine) db = DBSession() +ldap_conn = connect_ldap() starrs = psycopg2.connect( "dbname='{}' user='{}' host='{}' password='{}'".format( diff --git a/proxstar/ldapdb.py b/proxstar/ldapdb.py index 224e34c..609d61c 100644 --- a/proxstar/ldapdb.py +++ b/proxstar/ldapdb.py @@ -1,8 +1,8 @@ +from functools import lru_cache from csh_ldap import CSHLDAP from flask import current_app as app -from functools import lru_cache -from proxstar import logging +from proxstar import logging, ldap_conn def connect_ldap(): @@ -14,32 +14,28 @@ def connect_ldap(): return ldap -@lru_cache(maxsize=64) +@lru_cache(maxsize=128) def is_rtp(user): - ldap = connect_ldap() - rtp_group = ldap.get_group('rtp') - return rtp_group.check_member(ldap.get_member(user, uid=True)) + rtp_group = ldap_conn.get_group('rtp') + return rtp_group.check_member(ldap_conn.get_member(user, uid=True)) @lru_cache(maxsize=128) def is_active(user): - ldap = connect_ldap() - active_group = ldap.get_group('active') - return active_group.check_member(ldap.get_member(user, uid=True)) + active_group = ldap_conn.get_group('active') + return active_group.check_member(ldap_conn.get_member(user, uid=True)) -@lru_cache(maxsize=256) +@lru_cache(maxsize=128) def is_current_student(user): - ldap = connect_ldap() - current_student_group = ldap.get_group('current_student') - return current_student_group.check_member(ldap.get_member(user, uid=True)) + current_student_group = ldap_conn.get_group('current_student') + return current_student_group.check_member(ldap_conn.get_member(user, uid=True)) -@lru_cache(maxsize=256) +@lru_cache(maxsize=128) def is_user(user): - ldap = connect_ldap() try: - ldap.get_member(user, uid=True) + ldap_conn.get_member(user, uid=True) return True except: return False From 724c6e0f5860eb2bbcdc01260127f9fdf611b18d Mon Sep 17 00:00:00 2001 From: Devin Matte Date: Mon, 21 Dec 2020 17:32:32 -0500 Subject: [PATCH 4/4] Smaller cache --- proxstar/ldapdb.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/proxstar/ldapdb.py b/proxstar/ldapdb.py index 609d61c..a0135fa 100644 --- a/proxstar/ldapdb.py +++ b/proxstar/ldapdb.py @@ -14,25 +14,25 @@ def connect_ldap(): return ldap -@lru_cache(maxsize=128) +@lru_cache(maxsize=32) def is_rtp(user): rtp_group = ldap_conn.get_group('rtp') return rtp_group.check_member(ldap_conn.get_member(user, uid=True)) -@lru_cache(maxsize=128) +@lru_cache(maxsize=32) def is_active(user): active_group = ldap_conn.get_group('active') return active_group.check_member(ldap_conn.get_member(user, uid=True)) -@lru_cache(maxsize=128) +@lru_cache(maxsize=32) def is_current_student(user): current_student_group = ldap_conn.get_group('current_student') return current_student_group.check_member(ldap_conn.get_member(user, uid=True)) -@lru_cache(maxsize=128) +@lru_cache(maxsize=32) def is_user(user): try: ldap_conn.get_member(user, uid=True)