Skip to content

Commit d6e91b5

Browse files
park commit
Signed-off-by: skestwal <skestwal@redhat.com>
1 parent cf29c8c commit d6e91b5

File tree

6 files changed

+156
-44
lines changed

6 files changed

+156
-44
lines changed

ci-scripts/rhdh-setup/create_resource.sh

Lines changed: 87 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -499,13 +499,48 @@ log_token_err() {
499499
}
500500

501501
keycloak_token() {
502+
local keycloak_pass=$1
503+
504+
# Log the start of token retrieval
505+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Starting Keycloak token retrieval\"}" >> "$TMP_DIR/gather_token.log"
506+
502507
client_secret=$(oc -n "${RHDH_NAMESPACE}" get secret keycloak-client-secret-backstage -o template --template='{{.data.CLIENT_SECRET}}' | base64 -d)
503-
curl -s -k "$(keycloak_url)/realms/backstage/protocol/openid-connect/token" \
508+
509+
local token_url="$(keycloak_url)/realms/backstage/protocol/openid-connect/token"
510+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"token_url\":\"$token_url\",\"message\":\"Making Keycloak token request\"}" >> "$TMP_DIR/gather_token.log"
511+
512+
# Capture both response and HTTP status
513+
local token_response=$(curl -s -k -w "HTTPSTATUS:%{http_code}" "$token_url" \
504514
-d username=guru \
505-
-d "password=$1" \
515+
-d "password=$keycloak_pass" \
506516
-d 'grant_type=password' \
507517
-d 'client_id=backstage' \
508-
-d "client_secret=$client_secret" | jq -r ".expires_in_timestamp = $(python3 -c 'from datetime import datetime, timedelta; t_add=int(30); print(int((datetime.now() + timedelta(seconds=t_add)).timestamp()))')"
518+
-d "client_secret=$client_secret")
519+
520+
# Extract HTTP status code
521+
local http_code=$(echo "$token_response" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
522+
523+
# Extract response body
524+
local response_body=$(echo "$token_response" | sed -e 's/HTTPSTATUS:.*//g')
525+
526+
# Log the complete token response
527+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"http_code\":\"$http_code\",\"token_url\":\"$token_url\",\"response_body\":$(echo "$response_body" | jq -c '.' 2>/dev/null || echo "\"$response_body\"")}" >> "$TMP_DIR/gather_token.log"
528+
529+
# Check for error status codes
530+
if [ "$http_code" -eq 401 ]; then
531+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"http_code\":\"$http_code\",\"message\":\"UNAUTHORIZED - Invalid credentials for Keycloak token\",\"token_url\":\"$token_url\"}" >> "$TMP_DIR/gather_token.log"
532+
elif [ "$http_code" -eq 403 ]; then
533+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"http_code\":\"$http_code\",\"message\":\"FORBIDDEN - Client not authorized for Keycloak token\",\"token_url\":\"$token_url\"}" >> "$TMP_DIR/gather_token.log"
534+
elif [ "$http_code" -eq 400 ]; then
535+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"http_code\":\"$http_code\",\"message\":\"BAD REQUEST - Invalid token request parameters\",\"token_url\":\"$token_url\"}" >> "$TMP_DIR/gather_token.log"
536+
elif [ "$http_code" -ge 400 ]; then
537+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"http_code\":\"$http_code\",\"message\":\"HTTP ERROR - Keycloak token request failed\",\"token_url\":\"$token_url\"}" >> "$TMP_DIR/gather_token.log"
538+
else
539+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Keycloak token response received\",\"http_code\":\"$http_code\"}" >> "$TMP_DIR/gather_token.log"
540+
fi
541+
542+
# Process the response
543+
echo "$response_body" | jq -r ".expires_in_timestamp = $(python3 -c 'from datetime import datetime, timedelta; t_add=int(30); print(int((datetime.now() + timedelta(seconds=t_add)).timestamp()))')"
509544
}
510545

