Open Kilda Java Documentation
UserActivityService.java
Go to the documentation of this file.
1 package org.openkilda.log.service;
2 
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.beans.factory.annotation.Value;
5 import org.springframework.stereotype.Service;
6 import org.springframework.transaction.annotation.Propagation;
7 import org.springframework.transaction.annotation.Transactional;
8 
9 import java.util.ArrayList;
10 import java.util.Calendar;
11 import java.util.Date;
12 import java.util.List;
13 
22 
23 @Service
24 @Transactional(propagation = Propagation.REQUIRES_NEW)
25 public class UserActivityService {
26 
27  @Autowired
28  private MessageUtils messageUtil;
29 
30  @Autowired
31  private UserActivityRepository userActivityRepository;
32 
33  @Value("${log.duration}")
34  private int logDuration;
35 
36  @Transactional(readOnly = false)
37  public void logUserActivity(final LogInfo logInfo) {
38  UserActivityEntity userActivityEntity = LogConversionUtil.getUserActivity(logInfo);
39  userActivityRepository.save(userActivityEntity);
40  }
41 
42  @Transactional(readOnly = true)
43  public List<LogInfo> getLogs(final List<Long> users, List<String> activities, final String start,
44  final String end) {
45  activities = (ValidatorUtil.isNull(activities) || activities.contains("all")) ? null : activities;
46  List<Long> activityIds = new ArrayList<Long>();
47  if (!ValidatorUtil.isNull(activities)) {
48  for (String activity : activities) {
49  ActivityType activityType = ActivityType.getActivityByName(activity.trim());
50  if (activityType != null) {
51  activityIds.add(activityType.getId());
52  }
53  }
54  }
55 
56  Date startTime = start != null ? new Date(Long.parseLong(start)) : getDefaultStartDate();
57  Date endTime = end != null ? new Date(Long.parseLong(end)) : Calendar.getInstance().getTime();
58 
59  validateLogRequest(startTime, endTime);
60  return getLogs(users, activityIds, startTime, endTime);
61  }
62 
63  private List<LogInfo> getLogs(final List<Long> userIds, final List<Long> activityIds, final Date startTime,
64  final Date endTime) {
65  List<UserActivityEntity> userActivityEntityList = new ArrayList<>();
66 
67  if (ValidatorUtil.isNull(userIds) && ValidatorUtil.isNull(activityIds)) {
68  userActivityEntityList = userActivityRepository
69  .findByActivityTimeGreaterThanEqualAndActivityTimeLessThanEqual(startTime, endTime);
70  } else if (!ValidatorUtil.isNull(userIds) && ValidatorUtil.isNull(activityIds)) {
71  userActivityEntityList = userActivityRepository
72  .findByUserIdInAndActivityTimeGreaterThanEqualAndActivityTimeLessThanEqual(userIds, startTime,
73  endTime);
74  } else if (!ValidatorUtil.isNull(userIds) && !ValidatorUtil.isNull(activityIds)) {
75  userActivityEntityList = userActivityRepository
76  .findByUserIdInAndActivityTimeGreaterThanEqualAndActivityTimeLessThanEqualAndActivity_IdIn(userIds,
77  startTime, endTime, activityIds);
78  } else if (ValidatorUtil.isNull(userIds)) {
79  userActivityEntityList = userActivityRepository
80  .findByActivityTimeGreaterThanEqualAndActivityTimeLessThanEqualAndActivity_IdIn(startTime, endTime,
81  activityIds);
82  }
83 
84  List<LogInfo> logs = new ArrayList<LogInfo>();
85  for (UserActivityEntity userActivityEntity : userActivityEntityList) {
86  logs.add(LogConversionUtil.getLogInfo(userActivityEntity));
87  }
88  return logs;
89  }
90 
91  public Date getDefaultStartDate() {
92  Calendar cal = Calendar.getInstance();
93  cal.add(Calendar.DATE, -logDuration);
94  return cal.getTime();
95  }
96 
97  public void validateLogRequest(final Date startTime, final Date endTime) {
98  if (startTime.after(endTime)) {
99  throw new RequestValidationException(messageUtil.getAttributeInvalid("Start Time", startTime + ""));
100  }
101  }
102 }
static ActivityType getActivityByName(final String name)
static boolean isNull(final Object obj)
static UserActivityEntity getUserActivity(final LogInfo info)
void validateLogRequest(final Date startTime, final Date endTime)