Browse Source

add a 'ping' endpoint, redirect stderr to stdout

pull/5/head
Trent Larson 6 months ago
parent
commit
5071a8bee4
  1. 3
      Dockerfile
  2. 3
      README.md
  3. 20
      app.py

3
Dockerfile

@ -41,4 +41,5 @@ RUN chown -R myuser:myuser /app
USER myuser
# Start gunicorn with the appropriate options
CMD ["gunicorn", "-b", "0.0.0.0:3000", "--log-level=debug", "--workers=1", "app:app"]
# Without "2>&1" the gunicorn internal logging shows in 'docker logs' but doesn't go to stdout like our 'printf' commands.
CMD ["gunicorn", "-b", "0.0.0.0:3000", "--log-level=debug", "--workers=1", "app:app", "2>&1"]

3
README.md

@ -240,6 +240,7 @@ Run the app:
```commandline
sh <(curl https://pkgx.sh) +python.org +virtualenv.pypa.io sh
# first time
python -m venv .
source bin/activate
@ -249,6 +250,8 @@ pip install -r requirements.txt
cp data/webpush.db.empty data/webpush.db
# For DB access, you'll have to uncomment the local path for `db_uri`.
# 3 workers would trigger 3 daily subscription runs
gunicorn -b 0.0.0.0:3000 --log-level=debug --workers=1 app:app

20
app.py

@ -23,7 +23,11 @@ CONTACT_EMAIL = "mailto:info@timesafari.app"
app = Flask(__name__)
class WebPushService():
latest_subscription_run = None
"""
This class provides services for sending web push notifications.
"""
@ -44,10 +48,12 @@ class WebPushService():
# Setting the application instance
self.app = app
self.app.add_url_rule('/web-push/regenerate-vapid', view_func=self.regenerate_vapid, methods=['POST'])
self.app.add_url_rule('/web-push/ping', view_func=self.ping, methods=['GET'])
# Setting the database URI for the application
db_uri = os.getenv('SQLALCHEMY_DATABASE_URI', 'sqlite:////app/instance/data/webpush.db')
# This relative path works in docker-compose
# This relative path works on a local run if you link to this dir from "var/app-instance"
#db_uri = os.getenv('SQLALCHEMY_DATABASE_URI', 'sqlite:///data/webpush.db')
self.app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
@ -230,10 +236,24 @@ class WebPushService():
print(f"Result from sub {subscription.id}: success={result['success']} text={result['message']}", flush=True)
print(f"{now} - Finished sending {len(all_subscriptions)} subscriptions.", flush=True)
self.latest_subscription_run = now
# Sleeping for 24 hours before sending the next set of notifications
time.sleep(24 * 60 * 60)
# This is an endpoint, routed in __init__
def ping(self) -> Response:
"""
Endpoint to show liveness info
Returns:
- Response: Text with some subscription-run info
"""
return f"pong ... with latest subscription run at {self.latest_subscription_run}"
# This is an endpoint, routed in __init__
def regenerate_vapid(self) -> Tuple[str, int]:
"""

Loading…
Cancel
Save