Esempio n. 1
0
def main(args):
    if len(args) != 1:
        print('ERROR: sadm-listen exec invalid args', file=sys.stderr)
        return 1
    taskfn = args[0]
    obj = None
    try:
        with open(taskfn, 'r') as fh:
            obj = json.load(fh)
    except Exception as err:
        log.error("%s" % err)
        return 2
    finally:
        path.unlink(taskfn)
    log.init(obj.get('sadm.log', 'warn'))
    log.debug(version.string('sadm-listen'))
    log.debug("task file %s" % taskfn)
    task = obj.get('task', None)
    if task is None:
        log.error('listen.exec task not set')
        return 3
    taskAction = obj.get('task.action', None)
    if taskAction is None:
        log.error("listen.exec task %s: no action" % task)
        return 4
    taskArgs = obj.get('task.args', None)
    if taskArgs is None:
        log.error("listen.exec task %s: no args" % task)
        return 5
    cliURL = obj.get('sadm.listen.url', 'http://127.0.0.1:3666')
    cli = ListenClient(cliURL)
    return cli.exec(task, taskAction, taskArgs)
Esempio n. 2
0
def _tplData(view, d, _start):
    log.debug("view data %s" % view)
    d['view'] = view
    d['version'] = version.get()
    d['now'] = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
    d['took'] = "%.5f" % (datetime.timestamp(datetime.now()) - _start)
    return d
Esempio n. 3
0
def test_dummyLogger():
    log._logger = log._dummyLogger()
    log.debug('')
    log.error('')
    log.warn('')
    log.info('')
    log.msg('')
Esempio n. 4
0
	def exec(self, task, action, args):
		log.debug("exec: %s %s" % (task, action))
		path = self._path('_', 'exec', task, action)
		status = self._post(path, json.dumps(args).encode('UTF-8'))
		if status != 200:
			return 9
		return 0
Esempio n. 5
0
def main(argv = None):
	if argv is None:
		argv = sys.argv[1:] # pragma: no cover
	args = _getArgs(argv)
	log.debug("build %s/%s" % (args.profile, args.env))
	rc, _ = env.run(args.profile, args.env, 'build')
	return rc
Esempio n. 6
0
def index():
    log.debug("index")
    config = cfg.new()
    return {
        'cfgfile': config.filename(),
        'cfg': _getCfg(config),
    }
Esempio n. 7
0
def main(argv=None):
    if argv is None:
        argv = sys.argv[1:]  # pragma: no cover

    sumode = 'not'
    if '--sumode-pre' in argv:
        argv.remove('--sumode-pre')
        sumode = 'pre'
    elif '--sumode-post' in argv:
        argv.remove('--sumode-post')
        sumode = 'post'

    _parser = flags.new('sadm', desc='deploy sadm env')
    args = _getArgs(_parser, argv)
    log.debug("deploy %s/%s sumode=%s" % (args.profile, args.env, sumode))

    if sumode == 'not' and sh.getuid() == 0:
        log.error('do not run as root')
        return 9

    try:
        cmd = args.command
    except AttributeError:  # pragma: no cover
        log.error('invalid usage')
        _parser.print_usage()
        return 1
    log.debug("dispatch command %s" % cmd)

    if args.command == 'import':
        return loader.main(args)

    return deploy.main(args, sumode)
Esempio n. 8
0
	def check(self, req):
		log.debug('check')
		self.cookie(req)
		if self._id is not None:
			row = self._db.get(self._id, update = True)
			if row:
				return Session(row['pk'], row['id'], row['user'], row['last'])
		return None
Esempio n. 9
0
def index():
    log.debug("index")
    config = cfg.new()
    return {
        'cfgfile': config.filename(),
        'cfg': _getCfg(config),
        'user': getenv('USER', 'nouser?'),
    }
Esempio n. 10
0
def about():
	log.debug("about")
	return {
		'pythonVersion': python_version,
		'bottleVersion': bottle_version,
		'sqliteVersion': "%s" % sqlite3.version,
		'sqliteLibVersion': "%s" % sqlite3.sqlite_version,
		'curyear': str(date.today().year),
	}
Esempio n. 11
0
 def __init__(self, name, config=None):
     log.debug("profile init %s" % name)
     if config is None:
         config = cfg.new()
     if name == 'default':
         name = config.get('default', 'profile')
     self._name = name
     self._load(config)
     self.config = config
