Handling operation failures in flask metrics.

This commit is contained in:
Samuel Clay 2022-02-04 13:24:17 -05:00
parent 472fcda770
commit af9757ef1b
2 changed files with 28 additions and 10 deletions

View file

@ -1,6 +1,6 @@
{ {
"service": { "service": {
"name": "db-mongo", "name": "db-mongo-staging",
"id": "{{ inventory_hostname }}", "id": "{{ inventory_hostname }}",
"tags": [ "tags": [
"db" "db"

View file

@ -22,7 +22,10 @@ MONGO_HOST = settings.SERVER_NAME
@app.route("/objects/") @app.route("/objects/")
def objects(): def objects():
stats = connection.newsblur.command("dbstats") try:
stats = connection.newsblur.command("dbstats")
except pymongo.errors.OperationFailure as e:
return Response(f"Operation failure: {e}", 500)
data = dict(objects=stats['objects']) data = dict(objects=stats['objects'])
formatted_data = {} formatted_data = {}
for k, v in data.items(): for k, v in data.items():
@ -67,10 +70,13 @@ def repl_set_lag():
return primary_optime - oldest_secondary_optime return primary_optime - oldest_secondary_optime
# no such item for Cursor instance try:
oplog_length = _get_oplog_length() # no such item for Cursor instance
# not running with --replSet oplog_length = _get_oplog_length()
replication_lag = _get_max_replication_lag() # not running with --replSet
replication_lag = _get_max_replication_lag()
except pymongo.errors.OperationFailure as e:
return Response(f"Operation failure: {e}", 500)
formatted_data = {} formatted_data = {}
for k, v in oplog_length.items(): for k, v in oplog_length.items():
@ -89,7 +95,10 @@ def repl_set_lag():
@app.route("/size/") @app.route("/size/")
def size(): def size():
stats = connection.newsblur.command("dbstats") try:
stats = connection.newsblur.command("dbstats")
except pymongo.errors.OperationFailure as e:
return Response(f"Operation failure: {e}", 500)
data = dict(size=stats['fsUsedSize']) data = dict(size=stats['fsUsedSize'])
formatted_data = {} formatted_data = {}
for k, v in data.items(): for k, v in data.items():
@ -106,7 +115,10 @@ def size():
@app.route("/ops/") @app.route("/ops/")
def ops(): def ops():
status = connection.admin.command('serverStatus') try:
status = connection.admin.command('serverStatus')
except pymongo.errors.OperationFailure as e:
return Response(f"Operation failure: {e}", 500)
data = dict( data = dict(
(q, status["opcounters"][q]) (q, status["opcounters"][q])
for q in status['opcounters'].keys() for q in status['opcounters'].keys()
@ -127,7 +139,10 @@ def ops():
@app.route("/page-faults/") @app.route("/page-faults/")
def page_faults(): def page_faults():
status = connection.admin.command('serverStatus') try:
status = connection.admin.command('serverStatus')
except pymongo.errors.OperationFailure as e:
return Response(f"Operation failure: {e}", 500)
try: try:
value = status['extra_info']['page_faults'] value = status['extra_info']['page_faults']
except KeyError: except KeyError:
@ -148,7 +163,10 @@ def page_faults():
@app.route("/page-queues/") @app.route("/page-queues/")
def page_queues(): def page_queues():
status = connection.admin.command('serverStatus') try:
status = connection.admin.command('serverStatus')
except pymongo.errors.OperationFailure as e:
return Response(f"Operation failure: {e}", 500)
data = dict( data = dict(
(q, status["globalLock"]["currentQueue"][q]) (q, status["globalLock"]["currentQueue"][q])
for q in ("readers", "writers") for q in ("readers", "writers")