Skip to content

Commit 7cb3e14

Browse files
committed
async and header rate limit check
1 parent 0be7b69 commit 7cb3e14

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

private-sec-reporting.py

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,39 @@ async def get_org_repos(session, org):
4848

4949
async def main():
5050
async with aiohttp.ClientSession() as session:
51+
# Check rate limit before making requests
52+
headers = {
53+
'Authorization': f'token {token}',
54+
'Accept': 'application/vnd.github.v3+json'
55+
}
56+
async with session.get('https://api.github.com/rate_limit', headers=headers) as response:
57+
if response.status == 200:
58+
rate_data = await response.json()
59+
remaining = rate_data['resources']['core']['remaining']
60+
reset_time = datetime.fromtimestamp(rate_data['resources']['core']['reset'])
61+
reset_in = humanize.naturaltime(reset_time)
62+
print(f"Rate limit remaining: {remaining}")
63+
print(f"Rate limit resets {reset_in}")
64+
if remaining < 100:
65+
print("[red]Warning: Rate limit is low![/red]")
66+
if remaining < 10:
67+
print("[red]Aborting due to very low rate limit[/red]")
68+
return
69+
else:
70+
print(f"[red]Error checking rate limit: {response.status}[/red]")
5171
tasks = []
52-
for org in orgs:
53-
repos = await get_org_repos(session, org)
72+
org_tasks = [(org, get_org_repos(session, org)) for org in orgs]
73+
org_results = await asyncio.gather(*(task for _, task in org_tasks))
74+
repos = []
75+
for (org, _), org_repos in zip(org_tasks, org_results):
76+
for repo in org_repos:
77+
repos.append((org, repo))
5478

55-
for repo in sorted(repos, key=lambda x: x['name']):
56-
repo_name = repo['name']
79+
for org, repo in sorted(repos, key=lambda x: x[1]['name']):
80+
repo_name = repo['name']
5781

58-
task = check_private_vulnerability_reporting(session, org, repo_name)
59-
tasks.append((repo, org, repo_name, task))
82+
task = check_private_vulnerability_reporting(session, org, repo_name)
83+
tasks.append((repo, org, repo_name, task))
6084

6185
results = await asyncio.gather(*[task for _,_,_, task in tasks])
6286

0 commit comments

Comments
 (0)