mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-05 16:58:59 +00:00
Adding flask db monitors so HAProxy can ping dbs without relying on django and other dbs.
This commit is contained in:
parent
70a3aa4e67
commit
d4d85249e6
6 changed files with 151 additions and 0 deletions
8
fabfile.py
vendored
8
fabfile.py
vendored
|
@ -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
0
flask/__init__.py
Normal file
129
flask/db_monitor.py
Normal file
129
flask/db_monitor.py
Normal 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
1
flask/flask_settings.py
Symbolic link
|
@ -0,0 +1 @@
|
|||
../local_settings.py
|
5
flask/requirements.txt
Normal file
5
flask/requirements.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
flask==0.10.1
|
||||
pymongo==2.6
|
||||
psycopg=2.5.4
|
||||
redis=2.8.0
|
||||
pyes=0.90.1
|
8
flask/supervisor_db_monitor.conf
Normal file
8
flask/supervisor_db_monitor.conf
Normal 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
|
Loading…
Add table
Reference in a new issue