Adding flask db monitors so HAProxy can ping dbs without relying on django and other dbs.

This commit is contained in:
Samuel Clay 2015-08-09 14:06:28 -07:00
parent 70a3aa4e67
commit d4d85249e6
6 changed files with 151 additions and 0 deletions

8
fabfile.py vendored
View file

@ -790,6 +790,14 @@ def downgrade_pil():
sudo('supervisorctl reload')
# kill()
def setup_db_monitor():
pull()
with cd(env.NEWSBLUR_PATH):
sudo('pip install -r flask/requirements.txt')
put('flask/supervisor_db_montior.conf', '/etc/supervisor/conf.d/db_monitor.conf', use_sudo=True)
sudo('supervisorctl reread')
sudo('supervisorctl update')
# ==============
# = Setup - DB =
# ==============

0
flask/__init__.py Normal file
View file

129
flask/db_monitor.py Normal file
View file

@ -0,0 +1,129 @@
from flask import Flask, abort
import flask_settings as settings
import psycopg2
import MySQLdb
import pymongo
import redis
import pyes
app = Flask(__name__)
@app.route("/db_check/postgres")
def db_check_postgres():
connect_params = "dbname='%s' user='%s' password='%s' host='%s' port='%s'" % (
settings.DATABASES['default']['NAME'],
settings.DATABASES['default']['USER'],
settings.DATABASES['default']['PASSWORD'],
settings.DATABASES['default']['HOST'],
settings.DATABASES['default']['PORT'],
)
try:
conn = psycopg2.connect(connect_params)
except:
print " ---> Postgres can't connect to the database: %s" % connect_params
abort(502)
cur = conn.cursor()
cur.execute("""SELECT id FROM feeds ORDER BY feeds.id DESC LIMIT 1""")
rows = cur.fetchall()
for row in rows:
return unicode(row[0])
abort(404)
@app.route("/db_check/mysql")
def db_check_mysql():
connect_params = "dbname='%s' user='%s' password='%s' host='%s' port='%s'" % (
settings.DATABASES['default']['NAME'],
settings.DATABASES['default']['USER'],
settings.DATABASES['default']['PASSWORD'],
settings.DATABASES['default']['HOST'],
settings.DATABASES['default']['PORT'],
)
try:
conn = MySQLdb.connect(host=settings.DATABASES['default']['HOST'],
port=settings.DATABASES['default']['PORT'],
user=settings.DATABASES['default']['USER'],
passwd=settings.DATABASES['default']['PASSWORD'],
db=settings.DATABASES['default']['NAME'])
except:
print " ---> Mysql can't connect to the database: %s" % connect_params
abort(502)
cur = conn.cursor()
cur.execute("""SELECT id FROM feeds ORDER BY feeds.id DESC LIMIT 1""")
rows = cur.fetchall()
for row in rows:
return unicode(row[0])
abort(404)
@app.route("/db_check/mongo")
def db_check_mongo():
try:
client = pymongo.MongoClient('mongodb://%s' % settings.MONGO_DB['host'])
db = client.newsblur
except:
abort(502)
return unicode(db.stories.count())
@app.route("/db_check/redis")
def db_check_redis():
try:
r = redis.Redis(settings.REDIS['host'], db=0)
except:
abort(502)
randkey = r.randomkey()
if randkey:
return unicode(randkey)
else:
abort(404)
@app.route("/db_check/redis_story")
def db_check_redis_story():
try:
r = redis.Redis(settings.REDIS_STORY['host'], db=1)
except:
abort(502)
randkey = r.randomkey()
if randkey:
return unicode(randkey)
else:
abort(404)
@app.route("/db_check/redis_sessions")
def db_check_redis_sessions():
try:
r = redis.Redis(settings.REDIS_SESSIONS['host'], db=5)
except:
abort(502)
randkey = r.randomkey()
if randkey:
return unicode(randkey)
else:
abort(404)
@app.route("/db_check/elasticsearch")
def db_check_elasticsearch():
try:
conn = pyes.ES(settings.ELASTICSEARCH_FEED_HOSTS)
except:
abort(502)
if conn.indices.exists_index('feeds-index'):
return unicode("Index exists, but didn't try search")
# query = pyes.query.TermQuery("title", "daring fireball")
# results = conn.search(query=query, size=1, doc_types=['feeds-type'], sort="num_subscribers:desc")
# for result in results:
# return unicode(result)
# else:
# abort(404)
else:
abort(404)
if __name__ == "__main__":
app.run(debug=True)

1
flask/flask_settings.py Symbolic link
View file

@ -0,0 +1 @@
../local_settings.py

5
flask/requirements.txt Normal file
View file

@ -0,0 +1,5 @@
flask==0.10.1
pymongo==2.6
psycopg=2.5.4
redis=2.8.0
pyes=0.90.1

View file

@ -0,0 +1,8 @@
[program:db_monitor]
command=python flask/db_monitor.py
directory=/srv/newsblur
user=sclay
autostart=true
autorestart=true
priority=991
stopsignal=HUP