Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def get_daily_plot(day: date) -> Figure:
"""Return matplotlib plot representing a day's plot."""
start, end = get_open_close(day)
desktops = list_desktops(public_only=True)
profiles = UtilizationProfile.from_hostnames(desktops, start, end).values()
desks_count = len(desktops)
now: Any = datetime.now()
latest = min(end, now)
minute = timedelta(minutes=1)
times = [start + i * minute for i in range((latest - start) // minute + 1)]
if now >= end or now <= start:
now = None
sums = []
for t in times:
instant15 = t + timedelta(seconds=15)
instant45 = t + timedelta(seconds=45)
in_use = sum(1 if profile.in_use(instant15) or profile.in_use(instant45) else 0 for profile in profiles)
sums.append(in_use)
if __name__ == '__main__':
start = datetime(2015, 11, 23)
end = start + timedelta(days=1)
print('Testing naive time to create profiles.')
with timeit():
slow_profiles = {
host + '.ocf.berkeley.edu': UtilizationProfile.from_hostname(host, start, end)
for host in list_desktops()
}
print('Testing optimized time to create profiles.')
with timeit():
fast_profiles = UtilizationProfile.from_hostnames(list_desktops(), start, end)
open_, close = get_open_close(date.today())
now = datetime.today()
# If the lab has opened, but hasn't closed yet, only count
# statistics until the current time. If the lab isn't open
# yet, then don't count anything, and if it is closed, show
# statistics from when it was open during the day.
if now > open_ and now < close:
end = now
elif now <= open_:
end = open_
else:
end = close
return sorted(
UtilizationProfile.from_hostnames(list_desktops(), open_, end).values(),
key=attrgetter('hostname'),
)