#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
|
import sys
|
import binascii
|
try:
|
import threading
|
except ImportError:
|
import dummy_threading as threading
|
from Common import (CommFuncEx, CommFunc, mylog)
|
from DBCommon import (CommonDefine, error)
|
import traceback
|
|
|
SIDErrorCnt = 0
|
MAGIC_SID = 2266520
|
|
SIDErrorCounterLock = threading.Lock()
|
|
ADOExceptionCnt = 0
|
AdoExceptionCounterLock = threading.Lock()
|
|
#ÐèÒª¶àÏ̱߳£»¤
|
def addADOExceptionCount():
|
global ADOExceptionCnt
|
global AdoExceptionCounterLock
|
AdoExceptionCounterLock.acquire()
|
ADOExceptionCnt += 1
|
AdoExceptionCounterLock.release()
|
return ADOExceptionCnt
|
|
def getADOExceptionCount():
|
return ADOExceptionCnt
|
|
def fix_outgoingText(text):
|
if isinstance(text, unicode):
|
return CommFuncEx.UnicodeToEncoding(CommonDefine.ENCODING, text)[1]
|
#²»ÊÇunicode,²»´¦Àí
|
return text
|
|
def fix_incomingText(text):
|
if isinstance(text, str):
|
return CommFuncEx.EncodingToUnicode(CommonDefine.ENCODING, text)[1]
|
#²»ÊÇ×Ö·û´®£¬²»´¦Àí
|
return text
|
|
def fix_incoming(dictObj):
|
for k, v in dictObj.iteritems():
|
if isinstance(v, str):
|
result, convertText = CommFuncEx.EncodingToUnicode(CommonDefine.ENCODING, v)
|
if result:
|
dictObj[k] = convertText
|
|
def fix_outgoing(dictObj):
|
for k, v in dictObj.iteritems():
|
if isinstance(v, unicode):
|
result, convertText = CommFuncEx.UnicodeToEncoding(CommonDefine.ENCODING, v)
|
if result:
|
dictObj[k] = convertText
|
|
def addSIDErrorCnt():
|
global SIDErrorCnt
|
global SIDErrorCounterLock
|
SIDErrorCounterLock.acquire()
|
SIDErrorCnt += 1
|
SIDErrorCounterLock.release()
|
return SIDErrorCnt
|
|
def getSIDErrorCnt():
|
global SIDErrorCnt
|
return SIDErrorCnt
|
|
def makeSID(data):
|
#mylog.debug('makeSID(%s) = %s'%(data, binascii.crc32(data)))
|
return binascii.crc32(data)
|
|
def checkSID(data, expectSID):
|
global MAGIC_SID
|
if expectSID == MAGIC_SID:
|
return True
|
calcSID = makeSID(data)
|
if expectSID == calcSID:
|
return True
|
mylog.debug('expectSID = %s calcSID = %s'%(expectSID, calcSID))
|
return False
|
|
SPLITCHAR = '\t'
|
|
def sysDBLoadFromFile(className, fileName):
|
data = ''
|
try:
|
fileObj = open(fileName, 'rb', 0)
|
mylog.info('Loading %s...'%fileName)
|
try:
|
rowObj = className()
|
rowCnt = 0
|
for line in fileObj:
|
rowCnt += 1
|
if rowCnt == 1:
|
continue #skip header
|
# logging.getLogger('sysDBLoadFromFile').debug('line %d = %s'%(rowCnt,line))
|
rowObj.readLine(line)
|
data += rowObj.getBuffer()
|
except IOError,(readErrNo, readStdErr):
|
msg = error.formatMsg('DesignError', error.ERROR_NO_30, 'Read file "%s" failed! errno = %s stdErr = %s'%(fileName, readErrNo, readStdErr))
|
mylog.DesignError(msg, True)
|
data = ''
|
data = CommFunc.WriteDWORD(data, 0)
|
return data
|
except:
|
msg = error.formatMsg('fatal', error.ERROR_NO_31, 'Read file"%s" failed! Exception = %s'%(fileName, traceback.format_exc()))
|
mylog.fatal(msg)
|
data = ''
|
data = CommFunc.WriteDWORD(data, 0)
|
return data
|
else:
|
fileObj.close()
|
# logging.getLogger('sysDBLoadFromFile').debug('data = %s'%binascii.b2a_hex(data))
|
mylog.info('Load %s cnt = %s'%(fileName, rowCnt - 1))
|
|
buf = ''
|
buf = CommFunc.WriteDWORD(buf, rowCnt - 1)
|
buf = CommFunc.WriteString(buf, len(data), data)
|
return buf
|
except IOError, (errno, stderr):
|
msg = error.formatMsg('DesignError', error.ERROR_NO_32, 'Can not open %s!errno = %s stderr = %s'%(fileName, errno, stderr))
|
mylog.DesignError(msg)
|
|
data = ''
|
data = CommFunc.WriteDWORD(data, 0)
|
return data
|
|
def SysDBUpdate(className, collection, fileName):
|
collection.drop()
|
try:
|
fileObj = open(fileName,'rb', 0)
|
try:
|
rowObj = className()
|
row = 0
|
for line in fileObj:
|
row += 1
|
if row == 1:
|
continue #skip header
|
# print 'line_%d=%s'%(Col,line)
|
rowObj.readLine(line)
|
rowObj.adoInsert(collection)
|
except IOError,(readErrNo, readStdErr):
|
msg = error.formatMsg('DesignError', error.ERROR_NO_33, 'Read %s failed!errno = %s stderr = %s'%(fileName, readErrNo, readStdErr))
|
mylog.DesignError(msg)
|
finally:
|
fileObj.close()
|
except IOError,(errno, stderr):
|
msg = error.formatMsg('DesignError', error.ERROR_NO_34, 'Can not open %s! errno = %s stderr = %s'%(fileName, errno, stderr))
|
mylog.DesignError(msg)
|
|
def seq(db, collectionName, fieldName, feed, increment):
|
try:
|
result = 0
|
collection = db['%s_seq'%collectionName]
|
resultObj = collection.find_and_modify(query={'_id':fieldName}, update={'$inc':{'seq':increment}}, new=True)
|
if resultObj:
|
result = resultObj['seq']
|
else:
|
resultObj = collection.find_and_modify(query={'_id':fieldName}, update={'$set':{'seq':feed}}, new=True,
|
upsert=True)
|
if resultObj:
|
result = resultObj['seq']
|
else:
|
msg = error.formatMsg('error', error.ERROR_NO_35, 'seq failed!')
|
mylog.error(msg)
|
return 0
|
except:
|
msg = error.formatMsg('error', error.ERROR_NO_36, "seq failed, colname = %s, fieldname = %s, feed = %d, increment = %d, error = %s"%(collectionName, fieldName, feed, increment, traceback.format_exc()))
|
mylog.error(msg)
|
return result
|
|
|
|