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