openreplay/backend/pkg/analytics/query/timeseries.go
2025-05-23 17:02:45 +02:00

42 lines
1 KiB
Go

package query
import "fmt"
type TimeSeriesQueryBuilder struct{}
func (t TimeSeriesQueryBuilder) Build(p MetricPayload) string {
switch p.MetricOf {
case "sessionCount":
return t.buildSessionCountQuery(p)
case "userCount":
return t.buildUserCountQuery(p)
default:
return ""
}
}
func (TimeSeriesQueryBuilder) buildSessionCountQuery(p MetricPayload) string {
subquery := buildEventSubquery(p)
return fmt.Sprintf(`SELECT toUnixTimestamp(
toStartOfInterval(processed_sessions.datetime, INTERVAL 115199 second)
) * 1000 AS timestamp,
COUNT(processed_sessions.session_id) AS count
FROM (
%s
) AS processed_sessions
GROUP BY timestamp
ORDER BY timestamp;`, subquery)
}
func (TimeSeriesQueryBuilder) buildUserCountQuery(p MetricPayload) string {
subquery := buildEventSubquery(p)
return fmt.Sprintf(`SELECT toUnixTimestamp(
toStartOfInterval(processed_sessions.datetime, INTERVAL 115199 second)
) * 1000 AS timestamp,
COUNT(DISTINCT processed_sessions.user_id) AS count
FROM (
%s
) AS processed_sessions
GROUP BY timestamp
ORDER BY timestamp;`, subquery)
}