Esempio n. 12
0
 def login(self, req, sessid):
     username = self._auth.login(req)
     if not username:
         err = AuthError('could not get the username')
         log.debug("%s" % err)
         raise err
     sess = self.sess.save(sessid, username)
     log.info("user login: %s" % username)
     return self._user(sess)
Esempio n. 13
0
def _sumode(env, step):
    sumode = '-'.join(['--sumode', step])
    log.debug("call sumode %s" % sumode)
    sudo = env.profile.config.get('deploy', 'sudo.command')
    cmd = sudo.strip().split()
    cmd.extend(flags.cmdline.split())
    cmd.append(sumode)
    log.debug("sumode cmd %s" % ' '.join(cmd))
    return call(cmd)
Esempio n. 14
0
	def hook(self, action, args):
		repodir = args.get('repo.path', 'NOREPOPATH')
		log.debug("hook action %s repo dir %s" % (action, repodir))
		if action == 'push':
			commit = args.get('repo.checkout', 'NOCOMMIT')
			log.debug("git deploy %s %s" % (repodir, commit))
			git.pull(repodir)
			git.checkout(repodir, commit)
			vcs.deploy(repodir)
Esempio n. 15
0
def serve(filename):
    filename = path.normpath(filename)
    ext = path.splitext(filename)[1]
    if ext == '' or filename.startswith('.') or \
     not _serveExtension.get(ext, False):
        log.warn("static file refuse %s" % filename)
        return bottle.HTTPError(404, "file not found")
    log.debug("serve %s" % filename)
    return bottle.static_file(filename, root=_rootdir)
Esempio n. 16
0
 def _init(self, cfgfile=None):
     if cfgfile is None:
         cfgfile = _cfgFile
     self._fn = cfgfile
     log.debug("cfg init %s" % self._fn)
     self.reload()
     n = self.get('default', 'name')
     self._name = n.strip()
     if self._name == '':
         self._name = self._getName()
Esempio n. 17
0
def _dbInit():
	log.debug("syslog init %s" % _dbfile)
	log.debug("sqlite version %s (lib %s)" % (sqlite3.version, sqlite3.sqlite_version))
	mkdb = not path.isfile(_dbfile)
	if mkdb:
		dbdir = path.dirname(_dbfile)
		makedirs(dbdir, mode = 0o700, exist_ok = True)
	db = sqlite3.connect(_dbfile)
	db.row_factory = sqlite3.Row
	return _dbCheck(db, mkdb)
Esempio n. 18
0
    def apply(self, callback, ctx):
        log.debug("apply for rule: %s" % ctx.rule)

        def wrapper(*args, **kwargs):
            log.debug('apply.wrapper')
            resp = callback(*args, **kwargs)
            response.headers['Content-Type'] = 'text/plain; charset=UTF-8'
            return resp

        return wrapper
Esempio n. 19
0
def handle(task, action):
    log.debug("exec handle: %s %s" % (task, action))
    taskman = _taskman.get(task, None)
    if taskman is None:
        raise error(500, "listen.exec task %s: no manager" % task)
    try:
        args = json.load(request.body)
        taskman.hook(action, args)
    except Exception as err:
        raise error(500, "%s" % err)
    return 'OK\n'
Esempio n. 20
0
def init(wapp, config):
	wapp.install(ResponsePlugin())

	wapp.route('/_/exec/<task>/<action>', 'POST', _exec.handle, name = '_exec')

	initDone = {}
	for sect in config.sections():
		if sect.startswith('sadm.webhook:') or sect.startswith('webhook.repo:'):
			if not initDone.get('webhook', False):
				log.debug('enable webhook')
				_initWebhooks(wapp)
				initDone['webhook'] = True
Esempio n. 21
0
def new(cfgfile=None):
    log.debug('cfg.new')
    config = Config(
        defaults=_DEFAULT,
        strict=True,
        default_section='default',
        empty_lines_in_values=False,
        comment_prefixes=('#', ),
        delimiters=('=', ),
    )
    config._init(cfgfile=cfgfile)
    return config
