1、【新增/修改】将日志写入到ArangoDb(原来MongoDb)

2、【升级】 升级多个jar依赖
This commit is contained in:
lxyer 2018-11-18 11:01:50 +08:00
parent 4c5ee1baf2
commit a5750efce0
6 changed files with 155 additions and 30 deletions

26
pom.xml
View File

@ -13,8 +13,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
<source>10</source> <source>11</source>
<target>10</target> <target>11</target>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
@ -25,12 +25,12 @@
<dependency> <dependency>
<groupId>org.redkale</groupId> <groupId>org.redkale</groupId>
<artifactId>redkale</artifactId> <artifactId>redkale</artifactId>
<version>1.9.6</version> <version>1.9.8</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.redkalex</groupId> <groupId>org.redkalex</groupId>
<artifactId>redkale-plugins</artifactId> <artifactId>redkale-plugins</artifactId>
<version>1.9.6</version> <version>1.9.8</version>
</dependency> </dependency>
<dependency> <dependency>
@ -41,17 +41,21 @@
<dependency> <dependency>
<groupId>com.jfinal</groupId> <groupId>com.jfinal</groupId>
<artifactId>enjoy</artifactId> <artifactId>enjoy</artifactId>
<version>3.4</version> <version>3.5</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.8.0</version>
</dependency> </dependency>
<!-- mongodb支持 -->
<dependency> <dependency>
<groupId>org.mongodb</groupId> <groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId> <artifactId>mongo-java-driver</artifactId>
<version>3.8.0</version> <version>3.9.0</version>
</dependency>
<!-- arangodb支持 -->
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver</artifactId>
<version>5.0.1</version>
</dependency> </dependency>
<!--maven 打包不需要--> <!--maven 打包不需要-->

View File

@ -0,0 +1,41 @@
package com.lxyer.bbs.base;
import com.arangodb.ArangoCollection;
import com.arangodb.ArangoDB;
import com.arangodb.ArangoDatabase;
import com.lxyer.bbs.base.entity.VisLog;
import java.util.function.Function;
/**
* @author: liangxianyou at 2018/11/18 9:02.
*/
public class ArangoKit {
protected static final boolean winos = System.getProperty("os.name").contains("Window");
protected static Function<String, String> chDev = (s) -> s + (winos ? "_dev" : "");
//Arango
protected static ArangoDB arangoDb = new ArangoDB.Builder().host("120.24.230.60", 8529).user("root").password("pwd123").build();
protected static ArangoDatabase dbDev = arangoDb.db(chDev.apply("redbbs"));
protected static ArangoCollection colVisLog = dbDev.collection(chDev.apply("vis_log"));
//check exists
static {
if (!dbDev.exists()) {
dbDev.create();
}
if (!colVisLog.exists()) {
colVisLog.create();
}
}
public static <T> void save(T t) {
if (t instanceof VisLog) {
colVisLog.insertDocument(t);
}
}
}

View File

