Skip to content

Instantly share code, notes, and snippets.

@diggzhang
Created November 6, 2015 03:33
Show Gist options
  • Save diggzhang/1ebb1a9b98e9a27e222b to your computer and use it in GitHub Desktop.
Save diggzhang/1ebb1a9b98e9a27e222b to your computer and use it in GitHub Desktop.
# -*- 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