Subversion Repositories SmartDukaan

Rev

Rev 16807 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
16772 manas 1
'''
2
Created on 02-Sep-2015
3
 
4
@author: kshitij
5
'''
6
from pymongo.mongo_client import MongoClient
7
import pymongo
8
from dtr.storage import DataService
9
from elixir import *
10
from dtr.storage.DataService import app_offers,appmasters,app_transactions 
11
from sqlalchemy.sql.expression import func
12
from operator import or_
13
import datetime
14
from dtr.utils import utils
15
from dtr.utils.utils import to_java_date
16
 
17
con = None
18
maxDate=None
19
oneDay=86400000
20
DataService.initialize()
21
retailerMap={}
22
appIdMap={}
23
overallRetailerAppMap={}
24
class AppAnalyticsBasedOnRetailerId:
25
    def __init__(self,retailerId,appName,clicksCount,installCount,timestamp):
26
        self.retailerId=retailerId
27
        self.clicksCount=clicksCount
28
        self.appName=appName
29
        self.installCount=installCount
30
        self.timestamp=timestamp
31
 
32
class AppAnalyticsBasedOnAppId:
33
    def __init__(self,appId,appName,clicksCount,installCount,timestamp):
34
        self.appId=appId
35
        self.clicksCount=clicksCount
36
        self.appName=appName
37
        self.installCount=installCount
38
        self.timestamp=timestamp
39
 
40
class AppAnalyticsMaster:
41
    def __init__(self,retailerId,appId,appName,clicksCount,installCount,timestamp):
42
        self.retailerId=retailerId
43
        self.appId=appId
44
        self.clicksCount=clicksCount
45
        self.appName=appName
46
        self.installCount=installCount
47
        self.timestamp=timestamp
48
 
49
 
50
def get_mongo_connection(host='localhost', port=27017):
51
    global con
52
    if con is None:
53
        print "Establishing connection %s host and port %d" %(host,port)
54
        try:
55
            con = pymongo.MongoClient(host, port)
56
        except Exception, e:
57
            print e
58
            return None
59
    return con
60
 
61
def getAppTransactions():
62
    global maxDate
63
    global oneDay
64
    #maxDate=1440592469243
65
    maxDate=1440678869243
66
    #maxDate = utils.to_java_date(datetime.datetime.now())
67
#     retailerId=None
68
#     appName=None
69
#     clicksCount=0
70
#     installCount=0
71
    #db.AppTransaction.find({$and: [{transaction_time: {$gte: 1440678869243 } }, {transaction_time: { $lte: 1440765269243} },{app_id:33} ] } ).count();
72
    print (maxDate+oneDay),get_mongo_connection().AppOrder.AppTransaction.find({"$and": [ {'transaction_time': {"$gte": maxDate } }, { 'transaction_time': { "$lte": (maxDate+oneDay)} } ] } ).count();
73
    appTransactions = get_mongo_connection().AppOrder.AppTransaction.find({"$and": [ {'transaction_time': {"$gte": maxDate } }, { 'transaction_time': { "$lte": (maxDate+oneDay)} } ] } );
74
    for appTransaction in list(appTransactions):
75
        installed = False
76
        appId=appTransaction.get('app_id')
77
        retailerId=appTransaction.get('retailer_id')
78
 
79
        if appIdMap.has_key(retailerId):
80
            appIdClicksMap = appIdMap.get(retailerId) 
81
        else:
82
            appIdClicksMap = {}
83
 
84
        if retailerMap.has_key(appId):
85
            clicksMap = retailerMap.get(appId) 
86
        else:
87
            clicksMap = {}
88
 
89
        if clicksMap.has_key('clicks'):
90
            clicksMap['clicks'] = clicksMap.get('clicks') + 1
91
        else:
92
            clicksMap['clicks'] = 1
93
 
94
        if appIdClicksMap.has_key('clicks'):
95
            appIdClicksMap['clicks'] = appIdClicksMap.get('clicks') + 1
96
        else:
97
            appIdClicksMap['clicks'] = 1
98
 
99
        if appTransaction.get('payout_description')=='Approved':
100
            installed = True
101
            if clicksMap.has_key('installs'):
102
                clicksMap['installs'] = clicksMap.get('installs') + 1
103
            else:
104
                clicksMap['installs'] = 1
105
            if appIdClicksMap.has_key('installs'):
106
                appIdClicksMap['installs'] = appIdClicksMap.get('installs') + 1
107
            else:
108
                appIdClicksMap['installs'] = 1
109
 
110
        retailerMap[appId] = clicksMap    
111
        appIdMap[retailerId] = appIdClicksMap
112
 
113
 
114
        if not overallRetailerAppMap.has_key(retailerId):
115
            overallRetailerAppMap[retailerId] = {}
116
        appMap =  overallRetailerAppMap.get(retailerId)
117
        if not appMap.has_key(appId):
118
            appMap[appId] = {"clicked":0,"installed":0}
119
        countMap = appMap[appId]
120
        countMap['clicked'] += 1
121
        if installed:
122
            countMap['installed'] += 1
123
 
124
        #getAppName(appTransaction.get('app_id'),appTransaction.get('retailer_id'))
125
 
126
#         if appTransaction.get('payout_description')=='Approved':
127
#             retailerMap = getAppName(appTransaction.get('app_id'),appTransaction.get('retailer_id'))
128
#             for x, y in retailerMap.iteritems():
129
#                 for bra,cow in y.iteritems():
130
#                     retailerId=x
131
#                     appName=bra
132
#                     clicksCount=cow
133
#                     installCount=cow     
134
#             appTransactions = AppOffersAnalytics(retailerId, appName,clicksCount,installCount,getTime())
135
#             get_mongo_connection().AppOrder.AppAnalytics.insert(appTransactions.__dict__)
136
#   
137
    for x, y in overallRetailerAppMap.iteritems():
