From 09c7d158d1180dc9ec042b67f8c1ecb1015a142e Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 12:12:41 +0200 Subject: [PATCH 1/4] Error window --- README.md | 2 +- ethereal/errors.go | 36 ++++++++++++++++++++++++++++++++++++ ethereal/main.go | 20 +++++++++++++++++++- ethereum/main.go | 2 +- utils/cmd.go | 11 ++++++++++- 5 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 ethereal/errors.go diff --git a/README.md b/README.md index 2d4b128fc9..8cdcfe2a6d 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Status](http://cpt-obvious.ethercasts.com:8010/buildstatusimage?builder=go-ether Ethereum Go Client © 2014 Jeffrey Wilcke. -Current state: Proof of Concept 0.6.4. +Current state: Proof of Concept 0.6.5. For the development package please see the [eth-go package](https://github.com/ethereum/eth-go). diff --git a/ethereal/errors.go b/ethereal/errors.go new file mode 100644 index 0000000000..409b7a2814 --- /dev/null +++ b/ethereal/errors.go @@ -0,0 +1,36 @@ +package main + +import ( + "fmt" + "os" + + "gopkg.in/qml.v1" +) + +func ErrorWindow(err error) { + engine := qml.NewEngine() + component, e := engine.LoadString("local", qmlErr) + if e != nil { + fmt.Println("err:", err) + os.Exit(1) + } + + win := component.CreateWindow(nil) + win.Root().ObjectByName("label").Set("text", err.Error()) + win.Show() + win.Wait() +} + +const qmlErr = ` +import QtQuick 2.0; import QtQuick.Controls 1.0; +ApplicationWindow { + width: 600; height: 150; + flags: Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint + title: "Error" + Text { + x: parent.width / 2 - this.width / 2; + y: parent.height / 2 - this.height / 2; + objectName: "label"; + } +} +` diff --git a/ethereal/main.go b/ethereal/main.go index 4cb8630e80..3729dbdaff 100644 --- a/ethereal/main.go +++ b/ethereal/main.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "os" "runtime" @@ -12,7 +13,7 @@ import ( const ( ClientIdentifier = "Ethereal" - Version = "0.6.4" + Version = "0.6.5" ) var ethereum *eth.Ethereum @@ -28,6 +29,23 @@ func run() error { utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile) db := utils.NewDatabase() + err := utils.DBSanityCheck(db) + if err != nil { + engine := qml.NewEngine() + component, e := engine.LoadString("local", qmlErr) + if e != nil { + fmt.Println("err:", err) + os.Exit(1) + } + + win := component.CreateWindow(nil) + win.Root().ObjectByName("label").Set("text", err.Error()) + win.Show() + win.Wait() + + ErrorWindow(err) + os.Exit(1) + } keyManager := utils.NewKeyManager(KeyStore, Datadir, db) diff --git a/ethereum/main.go b/ethereum/main.go index b7c8ea1e77..937a2b399f 100644 --- a/ethereum/main.go +++ b/ethereum/main.go @@ -13,7 +13,7 @@ import ( const ( ClientIdentifier = "Ethereum(G)" - Version = "0.6.4" + Version = "0.6.5" ) var logger = ethlog.NewLogger("CLI") diff --git a/utils/cmd.go b/utils/cmd.go index cda735c27d..3f3948d603 100644 --- a/utils/cmd.go +++ b/utils/cmd.go @@ -80,6 +80,16 @@ func confirm(message string) bool { return r == "y" } +func DBSanityCheck(db ethutil.Database) error { + d, _ := db.Get([]byte("ProtocolVersion")) + protov := ethutil.NewValue(d).Uint() + if protov != eth.ProtocolVersion && protov != 0 { + return fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, eth.ProtocolVersion, ethutil.Config.ExecPath+"/database") + } + + return nil +} + func InitDataDir(Datadir string) { _, err := os.Stat(Datadir) if err != nil { @@ -112,7 +122,6 @@ func InitConfig(ConfigFile string, Datadir string, EnvPrefix string) *ethutil.Co func exit(err error) { status := 0 if err != nil { - fmt.Println(err) logger.Errorln("Fatal: ", err) status = 1 } From 77fd361c62ea84a761aedead906cdd9f38ac79eb Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 12:12:53 +0200 Subject: [PATCH 2/4] Error window --- ethereal/main.go | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/ethereal/main.go b/ethereal/main.go index 3729dbdaff..7b157f3dbf 100644 --- a/ethereal/main.go +++ b/ethereal/main.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "os" "runtime" @@ -31,18 +30,6 @@ func run() error { db := utils.NewDatabase() err := utils.DBSanityCheck(db) if err != nil { - engine := qml.NewEngine() - component, e := engine.LoadString("local", qmlErr) - if e != nil { - fmt.Println("err:", err) - os.Exit(1) - } - - win := component.CreateWindow(nil) - win.Root().ObjectByName("label").Set("text", err.Error()) - win.Show() - win.Wait() - ErrorWindow(err) os.Exit(1) } From 842f2cc8a06627a1de4fbdd1580fefe14be85a04 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 12:14:37 +0200 Subject: [PATCH 3/4] Error window --- ethereal/main.go | 1 + ethereum/main.go | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/ethereal/main.go b/ethereal/main.go index 7b157f3dbf..dd4f1245af 100644 --- a/ethereal/main.go +++ b/ethereal/main.go @@ -31,6 +31,7 @@ func run() error { err := utils.DBSanityCheck(db) if err != nil { ErrorWindow(err) + os.Exit(1) } diff --git a/ethereum/main.go b/ethereum/main.go index 937a2b399f..9d07ab0d41 100644 --- a/ethereum/main.go +++ b/ethereum/main.go @@ -40,6 +40,11 @@ func main() { utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile) db := utils.NewDatabase() + err := utils.DBSanityCheck(db) + if err != nil { + logger.Errorln(err) + os.Exit(1) + } keyManager := utils.NewKeyManager(KeyStore, Datadir, db) From 5ac875b097a55c75a7e3da3443ef9fe64fc87846 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 12:40:15 +0200 Subject: [PATCH 4/4] Set log level of std logger as well. (since gui logging is disabled) --- ethereal/gui.go | 4 +++- ethereal/main.go | 3 ++- ethereum/main.go | 1 + utils/cmd.go | 8 ++++++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ethereal/gui.go b/ethereal/gui.go index 6d16ec484d..5e87f7464d 100644 --- a/ethereal/gui.go +++ b/ethereal/gui.go @@ -56,7 +56,8 @@ type Gui struct { plugins map[string]plugin - miner *ethminer.Miner + miner *ethminer.Miner + stdLog ethlog.LogSystem } // Create GUI, but doesn't start it @@ -559,6 +560,7 @@ func (gui *Gui) ToggleTurboMining() { // functions that allow Gui to implement interface ethlog.LogSystem func (gui *Gui) SetLogLevel(level ethlog.LogLevel) { gui.logLevel = level + gui.stdLog.SetLogLevel(level) gui.config.Save("loglevel", level) } diff --git a/ethereal/main.go b/ethereal/main.go index dd4f1245af..4fb9e2a9c9 100644 --- a/ethereal/main.go +++ b/ethereal/main.go @@ -25,7 +25,7 @@ func run() error { utils.InitDataDir(Datadir) - utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile) + stdLog := utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile) db := utils.NewDatabase() err := utils.DBSanityCheck(db) @@ -53,6 +53,7 @@ func run() error { } gui := NewWindow(ethereum, config, clientIdentity, KeyRing, LogLevel) + gui.stdLog = stdLog utils.RegisterInterrupt(func(os.Signal) { gui.Stop() diff --git a/ethereum/main.go b/ethereum/main.go index 9d07ab0d41..ab6ce18b21 100644 --- a/ethereum/main.go +++ b/ethereum/main.go @@ -43,6 +43,7 @@ func main() { err := utils.DBSanityCheck(db) if err != nil { logger.Errorln(err) + os.Exit(1) } diff --git a/utils/cmd.go b/utils/cmd.go index 3f3948d603..83f3ec0b68 100644 --- a/utils/cmd.go +++ b/utils/cmd.go @@ -100,18 +100,22 @@ func InitDataDir(Datadir string) { } } -func InitLogging(Datadir string, LogFile string, LogLevel int, DebugFile string) { +func InitLogging(Datadir string, LogFile string, LogLevel int, DebugFile string) ethlog.LogSystem { var writer io.Writer if LogFile == "" { writer = os.Stdout } else { writer = openLogFile(Datadir, LogFile) } - ethlog.AddLogSystem(ethlog.NewStdLogSystem(writer, log.LstdFlags, ethlog.LogLevel(LogLevel))) + + sys := ethlog.NewStdLogSystem(writer, log.LstdFlags, ethlog.LogLevel(LogLevel)) + ethlog.AddLogSystem(sys) if DebugFile != "" { writer = openLogFile(Datadir, DebugFile) ethlog.AddLogSystem(ethlog.NewStdLogSystem(writer, log.LstdFlags, ethlog.DebugLevel)) } + + return sys } func InitConfig(ConfigFile string, Datadir string, EnvPrefix string) *ethutil.ConfigManager {