/ scripts / bebusy.py
bebusy.py
  1  #!/usr/bin/env python
  2  
  3  # Colored Logger from https://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output
  4  
  5  import os
  6  import logging
  7  import time
  8  import random
  9  
 10  BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
 11  
 12  # The background is set with 40 plus the number of the color, and the
 13  # foreground with 30
 14  
 15  # These are the sequences need to get colored ouput
 16  RESET_SEQ = "\033[0m"
 17  COLOR_SEQ = "\033[1;%dm"
 18  BOLD_SEQ = "\033[1m"
 19  
 20  
 21  def formatter_message(message, use_color=True):
 22      if use_color:
 23          message = message.replace(
 24              "$RESET", RESET_SEQ).replace("$BOLD", BOLD_SEQ)
 25      else:
 26          message = message.replace("$RESET", "").replace("$BOLD", "")
 27      return message
 28  
 29  COLORS = {
 30      'WARNING': CYAN,
 31      'INFO': MAGENTA,
 32      'DEBUG': BLUE,
 33      'CRITICAL': YELLOW,
 34      'ERROR': RED
 35  }
 36  
 37  
 38  class ColoredFormatter(logging.Formatter):
 39  
 40      def __init__(self, msg, use_color=True):
 41          logging.Formatter.__init__(self, msg)
 42          self.use_color = use_color
 43  
 44      def format(self, record):
 45          levelname = record.levelname
 46          if self.use_color and levelname in COLORS:
 47              levelname_color = COLOR_SEQ % (
 48                  30 + COLORS[levelname]) + levelname + RESET_SEQ
 49              record.levelname = levelname_color
 50          return logging.Formatter.format(self, record)
 51  
 52  
 53  # Custom logger class with multiple destinations
 54  class ColoredLogger(logging.Logger):
 55      FORMAT = "[%(asctime)s] [%(levelname)s] %(message)s"
 56      COLOR_FORMAT = formatter_message(FORMAT, True)
 57  
 58      def __init__(self, name):
 59          logging.Logger.__init__(self, name, logging.DEBUG)
 60  
 61          color_formatter = ColoredFormatter(self.COLOR_FORMAT)
 62  
 63          console = logging.StreamHandler()
 64          console.setFormatter(color_formatter)
 65  
 66          self.addHandler(console)
 67          return
 68  
 69  logging.setLoggerClass(ColoredLogger)
 70  logger = logging.getLogger(__name__)
 71  # logging.basicConfig(format='[%(asctime)s] %(filename)s:%(lineno)d %(levelname)s %(message)s',
 72  #                    level=logging.DEBUG)
 73  
 74  
 75  
 76  def get_random_system_info():
 77      path = os.environ['PATH']
 78      pwd = os.environ['PWD']
 79      tmpdir = os.environ.get('TMPDIR', '/tmp/')
 80      home = os.environ['HOME']
 81  
 82      return random.choice([path, pwd, tmpdir, home])
 83  
 84  def get_random_nodejs_package():
 85      modules = [
 86          "underscore", "async", "request", "lodash", "commander", "express", "optimist", "colors", "coffee-script",
 87          "mkdirp", "debug", "q", "chalk", "yeoman-generator", "moment", "glob", "through2", "jade", "uglify-js",
 88          "socket.io", "gulp-util", "redis", "cheerio", "through", "node-uuid", "connect", "winston", "mime",
 89          "minimist", "bluebird", "grunt", "handlebars", "mongodb", "rimraf", "semver", "ejs", "mongoose", "marked",
 90          "xml2js", "underscore.string", "fs-extra", "mocha", "js-yaml", "superagent", "less", "extend", "esprima",
 91          "jquery", "stylus", "body-parser", "xtend", "jsdom", "event-stream", "shelljs", "minimatch", "prompt",
 92          "browserify", "wrench", "ws", "mysql", "readable-stream", "yosay", "inherits", "when", "pkginfo",
 93          "backbone", "nopt", "cli-color", "concat-stream", "passport", "nodemailer", "gulp", "chai", "inquirer",
 94          "nconf", "validator", "yargs", "mustache", "qs", "clean-css", "npm", "ncp", "should", "open", "aws-sdk",
 95          "graceful-fs", "temp", "http-proxy", "iconv-lite", "requirejs", "socket.io-client", "hiredis", "uuid",
 96          "promise", "escodegen", "bower", "oauth", "log4js", "cli-table"
 97      ]
 98  
 99      return random.choice(modules)
100  
101  
102  def get_random_status():
103      all_status = [
104          "100 Continue", "101 Switching Protocols", "102 Processing", "200 OK", "201 Created", "202 Accepted",
105          "203 Non-Authoritative Information", "204 No Content", "205 Reset Content", "206 Partial Content",
106          "207 Multi-Status", "208 Already Reported", "226 IM Used (RFC 3229)", "300 Multiple Choices",
107          "301 Moved Permanently", "302 Found", "303 See Other", "304 Not Modified", "305 Use Proxy",
108          "306 Switch Proxy", "307 Temporary Redirect", "308 Permanent Redirect", "prepublish", "postinstall",
109          "install", "rebuildBundles", "linkMans", "linkBins", "linkStuff", "install", "about to build", "addNamed",
110          "lock", "etag", "parsed url", "search", "query", "host", "auth", "slashes", "cache add", "GET", "POST",
111          "trying", "installOne", "tar unpack"
112      ]
113      return random.choice(all_status)
114  
115  def get_random_version():
116      major_ver = random.randint(1, 9)
117      minor_ver = random.randint(1, 9)
118      dev_ver = random.randint(1, 9)
119  
120      return "v" + str(major_ver) + "." + str(minor_ver) + "." + str(dev_ver)
121  
122  def get_random_message():
123      sentences = [
124          "it worked if it ends with ok",
125          "cli [ 'node', '" + get_random_system_info() + "','install','--verbose' ]",
126          "using npm@1.4.28 " + get_random_system_info(),
127          "using node@v0.10.32",
128          "readDependencies using package.json deps",
129          "install where, deps " + get_random_system_info() + ", [ '" + get_random_nodejs_package() + "' ] ]",
130          "readDependencies using package.json deps",
131          "already installed skipping " + get_random_nodejs_package() + "@" + get_random_version(),
132          "already installed skipping boganipsum@0.1.0 " + get_random_system_info(),
133          "build /Users/samuel/Documents/bebusy",
134          "linkStuff [false, false, false, '/Users/samuel/Documents']",
135          "rebuildBundles " + get_random_nodejs_package() + "@" + get_random_version(),
136          "rebuildBundles ['.bin', 'boganipsum', 'colors']",
137          "install " + get_random_nodejs_package() + "@" + get_random_version(),
138          "postinstall " + get_random_nodejs_package() + "@" + get_random_version(),
139          "prepublish " + get_random_nodejs_package() + "@" + get_random_version(),
140          "preinstall " + get_random_nodejs_package() + "@" + get_random_version(),
141          "linkStuff " + get_random_nodejs_package() + "@" + get_random_version(),
142          "linkBins " + get_random_nodejs_package() + "@" + get_random_version(),
143          "linkMans " + get_random_nodejs_package() + "@" + get_random_version(),
144          "exit [0, true]",
145          "ok"
146      ]
147      return random.choice(sentences)
148  
149  if __name__ == "__main__":
150      func_list = [logger.info, logger.debug, logger.warn, logger.error, logger.critical]
151      while True:
152          f = random.choice(func_list)
153          f(get_random_message())
154          time.sleep(random.random() / 5)