diff --git a/tss_integrate/lib/state-spring-boot-starter-1.0.3.jar b/tss_integrate/lib/state-spring-boot-starter-1.0.3.jar
deleted file mode 100644
index 4f5a7df..0000000
Binary files a/tss_integrate/lib/state-spring-boot-starter-1.0.3.jar and /dev/null differ
diff --git a/tss_integrate/lib/state-spring-boot-starter-1.0.5.jar b/tss_integrate/lib/state-spring-boot-starter-1.0.5.jar
new file mode 100644
index 0000000..ce29499
Binary files /dev/null and b/tss_integrate/lib/state-spring-boot-starter-1.0.5.jar differ
diff --git a/tss_integrate/pom.xml b/tss_integrate/pom.xml
index 6259959..5c48386 100644
--- a/tss_integrate/pom.xml
+++ b/tss_integrate/pom.xml
@@ -12,7 +12,7 @@
tss
0.0.1-SNAPSHOT
TSS
- TSS Integrate
+ EyeAPN TSS
1.8
@@ -56,7 +56,7 @@
state-spring-boot-starter
1.0.3
system
- ${basedir}/lib/state-spring-boot-starter-1.0.3.jar
+ ${basedir}/lib/state-spring-boot-starter-1.0.5.jar
ipworks.local
@@ -78,7 +78,7 @@
- EyeTSS_CctvPtz
+ EyeAPN_Tss
org.springframework.boot
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/Application.java b/tss_integrate/src/main/java/kr/gmtc/tss/Application.java
index c534341..8773aa1 100644
--- a/tss_integrate/src/main/java/kr/gmtc/tss/Application.java
+++ b/tss_integrate/src/main/java/kr/gmtc/tss/Application.java
@@ -2,10 +2,11 @@ package kr.gmtc.tss;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+@EnableScheduling
@SpringBootApplication
public class Application {
-
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/config/DbConfig.java b/tss_integrate/src/main/java/kr/gmtc/tss/config/DbConfig.java
new file mode 100644
index 0000000..b3904c2
--- /dev/null
+++ b/tss_integrate/src/main/java/kr/gmtc/tss/config/DbConfig.java
@@ -0,0 +1,37 @@
+package kr.gmtc.tss.config;
+
+import javax.sql.DataSource;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@Configuration
+@MapperScan(value = "kr.gmtc.eyesvtss.mapper", sqlSessionFactoryRef = "batchSqlSessionFactory" )
+@EnableTransactionManagement
+public class DbConfig {
+
+ @Bean(name = "dbDataSource")
+ @ConfigurationProperties(prefix = "spring.db.datasource")
+ public DataSource db5DataSource() {
+
+ return DataSourceBuilder.create().build();
+ }
+
+ @Bean(name="batchSqlSessionFactory")
+ public SqlSessionFactory batchSqlSessionFactoryBean(@Qualifier("dbDataSource") DataSource batchDataSource, ApplicationContext applicationContext)
+ throws Exception {
+ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
+ factoryBean.setDataSource(batchDataSource);
+ factoryBean.setConfigLocation(applicationContext.getResource("classpath:/mybatis-config.xml"));
+ return factoryBean.getObject();
+ }
+
+}
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java b/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java
index aa449d2..651ba5e 100644
--- a/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java
+++ b/tss_integrate/src/main/java/kr/gmtc/tss/config/TssConfig.java
@@ -1,16 +1,12 @@
package kr.gmtc.tss.config;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Queue;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import kr.gmtc.tss.elkdata.vo.CctvPtzVO;
import kr.gmtc.tss.util.ArrayBlockingLoggingQueue;
@Configuration("TssConfig")
@@ -21,34 +17,22 @@ public class TssConfig {
@Value("${kafka.groupId}")
public String consumeGroupId;
-
+
@Value("${file-zip-path}")
- public String fileZipPath;
-
- @Value("${file-zip-bak-path}")
- public String fileZipBakPath;
-
- @Value("${file-make-time}")
- public int fileMakeTime;
-
- @Value("${data-zip-path}")
public String dataZipPath;
- @Value("${data-zip-bak-path}")
+ @Value("${file-zip-bak-path}")
public String dataZipBakPath;
- @Value("${data-make-time}")
+ @Value("${file-make-time}")
public int dataMakeTime;
- // @Value("${flag.database}")
- // public boolean flagDataBase;
-
+ @Value("${file-save-days}")
+ public int dataSaveDays;
+
@Value("${flag.datafile}")
public boolean flagDataFile;
- // @Value("${flag.file}")
- // public boolean flagFile;
-
@Value("${client.queue-count:10000}")
public int queueCount=100000;
@@ -80,71 +64,33 @@ public class TssConfig {
public String logclassification;
- public Queue rcvQueue;
- public Queue messageBodyQueue;
+ public Map> rcvQueueMap;
public Queue dataFileQueue;
- public Queue trackQueue;
-
- public Queue sqlLogTrackQueue;
-
- public Queue trackLastQueue;
-
- public Queue sqlLogTrackLastQueue;
-
-
- @Bean(name = "rcvQueue")
+ // @Bean(name = "rcvQueueMap")
public Map> getRcvQueueMap() {
- Map> queList = new HashMap>();
+ if(this.rcvQueueMap == null){
+
+ this.rcvQueueMap = new HashMap>();
- for(String swIdx : swclassification){
- Queue rcvQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- queList.put(swIdx, rcvQueue);
+ for(String swIdx : swclassification){
+ Queue rcvQueue = new ArrayBlockingLoggingQueue<>(queueCount);
+ this.rcvQueueMap.put(swIdx, rcvQueue);
+ }
}
+
+ return this.rcvQueueMap;
- return queList;
-
- }
-
- @Bean(name = "messageBodyQueue")
- public Queue getMessageBodyQueue() {
- this.messageBodyQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- return messageBodyQueue;
}
- @Bean(name = "dataFileQueue")
+ // @Bean(name = "dataFileQueue")
public Queue getDataFileQueue() {
- this.dataFileQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- return dataFileQueue;
- }
-
-
- @Bean(name = "trackQueue")
- public Queue getTrackQueue() {
- this.trackQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- return trackQueue;
+ if(this.dataFileQueue == null ){
+ this.dataFileQueue = new ArrayBlockingLoggingQueue<>(queueCount);
+ }
+
+ return this.dataFileQueue;
}
-
- @Bean(name = "trackLastQueue")
- public Queue getTrackLastQueue() {
- this.trackQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- return new ArrayBlockingLoggingQueue<>(queueCount);
- }
-
- @Bean(name = "sqlLogTrackQueue")
- public Queue getSqlLogTrackQueue() {
- this.trackQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- return new ArrayBlockingLoggingQueue<>(queueCount);
- }
-
- @Bean(name = "sqlLogTrackLastQueue")
- public Queue getSqlLogTrackLastQueue() {
- this.trackQueue = new ArrayBlockingLoggingQueue<>(queueCount);
- return new ArrayBlockingLoggingQueue<>(queueCount);
- }
-
-
-
}
diff --git a/tss_integrate/src/main/java/kr/gmtc/tss/elkdata/runnable/AiLocationParseRunnable.java b/tss_integrate/src/main/java/kr/gmtc/tss/elkdata/runnable/AiLocationParseRunnable.java
new file mode 100644
index 0000000..3e6d306
--- /dev/null
+++ b/tss_integrate/src/main/java/kr/gmtc/tss/elkdata/runnable/AiLocationParseRunnable.java
@@ -0,0 +1,195 @@
+package kr.gmtc.tss.elkdata.runnable;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Queue;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import kr.gmtc.tss.elkdata.vo.CctvTrackVO;
+
+public class AiLocationParseRunnable implements Runnable {
+
+ private Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ Queue rcvQueue;
+ Queue dataFileQueue;
+
+ private boolean isRunning = false;
+ private int listChunkSize = 100;
+ private long sleepMillis;
+
+ private String classification;
+ private String swclassification;
+ private String logclassification;
+
+ public AiLocationParseRunnable(Queue rcvQueue
+ , Queue dataFileQueue
+ , int listChunkSize
+ , long sleepMillis
+ , String classification, String swclassification, String logclassification) {
+ this.rcvQueue = rcvQueue;
+ this.dataFileQueue = dataFileQueue;
+ this.listChunkSize = listChunkSize;
+ this.sleepMillis = sleepMillis;
+ this.classification = classification;
+ this.swclassification = swclassification;
+ this.logclassification = logclassification;
+ }
+
+ @Override
+ public void run() {
+ isRunning = true;
+
+ while (isRunning) {
+ try {
+
+ int loopCnt = 0;
+ if(rcvQueue.size()>listChunkSize) {
+ loopCnt = listChunkSize;
+ }else {
+ loopCnt = rcvQueue.size();
+ }
+ String [] chunkArr = new String[loopCnt];
+
+ for (int i = 0; i < loopCnt; i++) {
+ chunkArr[i] = rcvQueue.poll();
+ }
+
+ for (int i = 0; i < chunkArr.length; i++) {
+ parseAndEnqueue(chunkArr[i]);
+ }
+
+ } catch (Exception e) {
+ if (e.getMessage() != null) {
+ logger.debug("[ParseTarget] Parsing Error Message : " ,e);
+ } else {
+ logger.info("[ParserThread] Parsing Error Call Stack" ,e);
+ }
+ }
+
+ sleep(sleepMillis);
+ }
+ }
+
+ private void parseAndEnqueue(String result) {
+ try {
+ ArrayList histroyQueue = new ArrayList();
+ ObjectMapper mapper = new ObjectMapper();
+
+ Map convert = mapper.readValue(result, new TypeReference