diff --git a/backend/app/routers/health.py b/backend/app/routers/health.py
index e716f6d..a0e6a81 100644
--- a/backend/app/routers/health.py
+++ b/backend/app/routers/health.py
@@ -189,7 +189,7 @@ async def get_all_admin_data(
query = query.order_by(sort_column.asc())
else:
# DEFAULT: Show oldest first when no order is specified
- query = query.order_by(Submission.created_at.asc())
+ query = query.order_by(Submission.created_at.desc())
# 3. PAGINATION
submissions = query.offset(start).limit(length).all()
diff --git a/frontend/admin.html b/frontend/admin.html
index 54bb552..a4837c8 100644
--- a/frontend/admin.html
+++ b/frontend/admin.html
@@ -62,7 +62,7 @@
-
+
Video Queue:
@@ -197,9 +197,10 @@
return isRelative ? MEDIA_BASE_URL + path : path;
}
- // Fetch and display Sonauto credits
+ // Fetch and update system status metrics
function loadCredits() {
- fetch('/back/api/admin/queue-status')
+ const STATUS_ENDPOINT = `/back/api/admin/queue-status`;
+ fetch(STATUS_ENDPOINT)
.then(response => response.json())
.then(data => {
// Update all three metrics from the API
@@ -215,6 +216,8 @@
});
}
loadCredits();
+ // Poll every 2 minutes
+ setInterval(loadCredits, (2*60*1000));
// Initialize DataTable
const table = $('#usersTable').DataTable({
@@ -268,6 +271,7 @@
{
data: null,
title: 'Actions',
+ name: 'actions',
defaultContent: '',
orderable: false,
searchable: false,
@@ -277,52 +281,60 @@
`;
}
},
- { data: 'session_id', title: 'Session', defaultContent: 'N/A' },
+ { data: 'session_id', title: 'Session', name: 'session_id', defaultContent: 'N/A', visible: false },
{
data: 'created_at',
title: 'Created',
+ ordering: true,
+ name: 'created_at',
defaultContent: 'N/A',
+ visible: true,
render: (data) => {
if (!data) return 'N/A';
return luxon.DateTime.fromISO(data).toFormat('yyyy-MM-dd HH:mm:ss') + ' UTC';
}
},
- { data: 'cookie_id', title: 'Cookie ID', defaultContent: 'N/A' },
- { data: 'owner_name', title: 'Owner', defaultContent: 'N/A' },
- { data: 'pet_name', title: 'Pet Name', defaultContent: 'N/A' },
+ { data: 'cookie_id', title: 'Cookie ID', name: 'cookie_id', defaultContent: 'N/A', visible: false },
+ { data: 'owner_name', title: 'Owner', name: 'owner_name', defaultContent: 'N/A' },
+ { data: 'pet_name', title: 'Pet Name', name: 'pet_name', defaultContent: 'N/A' },
{
data: 'photo_path',
title: 'Photo',
+ name: 'photo_path',
defaultContent: '',
+ visible: true,
render: (data) => {
const imgPath = fixStoragePath(data) || "https://placehold.co/500x500/fbba0e/e11d48/jpg?text=No\nImage";
return `
`;
}
},
- { data: 'pet_type', title: 'Type', defaultContent: 'N/A' },
- { data: 'music_vibe', title: 'Vibe', defaultContent: 'N/A' },
- { data: 'retry_count', title: 'Retries', defaultContent: 'N/A' },
- { data: 'sent_to_LLM', title: 'Sent to LLM', defaultContent: 'N/A' },
- { data: 'LLM_task_id', title: 'Task ID', defaultContent: 'N/A' },
- { data: 'received_from_LLM', title: 'LLM Recv', defaultContent: 'N/A' },
+ { data: 'pet_type', name: 'pet_type', title: 'Type', defaultContent: 'N/A' },
+ { data: 'music_vibe', name: 'music_vibe', title: 'Vibe', defaultContent: 'N/A' },
+ { data: 'retry_count', name: 'retry_count', title: 'Retries', defaultContent: 'N/A', visible: false },
+ { data: 'sent_to_LLM', name: 'sent_to_LLM', title: 'Sent to LLM', defaultContent: 'N/A' },
+ { data: 'LLM_task_id', name: 'LLM_task_id', title: 'Task ID', defaultContent: 'N/A', visible: false },
+ { data: 'received_from_LLM', name: 'received_from_LLM', title: 'LLM Recv', defaultContent: 'N/A', visible: false },
{
data: 'LLM_response',
title: 'LLM Response',
+ name: 'LLM_response',
defaultContent: 'N/A',
visible: false,
render: (data) => data ? (data.substring(0, 30) + '...') : 'Pending'
},
- { data: 'LLM_full_response', defaultContent: 'N/A', visible: false },
- { data: 'generated_song_path', title: 'Song', defaultContent: '', render: d => d ? 'Yes' : 'No' },
- { data: 'LLM_status', title: 'LLM Status', defaultContent: 'N/A' },
- { data: 'lyrics', title: 'Lyrics', defaultContent: '', visible: false },
- { data: 'video_creation_start', title: 'Vid Start', defaultContent: '', visible: false },
- { data: 'video_creation_end', title: 'Vid End', defaultContent: '', visible: false },
- { data: 'generated_video_path', title: 'VideoGen', defaultContent: '', render: d => d ? 'Yes' : 'No' },
+ { data: 'LLM_full_response', name: 'LLM_full_response', defaultContent: 'N/A', visible: false },
+ { data: 'generated_song_path', name: 'generated_song_path', title: 'Song', defaultContent: '', render: d => d ? 'Yes' : 'No' },
+ { data: 'LLM_status', name: 'LLM_status', title: 'LLM Status', defaultContent: 'N/A', visible: true },
+ { data: 'lyrics', name: 'lyrics', title: 'Lyrics', defaultContent: '', visible: false },
+ { data: 'video_creation_start', name: 'video_creation_start', title: 'Vid Start', defaultContent: '', visible: false },
+ { data: 'video_creation_end', name: 'video_creation_end', title: 'Vid End', defaultContent: '', visible: false },
+ { data: 'generated_video_path', name: 'generated_video_path', title: 'VideoGen', defaultContent: '', render: d => d ? 'Yes' : 'No', visible: false },
{
data: 'entry_status',
title: 'Status',
+ name: 'entry_status',
defaultContent: '',
+ visible: true ,
render: (data) => {
return `${data}`;
}