LoadStats returns click stats for links.
()
| 154 | |
| 155 | // LoadStats returns click stats for links. |
| 156 | func (s *SQLiteDB) LoadStats() (ClickStats, error) { |
| 157 | allLinks, err := s.LoadAll() |
| 158 | if err != nil { |
| 159 | return nil, err |
| 160 | } |
| 161 | linkmap := make(map[string]string, len(allLinks)) // map ID => Short |
| 162 | for _, link := range allLinks { |
| 163 | linkmap[linkID(link.Short)] = link.Short |
| 164 | } |
| 165 | |
| 166 | s.mu.RLock() |
| 167 | defer s.mu.RUnlock() |
| 168 | |
| 169 | rows, err := s.db.Query("SELECT ID, sum(Clicks) FROM Stats GROUP BY ID") |
| 170 | if err != nil { |
| 171 | return nil, err |
| 172 | } |
| 173 | stats := make(map[string]int) |
| 174 | for rows.Next() { |
| 175 | var id string |
| 176 | var clicks int |
| 177 | err := rows.Scan(&id, &clicks) |
| 178 | if err != nil { |
| 179 | return nil, err |
| 180 | } |
| 181 | short := linkmap[id] |
| 182 | stats[short] = clicks |
| 183 | } |
| 184 | return stats, rows.Err() |
| 185 | } |
| 186 | |
| 187 | // SaveStats records click stats for links. The provided map includes |
| 188 | // incremental clicks that have occurred since the last time SaveStats |