@@ -77,11 +77,11 @@ func normalizeQuery(query string) string {
77
77
return query
78
78
}
79
79
80
- type pair struct {
80
+ type queryCount struct {
81
81
q string
82
82
c int64
83
83
}
84
- type pairList []pair
84
+ type pairList []queryCount
85
85
86
86
func (pl pairList ) Len () int {
87
87
return len (pl )
@@ -101,9 +101,9 @@ type Summarizer interface {
101
101
}
102
102
103
103
func showSummary (w io.Writer , sum map [string ]int64 , n int ) {
104
- counts := make ([]pair , 0 , len (sum ))
104
+ counts := make ([]queryCount , 0 , len (sum ))
105
105
for q , c := range sum {
106
- counts = append (counts , pair {q , c })
106
+ counts = append (counts , queryCount {q , c })
107
107
}
108
108
sort .Sort (pairList (counts ))
109
109
@@ -133,25 +133,34 @@ func (s *summarizer) Show(out io.Writer, num int) {
133
133
}
134
134
135
135
type recentSummarizer struct {
136
- last int
137
- queries [][]string
136
+ last int
137
+ counts [][]queryCount
138
138
}
139
139
140
140
func (s * recentSummarizer ) Update (queries []string ) {
141
- if len (s .queries ) >= s .last {
142
- s .queries = s .queries [1 :]
141
+ if len (s .counts ) >= s .last {
142
+ s .counts = s .counts [1 :]
143
143
}
144
- s .queries = append (s .queries , queries )
144
+ sort .Strings (queries )
145
+ qc := make ([]queryCount , 0 , 16 )
146
+ for _ , q := range queries {
147
+ if len (qc ) > 0 && qc [len (qc )- 1 ].q == q {
148
+ qc [len (qc )- 1 ].c ++
149
+ } else {
150
+ qc = append (qc , queryCount {q : q , c : 1 })
151
+ }
152
+ }
153
+ s .counts = append (s .counts , qc )
145
154
}
146
155
147
156
func (s * recentSummarizer ) Show (out io.Writer , num int ) {
148
- counts := make (map [string ]int64 )
149
- for _ , qs := range s .queries {
150
- for _ , q := range qs {
151
- counts [ q ] ++
157
+ sum := make (map [string ]int64 )
158
+ for _ , qcs := range s .counts {
159
+ for _ , qc := range qcs {
160
+ sum [ qc . q ] += qc . c
152
161
}
153
162
}
154
- showSummary (out , counts , num )
163
+ showSummary (out , sum , num )
155
164
}
156
165
157
166
func NewSummarizer (last int ) Summarizer {
0 commit comments