-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: Forgot to add the remaining changes
- Loading branch information
Showing
1 changed file
with
92 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
#!/bin/bash | ||
|
||
waitForPostgresAvailability() { | ||
if [ -z "$PG_DB_HOST" ]; then | ||
tlog "PostgreSQL host name is empty. Check env variables. Error. Exiting java setup" | ||
exit 2 | ||
else | ||
|
||
MAX_RETRIES=50 | ||
RETRYSECONDS=10 | ||
retry_count=0 | ||
while true; do | ||
su postgres -c "pg_isready -h '${PG_DB_HOST}' -p '${PG_DB_PORT}'" | ||
status=$? | ||
|
||
case $status in | ||
0) | ||
tlog "PostgreSQL host '$PG_DB_HOST' is ready." | ||
break | ||
;; | ||
1) | ||
tlog "PostgreSQL host '$PG_DB_HOST' is rejecting connections e.g. due to being in recovery mode or not accepting connections eg. connections maxed out." | ||
;; | ||
2) | ||
tlog "PostgreSQL host '$PG_DB_HOST' is not responding or running." | ||
;; | ||
3) | ||
tlog "The connection check failed e.g. due to network issues or incorrect parameters." | ||
;; | ||
*) | ||
tlog "pg_isready exited with unexpected status code: $status" | ||
break | ||
;; | ||
esac | ||
|
||
retry_count=$((retry_count + 1)) | ||
if [ $retry_count -le $MAX_RETRIES ]; then | ||
tlog "PostgreSQL connection failed. Retrying attempt $retry_count/$MAX_RETRIES in $RETRYSECONDS seconds..." | ||
sleep $RETRYSECONDS | ||
else | ||
tlog "Exceeded maximum retry attempts ($MAX_RETRIES). Exiting." | ||
# use exit code 2 to indicate that the script failed to connect to postgres and supervisor conf is set not to restart the program for 2. | ||
exit 2 | ||
fi | ||
|
||
done | ||
fi | ||
} | ||
|
||
# for PostgreSQL, we use APPSMITH_DB_URL=postgresql://username:password@postgresserver:5432/dbname | ||
# Args: | ||
# conn_string (string): PostgreSQL connection string | ||
# Returns: | ||
# None | ||
# Example: | ||
# postgres syntax | ||
# "postgresql://user:password@localhost:5432/appsmith" | ||
# "postgresql://user:password@localhost/appsmith" | ||
# "postgresql://user@localhost:5432/appsmith" | ||
# "postgresql://user@localhost/appsmith" | ||
extract_postgres_db_params() { | ||
local conn_string=$1 | ||
|
||
# Use node to parse the URI and extract components | ||
IFS=' ' read -r USER PASSWORD HOST PORT DB <<<$(node -e " | ||
const connectionString = process.argv[1]; | ||
const pgUri = connectionString.startsWith(\"postgresql://\") | ||
? connectionString | ||
: 'http://' + connectionString; //Prepend a fake scheme for URL parsing | ||
const url = require('url'); | ||
const parsedUrl = new url.URL(pgUri); | ||
// Extract the pathname and remove the leading '/' | ||
const db = parsedUrl.pathname.substring(1); | ||
// Default the port to 5432 if it's empty | ||
const port = parsedUrl.port || '5432'; | ||
console.log(\`\${parsedUrl.username || '-'} \${parsedUrl.password || '-'} \${parsedUrl.hostname} \${port} \${db}\`); | ||
" "$conn_string") | ||
|
||
# Now, set the environment variables | ||
export PG_DB_USER="$USER" | ||
export PG_DB_PASSWORD="$PASSWORD" | ||
export PG_DB_HOST="$HOST" | ||
export PG_DB_PORT="$PORT" | ||
export PG_DB_NAME="$DB" | ||
} | ||
|
||
# Example usage of the functions | ||
# waitForPostgresAvailability | ||
# extract_postgres_db_params "postgresql://user:password@localhost:5432/dbname" |