예제 #1
0
파일: tasks.py 프로젝트: palnes/pyscale
def kill(signal=9):
    """ Kill zombie (unregistered) modules """
    zombies = []
    pids = set(m[1] for m in running_modules())

    for line in shell('ps -e --no-headers -o pid,command').split('\n'):
        try:
            pid, name = re.match(r'\s*(\d+)\s+(.+)$', line).groups()
        except AttributeError:
            continue

        mob = re.search(r'app/(.*?)/main', name)
        if mob and pid not in pids:
            zombies.append((mob.group(1), pid))

    if not zombies:
        puts(fore.green('No zombies detected'))
    else:
        puts(fore.green('Killing %d zombie modules' % len(zombies)))
        for name, pid in zombies:
            puts(' * Killing %-10s (pid: %s) ...' %
                 (fore.cyan(name), fore.red(pid)))

            try:
                shell('kill -s %s %s' % (signal, pid), exception=RuntimeError)
            except RuntimeError as e:
                puts(fore.magenta('   Error: ') + e.args[0])
예제 #2
0
파일: logger.py 프로젝트: alexcepoi/pyscale
def println(line):
	# blank line
	if re.match(r'\s*$', line):
		return puts(line)

	# logfile header
	mobj = re.match(r'==> (.*) <==$', line)
	if mobj:
		return puts(style.bright(fore.black('==> ') + fore.white(mobj.group(1)) + fore.black(' <==')))
	
	# exception line
	if re.match(EXCEPTION_PREFIX, line):
		return puts(fore.red(line))

	# standard log line
	basic = r'(.*?\s+)'

	date = basic*3
	time = basic
	type = basic
	file = '(\[.*?\s+)\])'

	mobj = re.match(basic*6 + r'(.*)', line)
	if not mobj:
		# non-conventional line
		return puts(line)
	else:
		groups = list(mobj.groups())

		groups.insert(0, str(fore.cyan))
		groups.insert(4, str(fore.blue))
		groups.insert(6, str(style.bright))
		groups.insert(8, str(style.reset_all))
		groups.insert(9, str(fore.cyan))
		groups.insert(11, str(style.reset_all))

		for idx, string in enumerate(groups):
			string = re.sub(r'(STATUS)', fore.white(r'\1'), string)
			string = re.sub(r'(DEBUG)', fore.white(r'\1'), string)
			string = re.sub(r'(INFO)', fore.green(r'\1'), string)
			string = re.sub(r'(WARNING)', fore.yellow(r'\1'), string)
			string = re.sub(r'(ERROR)', fore.red(r'\1'), string)
			string = re.sub(r'(EXCEPT)', fore.red(r'\1'), string)

			groups[idx] = string


		groups[-1] = re.sub(r'\[', fore.cyan(r'['), groups[-1])
		groups[-1] = re.sub(r'\]', fore.cyan(r']'), groups[-1])

		groups[-1] = re.sub(r'~>', fore.blue(r'~>'), groups[-1])
		groups[-1] = re.sub(r'<~', fore.yellow(r'<~'), groups[-1])

		groups[-1] = re.sub(r'\(', fore.cyan(r'('), groups[-1])
		groups[-1] = re.sub(r'\)', fore.cyan(r')'), groups[-1])

		groups[-1] = re.sub(r"'", fore.cyan(r"'"), groups[-1])
		groups[-1] = re.sub(r'"', fore.cyan(r'"'), groups[-1])

		return puts(''.join(groups))
예제 #3
0
    def ignore(dirname, names):
        common = osp.commonprefix([project, dirname])

        puts(
            fore.green('   init ') +
            osp.join(projname, dirname[len(common) + 1:]))
        return []
예제 #4
0
def generate(modname):
	""" generate new module """

	# check for valid name
	if modname.lower() in pydoc.Helper.keywords.keys():
		raise PyscaleError('%s is a Python keyword.' % repr(modname.lower()))

	# go to project root
	root = find_project()
	if root != False:
		os.chdir(root)
	else:
		raise PyscaleError('Pyscale project not found (missing Cakefile?)')


	# create folder
	folder = 'app/%s' % modname
	if osp.isdir(folder):
		puts(fore.yellow(' exists ') + folder)
	else:
		puts(fore.green('  mkdir ') + folder)
		os.makedirs(folder)

	
	# create file
	modfile = 'app/%s/main' % modname
	tplfile = osp.join(pyscale.__path__[0], 'files', 'module')

	if osp.exists(modfile):
		raise PyscaleError('Module already exists. Aborting...')
	else:
		with open(tplfile) as f:
			tpl = jinja2.Template(f.read())
			tpl = tpl.render(module=modname.title())

		puts(fore.green(' create ') + modfile)
		with open(modfile, 'w') as f:
			f.write(tpl)
