Exemple #1
0
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')
Exemple #2
0
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})
Exemple #3
0
    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()
Exemple #4
0
    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))
Exemple #5
0
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'}
Exemple #6
0
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})
Exemple #7
0
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)
Exemple #8
0
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')
Exemple #9
0
    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
Exemple #10
0
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})
Exemple #11
0
@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))