def getConnDbByReq(request): ''' 在http请求时,获取连接数据表的连接对象 ''' hk = request.session.get(u'hk') try: conn_db = ExternalDbModel.objects.get(pk = hk) except Exception, e: logExcInfo() raise Exception('xxxxxxxxxx')
def handleRefresh(request, wi_id): """ 处理对组件的更新请求 """ try: handler = RefreshHandler(wi_id) if not handler.checkRefreshable(): return MyHttpJsonResponse({'succ': False, 'msg': 'xxxx'}) data = handler.handle() except Exception, e: logExcInfo() return MyHttpJsonResponse({'succ': False})
def updateStatus(self): """ 激活对象 """ if not (self.engine and self.conn and self.insp): try: #self.engine = create_engine(self.cnt, echo=True) # turn on log self.engine = create_engine(self.cnt) self.conn = self.engine.connect() self.insp = inspect(self.engine) except Exception, e: logExcInfo() return False self.broadcast()
def reflect(self, name): """ 建立sa的对象与实际表的映射关系 """ meta = MetaData() # 建立过映射关系的不需要再建 if name in self.rf.keys(): return try: obj = Table(name, meta, autoload = True, autoload_with = self.engine) except Exception, e: logExcInfo() raise Exception(u'No such table, name = {0}'.format(name))
def handleDistinct(request): req = json.loads(request.GET.get(Protocol.FilterColumn)) info = map(lambda x: (x, req.get(x)), EXPRESS_FACTOR_KEYS_TUPLE) factor = FactorFactory.make(dict(info)) try: hk = request.session.get('hk') st = SqlExecutorMgr.stRestore(hk) sql_obj = st.getSwither().makeSelectSql( \ [factor], [], [], distinct = True \ ) data = st.execute(sql_obj).fetchall() result = zip(*data)[0] except ExternalDbModel.DoesNotExist, e: logExcInfo() resp = {'succ': False, 'msg': 'yyyyyyyyy'}
def eventModify(request, ev_id): ''' 修改事件 ''' content = json.loads(request.POST.get('data')) hk = request.session.get('hk') try: ev = EventModel.objects.get(pk = ev_id) if ev.m_creator != request.user: return MyHttpJsonResponse({'succ': False}) pair = makeEventKwargs(content) ev.update(**pair) tg = TriggerPsgModel(ev) tg.modify() except Exception, e: logExcInfo() return MyHttpJsonResponse({'succ': False})
def handleDraw(request): """ 获取能画出chart的数据 """ req_data = json.loads(request.POST.get('data', '{}'), object_pairs_hook=OrderedDict) rsu = checkExtentData(req_data) if not rsu[0]: return MyHttpJsonResponse({'succ': False, 'msg': rsu[1]}) hk = request.session.get('hk') try: producer = DrawDataProducer(hk) result = producer.produce(req_data) except Exception, e: logger.debug("catch Exception: %s" % e) logExcInfo() error_dict = {'succ': False, 'msg': str(e)} return MyHttpJsonResponse(error_dict)
def makeEventKwargs(content): ''' 构建事件对象 ''' # 必须要提供事件名字以及相应表达式 name, table, field, operator, value, alarm_kind = \ map(lambda x: content.get(x), \ ('name', 'table', 'field', 'operator', 'value', 'alarm')) ''' table, colname, kind, func = map(lambda x: field.get(x), \ ('table', 'name', 'kind', 'cmd') ''' # 为用户输入数据建模过程 try: lfactor = FactorFactory().make(field) rfactor = FactorFactory().make(value) except Exception, e: logExcInfo() raise Exception('xxxxxxxxxxxx')
def cvtField(self, fieldfactor): if not isinstance(fieldfactor, FieldFactor): logExcInfo() raise Exception('error') tablename, colname, kind, funcname = fieldfactor.extract() table = self.storage.getTable(tablename) if not table.c.has_key(colname): msg = 'can''t recongnize column name of {0}'.format(colname) logger.error(msg) raise Exception(msg) obj = table.c.get(colname) if Protocol.TimeType == kind: obj = self.cvtTimeField(obj, funcname) elif Protocol.NumericType == kind and Protocol.NoneFunc != funcname: f = self.cvtFunc(funcname) obj = f(obj) elif Protocol.GisType == kind: obj = func.ST_AsGeoJSON(obj) return obj
def eventCreate(request): ''' 新建事件 ''' content = json.loads(request.POST.get('data')) hk = request.session.get('hk') user = request.user try: # 保存事件记录 # 先保存主要是为了获得pk,从而在触发器实现中,方便保存外键关系 pair = makeEventKwargs(content) conn = ExternalDbModel.objects.get(pk = hk) kwargs = dict(pair, m_creator = user, m_conn_db = conn) ev = EventModel.objects.create(**kwargs) # 用触发器机制实现监控机制 tg = TriggerPsgModel(ev, hk) tg.on() except Exception, e: logExcInfo() # 实现失败,删除该事件 EventModel.objects.filter(pk = ev.pk).delete() #事件上要区分,不是所有事件都要删 return MyHttpJsonResponse({'succ': False})
@require_http_methods(['POST']) @login_required def eventDelete(request, id): ''' 删除事件 ''' hk = request.session.get('hk') try: ev = EventModel.objects.get(pk = id) tg = TriggerPsgModel(ev, hk) tg.off() except EventModel.DoesNotExist, e: return MyHttpJsonResponse({'succ': False, 'msg': 'xx'}) except Exception, e: logExcInfo() return MyHttpJsonResponse({'succ': False}) EventModel.objects.filter(pk = id).delete() return MyHttpJsonResponse({'succ': True}) def pushToClient(event_name, user_name, result): """ 主动推送信息到前端 """ logger.info('name is {}, result is {}, username is {}'.format(event_name, result, user_name)) send_event(event_name, json.dumps({ 'result': result }), channel = SSE_CHANNEL_TEMPLATE.format(user_name))