update
This commit is contained in:
56
internal/dashboard/scriptkit.go
Normal file
56
internal/dashboard/scriptkit.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package dashboard
|
||||
|
||||
import (
|
||||
"git.iwork-ai.com/xdc/iqudo-top1/internal/auth"
|
||||
"git.iwork-ai.com/xdc/iqudo-top1/internal/response"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type dimensionStat struct {
|
||||
ValueKey string `json:"value_key"`
|
||||
Name string `json:"name"`
|
||||
DimKey string `json:"dim_key"`
|
||||
Runs int64 `json:"runs"`
|
||||
AverageWeight float64 `json:"average_weight"`
|
||||
}
|
||||
|
||||
type scriptFeedbackStat struct {
|
||||
ScriptKey string `json:"script_key"`
|
||||
Name string `json:"name"`
|
||||
FeedbackType string `json:"feedback_type"`
|
||||
Count int64 `json:"count"`
|
||||
}
|
||||
|
||||
// Scriptkit returns script package analytics: average dimension weights per
|
||||
// value and script feedback counts.
|
||||
func (h *Handler) Scriptkit(c *gin.Context) {
|
||||
principal, _ := auth.PrincipalFromContext(c)
|
||||
dimensions := make([]dimensionStat, 0)
|
||||
err := h.db.Raw(`
|
||||
SELECT dv.value_key, dv.name, d.dim_key, COUNT(DISTINCT rd.run_id) AS runs, AVG(rd.weight) AS average_weight
|
||||
FROM run_dimensions rd
|
||||
JOIN dimension_values dv ON dv.dimension_id = rd.dimension_id AND dv.value_key = rd.value_key AND dv.tenant_id = rd.tenant_id
|
||||
JOIN package_dimensions d ON d.id = rd.dimension_id AND d.tenant_id = rd.tenant_id
|
||||
WHERE rd.tenant_id = ? AND rd.weight > 0
|
||||
GROUP BY dv.value_key, dv.name, d.dim_key
|
||||
ORDER BY runs DESC, average_weight DESC
|
||||
LIMIT 100`, principal.TenantID).Scan(&dimensions).Error
|
||||
if err != nil {
|
||||
queryFailed(c)
|
||||
return
|
||||
}
|
||||
feedback := make([]scriptFeedbackStat, 0)
|
||||
err = h.db.Raw(`
|
||||
SELECT ss.script_key, ss.name, sf.feedback_type, COUNT(*) AS count
|
||||
FROM script_feedbacks sf
|
||||
JOIN stage_scripts ss ON ss.id = sf.script_id
|
||||
WHERE sf.tenant_id = ?
|
||||
GROUP BY ss.script_key, ss.name, sf.feedback_type
|
||||
ORDER BY count DESC
|
||||
LIMIT 100`, principal.TenantID).Scan(&feedback).Error
|
||||
if err != nil {
|
||||
queryFailed(c)
|
||||
return
|
||||
}
|
||||
response.OK(c, gin.H{"dimensions": dimensions, "feedback": feedback})
|
||||
}
|
||||
Reference in New Issue
Block a user