internal/store/stats.go

e3632a550366fe23b2619edba30fc58fab19b598
gitbay/internal/store/stats.go history · blame · raw

50 lines · 1300 bytes

 1package store
 2
 3// ListAllRepos returns every repository, for host-local admin tooling.
 4func (s *Store) ListAllRepos() ([]Repo, error) {
 5	rows, err := s.DB.Query(repoSelect + " ORDER BY 4, r.name")
 6	if err != nil {
 7		return nil, err
 8	}
 9	defer rows.Close()
10	var out []Repo
11	for rows.Next() {
12		r, err := scanRepo(rows)
13		if err != nil {
14			return nil, err
15		}
16		out = append(out, r)
17	}
18	return out, rows.Err()
19}
20
21type Counts struct {
22	Users      int64 `json:"users"`
23	Orgs       int64 `json:"orgs"`
24	Repos      int64 `json:"repos"`
25	Issues     int64 `json:"issues"`
26	OpenIssues int64 `json:"open_issues"`
27	MRs        int64 `json:"mrs"`
28	OpenMRs    int64 `json:"open_mrs"`
29}
30
31func (s *Store) InstanceCounts() (Counts, error) {
32	var c Counts
33	for _, q := range []struct {
34		dst   *int64
35		query string
36	}{
37		{&c.Users, "SELECT COUNT(*) FROM users"},
38		{&c.Orgs, "SELECT COUNT(*) FROM orgs"},
39		{&c.Repos, "SELECT COUNT(*) FROM repos"},
40		{&c.Issues, "SELECT COUNT(*) FROM issues"},
41		{&c.OpenIssues, "SELECT COUNT(*) FROM issues WHERE state = 'open'"},
42		{&c.MRs, "SELECT COUNT(*) FROM merge_requests"},
43		{&c.OpenMRs, "SELECT COUNT(*) FROM merge_requests WHERE state IN ('open','source_gone')"},
44	} {
45		if err := s.DB.QueryRow(q.query).Scan(q.dst); err != nil {
46			return c, err
47		}
48	}
49	return c, nil
50}