Benchmark ops
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Contrib struct {
|
||||
Week uint64 `json:"week"`
|
||||
Author string `json:"author"`
|
||||
@@ -17,5 +21,6 @@ on duplicate key update
|
||||
commits=values(commits), additions=values(additions), deletions=values(deletions)`
|
||||
|
||||
func (c *Contrib) Save() {
|
||||
defer measure("SaveContrib", time.Now())
|
||||
mustExecN(saveContribQuery, c)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/jmoiron/sqlx/reflectx"
|
||||
@@ -27,3 +30,13 @@ func mustSelect(dest interface{}, query string, args ...interface{}) {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func measure(op string, start time.Time) {
|
||||
duration := time.Since(start).Nanoseconds()
|
||||
outcome := "succeeded"
|
||||
if err := recover(); err != nil {
|
||||
outcome = "failed"
|
||||
}
|
||||
|
||||
log.Printf("Operation %s %s; time: %d (%dms)\n", op, outcome, duration, duration/1000000)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Org struct {
|
||||
Login string `json:"login"`
|
||||
Descr string `json:"descr"`
|
||||
@@ -10,6 +14,7 @@ type Org struct {
|
||||
const userOrgsQuery = `select o.* from members m join orgs o on o.login = m.org where user = ?`
|
||||
|
||||
func UserOrgs(login string) (orgs []*Org) {
|
||||
defer measure("UserOrgs", time.Now())
|
||||
mustSelect(&orgs, userOrgsQuery, login)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -21,10 +21,12 @@ on duplicate key update
|
||||
updated_at=now()`
|
||||
|
||||
func (r *Repo) Save() {
|
||||
defer measure("SaveRepo", time.Now())
|
||||
mustExecN(saveRepoQuery, r)
|
||||
}
|
||||
|
||||
func OrgRepos(login string) (repos []*Repo) {
|
||||
defer measure("OrgRepos", time.Now())
|
||||
mustSelect(&repos, orgReposQuery, login)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Team struct {
|
||||
ID uint64 `json:"id"`
|
||||
Owner string `json:"owner"`
|
||||
@@ -9,6 +13,7 @@ type Team struct {
|
||||
const orgTeamsQuery = `select * from teams where owner = ?`
|
||||
|
||||
func OrgTeams(login string) (teams []*Team) {
|
||||
defer measure("OrgTeams", time.Now())
|
||||
mustSelect(&teams, orgTeamsQuery, login)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -21,5 +21,6 @@ on duplicate key update
|
||||
quota = values(quota), remaining = values(remaining), reset_at = values(reset_at)`
|
||||
|
||||
func (t *Token) Save() {
|
||||
defer measure("SaveToken", time.Now())
|
||||
mustExecN(saveTokenQuery, t)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package db
|
||||
|
||||
import "time"
|
||||
|
||||
type User struct {
|
||||
Login string `json:"login"`
|
||||
Name string `json:"name"`
|
||||
@@ -14,5 +16,6 @@ on duplicate key update
|
||||
login=values(login), name=values(name), avatar_url=values(avatar_url)`
|
||||
|
||||
func (u *User) Save() {
|
||||
defer measure("SaveUser", time.Now())
|
||||
mustExecN(saveUserQuery, u)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user