aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/puppeth/wizard_explorer.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/puppeth/wizard_explorer.go')
-rw-r--r--cmd/puppeth/wizard_explorer.go111
1 files changed, 111 insertions, 0 deletions
diff --git a/cmd/puppeth/wizard_explorer.go b/cmd/puppeth/wizard_explorer.go
new file mode 100644
index 000000000..2df77fa5c
--- /dev/null
+++ b/cmd/puppeth/wizard_explorer.go
@@ -0,0 +1,111 @@
+// Copyright 2017 The go-ethereum Authors
+// This file is part of go-ethereum.
+//
+// go-ethereum is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// go-ethereum is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
+
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "time"
+
+ "github.com/ethereum/go-ethereum/log"
+)
+
+// deployExplorer creates a new block explorer based on some user input.
+func (w *wizard) deployExplorer() {
+ // Do some sanity check before the user wastes time on input
+ if w.conf.genesis == nil {
+ log.Error("No genesis block configured")
+ return
+ }
+ if w.conf.ethstats == "" {
+ log.Error("No ethstats server configured")
+ return
+ }
+ if w.conf.genesis.Config.Ethash == nil {
+ log.Error("Only ethash network supported")
+ return
+ }
+ // Select the server to interact with
+ server := w.selectServer()
+ if server == "" {
+ return
+ }
+ client := w.servers[server]
+
+ // Retrieve any active node configurations from the server
+ infos, err := checkExplorer(client, w.network)
+ if err != nil {
+ infos = &explorerInfos{nodePort: 30303, webPort: 80, webHost: client.server}
+ }
+ chainspec, err := newParityChainSpec(w.network, w.conf.genesis, w.conf.bootFull)
+ if err != nil {
+ log.Error("Failed to create chain spec for explorer", "err", err)
+ return
+ }
+ chain, _ := json.MarshalIndent(chainspec, "", " ")
+
+ // Figure out which port to listen on
+ fmt.Println()
+ fmt.Printf("Which port should the explorer listen on? (default = %d)\n", infos.webPort)
+ infos.webPort = w.readDefaultInt(infos.webPort)
+
+ // Figure which virtual-host to deploy ethstats on
+ if infos.webHost, err = w.ensureVirtualHost(client, infos.webPort, infos.webHost); err != nil {
+ log.Error("Failed to decide on explorer host", "err", err)
+ return
+ }
+ // Figure out where the user wants to store the persistent data
+ fmt.Println()
+ if infos.datadir == "" {
+ fmt.Printf("Where should data be stored on the remote machine?\n")
+ infos.datadir = w.readString()
+ } else {
+ fmt.Printf("Where should data be stored on the remote machine? (default = %s)\n", infos.datadir)
+ infos.datadir = w.readDefaultString(infos.datadir)
+ }
+ // Figure out which port to listen on
+ fmt.Println()
+ fmt.Printf("Which TCP/UDP port should the archive node listen on? (default = %d)\n", infos.nodePort)
+ infos.nodePort = w.readDefaultInt(infos.nodePort)
+
+ // Set a proper name to report on the stats page
+ fmt.Println()
+ if infos.ethstats == "" {
+ fmt.Printf("What should the explorer be called on the stats page?\n")
+ infos.ethstats = w.readString() + ":" + w.conf.ethstats
+ } else {
+ fmt.Printf("What should the explorer be called on the stats page? (default = %s)\n", infos.ethstats)
+ infos.ethstats = w.readDefaultString(infos.ethstats) + ":" + w.conf.ethstats
+ }
+ // Try to deploy the explorer on the host
+ fmt.Println()
+ fmt.Printf("Should the explorer be built from scratch (y/n)? (default = no)\n")
+ nocache := w.readDefaultString("n") != "n"
+
+ if out, err := deployExplorer(client, w.network, chain, infos, nocache); err != nil {
+ log.Error("Failed to deploy explorer container", "err", err)
+ if len(out) > 0 {
+ fmt.Printf("%s\n", out)
+ }
+ return
+ }
+ // All ok, run a network scan to pick any changes up
+ log.Info("Waiting for node to finish booting")
+ time.Sleep(3 * time.Second)
+
+ w.networkStats()
+}