예제 #5
0
파일: console.py 프로젝트: palnes/pyscale
def api(modules):
    # ensure iterable
    if isinstance(modules, Socket):
        modules = [modules]

    # iterate list
    for module in modules:
        puts('= ' + fore.green(module.name))
        for obj in module.help():
            if isinstance(obj, list):
                # method
                puts('  * ' + fore.yellow(obj[0]) + ' ' + fore.white(obj[1]))
                if obj[2]:
                    puts('    ' + fore.blue(obj[2]))
예제 #6
0
def api(modules):
	# ensure iterable
	if isinstance(modules, Socket):
		modules = [modules]
	
	# iterate list
	for module in modules:
		puts('= ' + fore.green(module.name))
		for obj in module.help():
			if isinstance(obj, list):
				# method
				puts('  * ' + fore.yellow(obj[0]) + ' ' + fore.white(obj[1]))
				if obj[2]:
					puts('    ' + fore.blue(obj[2]))
예제 #7
0
파일: tasks.py 프로젝트: alexcepoi/pyscale
def kill(signal=9):
	""" Kill zombie (unregistered) modules """
	zombies = []
	pids = set(m[1] for m in running_modules())

	for line in shell('ps -e --no-headers -o pid,command').split('\n'):
		try: pid, name = re.match(r'\s*(\d+)\s+(.+)$', line).groups()
		except AttributeError: continue

		mob = re.search(r'app/(.*?)/main', name)
		if mob and pid not in pids:
			zombies.append((mob.group(1), pid))

	if not zombies:
		puts(fore.green('No zombies detected'))
	else:
		puts(fore.green('Killing %d zombie modules' % len(zombies)))
		for name, pid in zombies:
			puts(' * Killing %-10s (pid: %s) ...' % (fore.cyan(name), fore.red(pid)))

			try: shell('kill -s %s %s' % (signal, pid), exception=RuntimeError)
			except RuntimeError as e:
				puts(fore.magenta('   Error: ') + e.args[0])
예제 #8
0
def generate(modname):
    """ generate new module """

    # check for valid name
    if modname.lower() in pydoc.Helper.keywords.keys():
        raise PyscaleError('%s is a Python keyword.' % repr(modname.lower()))

    # go to project root
    root = find_project()
    if root != False:
        os.chdir(root)
    else:
        raise PyscaleError('Pyscale project not found (missing Cakefile?)')

    # create folder
    folder = 'app/%s' % modname
    if osp.isdir(folder):
        puts(fore.yellow(' exists ') + folder)
    else:
        puts(fore.green('  mkdir ') + folder)
        os.makedirs(folder)

    # create file
    modfile = 'app/%s/main' % modname
    tplfile = osp.join(pyscale.__path__[0], 'files', 'module')

    if osp.exists(modfile):
        raise PyscaleError('Module already exists. Aborting...')
    else:
        with open(tplfile) as f:
            tpl = jinja2.Template(f.read())
            tpl = tpl.render(module=modname.title())

        puts(fore.green(' create ') + modfile)
        with open(modfile, 'w') as f:
            f.write(tpl)
예제 #9
0
파일: tasks.py 프로젝트: alexcepoi/pyscale
def status():
	""" View running modules """
	for module, pid, pidfile in running_modules():
		if not osp.exists("/proc/%s" % pid):
			puts(fore.red("%s (pid %s) crashed" % (module, pid)))

	pids = map(operator.itemgetter(1), running_modules())
	if pids:
		pscomm = "ps -p %s -o pid,user,command:50,pcpu,pmem,vsz,nice,start,time" % ','.join(pids)
		psinfo = shell(pscomm).split('\n')

		if len(psinfo) > 1 and psinfo[1]:
			puts(fore.green(psinfo[0]))

			for ps in psinfo[1:]:
				color = lambda mobj: re.sub(mobj.group(1), fore.cyan(mobj.group(1)), mobj.group(0))
				puts(re.sub('app/(.*?)/main', color, ps))
예제 #10
0
파일: console.py 프로젝트: palnes/pyscale
def reinit(namespace, info=True):
    # clean sockets
    for sock in namespace.sockets:
        delattr(namespace, sock.name)

    # create sockets
    namespace.all = MultiSocket('*')
    namespace.sockets = namespace.all.objs

    for sock in namespace.sockets:
        setattr(namespace, sock.name, sock)

    # display info
    if info:
        puts('=== ' + fore.blue('PyScale Console') + ' =', padding='=')
        for sock in ['all'] + sorted([x.name for x in namespace.sockets]):
            puts('    ' + fore.green('>>> ') + sock)
        puts('=====================', padding='=')
예제 #11
0
def reinit(namespace, info=True):
	# clean sockets
	for sock in namespace.sockets:
		delattr(namespace, sock.name)

	# create sockets
	namespace.all = MultiSocket('*')
	namespace.sockets = namespace.all.objs

	for sock in namespace.sockets:
		setattr(namespace, sock.name, sock)
	
	# display info
	if info:
		puts('=== ' + fore.blue('PyScale Console') + ' =', padding='=')
		for sock in ['all'] + sorted([x.name for x in namespace.sockets]):
			puts('    ' + fore.green('>>> ') + sock)
		puts('=====================', padding='=')
