func (c *signMetadataCommand) Run(context *cmd.Context) error { writer := loggo.NewMinimumLevelWriter( cmd.NewCommandLogWriter("juju.plugins.metadata", context.Stdout, context.Stderr), loggo.INFO) loggo.RegisterWriter("signmetadata", writer) defer loggo.RemoveWriter("signmetadata") keyData, err := ioutil.ReadFile(c.keyFile) if err != nil { return err } dir := context.AbsPath(c.dir) return process(dir, string(keyData), c.passphrase) }
func (s *logsinkSuite) SetUpTest(c *gc.C) { s.logsinkBaseSuite.SetUpTest(c) s.nonce = "nonce" m, password := s.Factory.MakeMachineReturningPassword(c, &factory.MachineParams{ Nonce: s.nonce, }) s.machineTag = m.Tag() s.password = password s.logs.Clear() writer := loggo.NewMinimumLevelWriter(&s.logs, loggo.INFO) c.Assert(loggo.RegisterWriter("logsink-tests", writer), jc.ErrorIsNil) }
func (c *toolsMetadataCommand) Run(context *cmd.Context) error { writer := loggo.NewMinimumLevelWriter( cmd.NewCommandLogWriter("juju.environs.tools", context.Stdout, context.Stderr), loggo.INFO) loggo.RegisterWriter("toolsmetadata", writer) defer loggo.RemoveWriter("toolsmetadata") if c.metadataDir == "" { c.metadataDir = osenv.JujuXDGDataHomeDir() } else { c.metadataDir = context.AbsPath(c.metadataDir) } sourceStorage, err := filestorage.NewFileStorageReader(c.metadataDir) if err != nil { return err } // We now store the tools in a directory named after their stream, but the // legacy behaviour is to store all tools in a single "releases" directory. toolsDir := c.stream if c.stream == "" { fmt.Fprintln(context.Stdout, "No stream specified, defaulting to released tools in the releases directory.") c.stream = envtools.ReleasedStream toolsDir = envtools.LegacyReleaseDirectory } fmt.Fprintf(context.Stdout, "Finding tools in %s for stream %s.\n", c.metadataDir, c.stream) toolsList, err := envtools.ReadList(sourceStorage, toolsDir, -1, -1) if err == envtools.ErrNoTools { var source string source, err = envtools.ToolsURL(envtools.DefaultBaseURL) if err != nil { return err } toolsList, err = envtools.FindToolsForCloud(toolsDataSources(source), simplestreams.CloudSpec{}, c.stream, -1, -1, coretools.Filter{}) } if err != nil { return err } targetStorage, err := filestorage.NewFileStorageWriter(c.metadataDir) if err != nil { return err } writeMirrors := envtools.DoNotWriteMirrors if c.public { writeMirrors = envtools.WriteMirrors } return mergeAndWriteMetadata(targetStorage, toolsDir, c.stream, c.clean, toolsList, writeMirrors) }
func (s *BenchmarksSuite) BenchmarkLoggingDiskWriterNoMessages(c *gc.C) { logFile := s.setupTempFileWriter(c) defer logFile.Close() // Change the log level writer, err := loggo.RemoveWriter("testfile") c.Assert(err, gc.IsNil) loggo.RegisterWriter("testfile", loggo.NewMinimumLevelWriter(writer, loggo.WARNING)) msg := "just a simple warning for %d" for i := 0; i < c.N; i++ { s.logger.Debugf(msg, i) } offset, err := logFile.Seek(0, os.SEEK_CUR) c.Assert(err, gc.IsNil) c.Assert(offset, gc.Equals, int64(0), gc.Commentf("Data was written to the log file.")) }
func (c *syncToolsCommand) Run(ctx *cmd.Context) (resultErr error) { // Register writer for output on screen. writer := loggo.NewMinimumLevelWriter( cmd.NewCommandLogWriter("juju.environs.sync", ctx.Stdout, ctx.Stderr), loggo.INFO) loggo.RegisterWriter("synctools", writer) defer loggo.RemoveWriter("synctools") sctx := &sync.SyncContext{ AllVersions: c.allVersions, MajorVersion: c.majorVersion, MinorVersion: c.minorVersion, DryRun: c.dryRun, Stream: c.stream, Source: c.source, } if c.localDir != "" { stor, err := filestorage.NewFileStorageWriter(c.localDir) if err != nil { return err } writeMirrors := envtools.DoNotWriteMirrors if c.public { writeMirrors = envtools.WriteMirrors } sctx.TargetToolsFinder = sync.StorageToolsFinder{Storage: stor} sctx.TargetToolsUploader = sync.StorageToolsUploader{ Storage: stor, WriteMetadata: true, WriteMirrors: writeMirrors, } } else { if c.public { logger.Infof("--public is ignored unless --local-dir is specified") } api, err := getSyncToolsAPI(c) if err != nil { return err } defer api.Close() adapter := syncToolsAPIAdapter{api} sctx.TargetToolsFinder = adapter sctx.TargetToolsUploader = adapter } return block.ProcessBlockedError(syncTools(sctx), block.BlockChange) }
func (c *toolsMetadataCommand) Run(context *cmd.Context) error { writer := loggo.NewMinimumLevelWriter( cmd.NewCommandLogWriter("juju.environs.tools", context.Stdout, context.Stderr), loggo.INFO) loggo.RegisterWriter("toolsmetadata", writer) defer loggo.RemoveWriter("toolsmetadata") if c.metadataDir == "" { c.metadataDir = osenv.JujuXDGDataHomeDir() } else { c.metadataDir = context.AbsPath(c.metadataDir) } sourceStorage, err := filestorage.NewFileStorageReader(c.metadataDir) if err != nil { return errors.Trace(err) } fmt.Fprintf(context.Stdout, "Finding tools in %s for stream %s.\n", c.metadataDir, c.stream) toolsList, err := envtools.ReadList(sourceStorage, c.stream, -1, -1) if err == envtools.ErrNoTools { var source string source, err = envtools.ToolsURL(envtools.DefaultBaseURL) if err != nil { return errors.Trace(err) } toolsList, err = envtools.FindToolsForCloud(toolsDataSources(source), simplestreams.CloudSpec{}, c.stream, -1, -1, coretools.Filter{}) } if err != nil { return errors.Trace(err) } targetStorage, err := filestorage.NewFileStorageWriter(c.metadataDir) if err != nil { return errors.Trace(err) } writeMirrors := envtools.DoNotWriteMirrors if c.public { writeMirrors = envtools.WriteMirrors } return errors.Trace(mergeAndWriteMetadata(targetStorage, c.stream, c.stream, c.clean, toolsList, writeMirrors)) }
func (s *MongoSuite) assertTestMongoGetFails(c *gc.C, series string, packageManager string) { s.patchSeries(series) // Any exit code from apt-get that isn't 0 or 100 will be treated // as unexpected, skipping the normal retry loop. failCmd causes // the command to exit with 1. binDir := c.MkDir() s.PatchEnvPathPrepend(binDir) failCmd(filepath.Join(binDir, packageManager)) // Set the mongodb service as installed but not running. s.data.SetStatus(mongo.ServiceName, "installed") var tw loggo.TestWriter writer := loggo.NewMinimumLevelWriter(&tw, loggo.ERROR) c.Assert(loggo.RegisterWriter("test-writer", writer), jc.ErrorIsNil) defer loggo.RemoveWriter("test-writer") dataDir := c.MkDir() err := mongo.EnsureServer(makeEnsureServerParams(dataDir)) // Even though apt-get failed, EnsureServer should continue and // not return the error - even though apt-get failed, the Juju // mongodb package is most likely already installed. // The error should be logged however. c.Assert(err, jc.ErrorIsNil) c.Check(tw.Log(), jc.LogMatches, []jc.SimpleMessage{ {loggo.ERROR, `packaging command failed: .+`}, {loggo.ERROR, `cannot install/upgrade mongod \(will proceed anyway\): packaging command failed`}, }) // Verify that EnsureServer continued and started the mongodb service. c.Check(s.data.Installed(), gc.HasLen, 0) s.data.CheckCallNames(c, "Installed", "Exists", "Running", "Start") }
// NewColorWriter will write out colored severity levels if the writer is // outputting to a terminal. func NewWarningWriter(writer io.Writer) loggo.Writer { w := &warningWriter{ansiterm.NewWriter(writer)} return loggo.NewMinimumLevelWriter(w, loggo.WARNING) }