use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.
the class PratilipiBackupApi method get.
@Get
public GenericResponse get(GetRequest request) throws UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
// Fetching Cursor from AppProperty
AppProperty appProperty = dataAccessor.getAppProperty(AppProperty.API_PRATILIPI_BACKUP);
if (appProperty == null)
appProperty = dataAccessor.newAppProperty(AppProperty.API_PRATILIPI_BACKUP);
Cursor cursor = appProperty.getValue() == null ? null : Cursor.fromWebSafeString((String) appProperty.getValue());
QueryResultIterator<Key<PratilipiEntity>> itr = ObjectifyService.ofy().load().type(PratilipiEntity.class).filter("LAST_UPDATED >=", // Thu Dec 01 00:00:00 IST 2016
new Date(1480530600000L)).order("LAST_UPDATED").startAt(cursor).keys().iterator();
int batchSize = 1000;
List<Task> taskList = new ArrayList<>(batchSize);
while (itr.hasNext()) {
TaskQueueFactory.getPratilipiTaskQueue().add(TaskQueueFactory.newTask().setUrl("/pratilipi/backup").addParam("pratilipiId", itr.next().getId() + ""));
if (taskList.size() == batchSize || !itr.hasNext()) {
TaskQueueFactory.getPratilipiTaskQueue().addAll(taskList);
taskList.clear();
}
}
// Updating Cursor to AppProperty
appProperty.setValue(itr.getCursor().toWebSafeString());
dataAccessor.createOrUpdateAppProperty(appProperty);
/* DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
BlobAccessor blobAccessor = DataAccessorFactory.getBlobAccessorBackup();
Date backupDate = new Date();
DateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
DateFormat csvDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm" );
DateFormat dateTimeFormat = new SimpleDateFormat( "yyyy-MM-dd-HH:mm-z" );
dateFormat.setTimeZone( TimeZone.getTimeZone( "Asia/Kolkata" ) );
csvDateFormat.setTimeZone( TimeZone.getTimeZone( "Asia/Kolkata" ) );
dateTimeFormat.setTimeZone( TimeZone.getTimeZone( "Asia/Kolkata" ) );
StringBuilder backup = new StringBuilder();
StringBuilder csv = new StringBuilder( CSV_HEADER + LINE_SEPARATOR );
int count = 0;
String cursor = null;
PratilipiFilter pratilipiFilter = new PratilipiFilter();
Gson gson = new GsonBuilder().registerTypeAdapter( Date.class, new GsonIstDateAdapter() ).create();
while( true ) {
DataListCursorTuple<Pratilipi> pratilipiListCursorTuple = dataAccessor.getPratilipiList( pratilipiFilter, cursor, 1000 );
List<Pratilipi> pratilipiList = pratilipiListCursorTuple.getDataList();
for( Pratilipi pratilipi : pratilipiList ) {
backup.append( gson.toJson( pratilipi ) + LINE_SEPARATOR );
if( request.generateCsv != null && request.generateCsv )
csv.append( "'" + pratilipi.getId() )
.append( CSV_SEPARATOR ).append( pratilipi.getAuthorId() == null ? "" : "'" + pratilipi.getAuthorId() )
.append( CSV_SEPARATOR ).append( pratilipi.getTitle() == null ? "" : "\"" + pratilipi.getTitle().replace( "\"", "\"\"" ) + "\"" )
.append( CSV_SEPARATOR ).append( pratilipi.getTitleEn() == null ? "" : "\"" + pratilipi.getTitleEn().replace( "\"", "\"\"" ) + "\"" )
.append( CSV_SEPARATOR ).append( pratilipi.getLanguage() )
.append( CSV_SEPARATOR ).append( pratilipi.getSummary() != null && pratilipi.getSummary().trim().length() != 0 )
.append( CSV_SEPARATOR ).append( pratilipi.getType() )
.append( CSV_SEPARATOR ).append( pratilipi.getContentType() )
.append( CSV_SEPARATOR ).append( pratilipi.getState() )
.append( CSV_SEPARATOR ).append( pratilipi.getCoverImage() != null )
.append( CSV_SEPARATOR ).append( csvDateFormat.format( pratilipi.getListingDate() ) )
.append( CSV_SEPARATOR ).append( pratilipi.getReviewCount() )
.append( CSV_SEPARATOR ).append( pratilipi.getRatingCount() )
.append( CSV_SEPARATOR ).append( pratilipi.getTotalRating() )
.append( CSV_SEPARATOR ).append( pratilipi.getReadCount() )
.append( LINE_SEPARATOR );
}
count = count + pratilipiList.size();
if( pratilipiList.size() < 1000 )
break;
else
cursor = pratilipiListCursorTuple.getCursor();
}
String fileName = "datastore.pratilipi/"
+ dateFormat.format( backupDate ) + "/"
+ "pratilipi-" + dateTimeFormat.format( backupDate );
BlobEntry pratilipiBackupEntry = blobAccessor.newBlob(
fileName,
backup.toString().getBytes( Charset.forName( "UTF-8" ) ),
"text/plain" );
blobAccessor.createOrUpdateBlob( pratilipiBackupEntry );
if( request.generateCsv != null && request.generateCsv ) {
BlobEntry authorCsvEntry = blobAccessor.newBlob(
"datastore/pratilipi.csv",
csv.toString().getBytes( Charset.forName( "UTF-8" ) ),
"text/csv" );
blobAccessor.createOrUpdateBlob( authorCsvEntry );
}
logger.log( Level.INFO, "Backed up " + count + " Pratilipi Entities." );
*/
return new GenericResponse();
}
use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.
the class DataStoreCleanupUtil method blockReview.
public static void blockReview(Long userId, Long pratilipiId) {
UserPratilipi userPratilipi = ObjectifyService.ofy().load().type(UserPratilipiEntity.class).id(userId + "-" + pratilipiId).now();
if (userPratilipi.getRating() != null || userPratilipi.getReviewState() != UserReviewState.BLOCKED) {
userPratilipi.setRating(null);
userPratilipi.setReviewState(UserReviewState.BLOCKED);
ObjectifyService.ofy().save().entity(userPratilipi).now();
Task task = TaskQueueFactory.newTask().setUrl("/pratilipi/process").addParam("pratilipiId", pratilipiId.toString()).addParam("updateReviewsDoc", "true").addParam("updateUserPratilipiStats", "true");
TaskQueueFactory.getPratilipiTaskQueue().add(task);
}
System.out.println();
System.out.println("Blocked review: " + userPratilipi.getReview());
}
use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.
the class UserPratilipiReviewApi method post.
@Post
public UserPratilipiApi.Response post(PostRequest request) throws InsufficientAccessException, UnexpectedServerException {
UserPratilipiData userPratilipiData = UserPratilipiDataUtil.saveUserPratilipiReview(AccessTokenFilter.getAccessToken().getUserId(), request.pratilipiId, request.rating, request.review, request.reviewState);
Task task = TaskQueueFactory.newTask().setUrl("/pratilipi/process").addParam("pratilipiId", request.pratilipiId.toString()).addParam("updateReviewsDoc", "true").addParam("updateUserPratilipiStats", "true");
TaskQueueFactory.getPratilipiTaskQueue().add(task);
return new UserPratilipiApi.Response(userPratilipiData, UserPratilipiReviewApi.class);
}
use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.
the class PratilipiProcessApi method getPratilipiProcess.
@Get
public GenericResponse getPratilipiProcess(GenericRequest request) throws UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
// START: Creating ValidateData Tasks
// Fetching AppProperty
String appPropertyId = "Api.PratilipiProcess.ValidateData";
AppProperty appProperty = dataAccessor.getAppProperty(appPropertyId);
if (appProperty == null) {
appProperty = dataAccessor.newAppProperty(appPropertyId);
appProperty.setValue(new Date(0));
}
// Fetching list of Pratilipi ids.
PratilipiFilter pratilipiFilter = new PratilipiFilter();
pratilipiFilter.setMinLastUpdate((Date) appProperty.getValue(), false);
List<Long> pratilipiIdList = dataAccessor.getPratilipiIdList(pratilipiFilter, null, 0, 10000).getDataList();
// Creating one task per Pratilipi id.
List<Task> taskList = new ArrayList<>(pratilipiIdList.size());
for (Long pratilipiId : pratilipiIdList) {
/*
Task task = TaskQueueFactory.newTask()
.setUrl( "/pratilipi/process" )
.addParam( "pratilipiId", pratilipiId.toString() )
.addParam( "validateData", "true" );
taskList.add( task );
*/
}
TaskQueueFactory.getPratilipiOfflineTaskQueue().addAll(taskList);
logger.log(Level.INFO, "Added " + taskList.size() + " ValidateData tasks.");
// Updating AppProperty.
if (pratilipiIdList.size() > 0) {
Pratilipi pratilipi = dataAccessor.getPratilipi(pratilipiIdList.get(pratilipiIdList.size() - 1));
Date lastUpdatedDate = pratilipi.getLastUpdated();
logger.log(Level.INFO, "Processing all contents updated from " + (Date) appProperty.getValue() + " to " + lastUpdatedDate + ".");
logger.log(Level.INFO, "Last Updated PratilipiID : " + pratilipi.getId());
appProperty.setValue(lastUpdatedDate);
appProperty = dataAccessor.createOrUpdateAppProperty(appProperty);
}
return new GenericResponse();
}
use of com.pratilipi.taskqueue.Task in project pratilipi by Pratilipi.
the class DataStoreCleanupUtil method delete.
public static void delete(User user, boolean preview) {
System.out.println();
System.out.println("User id: " + user.getId() + ", state: " + user.getState() + ", signUpDate:" + user.getSignUpDate() + ", signUpSource:" + user.getSignUpSource());
if (!preview && user.getState() != UserState.DELETED && user.getState() != UserState.BLOCKED) {
user.setState(UserState.DELETED);
// Save
ObjectifyService.ofy().save().entity(user).now();
}
// ACCESS_TOKEN Table
List<AccessTokenEntity> accessTokenList = ObjectifyService.ofy().load().type(AccessTokenEntity.class).filter("USER_ID", user.getId()).filter("EXPIRY >", new Date()).list();
System.out.println("AccessTokenEntity # " + accessTokenList.size());
if (!preview) {
for (AccessToken accessToken : accessTokenList) {
accessToken.setExpiry(new Date());
// Save
ObjectifyService.ofy().save().entity(accessToken).now();
}
}
// USER_PRATILIPI Table
List<UserPratilipiEntity> userPratilipiList = ObjectifyService.ofy().load().type(UserPratilipiEntity.class).filter("USER_ID", user.getId()).list();
System.out.println("UserPratilipiEntity # " + userPratilipiList.size());
int reviewCount = 0;
int ratingCount = 0;
for (UserPratilipi userPratilipi : userPratilipiList) {
if (userPratilipi.getReview() != null && userPratilipi.getReviewState() != UserReviewState.DELETED && userPratilipi.getReviewState() != UserReviewState.BLOCKED)
reviewCount++;
if (userPratilipi.getRating() != null && userPratilipi.getRating() != 0)
ratingCount++;
}
System.out.println("Review ## " + reviewCount);
System.out.println("Rating ## " + ratingCount);
if (!preview) {
for (UserPratilipi userPratilipi : userPratilipiList) {
boolean save = false;
if (userPratilipi.getReviewState() != UserReviewState.DELETED && userPratilipi.getReviewState() != UserReviewState.BLOCKED) {
userPratilipi.setReviewState(UserReviewState.DELETED);
save = true;
}
if (userPratilipi.getRating() != null && userPratilipi.getRating() != 0) {
userPratilipi.setRating(null);
save = true;
}
if (save) {
// Save
ObjectifyService.ofy().save().entity(userPratilipi).now();
Task task = TaskQueueFactory.newTask().setUrl("/pratilipi/process").addParam("pratilipiId", userPratilipi.getPratilipiId().toString()).addParam("updateReviewsDoc", "true").addParam("updateUserPratilipiStats", "true");
TaskQueueFactory.getPratilipiTaskQueue().add(task);
}
}
}
// USER_AUTHOR Table
List<UserAuthorEntity> userAuthorList = ObjectifyService.ofy().load().type(UserAuthorEntity.class).filter("USER_ID", user.getId()).list();
System.out.println("UserAuthorEntity # " + userAuthorList.size());
int followCount = 0;
for (UserAuthor userAuthor : userAuthorList) if (userAuthor.getFollowState() == UserFollowState.FOLLOWING)
followCount++;
System.out.println("Follow ## " + followCount);
if (!preview) {
for (UserAuthor userAuthor : userAuthorList) {
if (userAuthor.getFollowState() != null) {
userAuthor.setFollowState(null);
// Save
ObjectifyService.ofy().save().entity(userAuthor).now();
Task task = TaskQueueFactory.newTask().setUrl("/author/process").addParam("authorId", userAuthor.getAuthorId().toString()).addParam("updateUserAuthorStats", "true");
TaskQueueFactory.getUserAuthorTaskQueue().add(task);
}
}
Task task = TaskQueueFactory.newTask().setUrl("/user/process").addParam("userId", user.getId().toString()).addParam("updateFollowsDoc", "true").addParam("updateUserAuthorStats", "true");
TaskQueueFactory.getUserAuthorTaskQueue().add(task);
}
// COMMENT Table
List<CommentEntity> commentList = ObjectifyService.ofy().load().type(CommentEntity.class).filter("USER_ID", user.getId()).list();
System.out.println("CommentEntity # " + commentList.size());
int commentCount = 0;
for (Comment comment : commentList) if (comment.getState() == CommentState.ACTIVE)
commentCount++;
System.out.println("Comment ## " + commentCount);
if (!preview) {
for (Comment comment : commentList) {
if (comment.getState() == CommentState.ACTIVE) {
comment.setState(CommentState.DELETED);
// Save
ObjectifyService.ofy().save().entity(comment).now();
if (comment.getReferenceType() == ReferenceType.PRATILIPI) {
Task task = TaskQueueFactory.newTask().setUrl("/pratilipi/process").addParam("pratilipiId", comment.getReferenceId().toString()).addParam("updateReviewsDoc", "true").addParam("updateUserPratilipiStats", "true");
TaskQueueFactory.getPratilipiTaskQueue().add(task);
}
}
}
}
// VOTE Table
List<VoteEntity> voteList = ObjectifyService.ofy().load().type(VoteEntity.class).filter("USER_ID", user.getId()).list();
System.out.println("VoteEntity # " + voteList.size());
int voteCount = 0;
for (Vote vote : voteList) if (vote.getType() != VoteType.NONE)
voteCount++;
System.out.println("Vote ## " + voteCount);
if (!preview) {
for (Vote vote : voteList) {
// Delete
ObjectifyService.ofy().delete().entity(vote).now();
if (vote.getReferenceType() == ReferenceType.PRATILIPI) {
Task task = TaskQueueFactory.newTask().setUrl("/pratilipi/process").addParam("pratilipiId", vote.getReferenceId().toString()).addParam("updateReviewsDoc", "true").addParam("updateUserPratilipiStats", "true");
TaskQueueFactory.getPratilipiTaskQueue().add(task);
}
}
}
// AUTHOR Table
List<AuthorEntity> authorList = ObjectifyService.ofy().load().type(AuthorEntity.class).filter("USER_ID", user.getId()).list();
System.out.println();
System.out.println("AuthorEntity # " + authorList.size());
if (authorList.size() == 0)
return;
for (Author author : authorList) delete(author, preview);
}
Aggregations