Esempio n. 22
0
def _getURL(req):
    # ~ for k, v in req.headers.items():
    # ~ log.debug("%s: %s" % (k, v))
    u = urlparse(req.url)
    scheme = u.scheme
    if not scheme:  # pragma: no cover
        scheme = 'http'
    port = u.port
    if not port:
        port = '3666'
    url = "%s://127.0.0.1:%s" % (scheme, port)
    log.debug("URL: %s" % url)
    return url
Esempio n. 23
0
 def __init__(self, config):
     if not config.has_section('devops.auth'):
         config.add_section('devops.auth')
     self._cfg = config
     self.sess = WebappSession()
     self.type = config.get('devops', 'auth', fallback='config')
     log.debug("init %s manager" % self.type)
     if self.type == 'config':
         self._auth = AuthConfig(config)
     elif self.type == 'sslcert':
         self._auth = AuthSSLCert(config)
     else:
         raise RuntimeError("invalid auth type: %s" % self.type)
Esempio n. 24
0
def _handler(error):
    log.debug("%d - %s" % (error.status_code, error.status))
    argsLen = len(error.args)
    if argsLen >= 3:
        log.error("%s %d - %s" %
                  (request.remote_addr, error.status_code, error.args[2]))
        if argsLen >= 4:
            log.debug("%s" % error.args[3])
    else:
        log.error("%s %d - %s" %
                  (request.remote_addr, error.status_code, request.path))
    response.headers['Content-Type'] = 'text/html; charset=UTF-8'
    return tpl.parse('errors', error=error)
Esempio n. 25
0
 def login(self, req):
     log.debug('login sslcert')
     username = req.forms.get('username')
     if not username:
         raise bottle.HTTPError(401, 'username not provided')
     uid = self.check(req)
     x = self.auth.get(username, fallback=None)
     if x is None:
         raise AuthError("invalid username: %s" % username)
     uid = self.digest(uid.strip())
     if x != uid:
         raise AuthError("user %s: invalid id" % username)
     return username
Esempio n. 26
0
def dispatch(req, task, action, taskArgs):
    log.debug("dispatch task: %s - action: %s" % (task, action))
    reqURL = _getURL(req)
    obj = {
        'sadm.log': log.curLevel(),
        'sadm.listen.url': reqURL,
        'task': task,
        'task.action': action,
        'task.args': taskArgs,
    }
    taskfn = None
    with sh.mktmp(prefix=__name__, suffix=".%s.json" % task) as fh:
        taskfn = fh.name()
        fh.write(json.dumps(obj))
    _sched(taskfn)
Esempio n. 27
0
 def login(self, req):
     log.debug('login')
     username = req.forms.get('username')
     password = req.forms.get('password')
     if not username:
         raise bottle.HTTPError(401, 'username not provided')
     if not password:
         raise bottle.HTTPError(401, 'user password not provided')
     p = self.cfg.get(username, fallback=None)
     if p is None:
         raise AuthError("invalid username: %s" % username)
     h = self.digest(password)
     if h != p:
         raise AuthError("user %s: invalid password" % username)
     return username
Esempio n. 28
0
def parse(p, argv = None):
	global cmdline
	if argv is None:
		cmdline = ' '.join(sys.argv).strip() # pragma: no cover
	else:
		cmdline = [program]
		cmdline.extend(argv)
		cmdline = ' '.join(cmdline).strip()
	args = p.parse_args(args = argv)
	if args.debug:
		log.init('debug') # pragma: no cover
	else:
		log.init(args.log)
	log.debug("sadm version %s" % version.get())
	return args
Esempio n. 29
0
def index(limit = '100'):
	limit = request.query.get('limit', limit)
	try:
		if int(limit) < 0:
			limit = '0'
	except ValueError:
		limit = '0'
	log.debug("last %s messages" % limit)
	lvlmap = dict()
	for lname, lid in syslog._LVLMAP.items():
		lvlmap[lid] = lname
	return {
		'limit': limit,
		'msgs': syslog.last(int(limit)),
		'lvlmap': lvlmap,
	}
Esempio n. 30
0
		def wrapper(*args, **kwargs):
			log.debug('apply.wrapper')
			user = None
			autherr = None
			try:
				log.debug('user auth check')
				user = self.auth.check(bottle.request)
			except AuthError as err:
				autherr = err
			if autherr is None:
				kwargs['user'] = user
				resp = callback(*args, **kwargs)
				return resp
			else:
				log.error("auth error: %s" % autherr)
				return self.auth.error()