Open Kilda Java Documentation
ActivityLogger.java
Go to the documentation of this file.
1 package org.openkilda.log;
2 
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Component;
5 
6 import java.util.Calendar;
7 import java.util.concurrent.BlockingQueue;
8 import java.util.concurrent.LinkedBlockingQueue;
9 
10 import org.apache.log4j.Logger;
16 
17 @Component
18 public class ActivityLogger {
19  private static final Logger LOGGER = Logger.getLogger(ActivityLogger.class);
20 
21  private static final BlockingQueue<LogInfo> logs = new LinkedBlockingQueue<>();
22  private static Boolean isThreadStarted = false;
23 
24  @Autowired
25  private ServerContext serverContext;
26 
27  @Autowired
28  private UserActivityService userActivityService;
29 
30  public ActivityLogger() {
31  synchronized (logs) {
32  if(!isThreadStarted) {
33  Thread thread = new Thread(new ActivityLogProcessor());
34  thread.start();
35  isThreadStarted = true;
36  }
37  }
38  }
39 
40  public void log(final ActivityType activityType) {
41  LogInfo logInfo = getLogInfo(activityType, null);
42  log(logInfo);
43  }
44 
45  public void log(final ActivityType activityType, final String objectId) {
46  LogInfo logInfo = getLogInfo(activityType, objectId);
47  log(logInfo);
48  }
49 
50  public void log(final LogInfo logInfo) {
51  if(logInfo != null) {
52  try {
53  logs.put(logInfo);
54  } catch (InterruptedException e) {
55  LOGGER.error("Error while adding logs for logging user activity", e);
56  }
57  }
58  }
59 
60  private LogInfo getLogInfo(final ActivityType activityType, final String objectId) {
61  LogInfo logInfo = new LogInfo();
62  RequestContext requestContext = serverContext.getRequestContext();
63 
64  logInfo.setUserId(requestContext.getUserId());
65  logInfo.setActivityType(activityType);
66  logInfo.setObjectId(objectId);
67  logInfo.setActivityTime(Calendar.getInstance().getTime());
68  logInfo.setClientIpAddress(requestContext.getClientIpAddress());
69 
70  return logInfo;
71  }
72 
73  public class ActivityLogProcessor implements Runnable {
74 
75  @Override
76  protected void finalize() throws Throwable {
77  super.finalize();
78  isThreadStarted = false;
79  }
80 
81  @Override
82  public void run() {
83  while(true) {
84  try {
85  LogInfo logInfo = logs.take();
86  userActivityService.logUserActivity(logInfo);
87  } catch (Exception e) {
88  LOGGER.error("Error while logging user activity", e);
89  }
90  }
91  }
92  }
93 }
void setActivityType(final ActivityType activityType)
Definition: LogInfo.java:33
void log(final LogInfo logInfo)
void setActivityTime(final Date activityTime)
Definition: LogInfo.java:49
void log(final ActivityType activityType, final String objectId)
void setUserId(final long userId)
Definition: LogInfo.java:25
void setClientIpAddress(final String clientIpAddress)
Definition: LogInfo.java:57
void log(final ActivityType activityType)
void setObjectId(final String objectId)
Definition: LogInfo.java:41