138
        for bra,cow in y.iteritems():
139
            for s,m in cow.iteritems():
140
                print x,bra, s,m
141
 
142
    print 'Now retailer map'            
143
    for x, y in appMap.iteritems():
144
        for bra,cow in y.iteritems():
145
            retailerId = x
146
            if bra=='clicks':
147
                clicks = cow
148
 
149
            #retailerId=x
150
            #appName=bra
151
            #clicksCount=cow
152
    #appTransactions = AppOffersAnalytics(retailerId, appName,clicksCount,installCount,getTime())
153
    #get_mongo_connection().AppOrder.AppAnalytics.insert(appTransactions.__dict__)
154
 
155
def getAppName(appId):
156
    appDetails =app_offers.get_by(id=appId)
157
    return appDetails.app_name
158
#         if retailerMap.has_key(retailerId):
159
#             clicksMap = retailerMap.get(retailerId) 
160
#         else:
161
#             clicksMap = {}
162
#             
163
#         if clicksMap.has_key(appDetail.appmasters.app_name):
164
#             clicksMap[appDetail.appmasters.app_name] = clicksMap.get(appDetail.appmasters.app_name) + 1
165
#         else:
166
#             clicksMap[appDetail.appmasters.app_name] = 1
167
#         retailerMap[retailerId] = clicksMap
168
 
169
def dumpAppTransactionsMysql():
16795 manas 170
    newTransaction_id=''
16772 manas 171
    appTransactions = get_mongo_connection().AppOrder.AppTransaction.find();
172
    for appTransaction in appTransactions:
16795 manas 173
        newTransaction_id=appTransaction.get('_id')
174
        checkAppTransaction =  app_transactions.get_by(transaction_id=newTransaction_id)
175
        if checkAppTransaction is None:
176
            print 'Inserting new record inside table'
177
            insertNewAppTransaction(appTransaction)
178
        else:
179
            print 'In else',checkAppTransaction.payout_description
180
            if checkAppTransaction.payout_description!=appTransaction.get('payout_description'):
181
                print 'Need to update the record',checkAppTransaction.payout_description
16807 manas 182
                if appTransaction.get('payout_time') is None:
183
                    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')})
184
                else:    
185
                    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'))})
16917 manish.sha 186
            elif checkAppTransaction.final_user_payout is None:
187
                if appTransaction.get('final_user_payout') is not None:
188
                    checkAppTransaction.final_user_payout = appTransaction.get('final_user_payout')
189
                else:
190
                    if appTransaction.get('isCashBackOverriden'):
191
                        checkAppTransaction.final_user_payout = appTransaction.get('overridenCashBack')
192
                    else:
193
                        checkAppTransaction.final_user_payout = appTransaction.get('user_payout')
16795 manas 194
            else:
195
                print 'Record should not be updated'
16772 manas 196
    session.commit()
197
 
16795 manas 198
def insertNewAppTransaction(appTransaction):
199
    app_transaction = app_transactions()
200
    app_transaction.transaction_id=appTransaction.get('_id')
201
    app_transaction.retailer_id = appTransaction.get('retailer_id')
202
    app_transaction.app_id = appTransaction.get('app_id')
203
    app_transaction.app_name=getAppName(appTransaction.get('app_id'))
204
    app_transaction.cashback_status = appTransaction.get('cashback_status')
205
    app_transaction.redirect_url = appTransaction.get('redirect_url')
206
    app_transaction.cash_back_description = appTransaction.get('cash_back_description')
207
    app_transaction.payout_status = appTransaction.get('payout_status')
208
    app_transaction.overridenCashBack = appTransaction.get('overridenCashBack')
209
    app_transaction.isCashBackOverriden = appTransaction.get('isCashBackOverriden')
210
    app_transaction.transaction_time =utils.to_py_date(appTransaction.get('transaction_time'))
211
    if appTransaction.get('payout_time') is None:
212
        app_transaction.payout_time = None
213
    else:    
214
        app_transaction.payout_time = utils.to_py_date(appTransaction.get('payout_time'))
215
    app_transaction.offer_price = appTransaction.get('offer_price')
216
    app_transaction.payout_amount = appTransaction.get('payout_amount')
217
    app_transaction.user_payout = appTransaction.get('user_payout')
218
    app_transaction.payout_description = appTransaction.get('payout_description')
16917 manish.sha 219
    if appTransaction.get('final_user_payout') is not None:
220
        app_transaction.final_user_payout = appTransaction.get('final_user_payout')
221
    else:
222
        if appTransaction.get('isCashBackOverriden'):
223
            app_transaction.final_user_payout = appTransaction.get('overridenCashBack')
224
        else:
225
            app_transaction.final_user_payout = appTransaction.get('user_payout')
16795 manas 226
    session.commit()
227
 
16772 manas 228
def deleteAppTransactions():
229
    try:
230
        session.query(app_transactions).delete()
231
        session.commit()
232
    except:
233
        session.rollback()
234
 
235
def main():
236
    #getAppTransactions()
16795 manas 237
    #deleteAppTransactions()
16772 manas 238
    dumpAppTransactionsMysql()
239
 
240
def getTime():    
241
    tdate=datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d')
242
    return tdate
243
 
244
if __name__ == '__main__':
245
    main()
246
    session.close()