replace zxq.co/ripple/hanayo
This commit is contained in:
103
vendor/github.com/osuripple/cheesegull/cheesegull.go
generated
vendored
Normal file
103
vendor/github.com/osuripple/cheesegull/cheesegull.go
generated
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/alecthomas/kingpin"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
osuapi "github.com/thehowl/go-osuapi"
|
||||
|
||||
"github.com/osuripple/cheesegull/api"
|
||||
"github.com/osuripple/cheesegull/dbmirror"
|
||||
"github.com/osuripple/cheesegull/downloader"
|
||||
"github.com/osuripple/cheesegull/housekeeper"
|
||||
"github.com/osuripple/cheesegull/models"
|
||||
|
||||
// Components of the API we want to use
|
||||
_ "github.com/osuripple/cheesegull/api/download"
|
||||
_ "github.com/osuripple/cheesegull/api/metadata"
|
||||
)
|
||||
|
||||
const searchDSNDocs = `"DSN to use for fulltext searches. ` +
|
||||
`This should be a SphinxQL server. Follow the format of the MySQL DSN. ` +
|
||||
`This can be the same as MYSQL_DSN, and cheesegull will still run ` +
|
||||
`successfully, however what happens when search is tried is undefined ` +
|
||||
`behaviour and you should definetely bother to set it up (follow the README).`
|
||||
|
||||
var (
|
||||
osuAPIKey = kingpin.Flag("api-key", "osu! API key").Short('k').Envar("OSU_API_KEY").String()
|
||||
osuUsername = kingpin.Flag("osu-username", "osu! username (for downloading and fetching whether a beatmap has a video)").Short('u').Envar("OSU_USERNAME").String()
|
||||
osuPassword = kingpin.Flag("osu-password", "osu! password (for downloading and fetching whether a beatmap has a video)").Short('p').Envar("OSU_PASSWORD").String()
|
||||
mysqlDSN = kingpin.Flag("mysql-dsn", "DSN of MySQL").Short('m').Default("root@/cheesegull").Envar("MYSQL_DSN").String()
|
||||
searchDSN = kingpin.Flag("search-dsn", searchDSNDocs).Default("root@tcp(127.0.0.1:9306)/cheesegull").Envar("SEARCH_DSN").String()
|
||||
httpAddr = kingpin.Flag("http-addr", "Address on which to take HTTP requests.").Short('a').Default("127.0.0.1:62011").String()
|
||||
maxDisk = kingpin.Flag("max-disk", "Maximum number of GB used by beatmap cache.").Default("10").Envar("MAXIMUM_DISK").Float64()
|
||||
)
|
||||
|
||||
func addTimeParsing(dsn string) string {
|
||||
sep := "?"
|
||||
if strings.Contains(dsn, "?") {
|
||||
sep = "&"
|
||||
}
|
||||
dsn += sep + "parseTime=true&multiStatements=true"
|
||||
return dsn
|
||||
}
|
||||
|
||||
func main() {
|
||||
kingpin.Parse()
|
||||
|
||||
fmt.Println("CheeseGull", Version)
|
||||
|
||||
// set up osuapi client
|
||||
c := osuapi.NewClient(*osuAPIKey)
|
||||
|
||||
// set up downloader
|
||||
d, err := downloader.LogIn(*osuUsername, *osuPassword)
|
||||
if err != nil {
|
||||
fmt.Println("Can't log in into osu!:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
dbmirror.SetHasVideo(d.HasVideo)
|
||||
|
||||
// set up mysql
|
||||
db, err := sql.Open("mysql", addTimeParsing(*mysqlDSN))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// set up search
|
||||
db2, err := sql.Open("mysql", *searchDSN)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// set up housekeeper
|
||||
house := housekeeper.New()
|
||||
err = house.LoadState()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
house.MaxSize = uint64(float64(1024*1024*1024) * (*maxDisk))
|
||||
house.StartCleaner()
|
||||
|
||||
// run mysql migrations
|
||||
err = models.RunMigrations(db)
|
||||
if err != nil {
|
||||
fmt.Println("Error running migrations", err)
|
||||
}
|
||||
|
||||
// start running components of cheesegull
|
||||
go dbmirror.StartSetUpdater(c, db)
|
||||
go dbmirror.DiscoverEvery(c, db, time.Hour*6, time.Second*20)
|
||||
|
||||
// create request handler
|
||||
panic(http.ListenAndServe(*httpAddr, api.CreateHandler(db, db2, house, d)))
|
||||
}
|
Reference in New Issue
Block a user