5
5
package models
6
6
7
7
import (
8
+ "fmt"
8
9
"time"
9
10
10
11
"github.com/go-xorm/xorm"
@@ -25,6 +26,30 @@ type ActivityStats struct {
25
26
PublishedReleaseAuthorCount int64
26
27
}
27
28
29
+ // GetActivityStats return stats for repository at given time range
30
+ func GetActivityStats (repoID int64 , timeFrom time.Time , releases , issues , prs bool ) (* ActivityStats , error ) {
31
+ stats := & ActivityStats {}
32
+ if releases {
33
+ if err := stats .FillReleases (repoID , timeFrom ); err != nil {
34
+ return nil , fmt .Errorf ("FillReleases: %v" , err )
35
+ }
36
+ }
37
+ if prs {
38
+ if err := stats .FillPullRequests (repoID , timeFrom ); err != nil {
39
+ return nil , fmt .Errorf ("FillPullRequests: %v" , err )
40
+ }
41
+ }
42
+ if issues {
43
+ if err := stats .FillIssues (repoID , timeFrom ); err != nil {
44
+ return nil , fmt .Errorf ("FillIssues: %v" , err )
45
+ }
46
+ }
47
+ if err := stats .FillUnresolvedIssues (repoID , timeFrom , issues , prs ); err != nil {
48
+ return nil , fmt .Errorf ("FillUnresolvedIssues: %v" , err )
49
+ }
50
+ return stats , nil
51
+ }
52
+
28
53
// ActivePRCount returns total active pull request count
29
54
func (stats * ActivityStats ) ActivePRCount () int {
30
55
return stats .OpenedPRCount () + stats .MergedPRCount ()
@@ -85,13 +110,13 @@ func (stats *ActivityStats) PublishedReleaseCount() int {
85
110
return len (stats .PublishedReleases )
86
111
}
87
112
88
- // FillPullRequestsForActivity returns pull request information for activity page
89
- func FillPullRequestsForActivity (stats * ActivityStats , baseRepoID int64 , fromTime time.Time ) error {
113
+ // FillPullRequests returns pull request information for activity page
114
+ func (stats * ActivityStats ) FillPullRequests ( repoID int64 , fromTime time.Time ) error {
90
115
var err error
91
116
var count int64
92
117
93
118
// Merged pull requests
94
- sess := pullRequestsForActivityStatement (baseRepoID , fromTime , true )
119
+ sess := pullRequestsForActivityStatement (repoID , fromTime , true )
95
120
sess .OrderBy ("pull_request.merged_unix DESC" )
96
121
stats .MergedPRs = make (PullRequestList , 0 )
97
122
if err = sess .Find (& stats .MergedPRs ); err != nil {
@@ -102,14 +127,14 @@ func FillPullRequestsForActivity(stats *ActivityStats, baseRepoID int64, fromTim
102
127
}
103
128
104
129
// Merged pull request authors
105
- sess = pullRequestsForActivityStatement (baseRepoID , fromTime , true )
130
+ sess = pullRequestsForActivityStatement (repoID , fromTime , true )
106
131
if _ , err = sess .Select ("count(distinct issue.poster_id) as `count`" ).Table ("pull_request" ).Get (& count ); err != nil {
107
132
return err
108
133
}
109
134
stats .MergedPRAuthorCount = count
110
135
111
136
// Opened pull requests
112
- sess = pullRequestsForActivityStatement (baseRepoID , fromTime , false )
137
+ sess = pullRequestsForActivityStatement (repoID , fromTime , false )
113
138
sess .OrderBy ("issue.created_unix ASC" )
114
139
stats .OpenedPRs = make (PullRequestList , 0 )
115
140
if err = sess .Find (& stats .OpenedPRs ); err != nil {
@@ -120,7 +145,7 @@ func FillPullRequestsForActivity(stats *ActivityStats, baseRepoID int64, fromTim
120
145
}
121
146
122
147
// Opened pull request authors
123
- sess = pullRequestsForActivityStatement (baseRepoID , fromTime , false )
148
+ sess = pullRequestsForActivityStatement (repoID , fromTime , false )
124
149
if _ , err = sess .Select ("count(distinct issue.poster_id) as `count`" ).Table ("pull_request" ).Get (& count ); err != nil {
125
150
return err
126
151
}
@@ -129,8 +154,8 @@ func FillPullRequestsForActivity(stats *ActivityStats, baseRepoID int64, fromTim
129
154
return nil
130
155
}
131
156
132
- func pullRequestsForActivityStatement (baseRepoID int64 , fromTime time.Time , merged bool ) * xorm.Session {
133
- sess := x .Where ("pull_request.base_repo_id=?" , baseRepoID ).
157
+ func pullRequestsForActivityStatement (repoID int64 , fromTime time.Time , merged bool ) * xorm.Session {
158
+ sess := x .Where ("pull_request.base_repo_id=?" , repoID ).
134
159
Join ("INNER" , "issue" , "pull_request.issue_id = issue.id" )
135
160
136
161
if merged {
@@ -144,36 +169,36 @@ func pullRequestsForActivityStatement(baseRepoID int64, fromTime time.Time, merg
144
169
return sess
145
170
}
146
171
147
- // FillIssuesForActivity returns issue information for activity page
148
- func FillIssuesForActivity (stats * ActivityStats , baseRepoID int64 , fromTime time.Time ) error {
172
+ // FillIssues returns issue information for activity page
173
+ func (stats * ActivityStats ) FillIssues ( repoID int64 , fromTime time.Time ) error {
149
174
var err error
150
175
var count int64
151
176
152
177
// Closed issues
153
- sess := issuesForActivityStatement (baseRepoID , fromTime , true , false )
178
+ sess := issuesForActivityStatement (repoID , fromTime , true , false )
154
179
sess .OrderBy ("issue.updated_unix DESC" )
155
180
stats .ClosedIssues = make (IssueList , 0 )
156
181
if err = sess .Find (& stats .ClosedIssues ); err != nil {
157
182
return err
158
183
}
159
184
160
185
// Closed issue authors
161
- sess = issuesForActivityStatement (baseRepoID , fromTime , true , false )
186
+ sess = issuesForActivityStatement (repoID , fromTime , true , false )
162
187
if _ , err = sess .Select ("count(distinct issue.poster_id) as `count`" ).Table ("issue" ).Get (& count ); err != nil {
163
188
return err
164
189
}
165
190
stats .ClosedIssueAuthorCount = count
166
191
167
192
// New issues
168
- sess = issuesForActivityStatement (baseRepoID , fromTime , false , false )
193
+ sess = issuesForActivityStatement (repoID , fromTime , false , false )
169
194
sess .OrderBy ("issue.created_unix ASC" )
170
195
stats .OpenedIssues = make (IssueList , 0 )
171
196
if err = sess .Find (& stats .OpenedIssues ); err != nil {
172
197
return err
173
198
}
174
199
175
200
// Opened issue authors
176
- sess = issuesForActivityStatement (baseRepoID , fromTime , false , false )
201
+ sess = issuesForActivityStatement (repoID , fromTime , false , false )
177
202
if _ , err = sess .Select ("count(distinct issue.poster_id) as `count`" ).Table ("issue" ).Get (& count ); err != nil {
178
203
return err
179
204
}
@@ -182,13 +207,13 @@ func FillIssuesForActivity(stats *ActivityStats, baseRepoID int64, fromTime time
182
207
return nil
183
208
}
184
209
185
- // FillUnresolvedIssuesForActivity returns unresolved issue and pull request information for activity page
186
- func FillUnresolvedIssuesForActivity (stats * ActivityStats , baseRepoID int64 , fromTime time.Time , issues , prs bool ) error {
210
+ // FillUnresolvedIssues returns unresolved issue and pull request information for activity page
211
+ func (stats * ActivityStats ) FillUnresolvedIssues ( repoID int64 , fromTime time.Time , issues , prs bool ) error {
187
212
// Check if we need to select anything
188
213
if ! issues && ! prs {
189
214
return nil
190
215
}
191
- sess := issuesForActivityStatement (baseRepoID , fromTime , false , true )
216
+ sess := issuesForActivityStatement (repoID , fromTime , false , true )
192
217
if ! issues || ! prs {
193
218
sess .And ("issue.is_pull = ?" , prs )
194
219
}
@@ -197,8 +222,8 @@ func FillUnresolvedIssuesForActivity(stats *ActivityStats, baseRepoID int64, fro
197
222
return sess .Find (& stats .UnresolvedIssues )
198
223
}
199
224
200
- func issuesForActivityStatement (baseRepoID int64 , fromTime time.Time , closed , unresolved bool ) * xorm.Session {
201
- sess := x .Where ("issue.repo_id = ?" , baseRepoID ).
225
+ func issuesForActivityStatement (repoID int64 , fromTime time.Time , closed , unresolved bool ) * xorm.Session {
226
+ sess := x .Where ("issue.repo_id = ?" , repoID ).
202
227
And ("issue.is_closed = ?" , closed )
203
228
204
229
if ! unresolved {
@@ -212,21 +237,21 @@ func issuesForActivityStatement(baseRepoID int64, fromTime time.Time, closed, un
212
237
return sess
213
238
}
214
239
215
- // FillReleasesForActivity returns release information for activity page
216
- func FillReleasesForActivity (stats * ActivityStats , baseRepoID int64 , fromTime time.Time ) error {
240
+ // FillReleases returns release information for activity page
241
+ func (stats * ActivityStats ) FillReleases ( repoID int64 , fromTime time.Time ) error {
217
242
var err error
218
243
var count int64
219
244
220
245
// Published releases list
221
- sess := releasesForActivityStatement (baseRepoID , fromTime )
246
+ sess := releasesForActivityStatement (repoID , fromTime )
222
247
sess .OrderBy ("release.created_unix DESC" )
223
248
stats .PublishedReleases = make ([]* Release , 0 )
224
249
if err = sess .Find (& stats .PublishedReleases ); err != nil {
225
250
return err
226
251
}
227
252
228
253
// Published releases authors
229
- sess = releasesForActivityStatement (baseRepoID , fromTime )
254
+ sess = releasesForActivityStatement (repoID , fromTime )
230
255
if _ , err = sess .Select ("count(distinct release.publisher_id) as `count`" ).Table ("release" ).Get (& count ); err != nil {
231
256
return err
232
257
}
@@ -235,8 +260,8 @@ func FillReleasesForActivity(stats *ActivityStats, baseRepoID int64, fromTime ti
235
260
return nil
236
261
}
237
262
238
- func releasesForActivityStatement (baseRepoID int64 , fromTime time.Time ) * xorm.Session {
239
- return x .Where ("release.repo_id = ?" , baseRepoID ).
263
+ func releasesForActivityStatement (repoID int64 , fromTime time.Time ) * xorm.Session {
264
+ return x .Where ("release.repo_id = ?" , repoID ).
240
265
And ("release.is_draft = ?" , false ).
241
266
And ("release.created_unix >= ?" , fromTime .Unix ())
242
267
}
0 commit comments