Rev 14871 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on Mar 10, 2015'''from datetime import date, datetime, timedeltafrom dtr.storage.Mysql import getOrdersAfterDate, \getOrdersByTagfrom email import encodersfrom email.mime.base import MIMEBasefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom pymongo.mongo_client import MongoClientfrom xlrd import open_workbookfrom xlutils.copy import copyfrom xlwt.Workbook import Workbookimport MySQLdbimport smtplibimport timeimport xlwtDB_HOST = "localhost"DB_USER = "root"DB_PASSWORD = "shop2020"DB_NAME = "dtr"TMP_FILE = "User_Activity_Report.xls"# KEY NAMESSENDER = "cnc.center@shop2020.in"PASSWORD = "5h0p2o2o"SUBJECT = "User Activity Report for" + date.today().isoformat()SMTP_SERVER = "smtp.gmail.com"SMTP_PORT = 587DATE_QUERY="""SELECT date(d.visited) from daily_visitors djoin users u where u.id=d.user_id AND(LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND date(d.visited) > '2015-03-08' group by visited ;"""MONTH_QUERY="""SELECT month(d.visited) from daily_visitors djoin users u on u.id=d.user_id where (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'group by month(d.visited);"""WEEK_QUERY="""SELECT CONCAT(date(o.created), ' - ', date(o.created) + INTERVAL 6 DAY) AS weekFROM order_view oJOIN users u ON u.id = o.user_idWHERE (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND date(o.created) > '2015-03-08'GROUP BY WEEK(date(o.created))ORDER BY WEEK(date(o.created))"""DNRU_QUERY="""SELECT count(*)FROM users u WHERE (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND date(u.created) > '2015-03-08'group by date(u.created)order by date(u.created)"""DAU_QUERY="""SELECT count(distinct d.user_id)FROM daily_visitors d join users u where u.id=d.user_id AND (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND date(d.visited) > '2015-03-08' group by visited ;"""DAB_QUERY="""SELECT COUNT(DISTINCT o.user_id )FROM order_view oJOIN users u ON u.id = o.user_idWHERE (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND o.STATUS = 'ORDER_CREATED'AND date(o.created) > '2015-03-08'group by date(o.created)order by date(o.created)"""DTO_QUERY="""SELECT COUNT( *)FROM order_view oJOIN users u ON u.id = o.user_idWHERE (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND o.STATUS = 'ORDER_CREATED'AND date(o.created) > '2015-03-08'GROUP BY DATE(o.created)order by date(o.created)"""MNRU_QUERY="""SELECT count(*)FROM users u WHERE (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR lower(u.referrer) not like 'emp%'AND date(u.created) > '2015-03-08'group by month(u.created)order by month(u.created)"""MAU_QUERY="""SELECT count(distinct d.user_id)FROM daily_visitors d join users u where u.id=d.user_id AND (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND date(d.visited) > '2015-03-08'group by month(d.visited)order by month(d.visited);"""MAB_QUERY="""SELECT COUNT(DISTINCT o.user_id )FROM order_view oJOIN users u ON u.id = o.user_id where(LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND o.STATUS = 'ORDER_CREATED'AND date(o.created) > '2015-03-08'group by month(o.created)order by month(o.created);"""MTO_QUERY="""SELECT COUNT( *)FROM order_view oJOIN users u ON u.id = o.user_id where(LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND o.STATUS = 'ORDER_CREATED'AND date(o.created) > '2015-03-08'GROUP BY MONTH(o.created)order by month(o.created);"""WNRU_QUERY="""SELECT COUNT(*)FROM users u WHERE(LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND date(u.created) > '2015-03-08'GROUP BY WEEK(date(u.created))ORDER BY WEEK(date(u.created))"""WAU_QUERY="""SELECT COUNT(distinct d.user_id) AS totalFROM daily_visitors d join users u where u.id=d.user_id AND (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND date(d.visited) > '2015-03-08'GROUP BY WEEK(d.visited)ORDER BY WEEK(d.visited)"""WAB_QUERY="""SELECT COUNT( DISTINCT o.user_id )FROM order_view oJOIN users u ON u.id = o.user_idWHERE (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND o.STATUS = 'ORDER_CREATED'AND date(o.created) > '2015-03-08'GROUP BY WEEK(date(o.created))ORDER BY WEEK(date(o.created))"""WTO_QUERY="""SELECT COUNT(*)FROM order_view oJOIN users u ON u.id = o.user_idWHERE (LOWER(u.referrer) IS NULL AND u.id > 350 AND u.id NOT IN (387,399,418)) OR LOWER(u.referrer) NOT LIKE 'emp%'AND o.STATUS = 'ORDER_CREATED'AND date(o.created) > '2015-03-08'GROUP BY WEEK(date(o.created))ORDER BY WEEK(date(o.created))"""date_format = xlwt.XFStyle()date_format.num_format_str = 'yyyy/mm/dd'datetime_format = xlwt.XFStyle()datetime_format.num_format_str = 'yyyy/mm/dd HH:MM AM/PM'default_format = xlwt.XFStyle()def getDbConnection():return MySQLdb.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)def generateDailyReport():datesql= DATE_QUERYdnruSql = DNRU_QUERYdauSql = DAU_QUERYdabSql = DAB_QUERYdtoSql = DTO_QUERYconn = getDbConnection()# prepare a cursor object using cursor() methodcursor = conn.cursor()# Execute the SQL command# Fetch source id.cursor.execute(datesql)result = cursor.fetchall()global workbookworkbook = xlwt.Workbook()worksheet = workbook.add_sheet("User")boldStyle = xlwt.XFStyle()f = xlwt.Font()f.bold = TrueboldStyle.font = fcolumn = 0row = 0sumdata=17worksheet.write(row, 0, 'Date', boldStyle)worksheet.write(row, 1, 'TRU', boldStyle)worksheet.write(row, 2, 'NRU', boldStyle)worksheet.write(row, 3, 'DAU', boldStyle)worksheet.write(row, 4, 'DAB', boldStyle)worksheet.write(row, 5, 'DTO', boldStyle)for r in result:row += 1column = 0for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(dnruSql)result = cursor.fetchall()for r in result:row += 1column = 1for data in r :print "Data" + str(data)sumdata=sumdata+dataprint "Sum Data" + str(sumdata)worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)column += 1row = 0cursor.execute(dnruSql)result = cursor.fetchall()for r in result:row += 1column = 2for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(dauSql)result = cursor.fetchall()for r in result:row += 1column = 3for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(dabSql)result = cursor.fetchall()for r in result:row += 1column = 4for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(dtoSql)result = cursor.fetchall()for r in result:row += 1column = 5for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1def generateMonthlyReport():monthSql = MONTH_QUERYmnruSql = MNRU_QUERYmauSql = MAU_QUERYmabSql = MAB_QUERYmtoSql = MTO_QUERYconn = getDbConnection()cursor = conn.cursor()cursor.execute(monthSql)result = cursor.fetchall()rb = open_workbook(TMP_FILE)wb = copy(rb)worksheet = workbook.add_sheet("Monthly")boldStyle = xlwt.XFStyle()f = xlwt.Font()f.bold = TrueboldStyle.font = fcolumn = 0row = 0sumdata=17worksheet.write(row, 0, 'Month', boldStyle)worksheet.write(row, 1, 'MTRU', boldStyle)worksheet.write(row, 2, 'MNRU', boldStyle)worksheet.write(row, 3, 'MAU', boldStyle)worksheet.write(row, 4, 'MAB', boldStyle)worksheet.write(row, 5, 'MTO', boldStyle)for r in result:row += 1column = 0for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(mnruSql)result = cursor.fetchall()for r in result:row += 1column = 1for data in r :print "Data" + str(data)sumdata=sumdata+dataprint "Sum Data" + str(sumdata)worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)column += 1row = 0cursor.execute(mnruSql)result = cursor.fetchall()for r in result:row += 1column = 2for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(mauSql)result = cursor.fetchall()for r in result:row += 1column = 3for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(mabSql)result = cursor.fetchall()for r in result:row += 1column = 4for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(mtoSql)result = cursor.fetchall()for r in result:row += 1column = 5for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1workbook.save(TMP_FILE)sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)def generateWeeklyReport():weekSql = WEEK_QUERYwnruSql = WNRU_QUERYwauSql = WAU_QUERYwabSql = WAB_QUERYwtoSql = WTO_QUERYconn = getDbConnection()cursor = conn.cursor()cursor.execute(weekSql)result = cursor.fetchall()rb = open_workbook(TMP_FILE)wb = copy(rb)worksheet = workbook.add_sheet("Weekly")boldStyle = xlwt.XFStyle()f = xlwt.Font()f.bold = TrueboldStyle.font = fcolumn = 0row = 0sumdata=17worksheet.write(row, 0, 'Week', boldStyle)worksheet.write(row, 1, 'WTRU', boldStyle)worksheet.write(row, 2, 'WNRU', boldStyle)worksheet.write(row, 3, 'WAU', boldStyle)worksheet.write(row, 4, 'WAB', boldStyle)worksheet.write(row, 5, 'WTO', boldStyle)for r in result:row += 1column = 0for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(wnruSql)result = cursor.fetchall()for r in result:row += 1column = 1for data in r :print "Data" + str(data)sumdata=sumdata+dataprint "Sum Data" + str(sumdata)worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)column += 1row = 0cursor.execute(wnruSql)result = cursor.fetchall()for r in result:row += 1column = 2for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(wauSql)result = cursor.fetchall()for r in result:row += 1column = 3for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(wabSql)result = cursor.fetchall()for r in result:row += 1column = 4for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1row = 0cursor.execute(wtoSql)result = cursor.fetchall()for r in result:row += 1column = 5for data in r :worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)column += 1def sendmail(email, message, fileName, title):if email == "":returnmailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)mailServer.ehlo()mailServer.starttls()mailServer.ehlo()# Create the container (outer) email message.msg = MIMEMultipart()msg['Subject'] = titlemsg.preamble = titlehtml_msg = MIMEText(message, 'html')msg.attach(html_msg)fileMsg = MIMEBase('application', 'vnd.ms-excel')fileMsg.set_payload(file(TMP_FILE).read())encoders.encode_base64(fileMsg)fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)msg.attach(fileMsg)email.append('manas.kapoor@shop2020.in')MAILTO = emailmailServer.login(SENDER, PASSWORD)mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())def main():#date = raw_input('Enter a date name: ')generateDailyReport()generateWeeklyReport()generateMonthlyReport()if __name__ == '__main__':main()