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)