예제 #12
0
    def decorator(base):
        info = ': ' + arg if type(arg) is str else ''
        header = fore.green('** ' + fore.cyan(base.__name__) + info)

        def func(*args, **kwargs):
            sys.stdout.indent_level += 1

            puts(header)
            base(*args, **kwargs)

            sys.stdout.indent_level -= 1

        params = inspect.formatargspec(*inspect.getargspec(base))[1:-1]
        specformat = fore.cyan('%s') + ' ' + fore.white('%s')

        func._task = True
        func._spec = specformat % (base.__name__, params)
        func._desc = re.sub('\s+', ' ', inspect.getdoc(base) or '')
        return func
예제 #13
0
파일: lib.py 프로젝트: Ju2ender/cake
	def decorator(base):
		info = ': ' + arg if type(arg) is str else ''
		header = fore.green('** ' + fore.cyan(base.__name__) + info)

		def func(*args, **kwargs):
			sys.stdout.indent_level += 1

			puts(header)
			base(*args, **kwargs)

			sys.stdout.indent_level -= 1

		params = inspect.formatargspec(*inspect.getargspec(base))[1:-1]
		specformat = fore.cyan('%s') + ' ' + fore.white('%s')

		func._task = True
		func._spec = specformat % (base.__name__, params)
		func._desc = re.sub('\s+', ' ', inspect.getdoc(base) or '')
		return func
예제 #14
0
파일: tasks.py 프로젝트: palnes/pyscale
def status():
    """ View running modules """
    for module, pid, pidfile in running_modules():
        if not osp.exists("/proc/%s" % pid):
            puts(fore.red("%s (pid %s) crashed" % (module, pid)))

    pids = map(operator.itemgetter(1), running_modules())
    if pids:
        pscomm = "ps -p %s -o pid,user,command:50,pcpu,pmem,vsz,nice,start,time" % ','.join(
            pids)
        psinfo = shell(pscomm).split('\n')

        if len(psinfo) > 1 and psinfo[1]:
            puts(fore.green(psinfo[0]))

            for ps in psinfo[1:]:
                color = lambda mobj: re.sub(mobj.group(
                    1), fore.cyan(mobj.group(1)), mobj.group(0))
                puts(re.sub('app/(.*?)/main', color, ps))
예제 #15
0
def println(line):
    # blank line
    if re.match(r'\s*$', line):
        return puts(line)

    # logfile header
    mobj = re.match(r'==> (.*) <==$', line)
    if mobj:
        return puts(
            style.bright(
                fore.black('==> ') + fore.white(mobj.group(1)) +
                fore.black(' <==')))

    # exception line
    if re.match(EXCEPTION_PREFIX, line):
        return puts(fore.red(line))

    # standard log line
    basic = r'(.*?\s+)'

    date = basic * 3
    time = basic
    type = basic
    file = '(\[.*?\s+)\])'

    mobj = re.match(basic * 6 + r'(.*)', line)
    if not mobj:
        # non-conventional line
        return puts(line)
    else:
        groups = list(mobj.groups())

        groups.insert(0, str(fore.cyan))
        groups.insert(4, str(fore.blue))
        groups.insert(6, str(style.bright))
        groups.insert(8, str(style.reset_all))
        groups.insert(9, str(fore.cyan))
        groups.insert(11, str(style.reset_all))

        for idx, string in enumerate(groups):
            string = re.sub(r'(STATUS)', fore.white(r'\1'), string)
            string = re.sub(r'(DEBUG)', fore.white(r'\1'), string)
            string = re.sub(r'(INFO)', fore.green(r'\1'), string)
            string = re.sub(r'(WARNING)', fore.yellow(r'\1'), string)
            string = re.sub(r'(ERROR)', fore.red(r'\1'), string)
            string = re.sub(r'(EXCEPT)', fore.red(r'\1'), string)

            groups[idx] = string

        groups[-1] = re.sub(r'\[', fore.cyan(r'['), groups[-1])
        groups[-1] = re.sub(r'\]', fore.cyan(r']'), groups[-1])

        groups[-1] = re.sub(r'~>', fore.blue(r'~>'), groups[-1])
        groups[-1] = re.sub(r'<~', fore.yellow(r'<~'), groups[-1])

        groups[-1] = re.sub(r'\(', fore.cyan(r'('), groups[-1])
        groups[-1] = re.sub(r'\)', fore.cyan(r')'), groups[-1])

        groups[-1] = re.sub(r"'", fore.cyan(r"'"), groups[-1])
        groups[-1] = re.sub(r'"', fore.cyan(r'"'), groups[-1])

        return puts(''.join(groups))
예제 #16
0
	def ignore(dirname, names):
		common = osp.commonprefix([project, dirname])

		puts(fore.green('   init ') + osp.join(projname, dirname[len(common)+1:]))
		return []