511546
rhdh_token() {
@@ -516,29 +551,56 @@ rhdh_token() {
516551
REALM="backstage"
517552
CLIENTID="backstage"
518553

554+
# Log the start of RHDH token retrieval
555+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Starting RHDH token retrieval\",\"auth_provider\":\"$AUTH_PROVIDER\"}" >> "$TMP_DIR/gather_token.log"
556+
519557
if [[ "${AUTH_PROVIDER}" != "keycloak" ]]; then
520-
# Corrected jq command for non-keycloak provider
521-
ACCESS_TOKEN=$(curl -s -k --cookie "$COOKIE" --cookie-jar "$COOKIE" "$(backstage_url)/api/auth/guest/refresh" | jq -r ".backstageIdentity | .expires_in_timestamp = $(python3 -c 'from datetime import datetime, timedelta; t_add=int(50*60); print(int((datetime.now() + timedelta(seconds=t_add)).timestamp()))')")
558+
# Log guest refresh attempt
559+
local guest_url="$(backstage_url)/api/auth/guest/refresh"
560+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Using guest authentication\",\"refresh_url\":\"$guest_url\"}" >> "$TMP_DIR/gather_token.log"
561+
562+
ACCESS_TOKEN=$(curl -s -k --cookie "$COOKIE" --cookie-jar "$COOKIE" "$guest_url" | tee -a "$TMP_DIR/get_rhdh_token.log" | jq -r ".backstageIdentity | .expires_in_timestamp = $(python3 -c 'from datetime import datetime, timedelta; t_add=int(50*60); print(int((datetime.now() + timedelta(seconds=t_add)).timestamp()))')")
563+
564+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Guest token retrieved\",\"response_body\":$(echo "$ACCESS_TOKEN" | jq -c '.' 2>/dev/null || echo "\"$ACCESS_TOKEN\"")}" >> "$TMP_DIR/gather_token.log"
522565
echo "$ACCESS_TOKEN"
523566
return
524567
fi
525568

569+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Making refresh URL call\",\"refresh_url\":\"$REFRESH_URL\"}" >> "$TMP_DIR/gather_token.log"
570+
526571
LOGIN_URL=$(curl -I -k -sSL --dump-header "$TMP_DIR/login_url_headers.log" --cookie "$COOKIE" --cookie-jar "$COOKIE" "$REFRESH_URL")
527572
state=$(echo "$LOGIN_URL" | grep -oE 'state=[^&]+' | grep -oE '[^=]+$' | sed 's/%2F/\//g;s/%3A/:/g')
528573

574+
if [ -z "$state" ]; then
575+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Failed to extract state from refresh URL response\",\"refresh_url\":\"$REFRESH_URL\"}" >> "$TMP_DIR/gather_token.log"
576+
else
577+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Extracted state from refresh response\",\"state\":\"$state\"}" >> "$TMP_DIR/gather_token.log"
578+
fi
579+
580+
local keycloak_auth_url="$(keycloak_url)/realms/$REALM/protocol/openid-connect/auth"
581+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Making Keycloak auth URL call\",\"auth_url\":\"$keycloak_auth_url\"}" >> "$TMP_DIR/gather_token.log"
582+
529583
AUTH_URL=$(curl -k -sSL --dump-header "$TMP_DIR/auth_url_headers.log" --get --cookie "$COOKIE" --cookie-jar "$COOKIE" \
530584
--data-urlencode "client_id=${CLIENTID}" \
531585
--data-urlencode "state=${state}" \
532586
--data-urlencode "redirect_uri=${REDIRECT_URL}" \
533587
--data-urlencode "scope=openid email profile" \
534588
--data-urlencode "response_type=code" \
535-
"$(keycloak_url)/realms/$REALM/protocol/openid-connect/auth" 2>&1| tee "$TMP_DIR/auth_url.log" | grep -oE 'action="[^"]+"' | grep -oE '"[^"]+"' | tr -d '"')
589+
"$keycloak_auth_url" 2>&1| tee "$TMP_DIR/auth_url.log" | grep -oE 'action="[^"]+"' | grep -oE '"[^"]+"' | tr -d '"')
590+
591+
if [ -z "$AUTH_URL" ]; then
592+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Failed to get auth URL from Keycloak\",\"auth_url\":\"$keycloak_auth_url\"}" >> "$TMP_DIR/gather_token.log"
593+
else
594+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Received auth URL from Keycloak\"}" >> "$TMP_DIR/gather_token.log"
595+
fi
536596

