Skip to content

Commit 0f2b189

Browse files
Merge pull request #4770 from linuxfoundation/unicron-4759-fix-missing-installation-id-prod
Unicron 4759 fix missing installation id prod
2 parents 12de08d + 95de473 commit 0f2b189

File tree

5 files changed

+63
-29
lines changed

5 files changed

+63
-29
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,4 @@ cover.out
257257
.env
258258
src.txt
259259
src.txt.*
260+
out.json

cla-backend/cla/controllers/github.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def get_organization(organization_name):
4848
try:
4949
cla.log.debug(f'Loading GitHub by organization name: {organization_name}..')
5050
org = github_organization.get_organization_by_lower_name(organization_name)
51-
cla.log.debug(f'Loaded GitHub by organization name: {org}')
51+
cla.log.debug(f'Loaded GitHub organization by name: {org}')
5252
except DoesNotExist as err:
5353
cla.log.warning(f'organization name {organization_name} does not exist')
5454
return {'errors': {'organization_name': str(err)}}
@@ -68,7 +68,7 @@ def get_organization_model(organization_name) -> Optional[GitHubOrg]:
6868
try:
6969
cla.log.debug(f'Loading GitHub by organization name: {organization_name}..')
7070
org = github_organization.get_organization_by_lower_name(organization_name)
71-
cla.log.debug(f'Loaded GitHub by organization name: {org}')
71+
cla.log.debug(f'Loaded GitHub organization model by name: {org}')
7272
return org
7373
except DoesNotExist as err:
7474
cla.log.warning(f'organization name {organization_name} does not exist, error: {err}')
@@ -138,9 +138,13 @@ def update_organization(organization_name, # pylint: disable=too-many-arguments
138138
if organization_sfid:
139139
github_organization.set_organization_sfid(organization_sfid)
140140

141-
github_organization.save()
142-
cla.log.debug('updated organization: {}'.format(organization_name))
143-
return github_organization.to_dict()
141+
try:
142+
github_organization.save()
143+
cla.log.debug('updated organization: {}'.format(organization_name))
144+
return github_organization.to_dict()
145+
except Exception as err:
146+
cla.log.error(f"failed to save organization {organization_name}: {err}")
147+
return {"errors": {"organization_name": str(err)}}
144148

145149

146150
def delete_organization(auth_user, organization_name):
@@ -296,6 +300,12 @@ def activity(action: str, event_type: str, body: dict):
296300
def handle_installation_event(action: str, body: dict):
297301
func_name = 'github.activity.handle_installation_event'
298302
cla.log.debug(f'{func_name} - processing github [installation] activity callback...')
303+
installation_id = None
304+
try:
305+
installation_id = body['installation']['id']
306+
except KeyError:
307+
cla.log.warning(f'{func_name} - unable to determine installation id from body: {json.dumps(body)}.')
308+
cla.log.debug(f'{func_name} - processing github installation {installation_id}...')
299309

300310
# New Installations
301311
if action == 'created':
@@ -306,7 +316,7 @@ def handle_installation_event(action: str, body: dict):
306316
cla.log.warning(f'{func_name} - Unable to determine organization name from the github installation event '
307317
f'with action: {action}'
308318
f'event body: {json.dumps(body)}')
309-
return {'status', f'GitHub installation {action} event malformed.'}
319+
return {'status': f'GitHub installation {action} event malformed.'}
310320

311321
cla.log.debug(f'Locating organization using name: {org_name}')
312322
existing = get_organization(org_name)
@@ -315,23 +325,16 @@ def handle_installation_event(action: str, body: dict):
315325
'but the organization is not configured in EasyCLA')
316326
# TODO: Need a way of keeping track of new organizations that don't have projects yet.
317327
return {'status': 'Github Organization must be created through the Project Management Console.'}
318-
elif not existing['organization_installation_id']:
319-
update_organization(
320-
existing['organization_name'],
321-
existing['organization_sfid'],
322-
body['installation']['id'],
323-
)
324-
cla.log.info(f'{func_name} - Organization enrollment completed: {existing["organization_name"]}')
328+
elif not existing.get('organization_installation_id'):
329+
cla.log.info(f'{func_name} - Setting installation ID for github organization: {existing.get("organization_name")} to {installation_id}')
330+
update_organization(existing.get('organization_name'), existing.get('organization_sfid'), installation_id)
331+
cla.log.info(f'{func_name} - Organization enrollment completed: {existing.get("organization_name")}')
325332
return {'status': 'Organization Enrollment Completed. CLA System is operational'}
326333
else:
327-
cla.log.info(f'{func_name} - Organization already enrolled: {existing["organization_name"]}')
328-
cla.log.info(f'{func_name} - Updating installation ID for '
329-
f'github organization: {existing["organization_name"]}')
330-
update_organization(
331-
existing['organization_name'],
332-
existing['organization_sfid'],
333-
body['installation']['id'],
334-
)
334+
cla.log.info(f'{func_name} - Organization already enrolled: {existing.get("organization_name")}')
335+
cla.log.info(f'{func_name} - installation ID: {existing.get("organization_installation_id")}')
336+
cla.log.info(f'{func_name} - Updating installation ID for github organization: {existing.get("organization_name")} to {installation_id}')
337+
update_organization(existing.get('organization_name'), existing.get('organization_sfid'), installation_id)
335338
return {'status': 'Already Enrolled Organization Updated. CLA System is operational'}
336339

