@ -34,6 +34,7 @@ type ActivityStats struct {
OpenedPRAuthorCount int64
OpenedPRAuthorCount int64
MergedPRs issues_model . PullRequestList
MergedPRs issues_model . PullRequestList
MergedPRAuthorCount int64
MergedPRAuthorCount int64
ActiveIssues issues_model . IssueList
OpenedIssues issues_model . IssueList
OpenedIssues issues_model . IssueList
OpenedIssueAuthorCount int64
OpenedIssueAuthorCount int64
ClosedIssues issues_model . IssueList
ClosedIssues issues_model . IssueList
@ -172,7 +173,7 @@ func (stats *ActivityStats) MergedPRPerc() int {
// ActiveIssueCount returns total active issue count
// ActiveIssueCount returns total active issue count
func ( stats * ActivityStats ) ActiveIssueCount ( ) int {
func ( stats * ActivityStats ) ActiveIssueCount ( ) int {
return stats . OpenedIssueCount ( ) + stats . ClosedIssueCount ( )
return len ( stats . ActiveIssues )
}
}
// OpenedIssueCount returns open issue count
// OpenedIssueCount returns open issue count
@ -285,13 +286,21 @@ func (stats *ActivityStats) FillIssues(ctx context.Context, repoID int64, fromTi
stats . ClosedIssueAuthorCount = count
stats . ClosedIssueAuthorCount = count
// New issues
// New issues
sess = issuesForActivityStatement ( ctx , repoID , fromTime , false , fals e )
sess = newlyCreatedIssues ( ctx , repoID , fromTime )
sess . OrderBy ( "issue.created_unix ASC" )
sess . OrderBy ( "issue.created_unix ASC" )
stats . OpenedIssues = make ( issues_model . IssueList , 0 )
stats . OpenedIssues = make ( issues_model . IssueList , 0 )
if err = sess . Find ( & stats . OpenedIssues ) ; err != nil {
if err = sess . Find ( & stats . OpenedIssues ) ; err != nil {
return err
return err
}
}
// Active issues
sess = activeIssues ( ctx , repoID , fromTime )
sess . OrderBy ( "issue.created_unix ASC" )
stats . ActiveIssues = make ( issues_model . IssueList , 0 )
if err = sess . Find ( & stats . ActiveIssues ) ; err != nil {
return err
}
// Opened issue authors
// Opened issue authors
sess = issuesForActivityStatement ( ctx , repoID , fromTime , false , false )
sess = issuesForActivityStatement ( ctx , repoID , fromTime , false , false )
if _ , err = sess . Select ( "count(distinct issue.poster_id) as `count`" ) . Table ( "issue" ) . Get ( & count ) ; err != nil {
if _ , err = sess . Select ( "count(distinct issue.poster_id) as `count`" ) . Table ( "issue" ) . Get ( & count ) ; err != nil {
@ -317,6 +326,23 @@ func (stats *ActivityStats) FillUnresolvedIssues(ctx context.Context, repoID int
return sess . Find ( & stats . UnresolvedIssues )
return sess . Find ( & stats . UnresolvedIssues )
}
}
func newlyCreatedIssues ( ctx context . Context , repoID int64 , fromTime time . Time ) * xorm . Session {
sess := db . GetEngine ( ctx ) . Where ( "issue.repo_id = ?" , repoID ) .
And ( "issue.is_pull = ?" , false ) . // Retain the is_pull check to exclude pull requests
And ( "issue.created_unix >= ?" , fromTime . Unix ( ) ) // Include all issues created after fromTime
return sess
}
func activeIssues ( ctx context . Context , repoID int64 , fromTime time . Time ) * xorm . Session {
sess := db . GetEngine ( ctx ) . Where ( "issue.repo_id = ?" , repoID ) .
And ( "issue.is_pull = ?" , false ) .
And ( "issue.created_unix >= ?" , fromTime . Unix ( ) ) .
Or ( "issue.closed_unix >= ?" , fromTime . Unix ( ) )
return sess
}
func issuesForActivityStatement ( ctx context . Context , repoID int64 , fromTime time . Time , closed , unresolved bool ) * xorm . Session {
func issuesForActivityStatement ( ctx context . Context , repoID int64 , fromTime time . Time , closed , unresolved bool ) * xorm . Session {
sess := db . GetEngine ( ctx ) . Where ( "issue.repo_id = ?" , repoID ) .
sess := db . GetEngine ( ctx ) . Where ( "issue.repo_id = ?" , repoID ) .
And ( "issue.is_closed = ?" , closed )
And ( "issue.is_closed = ?" , closed )