NewsBlur/flask/db_monitor.py

130 lines
3.6 KiB
Python
Raw Normal View History

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)