537597
execution=$(echo "$AUTH_URL" | grep -oE 'execution=[^&]+' | grep -oE '[^=]+$')
538598
tab_id=$(echo "$AUTH_URL" | grep -oE 'tab_id=[^&]+' | grep -oE '[^=]+$')
539599
# shellcheck disable=SC2001
540600
AUTHENTICATE_URL=$(echo "$AUTH_URL" | sed -e 's/\&amp;/\&/g')
541601

602+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Making authentication call\"}" >> "$TMP_DIR/gather_token.log"
603+
542604
CODE_URL=$(curl -k -sS --dump-header "$TMP_DIR/code_url_headers.log" --cookie "$COOKIE" --cookie-jar "$COOKIE" \
543605
--data-raw "username=${USERNAME}&password=${PASSWORD}&credentialId=" \
544606
--data-urlencode "client_id=${CLIENTID}" \
@@ -550,14 +612,33 @@ rhdh_token() {
550612
code=$(echo "$CODE_URL" | grep -oE 'code=[^&]+' | grep -oE '[^=]+$')
551613
session_state=$(echo "$CODE_URL" | grep -oE 'session_state=[^&]+' | grep -oE '[^=]+$')
552614

615+
if [ -z "$code" ]; then
616+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Failed to extract authorization code\"}" >> "$TMP_DIR/gather_token.log"
617+
else
618+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Extracted authorization code\"}" >> "$TMP_DIR/gather_token.log"
619+
fi
620+
553621
# shellcheck disable=SC2001
554622
CODE_URL=$(echo "$CODE_URL" | sed -e 's/\&amp;/\&/g')
555623

624+
# Log final token exchange call
625+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Making final token exchange\"}" >> "$TMP_DIR/gather_token.log"
626+
556627
ACCESS_TOKEN=$(curl -k -sSL --dump-header "$TMP_DIR/get_rhdh_token_headers.log" --cookie "$COOKIE" --cookie-jar "$COOKIE" \
557628
--data-urlencode "code=$code" \
558629
--data-urlencode "session_state=$session_state" \
559630
--data-urlencode "state=$state" \
560631
"$CODE_URL" | tee -a "$TMP_DIR/get_rhdh_token.log" | jq ".backstageIdentity | .expires_in_timestamp = $(python3 -c 'from datetime import datetime, timedelta; t_add=int(30*60); print(int((datetime.now() + timedelta(seconds=t_add)).timestamp()))')")
632+
633+
# Log the complete RHDH token response
634+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"RHDH token exchange complete\",\"response_body\":$(echo "$ACCESS_TOKEN" | jq -c '.' 2>/dev/null || echo "\"$ACCESS_TOKEN\"")}" >> "$TMP_DIR/gather_token.log"
635+
636+
if echo "$ACCESS_TOKEN" | jq -e '.token // .access_token' >/dev/null 2>&1; then
637+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"message\":\"RHDH token successfully retrieved\"}" >> "$TMP_DIR/gather_token.log"
638+
else
639+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"message\":\"Failed to retrieve valid RHDH token\"}" >> "$TMP_DIR/gather_token.log"
640+
fi
641+
561642
echo "$ACCESS_TOKEN"
562643
}
563644

