diff --git a/app/jsx/app/menu.jsx b/app/jsx/app/menu.jsx index 3733551..50e89f1 100644 --- a/app/jsx/app/menu.jsx +++ b/app/jsx/app/menu.jsx @@ -17,7 +17,7 @@ var Menu = React.createClass({ return (
  • {team.name} diff --git a/db/stat.go b/db/stat.go index 8d1e37c..c7e3f39 100644 --- a/db/stat.go +++ b/db/stat.go @@ -17,194 +17,187 @@ type ( } ) -const orgTopQuery = ` -select - %s as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta -from contribs c -join members m on - c.author = m.user and - c.owner = m.org +const joinContribFT = ` +join team_members tm on + c.user_id = tm.user_id and + c.org_id = tm.org_id +join orgs o on + c.org_id = o.id join teams t on - m.team_id = t.id -where - c.owner = :org and - c.week >= :from and - c.week <= :to -group by item -order by commits desc` - -const orgActivityQuery = ` -select - %s as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta, - c.week as week -from contribs c -join members m on - c.author = m.user and - c.owner = m.org -join teams t on - m.team_id = t.id -where - c.owner = :org and - c.week >= :from and - c.week <= :to -group by item, week -order by week, commits desc` - -const teamTopQuery = ` -select - %s as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta -from contribs c -join members m on - c.author = m.user and - c.owner = m.org -join teams t on - m.team_id = t.id and - t.name = :team -where - c.owner = :org and - c.week >= :from and - c.week <= :to -group by item -order by commits desc` - -const teamActivityQuery = ` -select - %s as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta, - c.week as week -from contribs c -join members m on - c.author = m.user and - c.owner = m.org -join teams t on - m.team_id = t.id and - t.name = :team -where - c.owner = :org and - c.week >= :from and - c.week <= :to -group by item, week -order by week, commits desc` - -const userTopQuery = ` -select - c.repo as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta -from contribs c -where - c.owner = :org and - c.author = :user and - c.week >= :from and - c.week <= :to -group by item -order by commits desc` - -const userActivityQuery = ` -select - c.week as week, - c.repo as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta -from contribs c -where - c.owner = :org and - c.author = :user and - c.week >= :from and - c.week <= :to -group by item -order by week, commits desc` - -const repoTopQuery = ` -select - %s as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta -from contribs c -join members m on - c.author = m.user and - c.owner = m.org -join teams t on - m.team_id = t.id -where - c.owner = :org and - c.repo = :repo and - c.week >= :from and - c.week <= :to -group by item -order by commits desc` - -const repoActivityQuery = ` -select - c.week as week, - %s as item, - sum(c.commits) as commits, - sum(c.additions) - sum(c.deletions) as delta -from contribs c -join members m on - c.author = m.user and - c.owner = m.org -join teams t on - m.team_id = t.id -where - c.owner = :org and - c.repo = :repo and - c.week >= :from and - c.week <= :to -group by week, item -order by commits desc` + tm.team_id = t.id +join users u on + c.user_id = u.id +join repos r on + c.repo_id = r.id` func StatOrgTop(p map[string]interface{}) (res []StatItem) { defer measure("StatOrgTop", time.Now()) - mustSelectN(&res, fmt.Sprintf(orgTopQuery, p["item"]), p) + mustSelectN(&res, fmt.Sprintf(` + select + %s as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta + from contribs c + `+joinContribFT+` + where + o.login = :org and + c.week >= :from and + c.week <= :to + group by item + order by commits desc + `, p["item"]), p) return } func StatOrgActivity(p map[string]interface{}) (res []StatPoint) { defer measure("StatOrgActivity", time.Now()) - mustSelectN(&res, fmt.Sprintf(orgActivityQuery, p["item"]), p) + mustSelectN(&res, fmt.Sprintf(` + select + %s as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta, + c.week as week + from contribs c + `+joinContribFT+` + where + o.login = :org and + c.week >= :from and + c.week <= :to + group by item, week + order by week, commits desc + `, p["item"]), p) return } func StatTeamTop(p map[string]interface{}) (res []StatItem) { defer measure("StatTeamTop", time.Now()) - mustSelectN(&res, fmt.Sprintf(teamTopQuery, p["item"]), p) + mustSelectN(&res, fmt.Sprintf(` + select + %s as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta + from contribs c + `+joinContribFT+` + where + o.login = :org and + t.name = :team and + c.week >= :from and + c.week <= :to + group by item + order by commits desc + `, p["item"]), p) return } func StatTeamActivity(p map[string]interface{}) (res []StatPoint) { defer measure("StatTeamActivity", time.Now()) - mustSelectN(&res, fmt.Sprintf(teamActivityQuery, p["item"]), p) + mustSelectN(&res, fmt.Sprintf(` + select + %s as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta, + c.week as week + from contribs c + `+joinContribFT+` + where + o.login = :org and + t.name = :team and + c.week >= :from and + c.week <= :to + group by item, week + order by week, commits desc + `, p["item"]), p) return } func StatUserTop(p map[string]interface{}) (res []StatItem) { defer measure("StatUserTop", time.Now()) - mustSelectN(&res, userTopQuery, p) + mustSelectN(&res, ` + select + r.name as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta + from contribs c + join orgs o on + c.org_id = o.id + join users u on + c.user_id = u.id + join repos r on + c.repo_id = r.id + where + o.login = :org and + u.login = :user and + c.week >= :from and + c.week <= :to + group by item + order by commits desc + `, p) return } func StatUserActivity(p map[string]interface{}) (res []StatPoint) { defer measure("StatUserActivity", time.Now()) - mustSelectN(&res, userActivityQuery, p) + mustSelectN(&res, ` + select + c.week as week, + r.name as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta + from contribs c + join orgs o on + c.org_id = o.id + join users u on + c.user_id = u.id + join repos r on + c.repo_id = r.id + where + o.login = :org and + u.login = :user and + c.week >= :from and + c.week <= :to + group by item + order by week, commits desc + `, p) return } func StatRepoTop(p map[string]interface{}) (res []StatItem) { defer measure("StatRepoTop", time.Now()) - mustSelectN(&res, fmt.Sprintf(repoTopQuery, p["item"]), p) + mustSelectN(&res, fmt.Sprintf(` + select + %s as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta + from contribs c + `+joinContribFT+` + where + o.login = :org and + r.name = :repo and + c.week >= :from and + c.week <= :to + group by item + order by commits desc + `, p["item"]), p) return } func StatRepoActivity(p map[string]interface{}) (res []StatPoint) { defer measure("StatRepoActivity", time.Now()) - mustSelectN(&res, fmt.Sprintf(repoActivityQuery, p["item"]), p) + mustSelectN(&res, fmt.Sprintf(` + select + c.week as week, + %s as item, + sum(c.commits) as commits, + sum(c.additions) - sum(c.deletions) as delta + from contribs c + `+joinContribFT+` + where + o.login = :org and + r.name = :repo and + c.week >= :from and + c.week <= :to + group by week, item + order by commits desc + `, p["item"]), p) return } diff --git a/server/request.go b/server/request.go index 9562101..4b94c3b 100644 --- a/server/request.go +++ b/server/request.go @@ -81,11 +81,11 @@ func parseStatRequest(r *http.Request) *statRequest { var item string switch val := r.FormValue("item"); val { case "author", "user": - item = "c.author" + item = "u.login" case "team": item = "t.name" default: - item = "c.repo" + item = "r.name" } return &statRequest{