Skip to content

Commit

Permalink
Merge pull request #110 from stuartcampbell/dataadmin-sync
Browse files Browse the repository at this point in the history
Some improvements to logging output
  • Loading branch information
padraic-shafer authored Aug 28, 2024
2 parents 9e04b92 + f33ee58 commit 938727f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
10 changes: 8 additions & 2 deletions src/nsls2api/services/facility_service.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import datetime

from nsls2api.api.models.facility_model import FacilityName
from nsls2api.infrastructure.logging import logger

Expand All @@ -18,6 +20,7 @@ async def facilities_count() -> int:
"""
return await Facility.count()


async def all_facilities() -> list[Facility]:
"""
This method retrieves all facilities in the database.
Expand All @@ -26,6 +29,7 @@ async def all_facilities() -> list[Facility]:
"""
return await Facility.find().to_list()


async def facility_cycles(facility: str) -> Optional[list[str]]:
"""
Facility Cycles
Expand Down Expand Up @@ -78,6 +82,7 @@ async def data_roles_by_user(username: str) -> Optional[list[str]]:
facility_names = [f.facility_id for f in facilities if f.facility_id is not None]
return facility_names


async def data_admin_group(facility_name: str) -> Optional[str]:
"""
Retrieves the data admin group for a given facility name.
Expand All @@ -95,6 +100,7 @@ async def data_admin_group(facility_name: str) -> Optional[str]:

return facility.data_admin_group


async def update_data_admins(facility_id: str, data_admins: list[str]):
"""
Update the data admins for a given facility.
Expand All @@ -104,7 +110,7 @@ async def update_data_admins(facility_id: str, data_admins: list[str]):
data_admins (list[str]): A list of usernames to set as data admins for the facility.
"""
await Facility.find_one(Facility.facility_id == facility_id.lower()).update(
Set({Facility.data_admins: data_admins})
Set({Facility.data_admins: data_admins, Facility.last_updated: datetime.datetime.now(), })
)


Expand All @@ -129,7 +135,7 @@ async def current_operating_cycle(facility: str) -> Optional[str]:


async def cycle_year(
cycle_name: str, facility_name: FacilityName = FacilityName.nsls2
cycle_name: str, facility_name: FacilityName = FacilityName.nsls2
) -> Optional[str]:
"""
Cycle Year
Expand Down
27 changes: 16 additions & 11 deletions src/nsls2api/services/sync_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from nsls2api.models.proposals import Proposal, SafetyForm, User


async def worker_synchronize_dataadmins() -> None:
async def worker_synchronize_dataadmins(skip_beamlines=False) -> None:
"""
This method synchronizes the (data) admin permissions (both beamline and facility)
for all users in the system.
Expand All @@ -28,25 +28,30 @@ async def worker_synchronize_dataadmins() -> None:

facility_list = await facility_service.all_facilities()
for facility in facility_list:
logger.info(f"Synchronizing data admins for facility {facility.name}.")
logger.info(f"Synchronizing data admins for facility {facility.facility_id}.")
data_admin_group_name = await facility_service.data_admin_group(facility.facility_id)
if data_admin_group_name:
ad_users: list[ActiveDirectoryUser] = await n2sn_service.get_users_in_group(data_admin_group_name)
username_list = [u['sAMAccountName'] for u in ad_users if u['sAMAccountName'] is not None]
logger.info(f"Setting user list = {username_list} ")
await facility_service.update_data_admins(facility.facility_id, username_list)
else:
logger.warning(
f"There is no 'data_admin_group' for facility_id={facility.facility_id} defined in the database.")
time_taken = datetime.datetime.now() - start_time
logger.info(f"Facility Data Admin permissions synchronized in {time_taken.total_seconds():,.2f} seconds")

beamline_list: list[Beamline] = await beamline_service.all_beamlines()
for beamline in beamline_list:
logger.info(f"Synchronizing data admins for beamline {beamline.name}.")
data_admin_group_name = await beamline_service.data_admin_group(beamline.name)
ad_users: list[ActiveDirectoryUser] = await n2sn_service.get_users_in_group(data_admin_group_name)
username_list = [u['sAMAccountName'] for u in ad_users if u['sAMAccountName'] is not None]
await beamline_service.update_data_admins(beamline.name, username_list)
if skip_beamlines is False:
beamline_list: list[Beamline] = await beamline_service.all_beamlines()
for beamline in beamline_list:
logger.info(f"Synchronizing data admins for beamline {beamline.name}.")
data_admin_group_name = await beamline_service.data_admin_group(beamline.name)
ad_users: list[ActiveDirectoryUser] = await n2sn_service.get_users_in_group(data_admin_group_name)
username_list = [u['sAMAccountName'] for u in ad_users if u['sAMAccountName'] is not None]
await beamline_service.update_data_admins(beamline.name, username_list)

time_taken = datetime.datetime.now() - start_time
logger.info(f"Beamline Data Admin permissions synchronized in {time_taken.total_seconds():,.2f} seconds")
time_taken = datetime.datetime.now() - start_time
logger.info(f"Beamline Data Admin permissions synchronized in {time_taken.total_seconds():,.2f} seconds")


async def worker_synchronize_cycles_from_pass(
Expand Down

0 comments on commit 938727f

Please sign in to comment.