Subversion Repositories SmartDukaan

Rev

Rev 16426 | Rev 16439 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 16426 Rev 16436
Line 1... Line 1...
1
import time
1
import time
2
import datetime
2
from datetime import datetime, timedelta
3
 
3
 
4
import MySQLdb
4
import MySQLdb
5
from dtr.storage import DataService
5
from dtr.storage import DataService
6
from dtr.storage.DataService import Pushnotifications
6
from dtr.storage.DataService import Pushnotifications
7
from elixir import *
7
from elixir import *
8
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
8
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
9
from sqlalchemy.sql import func
9
from sqlalchemy.sql import func
10
from sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, cast, \
10
from sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, cast, \
11
    between
11
    between
12
 
12
 
13
PUSH_NOTIFICATIONS_RETRY_SQL ="select  x.user_id, x.id, x.created, x.notification_campaign_id, x.name, x.sent-IF (y.received is null, 0, y.received) failureCount, x.last_active, x.expiresat from (select p.id,p.user_id, p.created, p.notification_campaign_id, n.name, count(*) sent, ua.last_active, n.expiresat from pushnotifications p join notification_campaigns n on p.notification_campaign_id = n.id join useractive ua on p.user_id = ua.user_id where p.notification_campaign_id in (select id from notification_campaigns where TIMESTAMPDIFF(HOUR, created, NOW())<=2) and p.type='sent' and p.message = 'success' and ua.last_active >= p.created and ua.last_active <= n.expiresat group by p.id) as x left join (select p.id, p.user_id, p.created, p.notification_campaign_id, n.name, count(*) received, ua.last_active, n.expiresat from pushnotifications p join notification_campaigns n on p.notification_campaign_id = n.id join useractive ua on p.user_id = ua.user_id where p.notification_campaign_id in (select id from notification_campaigns where TIMESTAMPDIFF(HOUR, created, NOW())<=2) and p.type='recieved' group by p.id) as y on (x.user_id = y.user_id and x.notification_campaign_id = y.notification_campaign_id) having failureCount =1"
13
PUSH_NOTIFICATIONS_RETRY_SQL ="select  x.user_id, x.id, x.created, x.notification_campaign_id, x.name, TIMESTAMPDIFF(HOUR, x.created, x.expiresat) tdiff, x.sent-IF (y.received is null, 0, y.received) failureCount, x.last_active, x.expiresat from (select p.id,p.user_id, p.created, p.notification_campaign_id, n.name, count(*) sent, ua.last_active, n.expiresat from pushnotifications p join notification_campaigns n on p.notification_campaign_id = n.id join useractive ua on p.user_id = ua.user_id where p.notification_campaign_id in (select id from notification_campaigns where TIMESTAMPDIFF(HOUR, created, NOW())<=2 and (name not like 'Batch Credit%' or name not like '%copy%')) and p.type='sent' and p.message = 'success' and ua.last_active >= p.created and ua.last_active <= n.expiresat group by p.id) as x left join (select p.id, p.user_id, p.created, p.notification_campaign_id, n.name, count(*) received, ua.last_active, n.expiresat from pushnotifications p join notification_campaigns n on p.notification_campaign_id = n.id join useractive ua on p.user_id = ua.user_id where p.notification_campaign_id in (select id from notification_campaigns where TIMESTAMPDIFF(HOUR, created, NOW())<=2 and (name not like 'Batch Credit%' or name not like '%copy%')) and p.type='recieved' group by p.id) as y on (x.user_id = y.user_id and x.notification_campaign_id = y.notification_campaign_id) having failureCount =1"
14
 
14
 
15
db = MySQLdb.connect('localhost',"root","shop2020","dtr" )
15
db = MySQLdb.connect('localhost',"root","shop2020","dtr" )
16
cursor = db.cursor()
16
cursor = db.cursor()
17
DataService.initialize(db_hostname="localhost")
17
DataService.initialize(db_hostname="localhost")
18
 
18
 
