From 98ad33e005d75e63ed0c337bf6d1c9a6cdf0efaf Mon Sep 17 00:00:00 2001 From: Brian Tiger Chow Date: Sat, 24 Jan 2015 01:20:31 -0800 Subject: [PATCH] refactor(eventlog) integrate into fsrepo now, eventlogger works wherever the fsrepo is used --- cmd/ipfs/init.go | 23 -------------- cmd/ipfs/main.go | 12 -------- repo/config/config.go | 1 - repo/config/logs.go | 17 ----------- repo/fsrepo/component/eventlog.go | 51 +++++++++++++++++++++++++++++++ repo/fsrepo/fsrepo.go | 24 ++++++++++----- repo/logs.go | 24 --------------- 7 files changed, 67 insertions(+), 85 deletions(-) create mode 100644 repo/fsrepo/component/eventlog.go delete mode 100644 repo/logs.go diff --git a/cmd/ipfs/init.go b/cmd/ipfs/init.go index 5c4d16a83..417b5f3de 100644 --- a/cmd/ipfs/init.go +++ b/cmd/ipfs/init.go @@ -4,7 +4,6 @@ import ( "bytes" "encoding/base64" "fmt" - "path" context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" cmds "github.com/jbenet/go-ipfs/commands" @@ -14,7 +13,6 @@ import ( ipns "github.com/jbenet/go-ipfs/fuse/ipns" ci "github.com/jbenet/go-ipfs/p2p/crypto" peer "github.com/jbenet/go-ipfs/p2p/peer" - repo "github.com/jbenet/go-ipfs/repo" config "github.com/jbenet/go-ipfs/repo/config" fsrepo "github.com/jbenet/go-ipfs/repo/fsrepo" u "github.com/jbenet/go-ipfs/util" @@ -110,9 +108,6 @@ func doInit(repoRoot string, force bool, nBitsForKeypair int) (interface{}, erro if err := fsrepo.Init(repoRoot, conf); err != nil { return nil, err } - if err := repo.ConfigureEventLogger(conf.Logs); err != nil { - return nil, err - } err = addTheWelcomeFile(repoRoot) if err != nil { return nil, err @@ -196,11 +191,6 @@ func initConfig(nBitsForKeypair int) (*config.Config, error) { return nil, err } - logConfig, err := initLogs() - if err != nil { - return nil, err - } - bootstrapPeers, err := corecmds.DefaultBootstrapPeers() if err != nil { return nil, err @@ -220,7 +210,6 @@ func initConfig(nBitsForKeypair int) (*config.Config, error) { Bootstrap: bootstrapPeers, Datastore: *ds, - Logs: *logConfig, Identity: identity, // setup the node mount points. @@ -268,15 +257,3 @@ func identityConfig(nbits int) (config.Identity, error) { fmt.Printf("peer identity: %s\n", ident.PeerID) return ident, nil } - -// initLogs initializes the event logger. -func initLogs() (*config.Logs, error) { - logpath, err := config.LogsPath("") - if err != nil { - return nil, err - } - conf := config.Logs{ - Filename: path.Join(logpath, "events.log"), - } - return &conf, nil -} diff --git a/cmd/ipfs/main.go b/cmd/ipfs/main.go index a0a050023..f3169b590 100644 --- a/cmd/ipfs/main.go +++ b/cmd/ipfs/main.go @@ -20,7 +20,6 @@ import ( cmdsCli "github.com/jbenet/go-ipfs/commands/cli" cmdsHttp "github.com/jbenet/go-ipfs/commands/http" core "github.com/jbenet/go-ipfs/core" - repo "github.com/jbenet/go-ipfs/repo" config "github.com/jbenet/go-ipfs/repo/config" fsrepo "github.com/jbenet/go-ipfs/repo/fsrepo" eventlog "github.com/jbenet/go-ipfs/thirdparty/eventlog" @@ -282,17 +281,6 @@ func callPreCommandHooks(ctx context.Context, details cmdDetails, req cmds.Reque } } - // When the upcoming command may use the config and repo, we know it's safe - // for the log config hook to touch the config/repo - if repo.IsInitialized(req.Context().ConfigRoot) { - log.Debug("Calling hook: Configure Event Logger") - cfg, err := req.Context().GetConfig() - if err != nil { - return err - } - repo.ConfigureEventLogger(cfg.Logs) - } - return nil } diff --git a/repo/config/config.go b/repo/config/config.go index 16b6a7896..816ffcef5 100644 --- a/repo/config/config.go +++ b/repo/config/config.go @@ -23,7 +23,6 @@ type Config struct { Version Version // local node's version management Bootstrap []BootstrapPeer // local nodes's bootstrap peers Tour Tour // local node's tour position - Logs Logs // local node's event log configuration } const ( diff --git a/repo/config/logs.go b/repo/config/logs.go index 687f0832f..d912156be 100644 --- a/repo/config/logs.go +++ b/repo/config/logs.go @@ -1,18 +1 @@ package config - -// LogsDefaultDirectory is the directory to store all IPFS event logs. -var LogsDefaultDirectory = "logs" - -// Logs tracks the configuration of the event logger -type Logs struct { - Filename string - MaxSizeMB uint64 - MaxBackups uint64 - MaxAgeDays uint64 -} - -// LogsPath returns the default path for event logs given a configuration root -// (set an empty string to have the default configuration root) -func LogsPath(configroot string) (string, error) { - return Path(configroot, LogsDefaultDirectory) -} diff --git a/repo/fsrepo/component/eventlog.go b/repo/fsrepo/component/eventlog.go new file mode 100644 index 000000000..fba4a500e --- /dev/null +++ b/repo/fsrepo/component/eventlog.go @@ -0,0 +1,51 @@ +package component + +import ( + "os" + "path" + + config "github.com/jbenet/go-ipfs/repo/config" + dir "github.com/jbenet/go-ipfs/thirdparty/dir" + eventlog "github.com/jbenet/go-ipfs/thirdparty/eventlog" +) + +func InitEventlogComponent(repoPath string, conf *config.Config) error { + if err := dir.Writable(path.Join(repoPath, "logs")); err != nil { + return err + } + return nil +} + +func EventlogComponentIsInitialized(path string) bool { + return true +} + +type EventlogComponent struct { + path string +} + +func (c *EventlogComponent) SetPath(path string) { + c.path = path // FIXME necessary? +} + +func (c *EventlogComponent) Close() error { + // TODO It isn't part of the current contract, but callers may like for us + // to disable logging once the component is closed. + eventlog.Configure(eventlog.Output(os.Stderr)) + return nil +} + +func (c *EventlogComponent) Open() error { + // log.Debugf("writing eventlogs to ...", c.path) + return configureEventLoggerAtRepoPath(c.path) +} + +func configureEventLoggerAtRepoPath(repoPath string) error { + eventlog.Configure(eventlog.LevelInfo) + eventlog.Configure(eventlog.LdJSONFormatter) + rotateConf := eventlog.LogRotatorConfig{ + Filename: path.Join(repoPath, "logs", "events.log"), + } + eventlog.Configure(eventlog.OutputRotatingLogFile(rotateConf)) + return nil +} diff --git a/repo/fsrepo/fsrepo.go b/repo/fsrepo/fsrepo.go index d026b5bb7..b575dd606 100644 --- a/repo/fsrepo/fsrepo.go +++ b/repo/fsrepo/fsrepo.go @@ -54,6 +54,7 @@ type FSRepo struct { // TODO test configComponent component.ConfigComponent datastoreComponent component.DatastoreComponent + eventlogComponent component.EventlogComponent } type componentBuilder struct { @@ -163,14 +164,6 @@ func (r *FSRepo) Open() error { } } - logpath, err := config.LogsPath("") - if err != nil { - return debugerror.Wrap(err) - } - if err := dir.Writable(logpath); err != nil { - return debugerror.Errorf("logs: %s", err) - } - return r.transitionToOpened() } @@ -352,5 +345,20 @@ func componentBuilders() []componentBuilder { return nil }, }, + + // EventlogComponent + componentBuilder{ + Init: component.InitEventlogComponent, + IsInitialized: component.EventlogComponentIsInitialized, + OpenHandler: func(r *FSRepo) error { + c := component.EventlogComponent{} + c.SetPath(r.path) + if err := c.Open(); err != nil { + return err + } + r.eventlogComponent = c + return nil + }, + }, } } diff --git a/repo/logs.go b/repo/logs.go deleted file mode 100644 index 12381932f..000000000 --- a/repo/logs.go +++ /dev/null @@ -1,24 +0,0 @@ -package repo - -import ( - config "github.com/jbenet/go-ipfs/repo/config" - eventlog "github.com/jbenet/go-ipfs/thirdparty/eventlog" - util "github.com/jbenet/go-ipfs/util" -) - -func ConfigureEventLogger(config config.Logs) error { - if util.Debug { - eventlog.Configure(eventlog.LevelDebug) - } else { - eventlog.Configure(eventlog.LevelInfo) - } - eventlog.Configure(eventlog.LdJSONFormatter) - rotateConf := eventlog.LogRotatorConfig{ - Filename: config.Filename, - MaxSizeMB: config.MaxSizeMB, - MaxBackups: config.MaxBackups, - MaxAgeDays: config.MaxAgeDays, - } - eventlog.Configure(eventlog.OutputRotatingLogFile(rotateConf)) - return nil -}