From d060ae6a368bb880132e548c58b33e2508adc125 Mon Sep 17 00:00:00 2001 From: zelig Date: Mon, 23 Jun 2014 11:41:11 +0100 Subject: changed logger API, functions that allow Gui to implement ethlog.LogSystem for gui logging --- ethereal/ui/gui.go | 57 +++++++++++++++++++++++++------------------ ethereal/ui/html_container.go | 4 +-- ethereal/ui/ui_lib.go | 6 ++--- 3 files changed, 38 insertions(+), 29 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 01d963332..d3b298d90 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/eth-go/ethdb" "github.com/ethereum/eth-go/ethpub" "github.com/ethereum/eth-go/ethutil" + "github.com/ethereum/eth-go/ethlog" "github.com/ethereum/go-ethereum/utils" "github.com/go-qml/qml" "math/big" @@ -15,6 +16,8 @@ import ( "time" ) +var logger = ethlog.NewLogger("GUI") + type Gui struct { // The main application window win *qml.Window @@ -33,10 +36,11 @@ type Gui struct { addr []byte pub *ethpub.PEthereum + logLevel ethlog.LogLevel } // Create GUI, but doesn't start it -func New(ethereum *eth.Ethereum) *Gui { +func New(ethereum *eth.Ethereum, logLevel ethlog.LogLevel) *Gui { lib := &EthLib{stateManager: ethereum.StateManager(), blockChain: ethereum.BlockChain(), txPool: ethereum.TxPool()} db, err := ethdb.NewLDBDatabase("tx_database") if err != nil { @@ -52,7 +56,7 @@ func New(ethereum *eth.Ethereum) *Gui { pub := ethpub.NewPEthereum(ethereum) - return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub} + return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub, logLevel: logLevel} } func (gui *Gui) Start(assetPath string) { @@ -90,16 +94,15 @@ func (gui *Gui) Start(assetPath string) { win, err = gui.showKeyImport(context) } else { win, err = gui.showWallet(context) - - ethutil.Config.Log.AddLogSystem(gui) + ethlog.AddLogSystem(gui) } if err != nil { - ethutil.Config.Log.Infoln("FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'", err) + logger.Errorln("asset not found: you can set an alternative asset path on the command line using option 'asset_path'", err) panic(err) } - ethutil.Config.Log.Infoln("[GUI] Starting GUI") + logger.Infoln("Starting GUI") win.Show() win.Wait() @@ -315,22 +318,6 @@ func (gui *Gui) setPeerInfo() { } } -// Logging functions that log directly to the GUI interface -func (gui *Gui) Println(v ...interface{}) { - str := strings.TrimRight(fmt.Sprintln(v...), "\n") - lines := strings.Split(str, "\n") - for _, line := range lines { - gui.win.Root().Call("addLog", line) - } -} - -func (gui *Gui) Printf(format string, v ...interface{}) { - str := strings.TrimRight(fmt.Sprintf(format, v...), "\n") - lines := strings.Split(str, "\n") - for _, line := range lines { - gui.win.Root().Call("addLog", line) - } -} func (gui *Gui) RegisterName(name string) { keyPair := ethutil.GetKeyRing().Get(0) name = fmt.Sprintf("\"%s\"\n1", name) @@ -357,6 +344,28 @@ func (gui *Gui) ClientId() string { return ethutil.Config.Identifier } -func (gui *Gui) SetLogLevel(level int) { - ethutil.Config.Log.SetLevel(level) +// functions that allow Gui to implement interface ethlog.LogSystem +func (gui *Gui) SetLogLevel(level ethlog.LogLevel) { + gui.logLevel = level +} + +func (gui *Gui) GetLogLevel() ethlog.LogLevel { + return gui.logLevel +} + +func (gui *Gui) Println(v ...interface{}) { + gui.printLog(fmt.Sprintln(v...)) +} + +func (gui *Gui) Printf(format string, v ...interface{}) { + gui.printLog(fmt.Sprintf(format, v...)) +} + +// Print function that logs directly to the GUI +func (gui *Gui) printLog(s string) { + str := strings.TrimRight(s, "\n") + lines := strings.Split(str, "\n") + for _, line := range lines { + gui.win.Root().Call("addLog", line) + } } diff --git a/ethereal/ui/html_container.go b/ethereal/ui/html_container.go index 3867c0353..d7dc80af7 100644 --- a/ethereal/ui/html_container.go +++ b/ethereal/ui/html_container.go @@ -96,11 +96,11 @@ func (app *HtmlApplication) NewWatcher(quitChan chan bool) { app.watcher.Close() break out case <-app.watcher.Event: - //ethutil.Config.Log.Debugln("Got event:", ev) + //logger.Debugln("Got event:", ev) app.webView.Call("reload") case err := <-app.watcher.Error: // TODO: Do something here - ethutil.Config.Log.Infoln("Watcher error:", err) + logger.Infoln("Watcher error:", err) } } }() diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go index 9f2cca1e0..eb607aac5 100644 --- a/ethereal/ui/ui_lib.go +++ b/ethereal/ui/ui_lib.go @@ -40,7 +40,7 @@ func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib { func (ui *UiLib) Open(path string) { component, err := ui.engine.LoadFile(path[7:]) if err != nil { - ethutil.Config.Log.Debugln(err) + logger.Debugln(err) } win := component.CreateWindow(nil) @@ -60,7 +60,7 @@ func (ui *UiLib) OpenHtml(path string) { func (ui *UiLib) Muted(content string) { component, err := ui.engine.LoadFile(ui.AssetPath("qml/muted.qml")) if err != nil { - ethutil.Config.Log.Debugln(err) + logger.Debugln(err) return } @@ -144,7 +144,7 @@ func (ui *UiLib) DebugTx(recipient, valueStr, gasStr, gasPriceStr, data string) script, err := ethutil.Compile(data) if err != nil { - ethutil.Config.Log.Debugln(err) + logger.Debugln(err) return } -- cgit v1.2.3 From 1024766514eea7bb628ec6e5ed974e997b8faefc Mon Sep 17 00:00:00 2001 From: zelig Date: Mon, 23 Jun 2014 12:20:59 +0100 Subject: refactor cli and gui wrapper code. Details: - all cli functions shared between ethereum and ethereal abstracted to utils/ cmd.go (should be ethcommon or shared or sth) - simplify main() now readable stepwise - rename main wrapper files to main.go - rename commmand line args definition file from config.go to flags.go - rename Do -> Start to parallel option names - register interrupt for rpc server stop - fix interrupt stopping js repl and ethereum - register interrupt for mining stop - custom config file option from command line - debug option from command line - loglevel option from command line - changed ethutil.Config API - default datadir and default config file set together with other flag defaults in wrappers - default assetpath set together with other command line flags defaults in gui wrapper (not in ethutil.Config or ui/ui_lib) - options precedence: default < config file < environment variables < command line --- ethereal/ui/ui_lib.go | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go index 2dd66f4fd..156d55157 100644 --- a/ethereal/ui/ui_lib.go +++ b/ethereal/ui/ui_lib.go @@ -29,9 +29,6 @@ type UiLib struct { } func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib { - if assetPath == "" { - assetPath = DefaultAssetPath() - } return &UiLib{engine: engine, eth: eth, assetPath: assetPath} } @@ -88,6 +85,7 @@ func (ui *UiLib) ConnectToPeer(addr string) { func (ui *UiLib) AssetPath(p string) string { return path.Join(ui.assetPath, p) } + func (self *UiLib) StartDbWithContractAndData(contractHash, data string) { dbWindow := NewDebuggerWindow(self) object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.FromHex(contractHash)) @@ -111,29 +109,3 @@ func (self *UiLib) StartDebugger() { dbWindow.Show() } - -func DefaultAssetPath() string { - var base string - // If the current working directory is the go-ethereum dir - // assume a debug build and use the source directory as - // asset directory. - pwd, _ := os.Getwd() - if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "ethereal") { - base = path.Join(pwd, "assets") - } else { - switch runtime.GOOS { - case "darwin": - // Get Binary Directory - exedir, _ := osext.ExecutableFolder() - base = filepath.Join(exedir, "../Resources") - case "linux": - base = "/usr/share/ethereal" - case "window": - fallthrough - default: - base = "." - } - } - - return base -} -- cgit v1.2.3 From 6f09a3e8200ba2eeeeb296141d6644d04078a9c4 Mon Sep 17 00:00:00 2001 From: zelig Date: Mon, 23 Jun 2014 12:38:23 +0100 Subject: fix imports in ui_lib and flags cos of defaultAssetPath move; fix logLevel type for gui --- ethereal/ui/gui.go | 4 ++-- ethereal/ui/ui_lib.go | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index ed29e2485..f3a918ea0 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -40,7 +40,7 @@ type Gui struct { } // Create GUI, but doesn't start it -func New(ethereum *eth.Ethereum, logLevel ethlog.LogLevel) *Gui { +func New(ethereum *eth.Ethereum, logLevel int) *Gui { lib := &EthLib{stateManager: ethereum.StateManager(), blockChain: ethereum.BlockChain(), txPool: ethereum.TxPool()} db, err := ethdb.NewLDBDatabase("tx_database") if err != nil { @@ -56,7 +56,7 @@ func New(ethereum *eth.Ethereum, logLevel ethlog.LogLevel) *Gui { pub := ethpub.NewPEthereum(ethereum) - return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub, logLevel: logLevel} + return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub, logLevel: ethlog.LogLevel(logLevel)} } func (gui *Gui) Start(assetPath string) { diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go index 156d55157..5f6a9ef0b 100644 --- a/ethereal/ui/ui_lib.go +++ b/ethereal/ui/ui_lib.go @@ -1,14 +1,10 @@ package ethui import ( - "bitbucket.org/kardianos/osext" "github.com/ethereum/eth-go" "github.com/ethereum/eth-go/ethutil" "github.com/go-qml/qml" - "os" "path" - "path/filepath" - "runtime" ) type memAddr struct { -- cgit v1.2.3 From 9a06efd0809c370451c5e85ce4688104cd5df461 Mon Sep 17 00:00:00 2001 From: zelig Date: Wed, 25 Jun 2014 18:28:38 +0100 Subject: new logger API for upstream merge --- ethereal/ui/qml_app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/qml_app.go b/ethereal/ui/qml_app.go index d47751616..39ab7f922 100644 --- a/ethereal/ui/qml_app.go +++ b/ethereal/ui/qml_app.go @@ -22,7 +22,7 @@ func NewQmlApplication(path string, lib *UiLib) *QmlApplication { func (app *QmlApplication) Create() error { component, err := app.engine.LoadFile(app.path) if err != nil { - ethutil.Config.Log.Debugln(err) + logger.Warnln(err) } app.win = component.CreateWindow(nil) -- cgit v1.2.3 From c0a05fcf8984f04f198c5c0f8be4f73090f99403 Mon Sep 17 00:00:00 2001 From: zelig Date: Thu, 26 Jun 2014 12:13:31 +0100 Subject: log slider - only add the gui logger after window is shown otherwise slider wont be shown - need to silence gui logger after window closed otherwise logsystem hangs - gui.GetLogLevelInt() extra function needed to give correcty int typecast value to gui widget that sets initial loglevel to default --- ethereal/ui/gui.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index f3a918ea0..8845f6af3 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -90,11 +90,12 @@ func (gui *Gui) Start(assetPath string) { var win *qml.Window var err error + var addlog = false if len(data) == 0 { win, err = gui.showKeyImport(context) } else { win, err = gui.showWallet(context) - ethlog.AddLogSystem(gui) + addlog = true } if err != nil { logger.Errorln("asset not found: you can set an alternative asset path on the command line using option 'asset_path'", err) @@ -105,8 +106,13 @@ func (gui *Gui) Start(assetPath string) { logger.Infoln("Starting GUI") win.Show() + // only add the gui logger after window is shown otherwise slider wont be shown + if addlog { + ethlog.AddLogSystem(gui) + } win.Wait() - + // need to silence gui logger after window closed otherwise logsystem hangs + gui.SetLogLevel(ethlog.Silence) gui.eth.Stop() } @@ -353,6 +359,12 @@ func (gui *Gui) GetLogLevel() ethlog.LogLevel { return gui.logLevel } +// this extra function needed to give int typecast value to gui widget +// that sets initial loglevel to default +func (gui *Gui) GetLogLevelInt() int { + return int(gui.logLevel) +} + func (gui *Gui) Println(v ...interface{}) { gui.printLog(fmt.Sprintln(v...)) } -- cgit v1.2.3 From 21d86ca486a88c936a1fe71f78d76c78df36a7eb Mon Sep 17 00:00:00 2001 From: zelig Date: Thu, 26 Jun 2014 16:26:14 +0100 Subject: gui stop - introduce gui.Stop() - remember state with open - stopping ethereum stack is not gui concern, moved to main - stopping mining, gui and ethereum handled via interrupt callbacks - ^C triggers exactly the same behaviour as quit via menu --- ethereal/ui/gui.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 8845f6af3..938037b90 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -37,6 +37,7 @@ type Gui struct { pub *ethpub.PEthereum logLevel ethlog.LogLevel + open bool } // Create GUI, but doesn't start it @@ -56,7 +57,7 @@ func New(ethereum *eth.Ethereum, logLevel int) *Gui { pub := ethpub.NewPEthereum(ethereum) - return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub, logLevel: ethlog.LogLevel(logLevel)} + return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub, logLevel: ethlog.LogLevel(logLevel), open: false} } func (gui *Gui) Start(assetPath string) { @@ -104,7 +105,7 @@ func (gui *Gui) Start(assetPath string) { } logger.Infoln("Starting GUI") - + gui.open = true win.Show() // only add the gui logger after window is shown otherwise slider wont be shown if addlog { @@ -113,7 +114,16 @@ func (gui *Gui) Start(assetPath string) { win.Wait() // need to silence gui logger after window closed otherwise logsystem hangs gui.SetLogLevel(ethlog.Silence) - gui.eth.Stop() + gui.open = false +} + +func (gui *Gui) Stop() { + if gui.open { + gui.SetLogLevel(ethlog.Silence) + gui.open = false + gui.win.Hide() + } + logger.Infoln("Stopped") } func (gui *Gui) ToggleMining() { -- cgit v1.2.3 From ae5ace16190d48bfe7a0364fdb0b51644518ec42 Mon Sep 17 00:00:00 2001 From: zelig Date: Thu, 26 Jun 2014 18:41:36 +0100 Subject: go fmt --- ethereal/ui/gui.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ethereal/ui') diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 83b1508e9..be7b395d8 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -6,9 +6,9 @@ import ( "github.com/ethereum/eth-go" "github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethdb" + "github.com/ethereum/eth-go/ethlog" "github.com/ethereum/eth-go/ethpub" "github.com/ethereum/eth-go/ethutil" - "github.com/ethereum/eth-go/ethlog" "github.com/ethereum/go-ethereum/utils" "github.com/go-qml/qml" "math/big" @@ -35,9 +35,9 @@ type Gui struct { addr []byte - pub *ethpub.PEthereum + pub *ethpub.PEthereum logLevel ethlog.LogLevel - open bool + open bool } // Create GUI, but doesn't start it -- cgit v1.2.3