code.vegaprotocol.io/vega@v0.79.0/cmd/data-node/commands/root.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package commands
    17  
    18  import (
    19  	"context"
    20  	"fmt"
    21  	"os"
    22  
    23  	"code.vegaprotocol.io/vega/cmd/data-node/commands/networkhistory"
    24  	"code.vegaprotocol.io/vega/datanode/config"
    25  
    26  	"github.com/jessevdk/go-flags"
    27  )
    28  
    29  // Subcommand is the signature of a sub command that can be registered.
    30  type Subcommand func(context.Context, *flags.Parser) error
    31  
    32  // Register registers one or more subcommands.
    33  func Register(ctx context.Context, parser *flags.Parser, cmds ...Subcommand) error {
    34  	for _, fn := range cmds {
    35  		if err := fn(ctx, parser); err != nil {
    36  			return err
    37  		}
    38  	}
    39  	return nil
    40  }
    41  
    42  func Execute(ctx context.Context) error {
    43  	parser := flags.NewParser(&config.Empty{}, flags.Default)
    44  
    45  	if err := Register(ctx, parser,
    46  		Init,
    47  		Gateway,
    48  		Node,
    49  		Start,
    50  		Version,
    51  		Postgres,
    52  		LastBlock,
    53  		UnsafeResetAll,
    54  		networkhistory.NetworkHistory,
    55  		MigrateIpfs,
    56  	); err != nil {
    57  		fmt.Printf("%+v\n", err)
    58  		return err
    59  	}
    60  
    61  	if _, err := parser.Parse(); err != nil {
    62  		switch t := err.(type) {
    63  		case *flags.Error:
    64  			if t.Type != flags.ErrHelp {
    65  				parser.WriteHelp(os.Stdout)
    66  			}
    67  		}
    68  		return err
    69  	}
    70  	return nil
    71  }