Files
ragflow/internal/handler/stats.go
T
Jin Hai b73f030931 CLI: add show model stats (#21376)
```
SHOW MODEL STATS;
SHOW MODEL STATS DAYS 7; 
SHOW MODEL STATS FROM '2024-01-01' TO '2024-01-31';

SHOW MODEL STATS DAYS 7 'openai';                        -- provider
SHOW MODEL STATS DAYS 7 'openai' 'prod';                 -- provider + instance
SHOW MODEL STATS DAYS 7 'openai' 'prod' 'gpt-4o';        -- provider + instance + model

SHOW MODEL STATS DAYS 7 BY DATE;
SHOW MODEL STATS DAYS 7 BY MODEL;
SHOW MODEL STATS DAYS 7 BY INSTANCE;
SHOW MODEL STATS DAYS 7 BY PROVIDER;

SHOW MODEL STATS DAYS 30 'openai' BY DATE;
SHOW MODEL STATS DAYS 30 'openai' 'prod' BY MODEL;
SHOW MODEL STATS DAYS 30 'openai' 'prod' 'gpt-4o' BY DATE;
SHOW MODEL STATS FROM '2024-01-01' TO '2024-01-31' 'azure' BY INSTANCE;
SHOW MODEL STATS FROM '2024-01-01' TO '2024-01-31' BY PROVIDER;
```

---------

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-10-23 13:29:40 +08:00

75 lines
2.0 KiB
Go

//
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package handler
import (
"errors"
"time"
"ragflow/internal/common"
"ragflow/internal/service"
"github.com/gin-gonic/gin"
)
type StatsHandler struct {
statsService *service.StatsService
}
// NewStatsHandler create stats handler
func NewStatsHandler(statsService *service.StatsService) *StatsHandler {
return &StatsHandler{
statsService: statsService,
}
}
// GetChatStats returns API conversation statistics for the current user's tenant.
func (h *StatsHandler) GetChatStats(c *gin.Context) {
user, errorCode, errorMessage := GetUser(c)
if errorCode != common.CodeSuccess {
common.ErrorWithCode(c, errorCode, errorMessage)
return
}
now := time.Now()
fromDate := c.DefaultQuery("from_date", now.AddDate(0, 0, -7).Format("2006-01-02 00:00:00"))
toDate := c.DefaultQuery("to_date", now.Format("2006-01-02 15:04:05"))
if len(toDate) == 10 {
toDate += " 23:59:59"
}
var source *string
if _, ok := c.GetQuery("canvas_id"); ok {
agentSource := "agent"
source = &agentSource
}
ctx := c.Request.Context()
// Get stats
stats, err := h.statsService.GetChatStats(ctx, user.ID, fromDate, toDate, source)
if err != nil {
code := common.CodeExceptionError
if errors.Is(err, service.ErrTenantNotFound) {
code = common.CodeDataError
}
common.ErrorWithCode(c, code, err.Error())
return
}
common.SuccessWithData(c, stats, "success")
}