57 lines
1.9 KiB
Go
57 lines
1.9 KiB
Go
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})
|
|
}
|