| Line 77... |
Line 77... |
| 77 |
private static final String PROCEED_TO_PAY_COUNT_KEY = "ProceedToPayCount";
|
77 |
private static final String PROCEED_TO_PAY_COUNT_KEY = "ProceedToPayCount";
|
| 78 |
private static final String UNIQUE_PROCEED_TO_PAY_COUNT_KEY = "UniqueProceedToPayCount";
|
78 |
private static final String UNIQUE_PROCEED_TO_PAY_COUNT_KEY = "UniqueProceedToPayCount";
|
| 79 |
|
79 |
|
| 80 |
private static final String FIRST_SOURCE_KEY = "FirstSource";
|
80 |
private static final String FIRST_SOURCE_KEY = "FirstSource";
|
| 81 |
private static final String SESSION_SOURCE_KEY = "SessionSource";
|
81 |
private static final String SESSION_SOURCE_KEY = "SessionSource";
|
| - |
|
82 |
private static final String FIRST_SOURCE_PAID_KEY = "FirstSourcePaid";
|
| - |
|
83 |
private static final String SESSION_SOURCE_PAID_KEY = "SessionSourcePaid";
|
| - |
|
84 |
|
| 82 |
|
85 |
|
| 83 |
private Map<Long, Item> itemsMap;
|
86 |
private Map<Long, Item> itemsMap;
|
| 84 |
private Map<Long, Item> itemsCatalogIdMap;
|
87 |
private Map<Long, Item> itemsCatalogIdMap;
|
| 85 |
private Map<String, Item> itemsNameMap;
|
88 |
private Map<String, Item> itemsNameMap;
|
| 86 |
private Map<String, Map<String, Long>> itemsResultMap;
|
89 |
private Map<String, Map<String, Long>> itemsResultMap;
|
| Line 193... |
Line 196... |
| 193 |
.entrySet()) {
|
196 |
.entrySet()) {
|
| 194 |
String key = (String) entry.getKey();
|
197 |
String key = (String) entry.getKey();
|
| 195 |
Map<String, Long> itemMap = (Map<String, Long>) entry
|
198 |
Map<String, Long> itemMap = (Map<String, Long>) entry
|
| 196 |
.getValue();
|
199 |
.getValue();
|
| 197 |
|
200 |
|
| 198 |
String[] keyItems = key.split("_");
|
201 |
String[] keyItems = key.split("__");
|
| 199 |
|
202 |
|
| 200 |
Boolean isPaidFirstSource = keyItems[0].equals("0") ? false
|
203 |
Boolean isPaidFirstSource = keyItems[0].equals("0") ? false
|
| 201 |
: true;
|
204 |
: true;
|
| 202 |
String firstSource = keyItems[1];
|
205 |
String firstSource = keyItems[1];
|
| 203 |
Boolean isPaidSessionSource = keyItems[2].equals("0") ? false
|
206 |
Boolean isPaidSessionSource = keyItems[2].equals("0") ? false
|
| 204 |
: true;
|
207 |
: true;
|
| 205 |
String sessionSource = keyItems[3];
|
208 |
String sessionSource = keyItems[3];
|
| - |
|
209 |
Long catalogItemId;
|
| - |
|
210 |
try {
|
| 206 |
Long catalogItemId = Long.parseLong(keyItems[4]);
|
211 |
catalogItemId = Long.parseLong(keyItems[4]);
|
| - |
|
212 |
}
|
| - |
|
213 |
catch (NumberFormatException e) {
|
| - |
|
214 |
logger.warning("NumberFormatException : " + keyItems[4]);
|
| - |
|
215 |
continue;
|
| - |
|
216 |
}
|
| 207 |
|
217 |
|
| 208 |
ItemActivityWithSource itemActivity = new ItemActivityWithSource();
|
218 |
ItemActivityWithSource itemActivity = new ItemActivityWithSource();
|
| 209 |
itemActivity.setIsPaidFirstSource(isPaidFirstSource);
|
219 |
itemActivity.setIsPaidFirstSource(isPaidFirstSource);
|
| 210 |
itemActivity.setFirstSource(firstSource);
|
220 |
itemActivity.setFirstSource(firstSource);
|
| 211 |
itemActivity.setIsPaidSessionSource(isPaidSessionSource);
|
221 |
itemActivity.setIsPaidSessionSource(isPaidSessionSource);
|
| Line 255... |
Line 265... |
| 255 |
itemActivities.add(itemActivity);
|
265 |
itemActivities.add(itemActivity);
|
| 256 |
|
266 |
|
| 257 |
}
|
267 |
}
|
| 258 |
logger.warning("DailyProductWithSourceAggregator : persisting itemactivities : "
|
268 |
logger.warning("DailyProductWithSourceAggregator : persisting itemactivities : "
|
| 259 |
+ itemActivities.size());
|
269 |
+ itemActivities.size());
|
| 260 |
logger.warning("DailyProductWithSourceAggregator : itemactivities : "
|
- |
|
| 261 |
+ itemActivities);
|
- |
|
| 262 |
itemActivityRepository.createAll(itemActivities);
|
270 |
itemActivityRepository.createAll(itemActivities);
|
| 263 |
}
|
271 |
}
|
| 264 |
}
|
272 |
}
|
| 265 |
|
273 |
|
| 266 |
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
|
274 |
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
|
| Line 292... |
Line 300... |
| 292 |
logger.warning("DailyProductWithSourceAggregator : Done Getting View Events in list");
|
300 |
logger.warning("DailyProductWithSourceAggregator : Done Getting View Events in list");
|
| 293 |
for (Entity result : entityResults) {
|
301 |
for (Entity result : entityResults) {
|
| 294 |
String sessionId = (String)result.getProperty(SESSION_ID_FIELD);
|
302 |
String sessionId = (String)result.getProperty(SESSION_ID_FIELD);
|
| 295 |
String firstSource = getSource(sessionId, FIRST_SOURCE_KEY);
|
303 |
String firstSource = getSource(sessionId, FIRST_SOURCE_KEY);
|
| 296 |
String sessionSource = getSource(sessionId, SESSION_SOURCE_KEY);
|
304 |
String sessionSource = getSource(sessionId, SESSION_SOURCE_KEY);
|
| 297 |
String paidFirstSource = "0";
|
305 |
String paidFirstSource = getSource(sessionId, FIRST_SOURCE_PAID_KEY);
|
| 298 |
String paidSessionSource = "0";
|
306 |
String paidSessionSource = getSource(sessionId, SESSION_SOURCE_PAID_KEY);
|
| 299 |
if (firstSource.startsWith("PAID :")) {
|
- |
|
| 300 |
paidFirstSource = "1";
|
- |
|
| 301 |
}
|
- |
|
| 302 |
if (sessionSource.startsWith("PAID :")) {
|
- |
|
| 303 |
paidSessionSource = "1";
|
- |
|
| 304 |
}
|
- |
|
| 305 |
firstSource = firstSource.replaceAll(".*http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
- |
|
| 306 |
sessionSource = sessionSource.replaceAll(".*http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
- |
|
| 307 |
Long catalogItemId = (Long)result.getProperty(ITEMID_FIELD);
|
307 |
Long catalogItemId = (Long)result.getProperty(ITEMID_FIELD);
|
| 308 |
if(catalogItemId == null) {
|
308 |
if(catalogItemId == null) {
|
| 309 |
String name = (String)result.getProperty(PRODUCTNAME_FIELD);
|
309 |
String name = (String)result.getProperty(PRODUCTNAME_FIELD);
|
| 310 |
if (itemsNameMap.containsKey(name.trim())) {
|
310 |
if (itemsNameMap.containsKey(name.trim())) {
|
| 311 |
catalogItemId = itemsNameMap.get(name.trim()).getCatalogId();
|
311 |
catalogItemId = itemsNameMap.get(name.trim()).getCatalogId();
|
| 312 |
}
|
312 |
}
|
| 313 |
}
|
313 |
}
|
| 314 |
String key = paidFirstSource + "_" + firstSource + "_"
|
314 |
String key = paidFirstSource + "__" + firstSource + "__"
|
| 315 |
+ paidSessionSource + "_" + sessionSource + "_"
|
315 |
+ paidSessionSource + "__" + sessionSource + "__"
|
| 316 |
+ catalogItemId;
|
316 |
+ catalogItemId;
|
| 317 |
if (itemsResultMap.containsKey(key)) {
|
317 |
if (itemsResultMap.containsKey(key)) {
|
| 318 |
Map<String, Long> itemMap = itemsResultMap.get(key);
|
318 |
Map<String, Long> itemMap = itemsResultMap.get(key);
|
| 319 |
if (itemMap.containsKey(VIEW_COUNT_KEY)) {
|
319 |
if (itemMap.containsKey(VIEW_COUNT_KEY)) {
|
| 320 |
Long count = itemMap.get(VIEW_COUNT_KEY);
|
320 |
Long count = itemMap.get(VIEW_COUNT_KEY);
|
| Line 362... |
Line 362... |
| 362 |
for (Entity sessionResult : entityResults) {
|
362 |
for (Entity sessionResult : entityResults) {
|
| 363 |
String sessionId = (String)sessionResult.getProperty(SESSION_ID_FIELD);
|
363 |
String sessionId = (String)sessionResult.getProperty(SESSION_ID_FIELD);
|
| 364 |
if (sessionIds.contains(sessionId)) {
|
364 |
if (sessionIds.contains(sessionId)) {
|
| 365 |
String firstSource = "";
|
365 |
String firstSource = "";
|
| 366 |
String sessionSource = "";
|
366 |
String sessionSource = "";
|
| - |
|
367 |
String isPaidFirstSource = "0";
|
| - |
|
368 |
String isPaidSessionSource = "0";
|
| 367 |
if (sessionResult != null) {
|
369 |
if (sessionResult != null) {
|
| 368 |
if (sessionResult.hasProperty(FIRST_SOURCE_FIELD)) {
|
370 |
if (sessionResult.hasProperty(FIRST_SOURCE_FIELD)) {
|
| 369 |
firstSource = sessionResult.getProperty(
|
371 |
firstSource = sessionResult.getProperty(FIRST_SOURCE_FIELD).toString();
|
| - |
|
372 |
isPaidFirstSource = firstSource.startsWith("PAID :") ? "1" : "0";
|
| - |
|
373 |
firstSource = firstSource.toLowerCase().replaceFirst(".*?http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
| - |
|
374 |
if (firstSource.length() > 20) {
|
| 370 |
FIRST_SOURCE_FIELD).toString();
|
375 |
firstSource = firstSource.substring(0, 20);
|
| - |
|
376 |
}
|
| 371 |
}
|
377 |
}
|
| 372 |
if (sessionResult.hasProperty(SESSION_SOURCE_FIELD)) {
|
378 |
if (sessionResult.hasProperty(SESSION_SOURCE_FIELD)) {
|
| 373 |
sessionSource = sessionResult.getProperty(
|
379 |
sessionSource = sessionResult.getProperty(
|
| 374 |
SESSION_SOURCE_FIELD).toString();
|
380 |
SESSION_SOURCE_FIELD).toString();
|
| - |
|
381 |
isPaidSessionSource = sessionSource.startsWith("PAID :") ? "1" : "0";
|
| - |
|
382 |
sessionSource = sessionSource.toLowerCase().replaceFirst(".*?http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
| - |
|
383 |
if (sessionSource.length() > 20) {
|
| - |
|
384 |
sessionSource = sessionSource.substring(0, 20);
|
| - |
|
385 |
}
|
| 375 |
}
|
386 |
}
|
| 376 |
}
|
387 |
}
|
| 377 |
Map<String, String> sessionSourcesMap = new HashMap<String, String>();
|
388 |
Map<String, String> sessionSourcesMap = new HashMap<String, String>();
|
| 378 |
sessionSourcesMap.put(FIRST_SOURCE_KEY, firstSource);
|
389 |
sessionSourcesMap.put(FIRST_SOURCE_KEY, firstSource);
|
| 379 |
sessionSourcesMap.put(SESSION_SOURCE_KEY, sessionSource);
|
390 |
sessionSourcesMap.put(SESSION_SOURCE_KEY, sessionSource);
|
| - |
|
391 |
sessionSourcesMap.put(FIRST_SOURCE_PAID_KEY, isPaidFirstSource);
|
| - |
|
392 |
sessionSourcesMap.put(SESSION_SOURCE_PAID_KEY, isPaidSessionSource);
|
| 380 |
sessionIdSourceMap.put(sessionId, sessionSourcesMap);
|
393 |
sessionIdSourceMap.put(sessionId, sessionSourcesMap);
|
| 381 |
}
|
394 |
}
|
| 382 |
}
|
395 |
}
|
| 383 |
logger.warning("DailyProductWithSourceAggregator : polpulateSessionIds : "
|
396 |
logger.warning("DailyProductWithSourceAggregator : polpulateSessionIds : "
|
| 384 |
+ sessionIdSourceMap.size());
|
397 |
+ sessionIdSourceMap.size());
|
| Line 386... |
Line 399... |
| 386 |
|
399 |
|
| 387 |
private String getSource(String sessionId, String sourceKey) {
|
400 |
private String getSource(String sessionId, String sourceKey) {
|
| 388 |
if (sessionIdSourceMap.containsKey(sessionId)) {
|
401 |
if (sessionIdSourceMap.containsKey(sessionId)) {
|
| 389 |
return sessionIdSourceMap.get(sessionId).get(sourceKey);
|
402 |
return sessionIdSourceMap.get(sessionId).get(sourceKey);
|
| 390 |
}
|
403 |
}
|
| 391 |
logger.warning("DailyProductWithSourceAggregator : sessionIdSourceMap miss : "
|
- |
|
| 392 |
+ sessionId);
|
- |
|
| 393 |
if (sessionId != null && !sessionId.isEmpty()) {
|
404 |
if (sessionId != null && !sessionId.isEmpty()) {
|
| 394 |
Query sessionQuery = new Query(KIND);
|
405 |
Query sessionQuery = new Query(KIND);
|
| 395 |
sessionQuery.addFilter(EVENTTYPE_FIELD, Query.FilterOperator.EQUAL,
|
406 |
sessionQuery.addFilter(EVENTTYPE_FIELD, Query.FilterOperator.EQUAL,
|
| 396 |
NEW_SESSION_EVENT);
|
407 |
NEW_SESSION_EVENT);
|
| 397 |
sessionQuery.addFilter(SESSION_ID_FIELD,
|
408 |
sessionQuery.addFilter(SESSION_ID_FIELD,
|
| Line 399... |
Line 410... |
| 399 |
|
410 |
|
| 400 |
PreparedQuery sessionPq = datastore.prepare(sessionQuery);
|
411 |
PreparedQuery sessionPq = datastore.prepare(sessionQuery);
|
| 401 |
for (Entity sessionResult : sessionPq.asIterable()) {
|
412 |
for (Entity sessionResult : sessionPq.asIterable()) {
|
| 402 |
String firstSource = "";
|
413 |
String firstSource = "";
|
| 403 |
String sessionSource = "";
|
414 |
String sessionSource = "";
|
| - |
|
415 |
String isPaidFirstSource = "0";
|
| - |
|
416 |
String isPaidSessionSource = "0";
|
| 404 |
if (sessionResult != null) {
|
417 |
if (sessionResult != null) {
|
| 405 |
if (sessionResult.hasProperty(FIRST_SOURCE_FIELD)) {
|
418 |
if (sessionResult.hasProperty(FIRST_SOURCE_FIELD)) {
|
| 406 |
firstSource = sessionResult.getProperty(
|
419 |
firstSource = sessionResult.getProperty(
|
| 407 |
FIRST_SOURCE_FIELD).toString();
|
420 |
FIRST_SOURCE_FIELD).toString();
|
| - |
|
421 |
isPaidFirstSource = firstSource.startsWith("PAID :") ? "1" : "0";
|
| - |
|
422 |
firstSource = firstSource.toLowerCase().replaceFirst(".*?http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
| - |
|
423 |
if (firstSource.length() > 20) {
|
| - |
|
424 |
firstSource = firstSource.substring(0, 20);
|
| - |
|
425 |
}
|
| 408 |
}
|
426 |
}
|
| 409 |
if (sessionResult.hasProperty(SESSION_SOURCE_FIELD)) {
|
427 |
if (sessionResult.hasProperty(SESSION_SOURCE_FIELD)) {
|
| 410 |
sessionSource = sessionResult.getProperty(
|
428 |
sessionSource = sessionResult.getProperty(SESSION_SOURCE_FIELD).toString();
|
| - |
|
429 |
isPaidSessionSource = sessionSource.startsWith("PAID :") ? "1" : "0";
|
| - |
|
430 |
sessionSource = sessionSource.toLowerCase().replaceFirst(".*?http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
| - |
|
431 |
if (sessionSource.length() > 20) {
|
| 411 |
SESSION_SOURCE_FIELD).toString();
|
432 |
sessionSource = sessionSource.substring(0, 20);
|
| - |
|
433 |
}
|
| 412 |
}
|
434 |
}
|
| 413 |
}
|
435 |
}
|
| 414 |
Map<String, String> sessionSourcesMap = new HashMap<String, String>();
|
436 |
Map<String, String> sessionSourcesMap = new HashMap<String, String>();
|
| 415 |
sessionSourcesMap.put(FIRST_SOURCE_KEY, firstSource);
|
437 |
sessionSourcesMap.put(FIRST_SOURCE_KEY, firstSource);
|
| 416 |
sessionSourcesMap.put(SESSION_SOURCE_KEY, sessionSource);
|
438 |
sessionSourcesMap.put(SESSION_SOURCE_KEY, sessionSource);
|
| - |
|
439 |
sessionSourcesMap.put(FIRST_SOURCE_PAID_KEY, isPaidFirstSource);
|
| - |
|
440 |
sessionSourcesMap.put(SESSION_SOURCE_PAID_KEY, isPaidSessionSource);
|
| 417 |
sessionIdSourceMap.put(sessionId, sessionSourcesMap);
|
441 |
sessionIdSourceMap.put(sessionId, sessionSourcesMap);
|
| 418 |
}
|
442 |
}
|
| 419 |
}
|
443 |
}
|
| 420 |
if (sessionIdSourceMap.containsKey(sessionId)) {
|
444 |
if (sessionIdSourceMap.containsKey(sessionId)) {
|
| 421 |
return sessionIdSourceMap.get(sessionId).get(sourceKey);
|
445 |
return sessionIdSourceMap.get(sessionId).get(sourceKey);
|
| Line 438... |
Line 462... |
| 438 |
}
|
462 |
}
|
| 439 |
for (Entity result : results) {
|
463 |
for (Entity result : results) {
|
| 440 |
String sessionId = (String)result.getProperty(SESSION_ID_FIELD);
|
464 |
String sessionId = (String)result.getProperty(SESSION_ID_FIELD);
|
| 441 |
String firstSource = getSource(sessionId, FIRST_SOURCE_KEY);
|
465 |
String firstSource = getSource(sessionId, FIRST_SOURCE_KEY);
|
| 442 |
String sessionSource = getSource(sessionId, SESSION_SOURCE_KEY);
|
466 |
String sessionSource = getSource(sessionId, SESSION_SOURCE_KEY);
|
| 443 |
String paidFirstSource = "0";
|
467 |
String paidFirstSource = getSource(sessionId, FIRST_SOURCE_PAID_KEY);
|
| 444 |
String paidSessionSource = "0";
|
468 |
String paidSessionSource = getSource(sessionId, SESSION_SOURCE_PAID_KEY);
|
| 445 |
if (firstSource.startsWith("PAID :")) {
|
- |
|
| 446 |
paidFirstSource = "1";
|
- |
|
| 447 |
}
|
- |
|
| 448 |
if (sessionSource.startsWith("PAID :")) {
|
- |
|
| 449 |
paidSessionSource = "1";
|
- |
|
| 450 |
}
|
- |
|
| 451 |
firstSource = firstSource.replaceAll(".*http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
- |
|
| 452 |
sessionSource = sessionSource.replaceAll(".*http[s]?://", "").replaceAll("/.*", "").replaceAll("www.", "");
|
- |
|
| 453 |
List<Long> itemIds = null;
|
469 |
List<Long> itemIds = null;
|
| 454 |
if (!result.hasProperty(ITEMIDS_FIELD)) {
|
470 |
if (!result.hasProperty(ITEMIDS_FIELD)) {
|
| 455 |
continue;
|
471 |
continue;
|
| 456 |
}
|
472 |
}
|
| 457 |
try {
|
473 |
try {
|
| Line 476... |
Line 492... |
| 476 |
if (!isCatalogIdEvent) {
|
492 |
if (!isCatalogIdEvent) {
|
| 477 |
if (itemsMap.containsKey(itemId)) {
|
493 |
if (itemsMap.containsKey(itemId)) {
|
| 478 |
itemId = itemsMap.get(itemId).getCatalogId();
|
494 |
itemId = itemsMap.get(itemId).getCatalogId();
|
| 479 |
}
|
495 |
}
|
| 480 |
}
|
496 |
}
|
| 481 |
String key = paidFirstSource + "_" + firstSource + "_"
|
497 |
String key = paidFirstSource + "__" + firstSource + "__"
|
| 482 |
+ paidSessionSource + "_" + sessionSource + "_"
|
498 |
+ paidSessionSource + "__" + sessionSource + "__"
|
| 483 |
+ itemId;
|
499 |
+ itemId;
|
| 484 |
if (itemsResultMap.containsKey(key)) {
|
500 |
if (itemsResultMap.containsKey(key)) {
|
| 485 |
Map<String, Long> itemMap = itemsResultMap.get(key);
|
501 |
Map<String, Long> itemMap = itemsResultMap.get(key);
|
| 486 |
if (itemMap.containsKey(countKey)) {
|
502 |
if (itemMap.containsKey(countKey)) {
|
| 487 |
Long count = itemMap.get(countKey);
|
503 |
Long count = itemMap.get(countKey);
|