@ -1,6 +1,7 @@
package com.lxyer.bbs.base; package com.lxyer.bbs.base;
import com.jfinal.kit.Kv; import com.jfinal.kit.Kv;
import com.lxyer.bbs.base.entity.VisLog;
import com.lxyer.bbs.base.kit.RetCodes; import com.lxyer.bbs.base.kit.RetCodes;
import com.lxyer.bbs.base.user.UserInfo; import com.lxyer.bbs.base.user.UserInfo;
import com.lxyer.bbs.base.user.UserService; import com.lxyer.bbs.base.user.UserService;
@ -14,7 +15,6 @@ import org.redkale.util.AnyValue;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Map;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import static com.lxyer.bbs.base.kit.RetCodes.RET_USER_UNLOGIN; import static com.lxyer.bbs.base.kit.RetCodes.RET_USER_UNLOGIN;
@ -39,7 +39,7 @@ public class BaseServlet extends HttpServlet {
protected CommentService commentService; protected CommentService commentService;
@Resource @Resource
protected TaskQueue<Map> logQueue; protected TaskQueue<VisLog> logQueue;
@Override @Override
public void init(HttpContext context, AnyValue config) { public void init(HttpContext context, AnyValue config) {
@ -74,23 +74,23 @@ public class BaseServlet extends HttpServlet {
//异步记录访问日志 //异步记录访问日志
final int userid = currentid; final int userid = currentid;
CompletableFuture.runAsync(()->{ CompletableFuture.runAsync(()->{
Kv visLog = new Kv();//iptimeuseriduripara
visLog.set("ip", request.getRemoteAddr());
visLog.set("time", System.currentTimeMillis());
visLog.set("userid", userid);
visLog.set("uri", request.getRequestURI());
Kv headers = Kv.create();
request.getHeaders().forEach((k,v)->{
headers.set(k, request.getHeader(k));
});
visLog.set("headers", headers);
Kv para = Kv.create(); Kv para = Kv.create();
for (String key : request.getParameterNames()){ for (String key : request.getParameterNames()){
para.set(key, request.getParameter(key)); para.set(key, request.getParameter(key));
} }
visLog.set("para", para); Kv headers = Kv.create();
request.getHeaders().forEach((k,v)->{
headers.set(k, request.getHeader(k));
});
VisLog visLog = new VisLog();
visLog.setIp(request.getRemoteAddr());
visLog.setHeaders(headers);
visLog.setPara(para);
visLog.setTime(System.currentTimeMillis());
visLog.setFtime(String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", visLog.getTime()));
try { try {
logQueue.put(visLog); logQueue.put(visLog);
} catch (InterruptedException e) { } catch (InterruptedException e) {

View File

@ -1,5 +1,6 @@
package com.lxyer.bbs.base; package com.lxyer.bbs.base;
import com.lxyer.bbs.base.entity.VisLog;
import com.lxyer.bbs.base.kit.LxyKit; import com.lxyer.bbs.base.kit.LxyKit;
import com.lxyer.bbs.base.user.UserInfo; import com.lxyer.bbs.base.user.UserInfo;
import com.lxyer.bbs.base.user.UserRecord; import com.lxyer.bbs.base.user.UserRecord;
@ -83,7 +84,12 @@ public class TaskQueue<T extends Object> extends BaseService implements Runnable
public void run() { public void run() {
try { try {
while (true){ while (true){
Map logData = (Map) take(); T task = take();
if (task instanceof VisLog) {
ArangoKit.save(task);
}
/*Map logData = (Map) take();
logData.put("ftime", String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", logData.get("time"))); logData.put("ftime", String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", logData.get("time")));
visLog.insertOne(new Document(logData)); visLog.insertOne(new Document(logData));
@ -94,7 +100,7 @@ public class TaskQueue<T extends Object> extends BaseService implements Runnable
//[访问量] //[访问量]
if (uri.startsWith("/jie/detail/")){ if (uri.startsWith("/jie/detail/")){
updateViewNumAsync(logData); updateViewNumAsync(logData);
} }*/
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -0,0 +1,74 @@
package com.lxyer.bbs.base.entity;
import java.util.Map;
/**
* 存贮数据到 非关系型数据库
*
* @author: liangxianyou at 2018/11/18 8:47.
*/
public class VisLog {
private String ip;
private String userid;
private String ftime;
private String uri;
private long time;
private Map para;
private Map headers;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getFtime() {
return ftime;
}
public void setFtime(String ftime) {
this.ftime = ftime;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public Map getPara() {
return para;
}
public void setPara(Map para) {
this.para = para;
}
public Map getHeaders() {
return headers;
}
public void setHeaders(Map headers) {
this.headers = headers;
}
}

View File

@ -79,7 +79,7 @@ public class ContentService extends BaseService implements UIService<ContentInfo
}else { }else {
source.findAsync(Content.class, content.getContentid()).thenAccept(x->{ source.findAsync(Content.class, content.getContentid()).thenAccept(x->{
if (x.getUserid() == userid || userService.isAdmin(userid)){//身份验证 后修改内容 if (x.getUserid() == userid || userService.isAdmin(userid)){//身份验证 后修改内容
source.updateColumnAsync(content,SelectColumn.createIncludes("title", "digest", "content","type", "status")); source.updateColumnAsync(content,SelectColumn.includes("title", "digest", "content","type", "status"));
} }
}); });
} }
@ -130,10 +130,10 @@ public class ContentService extends BaseService implements UIService<ContentInfo
Flipper flipper = new Flipper().sort("createtime DESC"); Flipper flipper = new Flipper().sort("createtime DESC");
FilterNode filterNode = FilterNode.create("cate", 20).and("status", 10).and("userid", userid); FilterNode filterNode = FilterNode.create("cate", 20).and("status", 10).and("userid", userid);
Sheet<ActLog> actLogs = source.querySheet(ActLog.class, SelectColumn.createIncludes("tid", "createtime"), flipper, filterNode); Sheet<ActLog> actLogs = source.querySheet(ActLog.class, SelectColumn.includes("tid", "createtime"), flipper, filterNode);
int[] contentids = actLogs.stream().mapToInt(x -> x.getTid()).toArray(); int[] contentids = actLogs.stream().mapToInt(x -> x.getTid()).toArray();
Sheet<Content> contents = source.querySheet(Content.class, SelectColumn.createIncludes("contentid", "title"), flipper.sort(null), FilterNode.create("contentid", FilterExpress.IN, contentids)); Sheet<Content> contents = source.querySheet(Content.class, SelectColumn.includes("contentid", "title"), flipper.sort(null), FilterNode.create("contentid", FilterExpress.IN, contentids));
Sheet<ContentInfo> infos = createInfo(contents); Sheet<ContentInfo> infos = createInfo(contents);