Created
November 6, 2015 03:33
-
-
Save diggzhang/1ebb1a9b98e9a27e222b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
__author__ = 'ronfe' | |
import os | |
from pymongo import MongoClient, DESCENDING | |
from bson.objectid import ObjectId | |
from bson.son import SON | |
import datetime | |
import threading | |
version = "1.0.0" | |
fileId = str(ObjectId.from_datetime(datetime.datetime.now()))[:8] | |
os.chdir(os.path.dirname(os.path.realpath("__file__"))) | |
os.chdir('./reports') | |
report = open(fileId + '.md', 'w+') | |
#dbClient = MongoClient('mongodb://10.8.3.16:27017') | |
dbClient = MongoClient('mongodb://10.8.3.182:27017') | |
remotePoints = dbClient['yangcong-prod25']['points'] | |
remoteVideos = dbClient['yangcong-prod25']['videos'] | |
localClient = MongoClient('mongodb://localhost:27017') | |
localUserRatings = localClient['yangcong']['userRatings'] | |
localOneRatings = localClient['yangcong']['oneRateVideo'] | |
dayCache = localClient['yangcong-prod25']['dayCache'] | |
endDate = datetime.datetime.now() - datetime.timedelta(days=1) | |
startDate = endDate - datetime.timedelta(days=14) | |
startId = ObjectId.from_datetime(startDate) | |
endId = ObjectId.from_datetime(endDate) | |
# STEP 0 : Print metadata | |
report.write("# Yangcong Math Video/Topic Data Biweek Report \n") | |
report.write("Script Version: " + version + ' \n') | |
report.write("by @ronfe 2015. \n\n") | |
description = "This report is about the description stats of \n\n* 5 videos that users feel it so bad" | |
report.write(description) | |
report.write('\n') | |
report.write("## The Hell Videos Top 5\n") | |
# step 1 find rate value = 1 | |
# pipeLine = [ | |
# {"$match": { | |
# "eventValue.videoRate": 1 | |
# }}, | |
# {"$project": { | |
# "_id": 1, | |
# "user": "$user", | |
# "createdBy": "$createdBy", | |
# "video": "$video" | |
# }} | |
# ] | |
# rateValueEqOne = list(points.aggregate(pipeLine)) | |
# localClient['yangcong']['oneRateVideo'].drop() | |
# localOneRatings.insert_many(rateValueEqOne) | |
# step 1.5 link to new db | |
oneHellVideo = localClient['yangcong']['oneRateVideo'] | |
userNeverBack = localClient['yangcong']['userNeverBackAgain'] | |
def isThisBack(userId, date): | |
startDate = date + datetime.timedelta(days=1) | |
endDate = startDate + datetime.timedelta(days=14) | |
startId = ObjectId.from_datetime(startDate) | |
endId = ObjectId.from_datetime(endDate) | |
return remotePoints.find_one({"user": userId, "_id": {"$gt": startId, "$lt": endId} }) | |
for doc in oneHellVideo.find(): | |
userNeverBackOne = {} | |
userId = doc['_id'] | |
videoId = doc['video'] | |
date = doc['createdBy'] | |
dateFormat = date | |
thisOneBack = isThisBack(userId, dateFormat) | |
if thisOneBack == None: | |
userNeverBackOne['userId'] = userId | |
userNeverBackOne['videoId'] = videoId | |
print(thisOneBack) | |
print(userNeverBackOne) | |
userNeverBack.insert_one(userNeverBackOne) | |
threads = [] | |
for i in range(50): | |
t = threading.Thread(target=isThisBack, args[]) | |
threads.append(t) | |
t.start() | |
report.write('Hell Video Top 5 \n\n') | |
report.write('| Video Name | Rate 1 Then Never Comeback| \n') | |
report.write('|:----------:|:-------------------------:| \n') | |
report.write('------------------------------') | |
report.write('\n') | |
report.write('\n') | |
report.write('You can get this report by accessing ```http://10.8.8.8:2333/reports/' + fileId + '.md```\n\n') | |
report.write('Report Generated on ' + str(datetime.datetime.now()) + ' \n') | |
report.write('This script is part of Yangcong MiniData Plan (YMDP)\n') | |
report.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment