Beispiel #1
0
    def redisService(self, callback):
        '''
        返回纯缓存数据
        :param srv:
        :param callback:
        :return:
        '''
        ps = self.commonRequestParam()
        r = redis.GLOBAREDIS
        keys = r.keys(self._Srv["tableName"] + "*")
        p = r.pipeline()
        for k in keys:
            p.get(k)
        # r = json.dumps(p.execute(), cls=DateTimeEncoder, encoding='utf-8', ensure_ascii=False)
        r = p.execute()

        r = ",".join(map(lambda x: x.decode(), r))
        self.writeResult("[%s]" %
                         bytes(r, "utf-8").decode('raw_unicode_escape'))
        msglog.wirteMsg(
            r, self._Srv,
            uuid.uuid1().hex, {
                "clientid": self.request.remote_ip,
                "time": datetime.now(),
                "params": ps,
                "srv": self._Srv
            })
        self.finish()
        callback()
Beispiel #2
0
 def sqlService(self, callback):
     '''
     处理SQL服务,下面的程序没有检测传入参数的类型,错误的参数传入有可能出发500系统异常
     :param srv:
     :return:
     '''
     p = self.commonRequestParam()
     r = qsService.sqlService(self._Srv, p)
     if "errormsg" in r:
         self.render('msg.html', title=u"错误", msg=r["errormsg"])
         self.finish()
         callback()
     else:
         self.writeResult(r["result"])
         msglog.wirteMsg(
             "", self._Srv,
             uuid.uuid1().hex, {
                 "clientid": self.request.remote_ip,
                 "time": datetime.now(),
                 "sptime": r["sptime"],
                 "spdbtime": r["spdbtime"],
                 "params": p
             })
         self.finish()
         callback()
Beispiel #3
0
 def datatableService(self, callback):
     '''
     处理数据封装服务
     :param srv:
     :return:
     '''
     p = self.commonRequestParam()
     r = qsService.tableService(self._Srv, p)
     if "errormsg" in r:
         self.render('msg.html', title=u"错误", msg=r["errormsg"])
         self.finish()
         callback()
     else:
         self.writeResult(r["result"])
         msglog.wirteMsg(
             "", self._Srv,
             uuid.uuid1().hex, {
                 "clientid": self.request.remote_ip,
                 "time": datetime.now(),
                 "sptime": r["sptime"],
                 "spdbtime": r["spdbtime"],
                 "params": p
             })
         self.finish()
         callback()
Beispiel #4
0
 def on_response(response):
     spdbtime = (datetime.now() - dbtime).total_seconds() * 1000
     # if response.error:
     #     raise tornado.web.HTTPError(500)
     for h in response.headers:
         if h != 'Transfer-Encoding' and h != 'Content-Encoding':
             self.set_header(h, response.headers[h])
     part.write(response.body)
     part.finish()
     msglog.wirteMsg(
         response.body, self._Srv,
         uuid.uuid1().hex, {
             "clientid": self.request.remote_ip,
             "time": datetime.now(),
             "sptime":
             (datetime.now() - starttime).total_seconds() * 1000,
             "spdbtime": spdbtime,
             "params": ""
         })
     callback()
Beispiel #5
0
    def doGO(self, path, method):
        st = (datetime.now())

        self._Srv = redis.getfromRedis("SRV_URL_" + path)

        if self._Srv is None:
            self.render('msg.html', title=u"错误", msg=u"没有找到请求的服务")
            self.finish()
            return
        if self._Srv["enabled"] == 0:
            self.render('msg.html', title=u"错误", msg=u"该服务尚未启动")
            self.finish()
            return
        if not self.isValidRequest():
            return

        r = msgcache.getResultFromCache(self)
        if (self._Srv["cachetype"] == "N") or (r is None):
            if self._Srv['type'] == 1:  # WebService
                yield tornado.gen.Task(self.doProxy, path=path, method=method)
            elif self._Srv['type'] == 2:  # RESTful
                yield tornado.gen.Task(self.doProxy, path=path, method=method)
            elif self._Srv['type'] == 5:
                # result = sqlService(request, srv)
                yield tornado.gen.Task(self.sqlService)
            elif self._Srv['type'] == 6:
                # result = datatableService(request, srv)
                yield tornado.gen.Task(self.datatableService)
            elif self._Srv['type'] == 7:
                yield tornado.gen.Task(self.redisService)
            else:
                self.render('msg.html', title=u"错误", msg=u"该服务类型不支持访问")
                self.finish()
                return
        else:
            # 缓存命中
            self.write(r)
            self.finish()
            msglog.wirteMsg(
                "", self._Srv,
                uuid.uuid1().hex, {
                    "clientid": self.request.remote_ip,
                    "time": datetime.now(),
                    "sptime": (datetime.now() - st).total_seconds() * 1000,
                    "spdbtime": -1,
                    "params": ""
                })

        # 计算服务调用时间,更新服务计数器
        dt = (datetime.now() - st).total_seconds() * 1000
        GLOBAREDIS.incr("SRV_COUNT_" + str(self._Srv["serviceid"]))
        mt = GLOBAREDIS.mget([
            "SRV_MAXTIME_" + str(self._Srv["serviceid"]),
            "SRV_MINTIME_" + str(self._Srv["serviceid"])
        ])
        if mt[0] == None:
            GLOBAREDIS.set("SRV_MAXTIME_" + str(self._Srv["serviceid"]),
                           str(dt))
        else:
            if dt > float(mt[0]):
                GLOBAREDIS.set("SRV_MAXTIME_" + str(self._Srv["serviceid"]),
                               str(dt))

        if mt[1] == None:
            GLOBAREDIS.set("SRV_MINTIME_" + str(self._Srv["serviceid"]),
                           str(dt))
        else:
            if dt < float(mt[1]):
                GLOBAREDIS.set("SRV_MINTIME_" + str(self._Srv["serviceid"]),
                               str(dt))
        if settings.DEBUG:
            settings.debugLogger.debug("".join([
                "服务调用历时(ms),sid(",
                str(self._Srv["serviceid"]), "):",
                str(dt)
            ]))