github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/cmd/puppeth/wizard_dashboard.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:31</date> 10 //</624342604141563904> 11 12 13 package main 14 15 import ( 16 "fmt" 17 18 "github.com/ethereum/go-ethereum/log" 19 ) 20 21 // 22 // 23 func (w *wizard) deployDashboard() { 24 // 25 server := w.selectServer() 26 if server == "" { 27 return 28 } 29 client := w.servers[server] 30 31 // 32 infos, err := checkDashboard(client, w.network) 33 if err != nil { 34 infos = &dashboardInfos{ 35 port: 80, 36 host: client.server, 37 } 38 } 39 existed := err == nil 40 41 // 42 fmt.Println() 43 fmt.Printf("Which port should the dashboard listen on? (default = %d)\n", infos.port) 44 infos.port = w.readDefaultInt(infos.port) 45 46 // 47 infos.host, err = w.ensureVirtualHost(client, infos.port, infos.host) 48 if err != nil { 49 log.Error("Failed to decide on dashboard host", "err", err) 50 return 51 } 52 //检索到端口和代理设置,确定哪些服务可用 53 available := make(map[string][]string) 54 for server, services := range w.services { 55 for _, service := range services { 56 available[service] = append(available[service], server) 57 } 58 } 59 for _, service := range []string{"ethstats", "explorer", "wallet", "faucet"} { 60 //收集此类型的所有本地宿主页 61 var pages []string 62 for _, server := range available[service] { 63 client := w.servers[server] 64 if client == nil { 65 continue 66 } 67 // 68 var port int 69 switch service { 70 case "ethstats": 71 if infos, err := checkEthstats(client, w.network); err == nil { 72 port = infos.port 73 } 74 case "explorer": 75 if infos, err := checkExplorer(client, w.network); err == nil { 76 port = infos.webPort 77 } 78 case "wallet": 79 if infos, err := checkWallet(client, w.network); err == nil { 80 port = infos.webPort 81 } 82 case "faucet": 83 if infos, err := checkFaucet(client, w.network); err == nil { 84 port = infos.port 85 } 86 } 87 if page, err := resolve(client, w.network, service, port); err == nil && page != "" { 88 pages = append(pages, page) 89 } 90 } 91 // 92 defLabel, defChoice := "don't list", len(pages)+2 93 if len(pages) > 0 { 94 defLabel, defChoice = pages[0], 1 95 } 96 fmt.Println() 97 fmt.Printf("Which %s service to list? (default = %s)\n", service, defLabel) 98 for i, page := range pages { 99 fmt.Printf(" %d. %s\n", i+1, page) 100 } 101 fmt.Printf(" %d. List external %s service\n", len(pages)+1, service) 102 fmt.Printf(" %d. Don't list any %s service\n", len(pages)+2, service) 103 104 choice := w.readDefaultInt(defChoice) 105 if choice < 0 || choice > len(pages)+2 { 106 log.Error("Invalid listing choice, aborting") 107 return 108 } 109 var page string 110 switch { 111 case choice <= len(pages): 112 page = pages[choice-1] 113 case choice == len(pages)+1: 114 fmt.Println() 115 fmt.Printf("Which address is the external %s service at?\n", service) 116 page = w.readString() 117 default: 118 // 119 } 120 // 121 switch service { 122 case "ethstats": 123 infos.ethstats = page 124 case "explorer": 125 infos.explorer = page 126 case "wallet": 127 infos.wallet = page 128 case "faucet": 129 infos.faucet = page 130 } 131 } 132 // 133 if w.conf.ethstats != "" { 134 fmt.Println() 135 fmt.Println("Include ethstats secret on dashboard (y/n)? (default = yes)") 136 infos.trusted = w.readDefaultString("y") == "y" 137 } 138 // 139 nocache := false 140 if existed { 141 fmt.Println() 142 fmt.Printf("Should the dashboard be built from scratch (y/n)? (default = no)\n") 143 nocache = w.readDefaultString("n") != "n" 144 } 145 if out, err := deployDashboard(client, w.network, &w.conf, infos, nocache); err != nil { 146 log.Error("Failed to deploy dashboard container", "err", err) 147 if len(out) > 0 { 148 fmt.Printf("%s\n", out) 149 } 150 return 151 } 152 // 153 w.networkStats() 154 } 155