ci-scripts/rhdh-setup/deploy.sh

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,58 @@ create_objs() {
300300

301301
get_catalog_entity_count() {
302302
entity_type=$1
303+
304+
# Log the start of catalog entity count retrieval
305+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"message\":\"Starting catalog entity count retrieval\"}" >> "$TMP_DIR/catalog_sync.log"
306+
307+
# Get token and log the result
303308
ACCESS_TOKEN=$(get_token "rhdh")
304-
curl -s -k "$(backstage_url)/api/catalog/entity-facets?facet=kind" --cookie "$COOKIE" --cookie-jar "$COOKIE" -H 'Content-Type: application/json' -H 'Authorization: Bearer '"$ACCESS_TOKEN" | tee -a "$TMP_DIR/get_$(echo "$entity_type" | tr '[:upper:]' '[:lower:]')_count.log" | jq -r '.facets.kind[] | select(.value == "'"$entity_type"'")| .count'
309+
if [ -z "$ACCESS_TOKEN" ] || [ "$ACCESS_TOKEN" = "null" ]; then
310+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"message\":\"Failed to obtain RHDH access token\"}" >> "$TMP_DIR/catalog_sync.log"
311+
echo "0"
312+
return
313+
fi
314+
315+
# Log token preview
316+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"message\":\"RHDH token obtained\",\"token_preview\":\"${ACCESS_TOKEN:0:20}...\"}" >> "$TMP_DIR/catalog_sync.log"
317+
318+
# Make the API call with detailed logging
319+
local api_url="$(backstage_url)/api/catalog/entity-facets?facet=kind"
320+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"api_url\":\"$api_url\",\"message\":\"Making catalog API call\"}" >> "$TMP_DIR/catalog_sync.log"
321+
322+
# Capture both response and HTTP status
323+
local api_response=$(curl -s -k -w "HTTPSTATUS:%{http_code}" "$api_url" --cookie "$COOKIE" --cookie-jar "$COOKIE" -H 'Content-Type: application/json' -H 'Authorization: Bearer '"$ACCESS_TOKEN")
324+
325+
# Extract HTTP status code
326+
local http_code=$(echo "$api_response" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
327+
328+
# Extract response body
329+
local response_body=$(echo "$api_response" | sed -e 's/HTTPSTATUS:.*//g')
330+
331+
# Log the complete API response
332+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"http_code\":\"$http_code\",\"api_url\":\"$api_url\",\"response_body\":$(echo "$response_body" | jq -c '.' 2>/dev/null || echo "\"$response_body\"")}" >> "$TMP_DIR/catalog_sync.log"
333+
334+
# Check for error status codes
335+
if [ "$http_code" -eq 401 ]; then
336+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"http_code\":\"$http_code\",\"message\":\"UNAUTHORIZED - Token may be invalid or expired\",\"api_url\":\"$api_url\"}" >> "$TMP_DIR/catalog_sync.log"
337+
elif [ "$http_code" -eq 403 ]; then
338+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"http_code\":\"$http_code\",\"message\":\"FORBIDDEN - Token lacks required permissions\",\"api_url\":\"$api_url\"}" >> "$TMP_DIR/catalog_sync.log"
339+
elif [ "$http_code" -eq 404 ]; then
340+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"http_code\":\"$http_code\",\"message\":\"NOT FOUND - Catalog API endpoint not available\",\"api_url\":\"$api_url\"}" >> "$TMP_DIR/catalog_sync.log"
341+
elif [ "$http_code" -ge 400 ]; then
342+
echo "{\"level\":\"error\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"http_code\":\"$http_code\",\"message\":\"HTTP ERROR - API call failed\",\"api_url\":\"$api_url\"}" >> "$TMP_DIR/catalog_sync.log"
343+
fi
344+
345+
# Parse and return the count
346+
local count=$(echo "$response_body" | jq -r '.facets.kind[] | select(.value == "'"$entity_type"'")| .count' 2>/dev/null)
347+
348+
# Also log to individual entity files
349+
echo "$response_body" | tee -a "$TMP_DIR/get_$(echo "$entity_type" | tr '[:upper:]' '[:lower:]')_count.log" >/dev/null
350+
351+
# Log the extracted count
352+
echo "{\"level\":\"info\",\"ts\":\"$(date -u -Ins)\",\"entity_type\":\"$entity_type\",\"count\":\"${count:-0}\",\"message\":\"Entity count extracted\"}" >> "$TMP_DIR/catalog_sync.log"
353+
354+
echo "${count:-0}"
305355
}
306356

