mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-05 16:58:59 +00:00

* master: Handling cold start Handling cold start Changing redis hosts Adding redis host Retroactively adding redis pubsub monitor. Convertng ObjectId to str
213 lines
5.4 KiB
Python
213 lines
5.4 KiB
Python
from flask import Flask, abort
|
|
import os
|
|
import psycopg2
|
|
import pymysql
|
|
import pymongo
|
|
import redis
|
|
import pyes
|
|
|
|
from newsblur_web import settings
|
|
|
|
app = Flask(__name__)
|
|
|
|
PRIMARY_STATE = 1
|
|
SECONDARY_STATE = 2
|
|
|
|
LOCAL_HOST = "127.0.0.1"
|
|
@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'],
|
|
LOCAL_HOST,
|
|
settings.DATABASES['default']['PORT'],
|
|
)
|
|
try:
|
|
conn = psycopg2.connect(connect_params)
|
|
except:
|
|
print(" ---> Postgres can't connect to the database: %s" % connect_params)
|
|
abort(503)
|
|
|
|
cur = conn.cursor()
|
|
cur.execute("""SELECT id FROM feeds ORDER BY feeds.id DESC LIMIT 1""")
|
|
rows = cur.fetchall()
|
|
for row in rows:
|
|
return str(row[0])
|
|
|
|
abort(504)
|
|
|
|
@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 = pymysql.connect(host=LOCAL_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(503)
|
|
|
|
cur = conn.cursor()
|
|
cur.execute("""SELECT id FROM feeds ORDER BY feeds.id DESC LIMIT 1""")
|
|
rows = cur.fetchall()
|
|
for row in rows:
|
|
return str(row[0])
|
|
|
|
abort(504)
|
|
|
|
@app.route("/db_check/mongo")
|
|
def db_check_mongo():
|
|
try:
|
|
client = pymongo.MongoClient('mongodb://%s' % LOCAL_HOST)
|
|
db = client.newsblur
|
|
except:
|
|
abort(503)
|
|
|
|
stories = db.stories.count()
|
|
if not stories:
|
|
abort(504)
|
|
|
|
status = client.admin.command('replSetGetStatus')
|
|
members = status['members']
|
|
primary_optime = None
|
|
oldest_secondary_optime = None
|
|
for member in members:
|
|
member_state = member['state']
|
|
optime = member['optime']
|
|
if member_state == PRIMARY_STATE:
|
|
primary_optime = optime.time
|
|
elif member_state == SECONDARY_STATE:
|
|
if not oldest_secondary_optime or optime.time < oldest_secondary_optime:
|
|
oldest_secondary_optime = optime.time
|
|
|
|
if not primary_optime or not oldest_secondary_optime:
|
|
abort(505)
|
|
|
|
if primary_optime - oldest_secondary_optime > 100:
|
|
abort(506)
|
|
|
|
return str(stories)
|
|
|
|
@app.route("/db_check/redis")
|
|
def db_check_redis():
|
|
try:
|
|
r = redis.Redis(LOCAL_HOST, db=0)
|
|
except:
|
|
abort(503)
|
|
|
|
try:
|
|
randkey = r.randomkey()
|
|
except:
|
|
abort(504)
|
|
|
|
if randkey:
|
|
return str(randkey)
|
|
else:
|
|
abort(505)
|
|
|
|
@app.route("/db_check/redis_story")
|
|
def db_check_redis_story():
|
|
try:
|
|
r = redis.Redis(LOCAL_HOST, db=1)
|
|
except:
|
|
abort(503)
|
|
|
|
try:
|
|
randkey = r.randomkey()
|
|
except:
|
|
abort(504)
|
|
|
|
if randkey:
|
|
return str(randkey)
|
|
else:
|
|
abort(505)
|
|
|
|
@app.route("/db_check/redis_pubsub")
|
|
def db_check_redis_pubsub():
|
|
try:
|
|
r = redis.Redis(LOCAL_HOST, db=1)
|
|
except:
|
|
abort(503)
|
|
|
|
try:
|
|
pubsub_numpat = r.pubsub_numpat()
|
|
except:
|
|
abort(504)
|
|
|
|
if pubsub_numpat or isinstance(pubsub_numpat, long):
|
|
return str(pubsub_numpat)
|
|
else:
|
|
abort(505)
|
|
|
|
|
|
|
|
@app.route("/db_check/redis_sessions")
|
|
def db_check_redis_sessions():
|
|
<<<<<<< HEAD:flask_monitor/db_monitor.py
|
|
=======
|
|
redis_host = getattr(settings, 'REDIS_SESSIONS', {'host': 'db_redis_sessions'})
|
|
>>>>>>> master:flask/db_monitor.py
|
|
try:
|
|
r = redis.Redis(LOCAL_HOST, db=5)
|
|
except:
|
|
abort(503)
|
|
|
|
try:
|
|
randkey = r.randomkey()
|
|
except:
|
|
abort(504)
|
|
|
|
if randkey:
|
|
return str(randkey)
|
|
else:
|
|
abort(505)
|
|
|
|
@app.route("/db_check/redis_pubsub")
|
|
def db_check_redis_pubsub():
|
|
redis_host = getattr(settings, 'REDIS_PUBSUB', {'host': 'db_redis_pubsub'})
|
|
try:
|
|
r = redis.Redis(redis_host['host'], db=1)
|
|
except:
|
|
abort(503)
|
|
|
|
try:
|
|
pubsub_numpat = r.pubsub_numpat()
|
|
except:
|
|
abort(504)
|
|
|
|
if isinstance(pubsub_numpat, long):
|
|
return str(pubsub_numpat)
|
|
else:
|
|
abort(505)
|
|
|
|
@app.route("/db_check/elasticsearch")
|
|
def db_check_elasticsearch():
|
|
try:
|
|
conn = pyes.ES(LOCAL_HOST)
|
|
except:
|
|
abort(503)
|
|
|
|
if conn.indices.exists_index('feeds-index'):
|
|
return str("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(504)
|
|
|
|
if __name__ == "__main__":
|
|
print(" ---> Starting NewsBlur DB monitor flask server...")
|
|
app.run(host="0.0.0.0", port=5579)
|