Beispiel #1
0
 def __init__(self, cache_config,cache_name="cache",stattimes=300,poolsize=10):
     self.cache_name = cache_name
     self.stattimes = stattimes
     self.cache_config = cache_config
     # try:
     #     import cyclone.redis
     #     self.redis = cyclone.redis.lazyConnectionPool(
     #         host=cache_config.get('host'), 
     #         port=cache_config.get("port"),
     #         password=cache_config.get('passwd'),
     #         dbid=cache_config.get('db',0), 
     #         poolsize=poolsize)
     # except Exception as err:
     #     logger.exception(err)
     import redis
     self.redis = redis.StrictRedis(
         host=cache_config.get('host'), 
         port=cache_config.get("port"), 
         password=cache_config.get('passwd'),
         db=cache_config.get('db',0))
     self.get_total = 0
     self.set_total = 0
     self.hit_total = 0
     self.miss_total = 0
     self.update_total = 0
     self.delete_total = 0
     # self.print_hit_stat(first_delay=10)
     logger.info('redis client connected')
Beispiel #2
0
 def __init__(self,
              cache_config,
              cache_name="cache",
              stattimes=300,
              poolsize=10):
     self.cache_name = cache_name
     self.stattimes = stattimes
     self.cache_config = cache_config
     # try:
     #     import cyclone.redis
     #     self.redis = cyclone.redis.lazyConnectionPool(
     #         host=cache_config.get('host'),
     #         port=cache_config.get("port"),
     #         password=cache_config.get('passwd'),
     #         dbid=cache_config.get('db',0),
     #         poolsize=poolsize)
     # except Exception as err:
     #     logger.exception(err)
     import redis
     self.redis = redis.StrictRedis(host=cache_config.get('host'),
                                    port=cache_config.get("port"),
                                    password=cache_config.get('passwd'),
                                    db=cache_config.get('db', 0))
     self.get_total = 0
     self.set_total = 0
     self.hit_total = 0
     self.miss_total = 0
     self.update_total = 0
     self.delete_total = 0
     # self.print_hit_stat(first_delay=10)
     logger.info('redis client connected')
Beispiel #3
0
    def post(self):

        uname = self.get_argument("username")
        upass = self.get_argument("password")
        next_url = self.get_argument("next")
        print next_url

        if not uname:
            return self.render_json(code=1, msg=u"请填写用户名")
        if not upass:
            return self.render_json(code=1, msg=u"请填写密码")

        enpasswd = tools.saltmd5(upass.encode())

        opr = self.db.query(models.SysOperator).filter_by(
            operator_name=uname, operator_pass=enpasswd).first()

        if not opr:
            return self.render_json(code=1, msg=u"用户名密码不符")

        if opr.operator_status == 1:
            return self.render_json(code=1, msg=u"该操作员账号已被停用")

        self.set_session_user(uname, self.request.remote_ip, opr.operator_type,
                              utils.get_currtime())

        logger.info(u'操作员(%s)登陆' % (uname))
        self.db.commit()
        self.render_json(code=0, msg="ok", next=next_url)
Beispiel #4
0
 def handler_wapper(cls):
     if not menuname:
         self.add_handler(cls, url_pattern)
         selfobj.free_routes.append(url_pattern)
         logger.info("add free route [%s:%s]" % (url_pattern, repr(cls)))
     else:
         selfobj.add_route(cls, url_pattern, menuname, category, 
                 order=order, is_menu=is_menu, is_open=is_open,oem=oem)
         logger.info("add managed route [%s:%s]" % (url_pattern, repr(cls)))
     return cls
Beispiel #5
0
 def start_task(self,taskcls):
     try:
         task = taskcls(self)
         first_delay = task.first_delay()
         if first_delay:
             reactor.callLater(first_delay,self.process_task,task)
         else:
             self.process_task(task)
         logger.info('init task %s done'%repr(task))
     except Exception as err:
         logger.exception(err)
Beispiel #6
0
 def start_task(self, taskcls):
     try:
         task = taskcls(self)
         first_delay = task.first_delay()
         if first_delay:
             reactor.callLater(first_delay, self.process_task, task)
         else:
             self.process_task(task)
         logger.info('init task %s done' % repr(task))
     except Exception as err:
         logger.exception(err)
Beispiel #7
0
 def initapp(r):
     app = web.Application(gdata)
     if gdata.config.web.get("ssl"):
         logger.info("load ssl key %s"%gdata.config.web.privatekey)
         logger.info("load ssl crt %s"%gdata.config.web.certificate)
         from twisted.internet import ssl
         sslContext = ssl.DefaultOpenSSLContextFactory(gdata.config.web.privatekey, gdata.config.web.certificate)
         reactor.listenSSL(
             gdata.port or int(gdata.config.web.port),
             app,
             contextFactory=sslContext,
             interface=gdata.config.web.host
         )
     else:
         reactor.listenTCP(gdata.port or int(gdata.config.web.port), app, interface=gdata.config.web.host)
Beispiel #8
0
    def post(self):
        form = password_forms.password_update_form()
        if not form.validates(source=self.get_params()):
            self.render("base_form.html", form=form)
            return
        if form.d.tr_user_pass != form.d.tr_user_pass_chk:
            self.render("base_form.html", form=form, msg=u'确认密码不一致')
            return
        opr = self.db.query(models.SysOperator).filter_by(
            operator_name=form.d.tr_user).first()
        opr.operator_pass = tools.saltmd5(form.d.tr_user_pass)

        logger.info(u'修改%s密码 ' % (self.current_user.username))

        self.db.commit()
        self.redirect("/admin")
Beispiel #9
0
 def initapp(r):
     app = web.Application(gdata)
     if gdata.config.web.get("ssl"):
         logger.info("load ssl key %s" % gdata.config.web.privatekey)
         logger.info("load ssl crt %s" % gdata.config.web.certificate)
         from twisted.internet import ssl
         sslContext = ssl.DefaultOpenSSLContextFactory(
             gdata.config.web.privatekey, gdata.config.web.certificate)
         reactor.listenSSL(gdata.port or int(gdata.config.web.port),
                           app,
                           contextFactory=sslContext,
                           interface=gdata.config.web.host)
     else:
         reactor.listenTCP(gdata.port or int(gdata.config.web.port),
                           app,
                           interface=gdata.config.web.host)
Beispiel #10
0
 def handler_wapper(cls):
     if not menuname:
         self.add_handler(cls, url_pattern)
         selfobj.free_routes.append(url_pattern)
         logger.info("add free route [%s:%s]" %
                     (url_pattern, repr(cls)))
     else:
         selfobj.add_route(cls,
                           url_pattern,
                           menuname,
                           category,
                           order=order,
                           is_menu=is_menu,
                           is_open=is_open,
                           oem=oem)
         logger.info("add managed route [%s:%s]" %
                     (url_pattern, repr(cls)))
     return cls
Beispiel #11
0
    def print_hit_stat(self, first_delay=0):
        if first_delay > 0:
            reactor.callLater(first_delay, self.print_hit_stat)
            return

        logstr = """

----------------------- cache stat ----------------------
#  cache name              : {0}
#  visit cache total       : {1}
#  add cache total         : {2}
#  hit cache total         : {3}
#  miss cache total        : {4}
#  update cache total      : {5}
#  delete cache total      : {6}
#  current db cache total  : {7}
---------------------------------------------------------

""".format(self.cache_name, self.get_total, self.set_total, self.hit_total,
           self.miss_total, self.update_total, self.delete_total, self.count())
        logger.info(logstr)
        reactor.callLater(self.stattimes, self.print_hit_stat)
Beispiel #12
0
    def post(self):
        active = self.get_argument("active", "syscfg")
        for param_name in self.get_params():
            if param_name in ("active", "submit"):
                continue

            param = self.db.query(
                models.SysParam).filter_by(param_name=param_name).first()
            if not param:
                param = models.SysParam()
                param.param_name = param_name
                param.param_value = self.get_argument(param_name)
                self.db.add(param)
            else:
                param.param_value = self.get_argument(param_name)

            dispatch.pub(redis_cache.CACHE_SET_EVENT, param.param_name,
                         param.param_value, 600)

        logger.info(u'操作员(%s)修改参数' % (self.current_user.username))
        self.db.commit()
        self.redirect("/admin/param?active=%s" % active)
Beispiel #13
0
    def print_hit_stat(self, first_delay=0):
        if first_delay > 0:
            reactor.callLater(first_delay, self.print_hit_stat)
            return
            
        logstr = """

----------------------- cache stat ----------------------
#  cache name              : {0}
#  visit cache total       : {1}
#  add cache total         : {2}
#  hit cache total         : {3}
#  miss cache total        : {4}
#  update cache total      : {5}
#  delete cache total      : {6}
#  current db cache total  : {7}
---------------------------------------------------------

""".format(self.cache_name, self.get_total,self.set_total,self.hit_total,self.miss_total,
        self.update_total,self.delete_total,self.count())
        logger.info(logstr)
        reactor.callLater(self.stattimes, self.print_hit_stat)
Beispiel #14
0
class RadiusdAuthorize(protocol.DatagramProtocol):
    def __init__(self, config, dbengine=None,statcache=None):
        self.config = config
        self.dbengine = dbengine
        self.statcache = statcache
        self.radloader = RadiusLoader(config,dbengine)

    def processPacket(self, coareq, (host,port)):
        session_id = coareq.get_acct_sessionid()
        session = RadiusSession.sessions.pop(session_id,None)
        if session:
            session.stop()
        reply = coareq.CreateReply()
        logger.info("[RADIUSAuthorize] :: Send Authorize radius response: %s" % (repr(reply)))
        if self.config.radius.debug:
            logger.debug(message.format_packet_str(reply))
        self.transport.write(reply.ReplyPacket(),  (host, port))
Beispiel #15
0
 def __init__(self, gdata):
     self.gdata = gdata
     self.config = gdata.config
     self.que = deque() 
     self.cache = gdata.cache
     self.db_engine = gdata.db_engine
     self.metadata = models.get_metadata(self.db_engine)
     self.ops = {
         'radstart':self.start_session,
         'radstop':self.stop_session
     }
     self.radstart = ZmqPullConnection(ZmqFactory(), ZmqEndpoint('connect', self.config.mqproxy.radstart_connect))
     self.radstop = ZmqSubConnection(ZmqFactory(), ZmqEndpoint('connect',self.config.mqproxy.radstop_connect))
     self.radresp = ZmqPushConnection(ZmqFactory(), ZmqEndpoint('connect', self.config.mqproxy.radresp_connect))
     self.radstop.subscribe('radstop')
     self.radstop.gotMessage = self.subdataReceived
     self.radstart.onPull = self.dataReceived
     self.process_poll()
     logger.info("Start radstart %s" % self.radstart)
     logger.info("Start radstop %s" % self.radstop)
     logger.info("Start radresp %s" % self.radresp)
Beispiel #16
0
 def event_cache_delete(self, key):
     logger.info("event: delete cache %s " % key)
     self.delete(key)
Beispiel #17
0
 def add_oplog(self, message):
     msg = u"operate_log: %s %s %s %s" % (
         self.current_user.username, self.current_user.ipaddr,
         utils.get_currtime(), utils.safeunicode(message))
     logger.info(msg, trace="oplog")
Beispiel #18
0
 def event_cache_set(self, key, value, expire=3600):
     logger.info("event: set cache %s " % key)
     self.set(key, value, expire)
Beispiel #19
0
        session_id = coareq.get_acct_sessionid()
        session = RadiusSession.sessions.pop(session_id,None)
        if session:
            session.stop()
        reply = coareq.CreateReply()
        logger.info("[RADIUSAuthorize] :: Send Authorize radius response: %s" % (repr(reply)))
        if self.config.radius.debug:
            logger.debug(message.format_packet_str(reply))
        self.transport.write(reply.ReplyPacket(),  (host, port))


    def datagramReceived(self, datagram, (host, port)):
        try:
            radius = self.radloader.getRadius(host)
            if not radius:
                logger.info('[RADIUSAuthorize] :: Dropping Authorize packet from unknown host ' + host)
                return

            coa_req = message.CoAMessage(packet=datagram, dict=radius.dict, secret=six.b(radius.secret))
            logger.info("[RADIUSAuthorize] :: Received Authorize radius request: %s" % message.format_packet_log(coa_req))

            if self.config.radius.debug:
                logger.debug(message.format_packet_str(coa_req))

            self.processPacket(coa_req,  (host, port))

        except packet.PacketError as err:
            errstr = 'RadiusError:Dropping invalid packet from {0} {1},{2}'.format(
                host, port, utils.safeunicode(err))
            logger.error(errstr)
Beispiel #20
0
def init(gdata):
    appname = os.path.basename(gdata.app_dir)
    utils.update_tz(gdata.config.system.tz)
    syslog = logger.Logger(gdata.config, appname)
    dispatch.register(syslog)
    log.startLoggingWithObserver(syslog.emit, setStdout=0)

    gdata.db_engine = get_engine(gdata.config)
    gdata.db = scoped_session(
        sessionmaker(bind=gdata.db_engine, autocommit=False, autoflush=False))
    # web 应用初始化
    gdata.settings = dict(
        cookie_secret="12oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=",
        login_url="/admin/login",
        template_path=os.path.join(os.path.dirname(__file__), "views"),
        static_path=os.path.join(os.path.dirname(__file__), "static"),
        xsrf_cookies=True,
        xheaders=True,
        conf=gdata.config)

    # 模板初始化
    gdata.tp_lookup = TemplateLookup(
        directories=[gdata.settings['template_path']],
        default_filters=['decode.utf8'],
        input_encoding='utf-8',
        output_encoding='utf-8',
        encoding_errors='ignore',
        module_directory="/tmp/toughcloud")

    gdata.redisconf = redis_conf(gdata.config)
    gdata.session_manager = session.SessionManager(
        gdata.redisconf, gdata.settings["cookie_secret"], 7200)
    gdata.cache = CacheManager(gdata.redisconf,
                               cache_name='Cache-%s' % os.getpid())
    gdata.aes = utils.AESCipher(key=gdata.config.system.secret)

    # 数据库备份器初始化
    gdata.db_backup = DBBackup(models.get_metadata(gdata.db_engine),
                               excludes=[])

    #cache event init
    dispatch.register(gdata.cache)

    # app handles init
    handler_dir = os.path.join(gdata.app_dir, 'handlers')
    load_handlers(handler_path=handler_dir,
                  pkg_prefix="%s.handlers" % appname,
                  excludes=[])
    gdata.all_handlers = permit.all_handlers

    # app event init
    event_dir = os.path.abspath(os.path.join(gdata.app_dir, 'events'))
    load_events(event_dir, "%s.events" % appname)

    # init zmq
    gdata.radque = deque([], 8192)
    gdata.radstart = ZmqPushConnection(
        ZmqFactory(), ZmqEndpoint('bind', gdata.config.mqproxy.radstart_bind))
    gdata.radstop = ZmqPubConnection(
        ZmqFactory(), ZmqEndpoint('bind', gdata.config.mqproxy.radstop_bind))
    gdata.radresp = ZmqPullConnection(
        ZmqFactory(), ZmqEndpoint('bind', gdata.config.mqproxy.radresp_bind))
    gdata.radresp.onPull = lambda m: gdata.radque.appendleft(
        msgpack.unpackb(m[0]))
    gdata.statcache = StatCounter(gdata)
    gdata.statcache.init()
    gdata.statcache.poll_calc()

    logger.info(gdata.radstart)
    logger.info(gdata.radstop)
    logger.info(gdata.radresp)
Beispiel #21
0
 def event_cache_update(self, key, value, expire=3600):
     logger.info("event: update cache %s " % key)
     self.update(key, value, expire)
Beispiel #22
0
 def event_cache_delete(self, key):
     logger.info("event: delete cache %s " % key)
     self.delete(key)
Beispiel #23
0
 def event_cache_update(self, key, value, expire=3600):
     logger.info("event: update cache %s " % key)
     self.update(key, value, expire)
Beispiel #24
0
 def event_cache_set(self, key, value, expire=3600):
     logger.info("event: set cache %s " % key)
     self.set(key, value, expire)