Subversion Repositories SmartDukaan

Rev

Rev 16795 | Go to most recent revision | Details | 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():
170
    appTransactions = get_mongo_connection().AppOrder.AppTransaction.find();
171
    for appTransaction in appTransactions:
172
        app_transaction = app_transactions()
173
        app_transaction.retailer_id = appTransaction.get('retailer_id')
174
        app_transaction.app_id = appTransaction.get('app_id')
175
        app_transaction.app_name=getAppName(appTransaction.get('app_id'))
176
        app_transaction.cashback_status = appTransaction.get('cashback_status')
177
        app_transaction.redirect_url = appTransaction.get('redirect_url')
178
        app_transaction.cash_back_description = appTransaction.get('cash_back_description')
179
        app_transaction.payout_status = appTransaction.get('payout_status')
180
        app_transaction.overridenCashBack = appTransaction.get('overridenCashBack')
181
        app_transaction.isCashBackOverriden = appTransaction.get('isCashBackOverriden')
182
        app_transaction.transaction_time =utils.to_py_date(appTransaction.get('transaction_time'))
183
        if appTransaction.get('payout_time') is None:
184
            app_transaction.payout_time = None
185
        else:    
186
            app_transaction.payout_time = utils.to_py_date(app_transaction.payout_time)
187
        app_transaction.offer_price = appTransaction.get('offer_price')
188
        app_transaction.payout_amount = appTransaction.get('payout_amount')
189
        app_transaction.user_payout = appTransaction.get('user_payout')
190
        app_transaction.payout_description = appTransaction.get('payout_description')
191
    session.commit()
192
 
193
 
194
def deleteAppTransactions():
195
    try:
196
        session.query(app_transactions).delete()
197
        session.commit()
198
    except:
199
        session.rollback()
200
 
201
def main():
202
    #getAppTransactions()
203
    deleteAppTransactions()
204
    dumpAppTransactionsMysql()
205
 
206
def getTime():    
207
    tdate=datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d')
208
    return tdate
209
 
210
 
211
if __name__ == '__main__':
212
    main()
213
    session.close()