Optimize health monitor database reads

This commit is contained in:
fawney19
2026-05-28 14:24:37 +08:00
parent 18566b5837
commit bb2fc2ec00
2 changed files with 32 additions and 18 deletions
@@ -775,25 +775,26 @@ async fn build_provider_health_payload(
.await
.ok()
.unwrap_or_default();
let mut models = Vec::new();
for row in model_breakdown
let selected_model_rows = model_breakdown
.iter()
.filter(|row| !row.group_key.trim().is_empty())
.take(per_provider_model_limit)
{
let events = state
.list_usage_audits(&UsageAuditListQuery {
created_from_unix_secs: Some(since_unix_secs),
created_until_unix_secs: Some(now_unix_secs),
provider_name: Some(provider.name.clone()),
model: Some(row.group_key.clone()),
limit: Some(per_model_event_limit),
newest_first: true,
..UsageAuditListQuery::default()
})
.await
.ok()
.unwrap_or_default();
.collect::<Vec<_>>();
let mut events_by_model = selected_model_rows
.iter()
.map(|row| (row.group_key.clone(), Vec::new()))
.collect::<BTreeMap<_, _>>();
for event in &provider_events {
if let Some(events) = events_by_model.get_mut(&event.model) {
if events.len() < per_model_event_limit {
events.push(event.clone());
}
}
}
let mut models = Vec::new();
for row in selected_model_rows {
let events = events_by_model.remove(&row.group_key).unwrap_or_default();
models.push(model_health_payload_from_row(
row,
&events,
+15 -2
View File
@@ -24,6 +24,7 @@
class="mt-4"
>
<HealthMonitorCard
v-if="visitedTabs.endpoint"
title="端点健康监控"
:is-admin="isAdminPage"
:show-provider-info="isAdminPage"
@@ -35,6 +36,7 @@
class="mt-4"
>
<ModelHealthMonitorCard
v-if="visitedTabs.model"
title="模型健康监控"
:is-admin="isAdminPage"
:show-provider-info="isAdminPage"
@@ -46,14 +48,17 @@
value="provider"
class="mt-4"
>
<ProviderHealthMonitorCard title="提供商健康监控" />
<ProviderHealthMonitorCard
v-if="visitedTabs.provider"
title="提供商健康监控"
/>
</TabsContent>
</Tabs>
</div>
</template>
<script setup lang="ts">
import { computed, ref } from 'vue'
import { computed, ref, watch } from 'vue'
import { useRoute } from 'vue-router'
import Tabs from '@/components/ui/tabs.vue'
import TabsContent from '@/components/ui/tabs-content.vue'
@@ -66,4 +71,12 @@ import ProviderHealthMonitorCard from '@/features/providers/components/ProviderH
const route = useRoute()
const isAdminPage = computed(() => route.path.startsWith('/admin'))
const activeTab = ref('endpoint')
const visitedTabs = ref<Record<string, boolean>>({ endpoint: true })
watch(activeTab, value => {
visitedTabs.value = {
...visitedTabs.value,
[value]: true
}
})
</script>