cli.go 2.42 KB
Newer Older
Will Cory's avatar
Will Cory committed
1 2 3
package cli

import (
4
	"context"
Will Cory's avatar
Will Cory committed
5 6
	"fmt"

7
	"github.com/ethereum-optimism/optimism/indexer"
Will Cory's avatar
Will Cory committed
8
	"github.com/ethereum-optimism/optimism/indexer/config"
9 10
	"github.com/ethereum-optimism/optimism/op-service/log"
	"github.com/ethereum-optimism/optimism/op-service/opio"
11

Will Cory's avatar
Will Cory committed
12
	"github.com/ethereum/go-ethereum/params"
13

Will Cory's avatar
Will Cory committed
14 15 16 17 18 19 20 21 22 23 24 25 26
	"github.com/urfave/cli/v2"
)

type Cli struct {
	GitVersion string
	GitCommit  string
	GitDate    string
	app        *cli.App
	Flags      []cli.Flag
}

func runIndexer(ctx *cli.Context) error {
	configPath := ctx.String(ConfigFlag.Name)
27 28 29 30
	cfg, err := config.LoadConfig(configPath)
	if err != nil {
		return err
	}
Will Cory's avatar
Will Cory committed
31

32
	// setup logger
33
	cfg.Logger = log.NewLogger(log.ReadCLIConfig(ctx))
Will Cory's avatar
Will Cory committed
34

35
	indexer, err := indexer.NewIndexer(cfg)
Will Cory's avatar
Will Cory committed
36
	if err != nil {
37
		return err
Will Cory's avatar
Will Cory committed
38 39
	}

Hamdi Allam's avatar
Hamdi Allam committed
40
	indexerCtx, indexerCancel := context.WithCancel(context.Background())
41
	go func() {
42
		opio.BlockOnInterrupts()
Hamdi Allam's avatar
Hamdi Allam committed
43
		indexerCancel()
44 45 46
	}()

	return indexer.Run(indexerCtx)
Will Cory's avatar
Will Cory committed
47 48 49 50 51 52 53 54 55
}

func runApi(ctx *cli.Context) error {
	configPath := ctx.String(ConfigFlag.Name)
	conf, err := config.LoadConfig(configPath)

	fmt.Println(conf)

	if err != nil {
56
		panic(err)
Will Cory's avatar
Will Cory committed
57
	}
58

Will Cory's avatar
Will Cory committed
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
	// finish me
	return nil
}

var (
	ConfigFlag = &cli.StringFlag{
		Name:    "config",
		Value:   "./indexer.toml",
		Aliases: []string{"c"},
		Usage:   "path to config file",
		EnvVars: []string{"INDEXER_CONFIG"},
	}
	// Not used yet.  Use this flag to run legacy app instead
	// Remove me after indexer is released
	IndexerRefreshFlag = &cli.BoolFlag{
		Name:    "indexer-refresh",
		Value:   false,
		Aliases: []string{"i"},
		Usage:   "run new unreleased indexer by passing in flag",
		EnvVars: []string{"INDEXER_REFRESH"},
	}
)

// make a instance method on Cli called Run that runs cli
// and returns an error
func (c *Cli) Run(args []string) error {
	return c.app.Run(args)
}

func NewCli(GitVersion string, GitCommit string, GitDate string) *Cli {
89
	flags := append([]cli.Flag{ConfigFlag}, log.CLIFlags("INDEXER")...)
Will Cory's avatar
Will Cory committed
90 91
	app := &cli.App{
		Version:     fmt.Sprintf("%s-%s", GitVersion, params.VersionWithCommit(GitCommit, GitDate)),
Will Cory's avatar
Will Cory committed
92
		Description: "An indexer of all optimism events with a serving api layer",
Will Cory's avatar
Will Cory committed
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
		Commands: []*cli.Command{
			{
				Name:        "api",
				Flags:       flags,
				Description: "Runs the api service",
				Action:      runApi,
			},
			{
				Name:        "indexer",
				Flags:       flags,
				Description: "Runs the indexing service",
				Action:      runIndexer,
			},
		},
	}

	return &Cli{
		app:   app,
		Flags: flags,
	}
}