diff --git a/dubbokeeper-storage/mongodb-storage/pom.xml b/dubbokeeper-storage/mongodb-storage/pom.xml index 6f4e0586..04e3b548 100644 --- a/dubbokeeper-storage/mongodb-storage/pom.xml +++ b/dubbokeeper-storage/mongodb-storage/pom.xml @@ -51,5 +51,15 @@ mongo-java-driver ${mongodb.version} + + mysql + mysql-connector-java + 5.1.25 + + + commons-dbutils + commons-dbutils + 1.6 + \ No newline at end of file diff --git a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/ApplicationStatisticsStorage.java b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/ApplicationStatisticsStorage.java index e7e88fa8..8358f743 100644 --- a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/ApplicationStatisticsStorage.java +++ b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/ApplicationStatisticsStorage.java @@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory; import org.springframework.transaction.support.TransactionTemplate; +import javax.sql.DataSource; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -45,6 +46,14 @@ public class ApplicationStatisticsStorage extends Thread{ private static final int WRITE_INTERVAL= Integer.parseInt(ConfigUtils.getProperty("mongodb.commit.interval", "100")); + + public ApplicationStatisticsStorage(ApplicationDao applicationDao, + StatisticsDao statisticsDao, + String application, + int type){ + this(applicationDao,statisticsDao,application,type,false); + } + public ApplicationStatisticsStorage(ApplicationDao applicationDao, StatisticsDao statisticsDao, String applicationName, diff --git a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/MongoDBStatisticsStorage.java b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/MongoDBStatisticsStorage.java index fc7522a2..ed7aee3c 100644 --- a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/MongoDBStatisticsStorage.java +++ b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/MongoDBStatisticsStorage.java @@ -19,6 +19,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.zookeeper.data.Stat; import org.bson.Document; +import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; @@ -42,15 +43,28 @@ * @fix: * @description: 描述功能 */ -public class MongoDBStatisticsStorage implements StatisticsStorage { +public class MongoDBStatisticsStorage implements StatisticsStorage,InitializingBean { private static final ConcurrentHashMap APPLICATION_STORAGES = new ConcurrentHashMap(); - @Autowired private ApplicationDao applicationDao; - @Autowired private StatisticsDao statisticsDao; + public ApplicationDao getApplicationDao() { + return applicationDao; + } + + public void setApplicationDao(ApplicationDao applicationDao) { + this.applicationDao = applicationDao; + } + + public StatisticsDao getStatisticsDao() { + return statisticsDao; + } + + public void setStatisticsDao(StatisticsDao statisticsDao) { + this.statisticsDao = statisticsDao; + } @Override public void storeStatistics(Statistics statistics) { @@ -109,8 +123,15 @@ public Collection queryApplications() { @Override public ApplicationInfo queryApplicationInfo(String application, long start, long end) { - //TODO fix - return null; + ApplicationStatisticsStorage applicationStatisticsStorage = APPLICATION_STORAGES.get(application); + ApplicationInfo applicationInfo = new ApplicationInfo(); + applicationInfo.setApplicationName(applicationStatisticsStorage.getApplication()); + applicationInfo.setApplicationType(applicationStatisticsStorage.getType()); + applicationInfo.setMaxConcurrent(statisticsDao.queryMaxItemByService(application,null,"concurrent",start,end).getConcurrent()); + applicationInfo.setMaxElapsed(statisticsDao.queryMaxItemByService(application,null,"elapsed",start,end).getElapsed()); + applicationInfo.setMaxFault(statisticsDao.queryMaxItemByService(application,null,"failureCount",start,end).getFailureCount()); + applicationInfo.setMaxSuccess(statisticsDao.queryMaxItemByService(application,null,"successCount",start,end).getSuccessCount()); + return applicationInfo; } @Override @@ -211,4 +232,17 @@ private void convertItem(BaseItem item,Statistics statistics){ item.setRemoteType(statistics.getRemoteType().toString()); } + @Override + public void afterPropertiesSet() throws Exception { + Collection apps = applicationDao.findAll(); + for(ApplicationInfo app:apps){ + ApplicationStatisticsStorage applicationStatisticsStorage = new ApplicationStatisticsStorage(applicationDao,statisticsDao, + app.getApplicationName(), + app.getApplicationType()); + APPLICATION_STORAGES.put(app.getApplicationName(),applicationStatisticsStorage); + applicationStatisticsStorage.start(); + LOGGER.info("start application [{}] storage",app.getApplicationName()); + } + } + } diff --git a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/ApplicationDao.java b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/ApplicationDao.java index 3bad1cbb..7e64e6b7 100644 --- a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/ApplicationDao.java +++ b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/ApplicationDao.java @@ -17,9 +17,15 @@ public class ApplicationDao { private static final String APPLICATION_COLLECTIONS = "application"; - @Autowired private MongoTemplate mongoTemplate; + public MongoTemplate getMongoTemplate() { + return mongoTemplate; + } + + public void setMongoTemplate(MongoTemplate mongoTemplate) { + this.mongoTemplate = mongoTemplate; + } public void updateAppType(String application, int type){ Query query = new Query( diff --git a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/StatisticsDao.java b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/StatisticsDao.java index 4e557673..4f99468f 100644 --- a/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/StatisticsDao.java +++ b/dubbokeeper-storage/mongodb-storage/src/main/java/com/dubboclub/dk/storage/mongodb/dao/StatisticsDao.java @@ -21,9 +21,16 @@ public class StatisticsDao { private static final String STATISTICS_COLLECTIONS = "statistics"; - @Autowired private MongoTemplate mongoTemplate; + public MongoTemplate getMongoTemplate() { + return mongoTemplate; + } + + public void setMongoTemplate(MongoTemplate mongoTemplate) { + this.mongoTemplate = mongoTemplate; + } + public void addOne(String application,Statistics statistics){ mongoTemplate.save(statistics,String.format("%s_%s",STATISTICS_COLLECTIONS,application)); }