|
@@ -0,0 +1,99 @@
|
|
|
|
|
+package cn.reghao.devops.manager.log.db.mongo;
|
|
|
|
|
+
|
|
|
|
|
+import cn.reghao.devops.manager.log.model.po.AppLog;
|
|
|
|
|
+import cn.reghao.jutil.jdk.db.BaseCrud;
|
|
|
|
|
+import cn.reghao.jutil.jdk.db.BaseQuery;
|
|
|
|
|
+import com.mongodb.MongoBulkWriteException;
|
|
|
|
|
+import com.mongodb.client.model.InsertManyOptions;
|
|
|
|
|
+import com.mongodb.client.result.InsertManyResult;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.bson.Document;
|
|
|
|
|
+import org.springframework.data.domain.Sort;
|
|
|
|
|
+import org.springframework.data.mongodb.core.MongoTemplate;
|
|
|
|
|
+import org.springframework.data.mongodb.core.convert.MongoConverter;
|
|
|
|
|
+import org.springframework.data.mongodb.core.query.Criteria;
|
|
|
|
|
+import org.springframework.data.mongodb.core.query.Query;
|
|
|
|
|
+import org.springframework.stereotype.Repository;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Locale;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * @author reghao
|
|
|
|
|
+ * @date 2023-10-23 11:31:02
|
|
|
|
|
+ */
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+@Repository
|
|
|
|
|
+public class AppLogMongo implements BaseCrud<AppLog>, BaseQuery<AppLog> {
|
|
|
|
|
+ private final String colName = "AppLog";
|
|
|
|
|
+ private final MongoTemplate mongoTemplate;
|
|
|
|
|
+ private final MongoConverter mongoConverter;
|
|
|
|
|
+ private final int pageSize = 1000;
|
|
|
|
|
+
|
|
|
|
|
+ public AppLogMongo(MongoTemplate mongoTemplate, MongoConverter mongoConverter) {
|
|
|
|
|
+ this.mongoTemplate = mongoTemplate;
|
|
|
|
|
+ this.mongoConverter = mongoConverter;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public AppLog save(AppLog appLog) {
|
|
|
|
|
+ Document doc = new Document();
|
|
|
|
|
+ mongoConverter.write(appLog, doc);
|
|
|
|
|
+ mongoTemplate.getCollection(colName).insertOne(doc);
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void saveAll(List<AppLog> list) {
|
|
|
|
|
+ List<Document> documents = list.stream()
|
|
|
|
|
+ .map(t -> {
|
|
|
|
|
+ Document doc = new Document();
|
|
|
|
|
+ mongoConverter.write(t, doc);
|
|
|
|
|
+ return doc;
|
|
|
|
|
+ })
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ InsertManyOptions options = new InsertManyOptions();
|
|
|
|
|
+ // 忽略 insert 失败的文档
|
|
|
|
|
+ options.ordered(false);
|
|
|
|
|
+ try {
|
|
|
|
|
+ InsertManyResult result = mongoTemplate.getCollection(colName).insertMany(documents, options);
|
|
|
|
|
+ } catch (MongoBulkWriteException ignore) {
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void update(AppLog appLog) {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void delete(AppLog appLog) {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public List<AppLog> findByPage(long page) {
|
|
|
|
|
+ Query query = new Query();
|
|
|
|
|
+ query.skip((page - 1) * pageSize).limit(pageSize);
|
|
|
|
|
+ query.with(Sort.by(new Sort.Order(Sort.Direction.DESC, "timestamp")));
|
|
|
|
|
+ return mongoTemplate.find(query, AppLog.class, colName);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public List<AppLog> findByPage(String app, String host, String level) {
|
|
|
|
|
+ Query query = new Query();
|
|
|
|
|
+ query.addCriteria(Criteria.where("app").is(app));
|
|
|
|
|
+ query.addCriteria(Criteria.where("host").is(host));
|
|
|
|
|
+ query.addCriteria(Criteria.where("level").is(level.toUpperCase(Locale.ROOT)));
|
|
|
|
|
+
|
|
|
|
|
+ query.skip(0).limit(pageSize);
|
|
|
|
|
+ query.with(Sort.by(new Sort.Order(Sort.Direction.DESC, "timestamp")));
|
|
|
|
|
+ return mongoTemplate.find(query, AppLog.class, colName);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public List<AppLog> findAllByPage(long page, int size, List<Criteria> criteriaList) {
|
|
|
|
|
+ Query query = new Query();
|
|
|
|
|
+ criteriaList.forEach(query::addCriteria);
|
|
|
|
|
+ query.skip((page - 1) * size).limit(size);
|
|
|
|
|
+ query.with(Sort.by(new Sort.Order(Sort.Direction.DESC, "createTime")));
|
|
|
|
|
+ return mongoTemplate.find(query, AppLog.class, colName);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|