19
cursor.execute(PUSH_NOTIFICATIONS_RETRY_SQL)
19
cursor.execute(PUSH_NOTIFICATIONS_RETRY_SQL)
20
retry_records_data = cursor.fetchall()
20
retry_records_data = cursor.fetchall()
21
 
21
 
22
campaignUsersMap = {}
22
campaignUsersMap = {}
23
campaignNamesMap = {}
23
campaignNamesMap = {}
-
 
24
campaignTimeDiffMap = {}
24
 
25
 
25
if retry_records_data:
26
if retry_records_data:
26
    for record in retry_records_data:
27
    for record in retry_records_data:
27
        if campaignUsersMap.has_key(long(record[3])):
28
        if campaignUsersMap.has_key(long(record[3])):
28
            users = campaignUsersMap.get(long(record[3]))
29
            users = campaignUsersMap.get(long(record[3]))
Line 30... Line 31...
30
            campaignUsersMap[long(record[3])] = users
31
            campaignUsersMap[long(record[3])] = users
31
        else:
32
        else:
32
            users = []
33
            users = []
33
            users.append(long(record[0]))
34
            users.append(long(record[0]))
34
            campaignUsersMap[long(record[3])] = users
35
            campaignUsersMap[long(record[3])] = users
-
 
36
            
35
        if not campaignNamesMap.has_key(long(record[3])):
37
        if not campaignNamesMap.has_key(long(record[3])):
36
            name = str(record[4])
38
            name = str(record[4])
37
            campaignNamesMap[long(record[3])] = name
39
            campaignNamesMap[long(record[3])] = name
38
            
40
        
-
 
41
        if not campaignTimeDiffMap.has_key(long(record[3])):
-
 
42
            diff = long(record[5])
-
 
43
            campaignTimeDiffMap[long(record[3])] = diff
39
 
44
 
40
print campaignUsersMap
45
print campaignUsersMap
41
 
46
 
42
for campaignId, users in campaignUsersMap.iteritems():
47
for campaignId, users in campaignUsersMap.iteritems():
43
    name = campaignNamesMap.get(campaignId)+"- copy"
48
    name = campaignNamesMap.get(campaignId)+"- copy"
-
 
49
    created = datetime.now()
-
 
50
    expiresat = created+timedelta(hours = campaignTimeDiffMap.get(campaignId))
-
 
51
    print created, expiresat
44
    campaignInsertSql = "insert into notification_campaigns(name, title, message, type, url, notification_campaigns.sql, expiresat, status, created) select '%s', title, message, type, url, notification_campaigns.sql, expiresat, status, created from notification_campaigns where id = %d"%(name,campaignId)
52
    campaignInsertSql = "insert into notification_campaigns(name, title, message, type, url, notification_campaigns.sql, expiresat, status, created) select '%s', title, message, type, url, notification_campaigns.sql, '%s', status, '%s' from notification_campaigns where id = %d"%(name, expiresat.strftime('%Y-%m-%d %H:%M:%S'), created.strftime('%Y-%m-%d %H:%M:%S'), campaignId)
45
    print campaignInsertSql
53
    print campaignInsertSql
46
    cursor.execute(campaignInsertSql)
54
    cursor.execute(campaignInsertSql)
47
    db.commit()
55
    db.commit()
48
    insertedCampaignId = cursor.lastrowid
56
    insertedCampaignId = cursor.lastrowid
49
    
57
    
Line 51... Line 59...
51
        pushnotification = Pushnotifications()
59
        pushnotification = Pushnotifications()
52
        pushnotification.user_id = user
60
        pushnotification.user_id = user
53
        pushnotification.notification_campaign_id = insertedCampaignId
61
        pushnotification.notification_campaign_id = insertedCampaignId
54
        pushnotification.type = 'pending'
62
        pushnotification.type = 'pending'
55
        pushnotification.status = False
63
        pushnotification.status = False
56
        pushnotification.created = datetime.datetime.now()
64
        pushnotification.created = datetime.now()
57
        session.commit()
65
        session.commit()
58
        
66
        
59
db.close()
67
db.close()
60
if session.is_active:
68
if session.is_active:
61
    print "session is active. closing it."
69
    print "session is active. closing it."