github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/cmd/puppeth/wizard_dashboard.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //版权所有2017 Go Ethereum作者 10 //此文件是Go以太坊的一部分。 11 // 12 //Go以太坊是免费软件:您可以重新发布和/或修改它 13 //根据GNU通用公共许可证的条款 14 //自由软件基金会,或者许可证的第3版,或者 15 //(由您选择)任何更高版本。 16 // 17 //Go以太坊的分布希望它会有用, 18 //但没有任何保证;甚至没有 19 //适销性或特定用途的适用性。见 20 //GNU通用公共许可证了解更多详细信息。 21 // 22 //你应该已经收到一份GNU通用公共许可证的副本 23 //一起去以太坊吧。如果没有,请参见<http://www.gnu.org/licenses/>。 24 25 package main 26 27 import ( 28 "fmt" 29 30 "github.com/ethereum/go-ethereum/log" 31 ) 32 33 // 34 // 35 func (w *wizard) deployDashboard() { 36 // 37 server := w.selectServer() 38 if server == "" { 39 return 40 } 41 client := w.servers[server] 42 43 // 44 infos, err := checkDashboard(client, w.network) 45 if err != nil { 46 infos = &dashboardInfos{ 47 port: 80, 48 host: client.server, 49 } 50 } 51 existed := err == nil 52 53 // 54 fmt.Println() 55 fmt.Printf("Which port should the dashboard listen on? (default = %d)\n", infos.port) 56 infos.port = w.readDefaultInt(infos.port) 57 58 // 59 infos.host, err = w.ensureVirtualHost(client, infos.port, infos.host) 60 if err != nil { 61 log.Error("Failed to decide on dashboard host", "err", err) 62 return 63 } 64 //检索到端口和代理设置,确定哪些服务可用 65 available := make(map[string][]string) 66 for server, services := range w.services { 67 for _, service := range services { 68 available[service] = append(available[service], server) 69 } 70 } 71 for _, service := range []string{"ethstats", "explorer", "wallet", "faucet"} { 72 //收集此类型的所有本地宿主页 73 var pages []string 74 for _, server := range available[service] { 75 client := w.servers[server] 76 if client == nil { 77 continue 78 } 79 // 80 var port int 81 switch service { 82 case "ethstats": 83 if infos, err := checkEthstats(client, w.network); err == nil { 84 port = infos.port 85 } 86 case "explorer": 87 if infos, err := checkExplorer(client, w.network); err == nil { 88 port = infos.webPort 89 } 90 case "wallet": 91 if infos, err := checkWallet(client, w.network); err == nil { 92 port = infos.webPort 93 } 94 case "faucet": 95 if infos, err := checkFaucet(client, w.network); err == nil { 96 port = infos.port 97 } 98 } 99 if page, err := resolve(client, w.network, service, port); err == nil && page != "" { 100 pages = append(pages, page) 101 } 102 } 103 // 104 defLabel, defChoice := "don't list", len(pages)+2 105 if len(pages) > 0 { 106 defLabel, defChoice = pages[0], 1 107 } 108 fmt.Println() 109 fmt.Printf("Which %s service to list? (default = %s)\n", service, defLabel) 110 for i, page := range pages { 111 fmt.Printf(" %d. %s\n", i+1, page) 112 } 113 fmt.Printf(" %d. List external %s service\n", len(pages)+1, service) 114 fmt.Printf(" %d. Don't list any %s service\n", len(pages)+2, service) 115 116 choice := w.readDefaultInt(defChoice) 117 if choice < 0 || choice > len(pages)+2 { 118 log.Error("Invalid listing choice, aborting") 119 return 120 } 121 var page string 122 switch { 123 case choice <= len(pages): 124 page = pages[choice-1] 125 case choice == len(pages)+1: 126 fmt.Println() 127 fmt.Printf("Which address is the external %s service at?\n", service) 128 page = w.readString() 129 default: 130 // 131 } 132 // 133 switch service { 134 case "ethstats": 135 infos.ethstats = page 136 case "explorer": 137 infos.explorer = page 138 case "wallet": 139 infos.wallet = page 140 case "faucet": 141 infos.faucet = page 142 } 143 } 144 // 145 if w.conf.ethstats != "" { 146 fmt.Println() 147 fmt.Println("Include ethstats secret on dashboard (y/n)? (default = yes)") 148 infos.trusted = w.readDefaultString("y") == "y" 149 } 150 // 151 nocache := false 152 if existed { 153 fmt.Println() 154 fmt.Printf("Should the dashboard be built from scratch (y/n)? (default = no)\n") 155 nocache = w.readDefaultString("n") != "n" 156 } 157 if out, err := deployDashboard(client, w.network, &w.conf, infos, nocache); err != nil { 158 log.Error("Failed to deploy dashboard container", "err", err) 159 if len(out) > 0 { 160 fmt.Printf("%s\n", out) 161 } 162 return 163 } 164 // 165 w.networkStats() 166 }