Skip to content

Commit

Permalink
refactor(installer): moved services into sidecar pkg
Browse files Browse the repository at this point in the history
  • Loading branch information
mattevans committed Dec 19, 2024
1 parent 7259f90 commit 403366e
Show file tree
Hide file tree
Showing 30 changed files with 444 additions and 428 deletions.
10 changes: 5 additions & 5 deletions cmd/cli/commands/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"

"github.com/ethpandaops/contributoor-installer/cmd/cli/options"
"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/rivo/tview"
"github.com/sirupsen/logrus"
Expand All @@ -19,20 +19,20 @@ func RegisterCommands(app *cli.App, opts *options.CommandOpts) {
Action: func(c *cli.Context) error {
log := opts.Logger()

configService, err := service.NewConfigService(log, c.GlobalString("config-path"))
sidecarConfig, err := sidecar.NewConfigService(log, c.GlobalString("config-path"))
if err != nil {
return fmt.Errorf("%serror loading config: %v%s", tui.TerminalColorRed, err, tui.TerminalColorReset)
}

return configureContributoor(c, log, configService)
return configureContributoor(c, log, sidecarConfig)
},
})
}

func configureContributoor(c *cli.Context, log *logrus.Logger, config service.ConfigManager) error {
func configureContributoor(c *cli.Context, log *logrus.Logger, sidecarConfig sidecar.ConfigManager) error {
var (
app = tview.NewApplication()
display = NewConfigDisplay(log, app, config)
display = NewConfigDisplay(log, app, sidecarConfig)
)

if err := display.Run(); err != nil {
Expand Down
20 changes: 16 additions & 4 deletions cmd/cli/commands/config/config_network.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package config

import (
"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/ethpandaops/contributoor-installer/internal/validate"
"github.com/gdamore/tcell/v2"
Expand Down Expand Up @@ -69,10 +69,22 @@ func (p *NetworkConfigPage) initPage() {
}

// Add our form fields.
form.AddDropDown("Network", networks, 0, func(option string, index int) {
// Find the index of the current network (from the sidecar config) in the list.
currentNetwork := p.display.sidecarConfig.Get().NetworkName
currentNetworkIndex := 0

for i, network := range networks {
if network == currentNetwork {
currentNetworkIndex = i

break
}
}

form.AddDropDown("Network", networks, currentNetworkIndex, func(option string, index int) {
p.description.SetText(networkDescriptions[option])
})
form.AddInputField("Beacon Node Address", p.display.configService.Get().BeaconNodeAddress, 0, nil, nil)
form.AddInputField("Beacon Node Address", p.display.sidecarConfig.Get().BeaconNodeAddress, 0, nil, nil)

// Add a save button and ensure we validate the input.
saveButton := tview.NewButton(tui.ButtonSaveSettings)
Expand Down Expand Up @@ -164,7 +176,7 @@ func validateAndUpdate(p *NetworkConfigPage, input *tview.InputField) {
return
}

if err := p.display.configService.Update(func(cfg *service.ContributoorConfig) {
if err := p.display.sidecarConfig.Update(func(cfg *sidecar.Config) {
cfg.BeaconNodeAddress = input.GetText()
}); err != nil {
p.openErrorModal(err)
Expand Down
14 changes: 7 additions & 7 deletions cmd/cli/commands/config/config_output_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"
"strings"

"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/ethpandaops/contributoor-installer/internal/validate"
"github.com/gdamore/tcell/v2"
Expand Down Expand Up @@ -84,7 +84,7 @@ func (p *OutputServerConfigPage) initPage() {
// of the current server so we can prepopulate the form with the current
// values.
defaultIndex := 0
currentAddress := p.display.configService.Get().OutputServer.Address
currentAddress := p.display.sidecarConfig.Get().OutputServer.Address

// Check if it's a custom output server address.
if !strings.Contains(currentAddress, "platform.ethpandaops.io") {
Expand Down Expand Up @@ -123,7 +123,7 @@ func (p *OutputServerConfigPage) initPage() {
// Add appropriate fields based on selection.
if option == "Custom" {
// If it's a custom server, we need to add the server address field.
defaultAddress := p.display.configService.Get().OutputServer.Address
defaultAddress := p.display.sidecarConfig.Get().OutputServer.Address
if strings.Contains(defaultAddress, "platform.ethpandaops.io") {
defaultAddress = ""
}
Expand All @@ -132,12 +132,12 @@ func (p *OutputServerConfigPage) initPage() {
form.AddInputField("Server Address", defaultAddress, 0, nil, nil)

// Add the username and password fields.
username, password := getCredentialsFromConfig(p.display.configService.Get())
username, password := getCredentialsFromConfig(p.display.sidecarConfig.Get())
form.AddInputField("Username", username, 0, nil, nil)
form.AddPasswordField("Password", password, 0, '*', nil)
} else {
// Otherwise, it's an ethPandaOps server.
username, password := getCredentialsFromConfig(p.display.configService.Get())
username, password := getCredentialsFromConfig(p.display.sidecarConfig.Get())
form.AddInputField("Username", username, 0, nil, nil)
form.AddPasswordField("Password", password, 0, '*', nil)
}
Expand Down Expand Up @@ -312,7 +312,7 @@ func validateAndUpdateOutputServer(p *OutputServerConfigPage) {
}

// Update config with validated values.
if err := p.display.configService.Update(func(cfg *service.ContributoorConfig) {
if err := p.display.sidecarConfig.Update(func(cfg *sidecar.Config) {
cfg.OutputServer.Address = serverAddress
if username != "" && password != "" {
cfg.OutputServer.Credentials = validate.EncodeCredentials(username, password)
Expand All @@ -339,7 +339,7 @@ func (p *OutputServerConfigPage) openErrorModal(err error) {
}

// Update getCredentialsFromConfig to use the validation package.
func getCredentialsFromConfig(cfg *service.ContributoorConfig) (username, password string) {
func getCredentialsFromConfig(cfg *sidecar.Config) (username, password string) {
username, password, err := validate.DecodeCredentials(cfg.OutputServer.Credentials)
if err != nil {
return "", ""
Expand Down
8 changes: 4 additions & 4 deletions cmd/cli/commands/config/display.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package config

import (
"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
Expand All @@ -14,7 +14,7 @@ type ConfigDisplay struct {
pages *tview.Pages
frame *tview.Frame
log *logrus.Logger
configService service.ConfigManager
sidecarConfig sidecar.ConfigManager
homePage *tui.Page
categoryList *tview.List
content tview.Primitive
Expand All @@ -26,12 +26,12 @@ type ConfigDisplay struct {
}

// NewConfigDisplay creates a new Configtui.
func NewConfigDisplay(log *logrus.Logger, app *tview.Application, configService service.ConfigManager) *ConfigDisplay {
func NewConfigDisplay(log *logrus.Logger, app *tview.Application, sidecarConfig sidecar.ConfigManager) *ConfigDisplay {
display := &ConfigDisplay{
app: app,
pages: tview.NewPages(),
log: log,
configService: configService,
sidecarConfig: sidecarConfig,
}

display.homePage = tui.NewPage(nil, "config-home", "Categories", "", nil)
Expand Down
16 changes: 9 additions & 7 deletions cmd/cli/commands/install/display.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package install

import (
"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/rivo/tview"
"github.com/sirupsen/logrus"
Expand All @@ -13,7 +13,7 @@ type InstallDisplay struct {
pages *tview.Pages
frame *tview.Frame
log *logrus.Logger
configService service.ConfigManager
sidecarConfig sidecar.ConfigManager
installPages []tui.PageInterface
welcomePage *WelcomePage
networkConfigPage *NetworkConfigPage
Expand All @@ -24,12 +24,12 @@ type InstallDisplay struct {
}

// NewInstallDisplay creates a new InstallDisplay.
func NewInstallDisplay(log *logrus.Logger, app *tview.Application, configService service.ConfigManager) *InstallDisplay {
func NewInstallDisplay(log *logrus.Logger, app *tview.Application, sidecarConfig sidecar.ConfigManager) *InstallDisplay {
display := &InstallDisplay{
app: app,
pages: tview.NewPages(),
log: log,
configService: configService,
sidecarConfig: sidecarConfig,
}

// Create all of our install wizard pages.
Expand Down Expand Up @@ -71,10 +71,12 @@ func NewInstallDisplay(log *logrus.Logger, app *tview.Application, configService
func (d *InstallDisplay) Run() error {
d.setPage(d.welcomePage.GetPage())

cfg := d.sidecarConfig.Get()

d.log.WithFields(logrus.Fields{
"config_path": d.configService.Get().ContributoorDirectory,
"version": d.configService.Get().Version,
"run_method": d.configService.Get().RunMethod,
"config_path": cfg.ContributoorDirectory,
"version": cfg.Version,
"run_method": cfg.RunMethod,
}).Info("Running installation wizard")

return d.app.Run()
Expand Down
14 changes: 7 additions & 7 deletions cmd/cli/commands/install/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"

"github.com/ethpandaops/contributoor-installer/cmd/cli/options"
"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/rivo/tview"
"github.com/sirupsen/logrus"
Expand All @@ -21,12 +21,12 @@ func RegisterCommands(app *cli.App, opts *options.CommandOpts) {
Action: func(c *cli.Context) error {
log := opts.Logger()

configService, err := service.NewConfigService(log, c.GlobalString("config-path"))
sidecarConfig, err := sidecar.NewConfigService(log, c.GlobalString("config-path"))
if err != nil {
return fmt.Errorf("%serror loading config: %v%s", tui.TerminalColorRed, err, tui.TerminalColorReset)
return fmt.Errorf("error loading config: %w", err)
}

return installContributoor(c, log, configService)
return installContributoor(c, log, sidecarConfig)
},
Flags: []cli.Flag{
cli.StringFlag{
Expand All @@ -37,16 +37,16 @@ func RegisterCommands(app *cli.App, opts *options.CommandOpts) {
cli.StringFlag{
Name: "run-method, r",
Usage: "The method to run contributoor",
Value: service.RunMethodDocker,
Value: sidecar.RunMethodDocker,
},
},
})
}

func installContributoor(c *cli.Context, log *logrus.Logger, config service.ConfigManager) error {
func installContributoor(c *cli.Context, log *logrus.Logger, sidecarConfig sidecar.ConfigManager) error {
var (
app = tview.NewApplication()
display = NewInstallDisplay(log, app, config)
display = NewInstallDisplay(log, app, sidecarConfig)
)

// Run the display.
Expand Down
4 changes: 2 additions & 2 deletions cmd/cli/commands/install/page_20_network.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package install

import (
"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
Expand Down Expand Up @@ -91,7 +91,7 @@ func (p *NetworkConfigPage) initPage() {

// Add button to our form.
form.AddButton(label, func() {
if err := p.display.configService.Update(func(cfg *service.ContributoorConfig) {
if err := p.display.sidecarConfig.Update(func(cfg *sidecar.Config) {
cfg.NetworkName = tui.AvailableNetworks[index].Value
}); err != nil {
p.openErrorModal(err)
Expand Down
14 changes: 7 additions & 7 deletions cmd/cli/commands/install/page_20_network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package install
import (
"testing"

"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/service/mock"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/sidecar/mock"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/rivo/tview"
"github.com/sirupsen/logrus"
Expand All @@ -15,15 +15,15 @@ import (
// This is about the best we can do re testing TUI components.
// They're heavily dependent on the terminal state.
func TestNetworkConfigPage(t *testing.T) {
setupMockDisplay := func(ctrl *gomock.Controller, cfg *service.ContributoorConfig) *InstallDisplay {
setupMockDisplay := func(ctrl *gomock.Controller, cfg *sidecar.Config) *InstallDisplay {
mockConfig := mock.NewMockConfigManager(ctrl)
mockConfig.EXPECT().Get().Return(cfg).AnyTimes()
mockConfig.EXPECT().Update(gomock.Any()).Return(nil).AnyTimes()

return &InstallDisplay{
app: tview.NewApplication(),
log: logrus.New(),
configService: mockConfig,
sidecarConfig: mockConfig,
}
}

Expand All @@ -32,7 +32,7 @@ func TestNetworkConfigPage(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockDisplay := setupMockDisplay(ctrl, &service.ContributoorConfig{})
mockDisplay := setupMockDisplay(ctrl, &sidecar.Config{})

// Create the page.
page := NewNetworkConfigPage(mockDisplay)
Expand All @@ -52,7 +52,7 @@ func TestNetworkConfigPage(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockDisplay := setupMockDisplay(ctrl, &service.ContributoorConfig{})
mockDisplay := setupMockDisplay(ctrl, &sidecar.Config{})

// Create the page.
page := NewNetworkConfigPage(mockDisplay)
Expand All @@ -70,7 +70,7 @@ func TestNetworkConfigPage(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()

mockDisplay := setupMockDisplay(ctrl, &service.ContributoorConfig{})
mockDisplay := setupMockDisplay(ctrl, &sidecar.Config{})

// Create the page.
page := NewNetworkConfigPage(mockDisplay)
Expand Down
6 changes: 3 additions & 3 deletions cmd/cli/commands/install/page_30_beacon_node.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package install

import (
"github.com/ethpandaops/contributoor-installer/internal/service"
"github.com/ethpandaops/contributoor-installer/internal/sidecar"
"github.com/ethpandaops/contributoor-installer/internal/tui"
"github.com/ethpandaops/contributoor-installer/internal/validate"
"github.com/gdamore/tcell/v2"
Expand Down Expand Up @@ -66,7 +66,7 @@ func (p *BeaconNodePage) initPage() {
// Add input field to our form to capture the users beacon node address.
inputField := tview.NewInputField().
SetLabel("Beacon Node Address: ").
SetText(p.display.configService.Get().BeaconNodeAddress).
SetText(p.display.sidecarConfig.Get().BeaconNodeAddress).
SetFieldBackgroundColor(tcell.ColorBlack).
SetLabelColor(tcell.ColorLightGray)
form.AddFormItem(inputField)
Expand Down Expand Up @@ -133,7 +133,7 @@ func validateAndUpdate(p *BeaconNodePage, input *tview.InputField) {
return
}

if err := p.display.configService.Update(func(cfg *service.ContributoorConfig) {
if err := p.display.sidecarConfig.Update(func(cfg *sidecar.Config) {
cfg.BeaconNodeAddress = input.GetText()
}); err != nil {
p.openErrorModal(err)
Expand Down
Loading

0 comments on commit 403366e

Please sign in to comment.