Skip to content

Commit aec197d

Browse files
authored
fix: Dashboard stats error (#306)
* fix: Subgroup name display issue * fix: Dashboard stats error
1 parent a21d5cb commit aec197d

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed

internal/handler/dashboard_handler.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,13 @@ func (s *Server) Chart(c *gin.Context) {
123123
startHour := endHour.Add(-23 * time.Hour)
124124

125125
var hourlyStats []models.GroupHourlyStat
126-
query := s.DB.Where("time >= ? AND time < ?", startHour, endHour.Add(time.Hour))
126+
query := s.DB.Table("group_hourly_stats").
127+
Where("time >= ? AND time < ?", startHour, endHour.Add(time.Hour))
127128
if groupID != "" {
128129
query = query.Where("group_id = ?", groupID)
130+
} else {
131+
query = query.Where("group_id NOT IN (?)",
132+
s.DB.Table("groups").Select("id").Where("group_type = ?", "aggregate"))
129133
}
130134
if err := query.Order("time asc").Find(&hourlyStats).Error; err != nil {
131135
response.ErrorI18nFromAPIError(c, app_errors.ErrDatabase, "database.chart_data_failed")
@@ -184,9 +188,11 @@ type hourlyStatResult struct {
184188

185189
func (s *Server) getHourlyStats(startTime, endTime time.Time) (hourlyStatResult, error) {
186190
var result hourlyStatResult
187-
err := s.DB.Model(&models.GroupHourlyStat{}).
188-
Select("sum(success_count) + sum(failure_count) as total_requests, sum(failure_count) as total_failures").
191+
err := s.DB.Table("group_hourly_stats").
189192
Where("time >= ? AND time < ?", startTime, endTime).
193+
Where("group_id NOT IN (?)",
194+
s.DB.Table("groups").Select("id").Where("group_type = ?", "aggregate")).
195+
Select("COALESCE(SUM(success_count), 0) + COALESCE(SUM(failure_count), 0) as total_requests, COALESCE(SUM(failure_count), 0) as total_failures").
190196
Scan(&result).Error
191197
return result, err
192198
}

web/src/components/keys/SubGroupTable.vue

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script setup lang="ts">
22
import { keysApi } from "@/api/keys";
33
import type { Group, SubGroupInfo } from "@/types/models";
4+
import { getGroupDisplayName } from "@/utils/display";
45
import { Add, CreateOutline, InformationCircleOutline, Trash } from "@vicons/ionicons5";
56
import { NButton, NButtonGroup, NEmpty, NIcon, NSpin, useDialog } from "naive-ui";
67
import { computed, ref } from "vue";
@@ -62,7 +63,7 @@ async function deleteSubGroup(subGroup: SubGroupInfo) {
6263
6364
const d = dialog.warning({
6465
title: t("subGroups.removeSubGroup"),
65-
content: t("subGroups.confirmRemoveSubGroup", { name: subGroup.display_name || subGroup.name }),
66+
content: t("subGroups.confirmRemoveSubGroup", { name: getGroupDisplayName(subGroup) }),
6667
positiveText: t("common.confirm"),
6768
negativeText: t("common.cancel"),
6869
onPositiveClick: async () => {
@@ -81,16 +82,12 @@ async function deleteSubGroup(subGroup: SubGroupInfo) {
8182
});
8283
}
8384
84-
// 统一的成功处理函数
85+
// Handle success after modal operations
8586
function handleSuccess() {
8687
emit("refresh");
8788
}
8889
89-
function formatDisplayName(subGroup: SubGroupInfo): string {
90-
return subGroup.display_name || subGroup.name;
91-
}
92-
93-
// 跳转到分组信息
90+
// Navigate to group info
9491
function goToGroupInfo(groupId: number) {
9592
emit("group-select", groupId);
9693
}
@@ -126,11 +123,11 @@ function goToGroupInfo(groupId: number) {
126123
class="key-card status-sub-group"
127124
:class="{ disabled: subGroup.weight === 0 }"
128125
>
129-
<!-- 主要信息行:显示名 + 分组名 -->
126+
<!-- Main info row: display name + group name -->
130127
<div class="key-main">
131128
<div class="key-section">
132129
<div class="sub-group-names">
133-
<span class="display-name">{{ formatDisplayName(subGroup) }}</span>
130+
<span class="display-name">{{ getGroupDisplayName(subGroup) }}</span>
134131
</div>
135132
<div class="quick-actions">
136133
<span class="group-name">#{{ subGroup.name }}</span>

web/src/utils/display.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Group } from "@/types/models";
1+
import type { Group, SubGroupInfo } from "@/types/models";
22

33
/**
44
* Formats a string from camelCase, snake_case, or kebab-case
@@ -30,11 +30,11 @@ export function formatDisplayName(name: string): string {
3030
}
3131

3232
/**
33-
* Gets the display name for a group, falling back to a formatted version of its name.
34-
* @param group The group object.
33+
* Gets the display name for a group or subgroup, falling back to a formatted version of its name.
34+
* @param group The group or subgroup object.
3535
* @returns The display name for the group.
3636
*/
37-
export function getGroupDisplayName(group: Group): string {
37+
export function getGroupDisplayName(group: Group | SubGroupInfo): string {
3838
return group.display_name || formatDisplayName(group.name);
3939
}
4040

0 commit comments

Comments
 (0)