307357
backstage_install() {

ci-scripts/rhdh-setup/template/backstage/app-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ catalog:
2323
groupQuerySize: 1000
2424
schedule:
2525
frequency:
26-
hours: 2
26+
minutes: 1
2727
timeout:
2828
minutes: 1
2929
initialDelay:

ci-scripts/rhdh-setup/template/backstage/helm/chart-values.yaml

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,6 @@ global:
88
plugins:
99
- package: ./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-keycloak-dynamic
1010
disabled: false
11-
pluginConfig:
12-
catalog:
13-
providers:
14-
keycloakOrg:
15-
default:
16-
baseUrl: ${KEYCLOAK_BASE_URL}
17-
realm: ${KEYCLOAK_REALM}
18-
loginRealm: ${KEYCLOAK_LOGIN_REALM}
19-
clientId: ${CLIENT_ID}
20-
clientSecret: ${CLIENT_SECRET}
21-
userQuerySize: 1000
22-
groupQuerySize: 1000
23-
schedule:
24-
frequency:
25-
minutes: 30
26-
timeout:
27-
minutes: 1
28-
initialDelay:
29-
seconds: 15
3011
- package: ./dynamic-plugins/dist/backstage-community-plugin-analytics-provider-segment
3112
disabled: true
3213
# TechDocs

ci-scripts/rhdh-setup/template/keycloak/keycloakRealmImport.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ spec:
2626
- ${OAUTH2_REDIRECT_URI}
2727
serviceAccountsEnabled: true
2828
standardFlowEnabled: true
29+
serviceAccount:
30+
realmRoles:
31+
- offline_access
32+
- uma_authorization
2933
serviceAccountClientRoles:
3034
realm-management:
3135
- query-groups
3236
- query-users
3337
- view-users
34-
- view-clients
35-
- view-realm
36-
- manage-users
37-
- manage-clients
3838
users:
3939
- username: guru
4040
firstName: Guru

test.env

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# To override system environment variables, uncomment the variables down bellow. It will be sourced by the ci-scripts.
44

55
## Scenario
6-
# export SCENARIO=baseline-test
6+
export SCENARIO=mvp
77
# export BASE_HOST=
88
# export USERS=100
99
# export WORKERS=5
@@ -12,20 +12,20 @@
1212
# export WAIT_FOR_SEARCH_INDEX=false
1313

1414
## RHDH database population
15-
# export PRE_LOAD_DB=true
16-
# export BACKSTAGE_USER_COUNT=1
17-
# export GROUP_COUNT=1
18-
# export API_COUNT=1
19-
# export COMPONENT_COUNT=1
20-
# export KEYCLOAK_USER_PASS=changeme
21-
# export AUTH_PROVIDER=keycloak
15+
export PRE_LOAD_DB=true
16+
export BACKSTAGE_USER_COUNT=7
17+
export GROUP_COUNT=6
18+
export API_COUNT=5
19+
export COMPONENT_COUNT=2
20+
export KEYCLOAK_USER_PASS=changeme
21+
export AUTH_PROVIDER=keycloak
2222
# export POPULATION_CONCURRENCY=10
2323
# export COMPONENT_SHARD_SIZE=500
2424

2525
## RHDH installed via Helm
26-
# export RHDH_INSTALL_METHOD=helm
27-
# export RHDH_NAMESPACE=rhdh-performance-helm
28-
# export RHDH_HELM_REPO=oci://quay.io/rhdh/chart
26+
export RHDH_INSTALL_METHOD=helm
27+
export RHDH_NAMESPACE=rhdh-performance-helm-rhbk
28+
export RHDH_HELM_REPO=oci://quay.io/rhdh/chart
2929
# export RHDH_HELM_CHART=redhat-developer-hub
3030
# export RHDH_HELM_CHART_VERSION= # auto-determined in deploy.sh if empty and based on RHDH_BASE_VERSION
3131
# export RHDH_HELM_RELEASE_NAME=rhdh
@@ -68,11 +68,11 @@
6868
# export LOCUST_EXTRA_CMD=--debug=true
6969
# export ARTIFACT_DIR=.artifacts
7070
# export ENABLE_RBAC=false
71-
# export ENABLE_ORCHESTRATOR=false
71+
export ENABLE_ORCHESTRATOR=true
7272
# export RBAC_POLICY=all_groups_admin
7373
# export RBAC_POLICY_SIZE=10000
7474
# export ENABLE_PROFILING=false
75-
# export RHDH_LOG_LEVEL=warn
75+
export RHDH_LOG_LEVEL=debug
7676
# export PSQL_LOG=true
7777
# export PSQL_EXPORT=false
7878

0 commit comments

Comments
 (0)