Rev 16807 | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 02-Sep-2015@author: kshitij'''from pymongo.mongo_client import MongoClientimport pymongofrom dtr.storage import DataServicefrom elixir import *from dtr.storage.DataService import app_offers,appmasters,app_transactionsfrom sqlalchemy.sql.expression import funcfrom operator import or_import datetimefrom dtr.utils import utilsfrom dtr.utils.utils import to_java_datecon = NonemaxDate=NoneoneDay=86400000DataService.initialize()retailerMap={}appIdMap={}overallRetailerAppMap={}class AppAnalyticsBasedOnRetailerId:def __init__(self,retailerId,appName,clicksCount,installCount,timestamp):self.retailerId=retailerIdself.clicksCount=clicksCountself.appName=appNameself.installCount=installCountself.timestamp=timestampclass AppAnalyticsBasedOnAppId:def __init__(self,appId,appName,clicksCount,installCount,timestamp):self.appId=appIdself.clicksCount=clicksCountself.appName=appNameself.installCount=installCountself.timestamp=timestampclass AppAnalyticsMaster:def __init__(self,retailerId,appId,appName,clicksCount,installCount,timestamp):self.retailerId=retailerIdself.appId=appIdself.clicksCount=clicksCountself.appName=appNameself.installCount=installCountself.timestamp=timestampdef get_mongo_connection(host='localhost', port=27017):global conif con is None:print "Establishing connection %s host and port %d" %(host,port)try:con = pymongo.MongoClient(host, port)except Exception, e:print ereturn Nonereturn condef getAppTransactions():global maxDateglobal oneDay#maxDate=1440592469243maxDate=1440678869243#maxDate = utils.to_java_date(datetime.datetime.now())# retailerId=None# appName=None# clicksCount=0# installCount=0#db.AppTransaction.find({$and: [{transaction_time: {$gte: 1440678869243 } }, {transaction_time: { $lte: 1440765269243} },{app_id:33} ] } ).count();print (maxDate+oneDay),get_mongo_connection().AppOrder.AppTransaction.find({"$and": [ {'transaction_time': {"$gte": maxDate } }, { 'transaction_time': { "$lte": (maxDate+oneDay)} } ] } ).count();appTransactions = get_mongo_connection().AppOrder.AppTransaction.find({"$and": [ {'transaction_time': {"$gte": maxDate } }, { 'transaction_time': { "$lte": (maxDate+oneDay)} } ] } );for appTransaction in list(appTransactions):installed = FalseappId=appTransaction.get('app_id')retailerId=appTransaction.get('retailer_id')if appIdMap.has_key(retailerId):appIdClicksMap = appIdMap.get(retailerId)else:appIdClicksMap = {}if retailerMap.has_key(appId):clicksMap = retailerMap.get(appId)else:clicksMap = {}if clicksMap.has_key('clicks'):clicksMap['clicks'] = clicksMap.get('clicks') + 1else:clicksMap['clicks'] = 1if appIdClicksMap.has_key('clicks'):appIdClicksMap['clicks'] = appIdClicksMap.get('clicks') + 1else:appIdClicksMap['clicks'] = 1if appTransaction.get('payout_description')=='Approved':installed = Trueif clicksMap.has_key('installs'):clicksMap['installs'] = clicksMap.get('installs') + 1else:clicksMap['installs'] = 1if appIdClicksMap.has_key('installs'):appIdClicksMap['installs'] = appIdClicksMap.get('installs') + 1else:appIdClicksMap['installs'] = 1retailerMap[appId] = clicksMapappIdMap[retailerId] = appIdClicksMapif not overallRetailerAppMap.has_key(retailerId):overallRetailerAppMap[retailerId] = {}appMap = overallRetailerAppMap.get(retailerId)if not appMap.has_key(appId):appMap[appId] = {"clicked":0,"installed":0}countMap = appMap[appId]countMap['clicked'] += 1if installed:countMap['installed'] += 1#getAppName(appTransaction.get('app_id'),appTransaction.get('retailer_id'))# if appTransaction.get('payout_description')=='Approved':# retailerMap = getAppName(appTransaction.get('app_id'),appTransaction.get('retailer_id'))# for x, y in retailerMap.iteritems():# for bra,cow in y.iteritems():# retailerId=x# appName=bra# clicksCount=cow# installCount=cow# appTransactions = AppOffersAnalytics(retailerId, appName,clicksCount,installCount,getTime())# get_mongo_connection().AppOrder.AppAnalytics.insert(appTransactions.__dict__)#for x, y in overallRetailerAppMap.iteritems():for bra,cow in y.iteritems():for s,m in cow.iteritems():print x,bra, s,mprint 'Now retailer map'for x, y in appMap.iteritems():for bra,cow in y.iteritems():retailerId = xif bra=='clicks':clicks = cow#retailerId=x#appName=bra#clicksCount=cow#appTransactions = AppOffersAnalytics(retailerId, appName,clicksCount,installCount,getTime())#get_mongo_connection().AppOrder.AppAnalytics.insert(appTransactions.__dict__)def getAppName(appId):appDetails =app_offers.get_by(id=appId)return appDetails.app_name# if retailerMap.has_key(retailerId):# clicksMap = retailerMap.get(retailerId)# else:# clicksMap = {}## if clicksMap.has_key(appDetail.appmasters.app_name):# clicksMap[appDetail.appmasters.app_name] = clicksMap.get(appDetail.appmasters.app_name) + 1# else:# clicksMap[appDetail.appmasters.app_name] = 1# retailerMap[retailerId] = clicksMapdef dumpAppTransactionsMysql():newTransaction_id=''appTransactions = get_mongo_connection().AppOrder.AppTransaction.find();for appTransaction in appTransactions:newTransaction_id=appTransaction.get('_id')checkAppTransaction = app_transactions.get_by(transaction_id=newTransaction_id)if checkAppTransaction is None:print 'Inserting new record inside table'insertNewAppTransaction(appTransaction)else:print 'In else',checkAppTransaction.payout_descriptionif checkAppTransaction.payout_description!=appTransaction.get('payout_description'):print 'Need to update the record',checkAppTransaction.payout_descriptionif appTransaction.get('payout_time') is None:session.query(app_transactions).filter(app_transactions.transaction_id == newTransaction_id).update({'payout_description': appTransaction.get('payout_description'),'payout_amount':appTransaction.get('payout_amount'),'cash_back_description':appTransaction.get('cash_back_description'),'cashback_status':appTransaction.get('cashback_status'),'payout_status':appTransaction.get('payout_status')})else:session.query(app_transactions).filter(app_transactions.transaction_id == newTransaction_id).update({'payout_description': appTransaction.get('payout_description'),'payout_amount':appTransaction.get('payout_amount'),'cash_back_description':appTransaction.get('cash_back_description'),'cashback_status':appTransaction.get('cashback_status'),'payout_status':appTransaction.get('payout_status'),'payout_time':utils.to_py_date(appTransaction.get('payout_time'))})elif checkAppTransaction.final_user_payout is None:if appTransaction.get('final_user_payout') is not None:checkAppTransaction.final_user_payout = appTransaction.get('final_user_payout')else:if appTransaction.get('isCashBackOverriden'):checkAppTransaction.final_user_payout = appTransaction.get('overridenCashBack')else:checkAppTransaction.final_user_payout = appTransaction.get('user_payout')else:print 'Record should not be updated'session.commit()def insertNewAppTransaction(appTransaction):app_transaction = app_transactions()app_transaction.transaction_id=appTransaction.get('_id')app_transaction.retailer_id = appTransaction.get('retailer_id')app_transaction.app_id = appTransaction.get('app_id')app_transaction.app_name=getAppName(appTransaction.get('app_id'))app_transaction.cashback_status = appTransaction.get('cashback_status')app_transaction.redirect_url = appTransaction.get('redirect_url')app_transaction.cash_back_description = appTransaction.get('cash_back_description')app_transaction.payout_status = appTransaction.get('payout_status')app_transaction.overridenCashBack = appTransaction.get('overridenCashBack')app_transaction.isCashBackOverriden = appTransaction.get('isCashBackOverriden')app_transaction.transaction_time =utils.to_py_date(appTransaction.get('transaction_time'))if appTransaction.get('payout_time') is None:app_transaction.payout_time = Noneelse:app_transaction.payout_time = utils.to_py_date(appTransaction.get('payout_time'))app_transaction.offer_price = appTransaction.get('offer_price')app_transaction.payout_amount = appTransaction.get('payout_amount')app_transaction.user_payout = appTransaction.get('user_payout')app_transaction.payout_description = appTransaction.get('payout_description')if appTransaction.get('final_user_payout') is not None:app_transaction.final_user_payout = appTransaction.get('final_user_payout')else:if appTransaction.get('isCashBackOverriden'):app_transaction.final_user_payout = appTransaction.get('overridenCashBack')else:app_transaction.final_user_payout = appTransaction.get('user_payout')session.commit()def deleteAppTransactions():try:session.query(app_transactions).delete()session.commit()except:session.rollback()def main():#getAppTransactions()#deleteAppTransactions()dumpAppTransactionsMysql()def getTime():tdate=datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d')return tdateif __name__ == '__main__':main()session.close()