337340
elif action == 'deleted':
@@ -341,7 +344,7 @@ def handle_installation_event(action: str, body: dict):
341344
cla.log.warning('Unable to determine organization name from the github installation event '
342345
f'with action: {action}'
343346
f'event body: {json.dumps(body)}')
344-
return {'status', f'GitHub installation {action} event malformed.'}
347+
return {'status': f'GitHub installation {action} event malformed.'}
345348
repositories = Repository().get_repositories_by_organization(org_name)
346349
notify_project_managers(repositories)
347350
return

cla-backend/cla/models/dynamo_models.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4001,10 +4001,20 @@ def __str__(self):
40014001

40024002
def to_dict(self):
40034003
ret = dict(self.model)
4004-
if ret["organization_installation_id"] == "null":
4004+
4005+
if "organization_installation_id" not in ret:
40054006
ret["organization_installation_id"] = None
4006-
if ret["organization_sfid"] == "null":
4007+
if "organization_sfid" not in ret:
40074008
ret["organization_sfid"] = None
4009+
4010+
val = ret.get("organization_installation_id")
4011+
if isinstance(val, str) and val.strip().lower() in ("null", "none", ""):
4012+
ret["organization_installation_id"] = None
4013+
4014+
val = ret.get("organization_sfid")
4015+
if isinstance(val, str) and val.strip().lower() in ("null", "none", ""):
4016+
ret["organization_sfid"] = None
4017+
40084018
return ret
40094019

40104020
def save(self) -> None:

utils/count_apis.sh

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,34 @@
44

55
if [ -z "${1}" ]
66
then
7-
echo "Usage: $0 <path-to-api-logs>"
7+
echo "Usage: $0 <path-to-api-logs> [min-count]"
88
echo "Example: $0 api-logs-prod.json"
99
exit 1
1010
fi
11-
11+
N=10
12+
if [ ! -z "${2}" ]
13+
then
14+
N="${2}"
15+
fi
1216
jq -r '
1317
.[].message
1418
| capture("LG:api-request-path:(?<p>[^\"[:space:]]+)")? # find the path
1519
| select(.) # drop non-matches
1620
| .p
1721
' "${1}" \
22+
| sed -E 's#/{2,}#/#g' \
23+
| sed -E 's#/$##' \
24+
| sed -E 's#\.(png|svg|css|js|json|xml)$#.<asset>#g' \
25+
| sed -E 's#^/v[0-9]+/swagger\.<asset>$#/v*/swagger#g' \
26+
| sed -E 's#^/v[0-9]+/api-docs$#/v*/api-docs#g' \
27+
| sed -E 's#^/v[0-9]+/(api/)?graphql(\.php)?$#/v*/graphql#g' \
28+
| sed -E 's#^/v[0-9]+/graph(i)?ql(/.*)?$#/v*/graphiql#g' \
29+
| sed -E 's#^/v[0-9]+/(explorer|console|playground|altair)$#/v*/graphql-ui#g' \
30+
| sed -E 's#/([A-Za-z0-9]{5,8})(/|$)#/<shortid>\2#g' \
1831
| sed -E 's/[0-9a-fA-F-]{36}/<uuid>/g' \
1932
| sed -E ':a;s#/([0-9]{1,})(/|$)#/<id>\2#g;ta' \
2033
| sed -E 's#/(00|a0)[A-Za-z0-9]{13,16}(/|$)#/<sfid>\2#g' \
2134
| sed -E 's#/lf[A-Za-z0-9]{16,22}(/|$)#/<lfxid>\1#g' \
2235
| sed -E 's#/null(/|$)#/<null>\1#g' \
23-
| sort | uniq -c | sort -nr
36+
| sort | uniq -c | sort -nr \
37+
| awk -v N="$N" '$1 >= N'

utils/search_aws_log_group.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,20 @@ if [ -z "${DTFROM}" ]
3939
then
4040
export DTFROM="$(date -d '3 days ago' +%s)000"
4141
else
42-
export DTFROM="$(date -d "${DTFROM}" +%s)000"
42+
if [[ ! "$DTFROM" =~ ^[0-9]+$ ]]
43+
then
44+
export DTFROM="$(date -d "${DTFROM}" +%s)000"
45+
fi
4346
fi
4447

4548
if [ -z "${DTTO}" ]
4649
then
4750
export DTTO="$(date +%s)000"
4851
else
49-
export DTTO="$(date -d "${DTTO}" +%s)000"
52+
if [[ ! "$DTTO" =~ ^[0-9]+$ ]]
53+
then
54+
export DTTO="$(date -d "${DTTO}" +%s)000"
55+
fi
5056
fi
5157

5258
if [ ! -z "${DEBUG}" ]

0 commit comments

Comments
 (0)