Skip to content

Commit 838b7b3

Browse files
authored
Merge pull request #193 from OpenUpSA/admin
admin endpoints
2 parents ff33010 + 30001a2 commit 838b7b3

File tree

1 file changed

+42
-5
lines changed

1 file changed

+42
-5
lines changed

app.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2011,7 +2011,7 @@ def put(self, project_id, submission_id):
20112011
@project_ns.route('/<string:project_id>/submissions/<string:submission_id>/isolates')
20122012
class ProjectSubmissionIsolates2(Resource):
20132013

2014-
### GET /projects/<project_id>/submissions2/<submission_id>/isolates
2014+
### GET /projects/<project_id>/submissions/<submission_id>/isolates
20152015

20162016
@api.doc('list_submission_isolates_v2')
20172017
@require_auth(keycloak_auth)
@@ -2912,17 +2912,54 @@ def post(self):
29122912
return {'error': f'Reindexing error: {str(e)}'}, 500
29132913

29142914
##########################
2915-
### JOBS MONITORING
2915+
### ADMIN STATS
29162916
##########################
29172917

2918-
jobs_ns = api.namespace('jobs', description='Job monitoring endpoints')
2918+
admin_ns = api.namespace('admin', description='Admin statistics endpoints')
2919+
@admin_ns.route('/stats')
29192920

2920-
@jobs_ns.route('/')
2921+
class AdminStats(Resource):
2922+
### GET /admin/stats ###
2923+
2924+
@api.doc('get_admin_stats')
2925+
@require_auth(keycloak_auth)
2926+
@require_permission('system_admin_access')
2927+
def get(self):
2928+
"""Get system-wide statistics for admin dashboard"""
2929+
2930+
try:
2931+
stats = {}
2932+
2933+
with get_db_cursor() as cursor:
2934+
# Total users
2935+
cursor.execute("SELECT COUNT(*) as total_users FROM users")
2936+
stats['total_users'] = cursor.fetchone()['total_users']
2937+
2938+
# Total projects
2939+
cursor.execute("SELECT COUNT(*) as total_projects FROM projects")
2940+
stats['total_projects'] = cursor.fetchone()['total_projects']
2941+
2942+
# Total submissions
2943+
cursor.execute("SELECT COUNT(*) as total_submissions FROM submissions")
2944+
stats['total_submissions'] = cursor.fetchone()['total_submissions']
2945+
2946+
# Total isolates
2947+
cursor.execute("SELECT COUNT(*) as total_isolates FROM isolates")
2948+
stats['total_isolates'] = cursor.fetchone()['total_isolates']
2949+
2950+
return stats, 200
2951+
2952+
except Exception as e:
2953+
logger.exception(f"Error retrieving admin stats: {str(e)}")
2954+
return {'error': f'Statistics retrieval error: {str(e)}'}, 500
2955+
2956+
2957+
@admin_ns.route('/jobs')
29212958
class JobsList(Resource):
29222959

29232960
### GET /jobs ###
29242961

2925-
@jobs_ns.doc('list_jobs')
2962+
@admin_ns.doc('list_jobs')
29262963
@require_auth(keycloak_auth)
29272964
@require_permission('system_admin_access')
29282965
def get(self):

0 commit comments

Comments
 (0)