imhashdb/cli/main.go
2020-05-30 15:51:58 -04:00

202 lines
5.5 KiB
Go

package main
import (
. "github.com/simon987/imhashdb"
"github.com/simon987/imhashdb/hasher"
api "github.com/simon987/imhashdb/web"
"github.com/urfave/cli/v2"
"os"
)
func main() {
app := &cli.App{
Commands: []*cli.Command{
{
Name: "web",
Usage: "Start http API",
Action: func(c *cli.Context) error {
Init()
return api.Main()
},
Flags: []cli.Flag{
&cli.StringFlag{
Name: "pg-user",
Value: "imhashdb",
Usage: "PostgreSQL user",
EnvVars: []string{"IMHASHDB_PG_USER"},
Destination: &Conf.PgUser,
},
&cli.StringFlag{
Name: "pg-password",
Value: "imhashdb",
Usage: "PostgreSQL password",
EnvVars: []string{"IMHASHDB_PG_PASSWORD"},
Destination: &Conf.PgPassword,
},
&cli.StringFlag{
Name: "pg-db",
Value: "imhashdb",
Usage: "PostgreSQL database",
EnvVars: []string{"IMHASHDB_PG_DATABASE"},
Destination: &Conf.PgDb,
},
&cli.StringFlag{
Name: "pg-host",
Value: "localhost",
Usage: "PostgreSQL host",
EnvVars: []string{"IMHASHDB_PG_HOST"},
Destination: &Conf.PgHost,
},
&cli.IntFlag{
Name: "pg-port",
Value: 5432,
Usage: "PostgreSQL port",
EnvVars: []string{"IMHASHDB_PG_PORT"},
Destination: &Conf.PgPort,
},
&cli.StringFlag{
Name: "redis-addr",
Value: "localhost:6379",
Usage: "redis address",
EnvVars: []string{"IMHASHDB_REDIS_ADDR"},
Destination: &Conf.RedisAddr,
},
&cli.StringFlag{
Name: "redis-password",
Value: "",
Usage: "redis password",
EnvVars: []string{"IMHASHDB_REDIS_PASSWORD"},
Destination: &Conf.RedisPassword,
},
&cli.IntFlag{
Name: "redis-db",
Value: 0,
Usage: "redis db",
EnvVars: []string{"IMHASHDB_REDIS_DB"},
Destination: &Conf.RedisDb,
},
&cli.StringFlag{
Name: "api-addr",
Value: "localhost:8080",
Usage: "HTTP api address",
EnvVars: []string{"IMHASHDB_API_ADDR"},
Destination: &Conf.ApiAddr,
},
&cli.IntFlag{
Name: "query-concurrency",
Value: 2,
Usage: "Number of background query workers",
EnvVars: []string{"IMHASHDB_QUERY_CONCURRENCY"},
Destination: &Conf.QueryConcurrency,
},
},
},
{
Name: "hasher",
Usage: "Start an hasher instance",
Action: func(c *cli.Context) error {
Init()
return hasher.Main()
},
Flags: []cli.Flag{
&cli.StringFlag{
Name: "pg-user",
Value: "imhashdb",
Usage: "PostgreSQL user",
EnvVars: []string{"IMHASHDB_PG_USER"},
Destination: &Conf.PgUser,
},
&cli.StringFlag{
Name: "pg-password",
Value: "imhashdb",
Usage: "PostgreSQL password",
EnvVars: []string{"IMHASHDB_PG_PASSWORD"},
Destination: &Conf.PgPassword,
},
&cli.StringFlag{
Name: "pg-db",
Value: "imhashdb",
Usage: "PostgreSQL database",
EnvVars: []string{"IMHASHDB_PG_DATABASE"},
Destination: &Conf.PgDb,
},
&cli.StringFlag{
Name: "pg-host",
Value: "localhost",
Usage: "PostgreSQL host",
EnvVars: []string{"IMHASHDB_PG_HOST"},
Destination: &Conf.PgHost,
},
&cli.IntFlag{
Name: "pg-port",
Value: 5432,
Usage: "PostgreSQL port",
EnvVars: []string{"IMHASHDB_PG_PORT"},
Destination: &Conf.PgPort,
},
&cli.StringFlag{
Name: "redis-addr",
Value: "localhost:6379",
Usage: "redis address",
EnvVars: []string{"IMHASHDB_REDIS_ADDR"},
Destination: &Conf.RedisAddr,
},
&cli.StringFlag{
Name: "redis-password",
Value: "",
Usage: "redis password",
EnvVars: []string{"IMHASHDB_REDIS_PASSWORD"},
Destination: &Conf.RedisPassword,
},
&cli.IntFlag{
Name: "redis-db",
Value: 0,
Usage: "redis db",
EnvVars: []string{"IMHASHDB_REDIS_DB"},
Destination: &Conf.RedisDb,
},
&cli.StringFlag{
Name: "imgur-clientid",
Value: "546c25a59c58ad7",
Usage: "imgur API client id",
EnvVars: []string{"IMHASHDB_IMGUR_CLIENTID"},
Destination: &Conf.ImgurClientId,
},
&cli.StringFlag{
Name: "hasher-pattern",
Value: "q.*",
Usage: "redis pattern for hasher input tasks",
EnvVars: []string{"IMHASHDB_HASHER_PATTERN"},
Destination: &Conf.HasherPattern,
},
&cli.IntFlag{
Name: "hash-concurrency",
Value: 4,
Usage: "Thread count for hasher",
EnvVars: []string{"IMHASHDB_HASH_CONCURRENCY"},
Destination: &Conf.HasherConcurrency,
},
&cli.StringFlag{
Name: "store",
Value: "",
Usage: "If set, store downloaded images there",
EnvVars: []string{"IMHASHDB_STORE"},
Destination: &Conf.Store,
},
},
},
},
Authors: []*cli.Author{
{
Name: "simon987",
Email: "me@simon987.net",
},
},
}
err := app.Run(os.Args)
if err != nil {
panic(err)
}
}