| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package storage
- import (
- "ohurlshortener/core"
- "ohurlshortener/utils"
- )
- // GetUrlStats 获取短链接的访问量统计信息
- func GetUrlStats(url string) (core.ShortUrlStats, error) {
- found := core.ShortUrlStats{}
- query := `select * from public.stats_ip_sum WHERE short_url = $1`
- err := DbGet(query, &found, url)
- return found, err
- }
- // GetUrlCount 获取短链接总数
- func GetUrlCount() (int, error) {
- var (
- result int
- query = `SELECT count(l.id) FROM public.short_urls l`
- )
- // query := `SELECT n_live_tup AS estimate_rows FROM pg_stat_all_tables WHERE relname = 'short_urls'`
- return result, DbGet(query, &result)
- }
- // GetSumOfUrlStats 获取所有短链接的访问量统计信息
- func GetSumOfUrlStats() (core.ShortUrlStats, error) {
- query := `SELECT * FROM public.stats_sum`
- result := core.ShortUrlStats{}
- data := []core.StatsSum{}
- err := DbSelect(query, &data)
- if err != nil {
- return result, err
- }
- for _, v := range data {
- switch v.Key {
- case "today_count":
- result.TodayCount = v.Value
- case "yesterday_count":
- result.YesterdayCount = v.Value
- case "last_7_days_count":
- result.Last7DaysCount = v.Value
- case "monthly_count":
- result.MonthlyCount = v.Value
- case "d_today_count":
- result.DistinctTodayCount = v.Value
- case "d_yesterday_count":
- result.DistinctYesterdayCount = v.Value
- case "d_last_7_days_count":
- result.DistinctLast7DaysCount = v.Value
- case "d_monthly_count":
- result.DistinctMonthlyCount = v.Value
- }
- }
- return result, nil
- }
- // GetTop25 获取访问量前 25 的短链接
- func GetTop25() ([]core.Top25Url, error) {
- query := `SELECT u.*,s.today_count AS today_count,s.d_today_count AS d_today_count FROM public.short_urls u , public.stats_top25 s WHERE u.short_url = s.short_url`
- found := []core.Top25Url{}
- return found, DbSelect(query, &found)
- }
- // FindPagedUrlIpCountStats 获取单个短链接的 IP 访问量统计信息
- func FindPagedUrlIpCountStats(url string, page int, size int) ([]core.UrlIpCountStats, error) {
- found := []core.UrlIpCountStats{}
- offset := (page - 1) * size
- query := `SELECT s.*,u.id,u.dest_url,u.created_at,u.is_valid,u.memo FROM public.stats_ip_sum s , public.short_urls u WHERE u.short_url = s.short_url ORDER BY u.created_at DESC LIMIT $1 OFFSET $2`
- if !utils.EmptyString(url) {
- query := `SELECT s.*,u.id,u.dest_url,u.created_at,u.is_valid,u.memo
- FROM public.stats_ip_sum s , public.short_urls u WHERE u.short_url = s.short_url AND u.short_url = $1 ORDER BY u.created_at DESC LIMIT $2 OFFSET $3`
- var foundUrl core.UrlIpCountStats
- err := DbGet(query, &foundUrl, url, size, offset)
- if !foundUrl.IsEmpty() {
- found = append(found, foundUrl)
- }
- return found, err
- }
- return found, DbSelect(query, &found, size, offset)
- }
- // CallProcedureStatsIPSum
- // Call scheduled procedures to calculate stats result.
- //
- // Suggested time interval to call this procedure : 30 ~ 60 minutes
- func CallProcedureStatsIPSum() error {
- query := `SELECT 1 AS r FROM p_stats_ip_sum()`
- var r int
- return DbGet(query, &r)
- }
- // CallProcedureStatsTop25
- // Call scheduled procedures to calculate stats result.
- //
- // Suggested time interval to call this procedure 5 ~ 10 minutes
- func CallProcedureStatsTop25() error {
- query := `SELECT 2 AS r FROM p_stats_top25()`
- var r int
- return DbGet(query, &r)
- }
- // CallProcedureStatsSum
- // Call scheduled procedures to calculate stats result.
- //
- // Suggested time interval to call this procedure : 5 ~ 10 minutes
- func CallProcedureStatsSum() error {
- query := `SELECT 3 AS r FROM p_stats_sum()`
- var r int
- return DbGet(query, &r)
- }
|