From b511415b3c5dba5045caf7372026e7a15d2bbc92 Mon Sep 17 00:00:00 2001 From: EmadHanif Date: Thu, 27 Jul 2023 15:24:37 +0500 Subject: [PATCH 1/2] Merge FlyFly & EdgeChains --- FlySpring/edgechain-app/.gitignore | 1 + FlySpring/edgechain-app/pom.xml | 104 +++++++--- .../com/edgechain/EdgeChainApplication.java | 55 +++++ .../impl/PostgreSQLHistoryContextClient.java | 32 ++- .../PostgreSQLHistoryContextRepository.java | 41 +--- .../lib/context/domain/HistoryContext.java | 7 + .../lib/flyfly/CustomApplicationRunner.java | 25 +++ .../edgechain/lib/flyfly/FlyflyCommand.java | 19 ++ .../flyfly/commands/format/FormatCommand.java | 29 +++ .../lib/flyfly/commands/format/Formatter.java | 38 ++++ .../flyfly/commands/jbang/JbangCommand.java | 146 ++++++++++++++ .../lib/flyfly/commands/run/JarRunner.java | 48 +++++ .../flyfly/commands/run/ProjectRunner.java | 190 ++++++++++++++++++ .../lib/flyfly/commands/run/RunCommand.java | 35 ++++ .../commands/run/TestContainersStarter.java | 155 ++++++++++++++ .../edgechain/lib/flyfly/utils/FileTools.java | 31 +++ .../lib/flyfly/utils/ProjectSetup.java | 74 +++++++ .../lib/flyfly/utils/ProjectTypeChecker.java | 20 ++ .../src/main/resources/application.properties | 6 +- .../src/main/resources/banner.txt | 6 + .../src/main/resources/glowroot.zip | Bin 0 -> 18613441 bytes .../com/edgechain/EdgeChainRunnerTest.java | 12 -- 22 files changed, 989 insertions(+), 85 deletions(-) create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/EdgeChainApplication.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/CustomApplicationRunner.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/FlyflyCommand.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/FormatCommand.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/Formatter.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/jbang/JbangCommand.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/JarRunner.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/ProjectRunner.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/RunCommand.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/TestContainersStarter.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/FileTools.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectSetup.java create mode 100644 FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectTypeChecker.java create mode 100644 FlySpring/edgechain-app/src/main/resources/banner.txt create mode 100644 FlySpring/edgechain-app/src/main/resources/glowroot.zip delete mode 100644 FlySpring/edgechain-app/src/test/java/com/edgechain/EdgeChainRunnerTest.java diff --git a/FlySpring/edgechain-app/.gitignore b/FlySpring/edgechain-app/.gitignore index 076818c37..138525d2a 100644 --- a/FlySpring/edgechain-app/.gitignore +++ b/FlySpring/edgechain-app/.gitignore @@ -34,3 +34,4 @@ build/ ### VS Code ### .vscode/ +/src/main/resources/jbang.jar diff --git a/FlySpring/edgechain-app/pom.xml b/FlySpring/edgechain-app/pom.xml index 0d9aa5fb7..f790cf5bc 100644 --- a/FlySpring/edgechain-app/pom.xml +++ b/FlySpring/edgechain-app/pom.xml @@ -10,7 +10,6 @@ jar 17 - 2022.0.3 17 17 @@ -36,6 +35,12 @@ spring-boot-starter-webflux + + org.springframework.boot + spring-boot-starter-data-jpa + + + redis.clients jedis @@ -78,18 +83,6 @@ 2.3.1 - - com.zaxxer - HikariCP - 5.0.1 - - - - - org.springframework - spring-jdbc - - com.squareup.retrofit2 @@ -241,6 +234,35 @@ 0.4.2 + + + info.picocli + picocli-spring-boot-starter + 4.7.0 + + + + net.lingala.zip4j + zip4j + 2.11.3 + + + + org.zeroturnaround + zt-exec + 1.12 + + + + org.testcontainers + testcontainers + 1.17.6 + + + + org.testcontainers + postgresql + org.springframework.boot @@ -263,13 +285,6 @@ import - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - @@ -314,6 +329,7 @@ shade + edgechain @@ -326,14 +342,56 @@ - - - + + com.edgechain.EdgeChainApplication + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + download-and-unpack-jbang + generate-resources + + run + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/EdgeChainApplication.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/EdgeChainApplication.java new file mode 100644 index 000000000..dd29eb5cd --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/EdgeChainApplication.java @@ -0,0 +1,55 @@ +package com.edgechain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.web.servlet.handler.HandlerMappingIntrospector; + +import java.net.URL; +import java.nio.file.Paths; + +@SpringBootApplication +public class EdgeChainApplication { + + private static final Logger logger = LoggerFactory.getLogger(EdgeChainApplication.class); + + public static void main(String[] args) { + + System.setProperty("jar.name", getJarFileName(EdgeChainApplication.class)); + + logger.info("Executed jar file: "+System.getProperty("jar.name")); + + SpringApplication springApplication = + new SpringApplicationBuilder() + .sources(EdgeChainApplication.class).web(WebApplicationType.NONE) + .build(); + + springApplication.run(args); + } + + @Bean(name = "mvcHandlerMappingIntrospector") + public HandlerMappingIntrospector mvcHandlerMappingIntrospector() { + return new HandlerMappingIntrospector(); + } + + private static String getJarFileName(Class clazz) { + URL classResource = clazz.getResource(clazz.getSimpleName() + ".class"); + if (classResource == null) { + throw new RuntimeException("class resource is null"); + } + String url = classResource.toString(); + if (url.startsWith("jar:file:")) { + String path = url.replaceAll("^jar:(file:.*[.]jar)!/.*", "$1"); + try { + return Paths.get(new URL(path).toURI()).toString(); + } catch (Exception e) { + throw new RuntimeException("Invalid jar file"); + } + } + throw new RuntimeException("Invalid jar file"); + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/impl/PostgreSQLHistoryContextClient.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/impl/PostgreSQLHistoryContextClient.java index 32355c59c..08b5e7538 100644 --- a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/impl/PostgreSQLHistoryContextClient.java +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/impl/PostgreSQLHistoryContextClient.java @@ -9,7 +9,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.Objects; @@ -20,7 +22,9 @@ public class PostgreSQLHistoryContextClient private Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired private PostgreSQLHistoryContextRepository repository; + @Autowired private PostgreSQLHistoryContextRepository historyContextRepository; + + @Autowired private JdbcTemplate jdbcTemplate; private static final String PREFIX = "historycontext:"; @@ -34,12 +38,10 @@ public EdgeChain create(String id, PostgreSQLHistoryContextEndpo if (Objects.isNull(id) || id.isEmpty()) throw new RuntimeException("Postgres history_context id cannot be empty or null"); - this.repository.createTable(); // Create Table IF NOT EXISTS; + this.createTable(); // Create Table IF NOT EXISTS; HistoryContext context = new HistoryContext(PREFIX + id, "", LocalDateTime.now()); - this.repository.insert(context); - - emitter.onNext(context); + emitter.onNext(historyContextRepository.save(context)); emitter.onComplete(); } catch (final Exception e) { @@ -61,12 +63,12 @@ public EdgeChain put( String input = response.replaceAll("'", ""); historyContext.setResponse(input); - this.repository.update(historyContext); - + HistoryContext returnValue = this.historyContextRepository.save(historyContext); logger.info(String.format("%s is updated", id)); - emitter.onNext(historyContext); + emitter.onNext(returnValue); emitter.onComplete(); + } catch (final Exception e) { emitter.onError(e); } @@ -81,7 +83,7 @@ public EdgeChain get(String id, PostgreSQLHistoryContextEndpoint emitter -> { try { emitter.onNext( - this.repository + this.historyContextRepository .findById(id) .orElseThrow( () -> @@ -101,7 +103,10 @@ public EdgeChain delete(String id, PostgreSQLHistoryContextEndpoint endp Observable.create( emitter -> { try { - this.repository.delete(id); + + HistoryContext historyContext = this.get(id, null).get(); + this.historyContextRepository.delete(historyContext); + emitter.onNext(""); emitter.onComplete(); } catch (final Exception e) { @@ -110,4 +115,11 @@ public EdgeChain delete(String id, PostgreSQLHistoryContextEndpoint endp }), endpoint); } + + @Transactional + public void createTable() { + jdbcTemplate.execute( + "CREATE TABLE IF NOT EXISTS history_context (id TEXT PRIMARY KEY, response TEXT, created_at" + + " timestamp)"); + } } diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/repositories/PostgreSQLHistoryContextRepository.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/repositories/PostgreSQLHistoryContextRepository.java index b296c03fe..9df6a0ee8 100644 --- a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/repositories/PostgreSQLHistoryContextRepository.java +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/client/repositories/PostgreSQLHistoryContextRepository.java @@ -3,6 +3,7 @@ import com.edgechain.lib.context.client.impl.jdbc.HistoryContextRowMapper; import com.edgechain.lib.context.domain.HistoryContext; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -11,45 +12,7 @@ import java.util.Optional; @Repository -public class PostgreSQLHistoryContextRepository { +public interface PostgreSQLHistoryContextRepository extends JpaRepository { - @Autowired private JdbcTemplate jdbcTemplate; - @Transactional - public void createTable() { - jdbcTemplate.execute( - "CREATE TABLE IF NOT EXISTS history_context (id TEXT PRIMARY KEY, response TEXT, created_at" - + " timestamp)"); - } - - @Transactional - public void insert(HistoryContext context) { - jdbcTemplate.execute( - String.format( - "INSERT INTO history_context (id, response, created_at) values ('%s','%s', '%s')", - context.getId(), context.getResponse(), context.getCreatedAt())); - } - - @Transactional - public void update(HistoryContext context) { - jdbcTemplate.execute( - String.format( - "INSERT INTO history_context (id, response) values ('%s','%s')\n" - + " ON CONFLICT (id) DO UPDATE SET response = EXCLUDED.response;", - context.getId(), context.getResponse())); - } - - @Transactional(readOnly = true) - public Optional findById(String id) { - String sql = String.format("select * from history_context where id='%s'", id); - List contextList = jdbcTemplate.query(sql, new HistoryContextRowMapper()); - - if (contextList.size() > 0) return Optional.ofNullable(contextList.get(0)); - else return Optional.empty(); - } - - @Transactional - public void delete(String id) { - jdbcTemplate.execute(String.format("delete from history_context where id='%s'", id)); - } } diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/domain/HistoryContext.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/domain/HistoryContext.java index 8d5c3886e..86cc1b29c 100644 --- a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/domain/HistoryContext.java +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/context/domain/HistoryContext.java @@ -1,12 +1,19 @@ package com.edgechain.lib.context.domain; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + import java.io.Serializable; import java.time.LocalDateTime; +@Entity(name = "HistoryContext") +@Table(name = "history_context") public class HistoryContext implements Serializable { private static final long serialVersionUID = 2819947915596690671L; + @Id private String id; private String response; diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/CustomApplicationRunner.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/CustomApplicationRunner.java new file mode 100644 index 000000000..b03c8f945 --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/CustomApplicationRunner.java @@ -0,0 +1,25 @@ +package com.edgechain.lib.flyfly; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.*; +import org.springframework.stereotype.Component; +import picocli.CommandLine; +import picocli.CommandLine.IFactory; + +@Component +public class CustomApplicationRunner implements CommandLineRunner, ExitCodeGenerator { + @Autowired private FlyflyCommand runCommand; + @Autowired private IFactory factory; // auto-configured to inject PicocliSpringFactory + + private int exitCode; + + @Override + public void run(String... args) throws Exception { + exitCode = new CommandLine(runCommand, factory).execute(args); + } + + @Override + public int getExitCode() { + return exitCode; + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/FlyflyCommand.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/FlyflyCommand.java new file mode 100644 index 000000000..313ce25a0 --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/FlyflyCommand.java @@ -0,0 +1,19 @@ +package com.edgechain.lib.flyfly; + +import com.edgechain.lib.flyfly.commands.format.FormatCommand; +import com.edgechain.lib.flyfly.commands.jbang.JbangCommand; +import com.edgechain.lib.flyfly.commands.run.RunCommand; +import org.springframework.stereotype.Component; +import picocli.CommandLine; +import picocli.CommandLine.Command; + +@Component +@Command( + name = "edgechain", + subcommands = { + RunCommand.class, + FormatCommand.class, + JbangCommand.class, + CommandLine.HelpCommand.class + }) +public class FlyflyCommand {} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/FormatCommand.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/FormatCommand.java new file mode 100644 index 000000000..6b21492a3 --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/FormatCommand.java @@ -0,0 +1,29 @@ +package com.edgechain.lib.flyfly.commands.format; + +import com.edgechain.lib.flyfly.utils.ProjectTypeChecker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import picocli.CommandLine.Command; + +@Component +@Command(name = "format", description = "Format code with Spotless", hidden = true) +public class FormatCommand implements Runnable { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired Formatter formatter; + @Autowired + ProjectTypeChecker projectTypeChecker; + + @Override + public void run() { + + if (projectTypeChecker.isGradleProject()) formatter.format(); + else { + log.error("Couldn't find build.gradle"); + log.error("Please try again inside the project directory"); + } + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/Formatter.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/Formatter.java new file mode 100644 index 000000000..cd2cdff97 --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/format/Formatter.java @@ -0,0 +1,38 @@ +package com.edgechain.lib.flyfly.commands.format; + +import com.edgechain.lib.flyfly.utils.ProjectSetup; +import org.apache.commons.lang3.SystemUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Formatter { + @Autowired + ProjectSetup projectSetup; + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + void format() { + try { + log.info("Checking formatting configuration"); + if (!projectSetup.formatScriptExists()) { + log.info("Configuring Spotless"); + projectSetup.addFormatScript(); + } + log.info("Running Spotless"); + String[] command; + if (SystemUtils.IS_OS_WINDOWS) + command = new String[] {"cmd", "/c", "gradlew.bat -I .flyfly/format.gradle spotlessApply"}; + else + command = new String[] {"bash", "-c", "./gradlew -I .flyfly/format.gradle spotlessApply"}; + + ProcessBuilder pb = new ProcessBuilder(command); + pb.inheritIO(); + pb.start().waitFor(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/jbang/JbangCommand.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/jbang/JbangCommand.java new file mode 100644 index 000000000..0e7f66357 --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/jbang/JbangCommand.java @@ -0,0 +1,146 @@ +package com.edgechain.lib.flyfly.commands.jbang; + +import java.io.*; +import java.util.HashMap; + +import org.springframework.stereotype.Component; +import picocli.CommandLine.Command; +import picocli.CommandLine.Parameters; + +@Component +@Command(name = "jbang", description = "Activate jbang through the jar placed in resources. Ignore if your application is executed.") +public class JbangCommand implements Runnable { + + @Parameters(description = "Java file to be executed with jbang") + private String javaFile; + +// @Parameters(description = "ClassPath Jar to be used") +// private String classPathJar; + + @Override + public void run() { + String resourcePath = "/jbang.jar"; + try { + File jarFile = extractFileFromResources(resourcePath); + if (jarFile != null) { + runJbang(jarFile, javaFile, System.getProperty("jar.name")); + } else { + System.out.println("Could not find jbang.jar in resources."); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private File extractFileFromResources(String resourcePath) throws IOException { + InputStream inputStream = getClass().getResourceAsStream(resourcePath); + if (inputStream == null) { + return null; + } + File jarFile = File.createTempFile("jbang", ".jar"); + jarFile.deleteOnExit(); + try (FileOutputStream outputStream = new FileOutputStream(jarFile)) { + inputStream.transferTo(outputStream); + } + return jarFile; + } + + private void runJbang(File jarFile, String javaFile, String classPathJar) { + try { + // Step One: Execute the initial command to get the classpath + ProcessBuilder pb = + new ProcessBuilder( + "java", + "-cp", + jarFile.getAbsolutePath(), + "dev.jbang.Main", + "--cp", + classPathJar, + javaFile); + pb.redirectErrorStream(true); + Process process = pb.start(); + BufferedReader bufferedReader = + new BufferedReader(new InputStreamReader(process.getInputStream())); + + String classPath = extractClassPathFromOutput(bufferedReader); + String mainClass; + + String[] filePath; + + String platformName = System.getProperty("os.name"); + if (platformName.contains("Windows")) { + filePath = classPath.split(";"); + } else { + filePath = classPath.split(":"); + } + + File file = new File(filePath[0]); + String filename = file.getName().split("\\.")[0]; + mainClass = String.format("com.edgechain.%s", filename); + + System.out.println("Extracted Filename: " + filename); + System.out.println("Main Class: " + mainClass); + + process.waitFor(); + + // Step Two: Execute the final command with the extracted classpath + if (!classPath.isEmpty() && mainClass != null && !mainClass.isEmpty()) { + runJavaWithClassPath(classPath, mainClass); + } else { + System.out.println("Could not extract classpath or main class from the output."); + } + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } + + private String extractClassPathFromOutput(BufferedReader bufferedReader) throws IOException { + String line; + HashMap sepMap = new HashMap(); + HashMap cpPatternMap = new HashMap(); + HashMap cpEndPatternMap = new HashMap(); + + sepMap.put("Linux", "/"); + sepMap.put("Windows", "\\"); + + cpPatternMap.put("Linux", "-classpath "); + cpPatternMap.put("Windows", "-classpath '"); + + cpEndPatternMap.put("Linux", " "); + cpEndPatternMap.put("Windows", "\'"); + + String classPath = null; + String platformName = System.getProperty("os.name"); + if (platformName.contains("Windows")) { + platformName = "Windows"; + } else { + // Mac and Linux have the same representations. + platformName = "Linux"; + } + final String pattern = cpPatternMap.get(platformName); + while ((line = bufferedReader.readLine()) != null) { + int startIndex = line.indexOf(pattern); + if (startIndex > -1) { + startIndex += pattern.length(); + int endIndex = line.indexOf(cpEndPatternMap.get(platformName).charAt(0), startIndex); + if (endIndex > startIndex) { + classPath = line.substring(startIndex, endIndex); + break; + } + } + } + + System.out.println("Extracted ClassPath = " + classPath); + return classPath; + } + + private void runJavaWithClassPath(String classPath, String mainClass) { + try { + ProcessBuilder pb = new ProcessBuilder("java", "-classpath", classPath, mainClass); + pb.inheritIO(); + pb.start().waitFor(); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/JarRunner.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/JarRunner.java new file mode 100644 index 000000000..c2e9d04af --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/JarRunner.java @@ -0,0 +1,48 @@ +package com.edgechain.lib.flyfly.commands.run; + +import java.io.File; +import java.io.IOException; + +import com.edgechain.lib.flyfly.utils.FileTools; +import com.edgechain.lib.flyfly.utils.ProjectSetup; +import org.apache.commons.lang3.SystemUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class JarRunner { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + ProjectSetup projectSetup; + @Autowired + FileTools fileTools; + + public void run(File jarFile) { + try { + log.info("Checking if glowroot agent exists"); + if (!projectSetup.glowrootAgentExists()) { + log.info("Agent doesn't exist"); + log.info("Adding glowroot agent"); + projectSetup.addGlowrootAgent(); + } + log.info("Runnng the jar"); + String agentPath = projectSetup.getGlowrootAgentPath(); + String jarPath = jarFile.getAbsolutePath(); + String[] command; + if (SystemUtils.IS_OS_WINDOWS) + command = new String[] {"cmd", "/c", "java -javaagent:" + agentPath + " -jar " + jarPath}; + else + command = new String[] {"bash", "-c", "java -javaagent:" + agentPath + " -jar " + jarPath}; + + ProcessBuilder pb = new ProcessBuilder(command); + pb.inheritIO(); + pb.start().waitFor(); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/ProjectRunner.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/ProjectRunner.java new file mode 100644 index 000000000..e177880a1 --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/ProjectRunner.java @@ -0,0 +1,190 @@ +package com.edgechain.lib.flyfly.commands.run; + +import static java.nio.file.StandardWatchEventKinds.*; + +import com.edgechain.lib.flyfly.utils.ProjectSetup; +import jakarta.annotation.PreDestroy; +import java.io.*; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.apache.commons.lang3.SystemUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.zeroturnaround.exec.ProcessExecutor; + +@Component +public class ProjectRunner { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + + @Autowired TestContainersStarter testContainersStarter; + @Autowired + ProjectSetup projectSetup; + + Process runningProcess; + WatchService filesWatcher; + WatchService buildFileWatcher; + boolean allowInfrastructureServices; + + public void run() { + try { + log.info("Configuring the project"); + log.info("Checking if initscript exists"); + if (!projectSetup.initscriptExists()) { + log.info("Initscript doesn't exist"); + log.info("Adding flyfly.gradle to initscripts"); + projectSetup.addInitscript(); + } + projectSetup.addAutorouteJar(); + allowInfrastructureServices = isDockerInstalled(); + if (allowInfrastructureServices) checkAndConfigureServices(); + log.debug("registering watcher for src files changes"); + registerFilesWatcher(); + log.debug("registering watcher for build file changes"); + registerBuildFileWatcher(); + log.info("Starting the project"); + runTheProject(); + loop(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + boolean isDockerInstalled() throws IOException, InterruptedException { + log.info("Checking if docker is installed to allow infrastructure services"); + int exitCode; + try { + String[] command; + if (SystemUtils.IS_OS_WINDOWS) command = new String[] {"cmd", "/c", "docker", "info"}; + else command = new String[] {"docker", "info"}; + + exitCode = new ProcessExecutor().command(command).start().getProcess().waitFor(); + } catch (Exception e) { + exitCode = -1; + } + if (exitCode != 0) { + log.warn("Couldn't find docker. Disabling infrastructure services."); + return false; + } + return true; + } + + void runTheProject() throws IOException { + String[] command; + if (SystemUtils.IS_OS_WINDOWS) command = new String[] {"cmd", "/c", "gradlew.bat", "bootRun"}; + else command = new String[] {"./gradlew", "bootRun"}; + + runningProcess = + new ProcessExecutor().command(command).redirectOutput(System.out).start().getProcess(); + } + + void checkAndConfigureServices() throws IOException { + log.info("Checking if services are needed"); +// Set supportedDBGroupIds = +// Set.of("mysql", "com.mysql", "org.postgresql", "org.mariadb.jdbc"); + Set supportedDBGroupIds = + Set.of( "org.postgresql"); + BufferedReader reader = new BufferedReader(new FileReader("build.gradle")); + String line; + while ((line = reader.readLine()) != null) { + if (line.contains("dependencies")) { + while ((line = reader.readLine()) != null) { + int start = line.indexOf("\'"); + int end = line.indexOf(":"); + if (start < 0 || end < 0) continue; + String groupID = line.substring(start + 1, end); + if (supportedDBGroupIds.contains(groupID)) { + if (!testContainersStarter.isServiesNeeded()) break; + log.info("Found : " + groupID); + switch (groupID) { +// case "mysql", "com.mysql" -> testContainersStarter.startMySQL(); + case "org.postgresql" -> testContainersStarter.startPostgreSQL(); +// case "org.mariadb.jdbc" -> testContainersStarter.startMariaDB(); + } + break; + } + } + break; + } + } + reader.close(); + } + + void registerBuildFileWatcher() throws IOException { + Path path = Paths.get(""); + buildFileWatcher = FileSystems.getDefault().newWatchService(); + path.register(buildFileWatcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); + } + + public void loop() throws IOException, InterruptedException { + while (true) { + if (didFilesChange() && runningProcess.isAlive()) { + reloadTheProject(); + } + if (didBuildFileChange()) { + handleBuildFileChange(); + } + } + } + + void registerFilesWatcher() throws IOException { + Path path = Paths.get("src"); + filesWatcher = FileSystems.getDefault().newWatchService(); + Files.walkFileTree( + path, + new SimpleFileVisitor() { + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) + throws IOException { + dir.register(filesWatcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); + return FileVisitResult.CONTINUE; + } + }); + } + + void reloadTheProject() throws IOException, InterruptedException { + destroyRunningProcess(); + runTheProject(); + } + + boolean didFilesChange() throws InterruptedException { + WatchKey key = filesWatcher.poll(500, TimeUnit.MILLISECONDS); + if (key == null) return false; + for (WatchEvent event : key.pollEvents()) {} + key.reset(); + if (!runningProcess.isAlive()) return false; + return true; + } + + boolean didBuildFileChange() throws InterruptedException { + WatchKey key = buildFileWatcher.poll(500, TimeUnit.MILLISECONDS); + if (key == null) return false; + boolean found = false; + for (WatchEvent event : key.pollEvents()) { + Path p = (Path) event.context(); + if (p.endsWith("build.gradle")) found = true; + } + key.reset(); + if (found) log.info("Detected build file change ..."); + return found; + } + + void handleBuildFileChange() throws IOException, InterruptedException { + destroyRunningProcess(); + if (allowInfrastructureServices) checkAndConfigureServices(); + runTheProject(); + } + + @PreDestroy + void destroyRunningProcess() throws InterruptedException, IOException { + if (runningProcess == null) return; + if (SystemUtils.IS_OS_WINDOWS) { + Runtime.getRuntime().exec("cmd.exe /c taskkill /f /t /pid " + runningProcess.pid()).waitFor(); + } else runningProcess.destroy(); + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/RunCommand.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/RunCommand.java new file mode 100644 index 000000000..afde3efff --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/RunCommand.java @@ -0,0 +1,35 @@ +package com.edgechain.lib.flyfly.commands.run; + +import java.io.File; + +import com.edgechain.lib.flyfly.utils.ProjectTypeChecker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import picocli.CommandLine.Command; +import picocli.CommandLine.Parameters; + +@Component +@Command(name = "run", description = "Run a JAR or Gradle Spring Boot Application. Ignore if your application is executed.") +public class RunCommand implements Runnable { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @Parameters(hidden = true) + File[] files; + + @Autowired ProjectRunner projectRunner; + @Autowired ProjectTypeChecker projectTypeChecker; + @Autowired JarRunner jarRunner; + + @Override + public void run() { + if (files != null && files.length > 0) jarRunner.run(files[0]); + else if (projectTypeChecker.isGradleProject()) projectRunner.run(); + else { + log.error("Couldn't find build.gradle"); + log.error("Please try again inside the project directory"); + } + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/TestContainersStarter.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/TestContainersStarter.java new file mode 100644 index 000000000..ad7c0080b --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/commands/run/TestContainersStarter.java @@ -0,0 +1,155 @@ +package com.edgechain.lib.flyfly.commands.run; + +import jakarta.annotation.PreDestroy; +import java.io.*; +import java.nio.file.FileSystems; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.testcontainers.containers.PostgreSQLContainer; + + +@Component +public class TestContainersStarter { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + private static final String dbName = "test"; + private static final String userName = "test"; + private static final String password = "test"; +// private MySQLContainer mysql; + private PostgreSQLContainer postgre; +// private MariaDBContainer mariaDB; + private String flyflyTempTag = "#flyfly_temp_property"; + +// public void startMySQL() throws IOException { +// if (mysql != null && mysql.isRunning()) return; +// log.info("Starting a temporary MySQL database."); +// mysql = +// new MySQLContainer<>(DockerImageName.parse("mysql:5.7")) +// .withDatabaseName(dbName) +// .withUsername(userName) +// .withPassword(password); +// mysql.addParameter("TC_MY_CNF", null); +// mysql.start(); +// log.info("Database started."); +// log.info("DB URL: " + mysql.getJdbcUrl()); +// log.info("DB Username: " + mysql.getUsername()); +// log.info("DB Password: " + mysql.getPassword()); +// addTempProperties(mysql.getJdbcUrl()); +// } + + public void startPostgreSQL() throws IOException { + if (postgre != null && postgre.isRunning()) return; + log.info("Starting a temporary PostgreSQL database."); + postgre = + new PostgreSQLContainer<>("postgres:14.5") + .withDatabaseName(dbName) + .withUsername(userName) + .withPassword(password); + postgre.addParameter("TC_MY_CNF", null); + postgre.start(); + log.info("Database started."); + log.info("DB URL: " + postgre.getJdbcUrl()); + log.info("DB Username: " + postgre.getUsername()); + log.info("DB Password: " + postgre.getPassword()); + addTempProperties(postgre.getJdbcUrl()); + } + +// public void startMariaDB() throws IOException { +// if (postgre != null && postgre.isRunning()) return; +// log.info("Starting a temporary MariaDB database."); +// mariaDB = +// new MariaDBContainer<>("mariadb:10.3.6") +// .withDatabaseName(dbName) +// .withUsername(userName) +// .withPassword(password); +// mariaDB.addParameter("TC_MY_CNF", null); +// mariaDB.start(); +// log.info("Database started."); +// log.info("DB URL: " + mariaDB.getJdbcUrl()); +// log.info("DB Username: " + mariaDB.getUsername()); +// log.info("DB Password: " + mariaDB.getPassword()); +// addTempProperties(mariaDB.getJdbcUrl()); +// } + + public void addTempProperties(String url) throws IOException { + log.info("Appending temporary DB configuration to application.properties"); + BufferedWriter writer = new BufferedWriter(new FileWriter(getPropertiesPath(), true)); + writer.newLine(); + writer.append(flyflyTempTag); + writer.newLine(); + writer.append("spring.datasource.url=" + url); + writer.newLine(); + writer.append(flyflyTempTag); + writer.newLine(); + writer.append("spring.datasource.username=" + userName); + writer.newLine(); + writer.append(flyflyTempTag); + writer.newLine(); + writer.append("spring.datasource.password=" + password); + writer.flush(); + writer.close(); + } + + public void removeTempProperties() throws IOException { + BufferedReader reader = new BufferedReader(new FileReader(getPropertiesPath())); + StringBuilder sb = new StringBuilder(); + boolean tempNotFound = true; + String line; + while ((line = reader.readLine()) != null) { + if (line.contains(flyflyTempTag)) { + tempNotFound = false; + reader.readLine(); + continue; + } + sb.append(line + "\n"); + } + reader.close(); + if (tempNotFound) return; + + BufferedWriter writer = new BufferedWriter(new FileWriter(getPropertiesPath())); + writer.write(sb.toString()); + writer.flush(); + writer.close(); + } + + public boolean isServiesNeeded() throws IOException { + BufferedReader reader = new BufferedReader(new FileReader(getPropertiesPath())); + String line; + String datafield = "spring.datasource.url"; + while ((line = reader.readLine()) != null) { + if (line.contains(datafield)) { + reader.close(); + return false; + } + } + reader.close(); + return true; + } + + public String getPropertiesPath() { + String separator = FileSystems.getDefault().getSeparator(); + return System.getProperty("user.dir") + + separator + + "src" + + separator + + "main" + + separator + + "resources" + + separator + + "application.properties"; + } + + @PreDestroy + public void destroy() { + try { + removeTempProperties(); + } catch (IOException e) { + } +// if (mysql != null && mysql.isRunning()) mysql.close(); + if (postgre != null && postgre.isRunning()) postgre.close(); +// if (mariaDB != null && mariaDB.isRunning()) mariaDB.close(); + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/FileTools.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/FileTools.java new file mode 100644 index 000000000..046eeb69b --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/FileTools.java @@ -0,0 +1,31 @@ +package com.edgechain.lib.flyfly.utils; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import net.lingala.zip4j.ZipFile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class FileTools { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + public void exportFileTo(String file, String dest) throws IOException { + log.debug("Exporting " + file + " To " + dest); + InputStream resource = FileTools.class.getClassLoader().getResourceAsStream(file); + Files.copy(resource, Path.of(dest)); + log.debug("Exported successfully"); + } + + public void unzip(String zipFilePath, String destDir) throws IOException { + log.debug("Unzipping " + zipFilePath + " into " + destDir); + ZipFile zipFile = new ZipFile(zipFilePath); + zipFile.extractAll(destDir); + zipFile.close(); + log.debug("Unzipped successfully"); + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectSetup.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectSetup.java new file mode 100644 index 000000000..d6b86789d --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectSetup.java @@ -0,0 +1,74 @@ +package com.edgechain.lib.flyfly.utils; + +import java.io.File; +import java.io.IOException; +import java.nio.file.FileSystems; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ProjectSetup { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired FileTools fileTools; + + private String userHome = System.getProperty("user.home"); + private String separator = FileSystems.getDefault().getSeparator(); + private String initscriptDir = + userHome + separator + ".gradle" + separator + "init.d" + separator + "flyfly.gradle"; + private String flyflyDir = System.getProperty("user.dir") + separator + ".flyfly"; + private String formatScriptDir = flyflyDir + separator + "format.gradle"; + private String autorouteDir = flyflyDir + separator + "autoroute.jar"; + private String glowrootDir = flyflyDir + separator + "glowroot"; + + public boolean initscriptExists() { + log.debug("Checking if flyfly.gradle exists in " + initscriptDir); + return new File(initscriptDir).exists(); + } + + public void addInitscript() throws IOException { + File initDir = new File(userHome + separator + ".gradle" + separator + "init.d"); + if (!initDir.exists()) initDir.mkdirs(); + fileTools.exportFileTo("flyfly.gradle", initscriptDir); + } + + public void addAutorouteJar() throws IOException { + File flyflyFolder = new File(flyflyDir); + if (!flyflyFolder.exists()) flyflyFolder.mkdirs(); + File autorouteFile = new File(autorouteDir); + if (!autorouteFile.exists() || (autorouteFile.exists() && autorouteFile.delete())) + fileTools.exportFileTo("autoroute.jar", autorouteDir); + } + + public boolean formatScriptExists() { + log.debug("Checking if format.gradle exists in " + formatScriptDir); + return new File(formatScriptDir).exists(); + } + + public void addFormatScript() throws IOException { + File flyflyFolder = new File(flyflyDir); + if (!flyflyFolder.exists()) flyflyFolder.mkdirs(); + fileTools.exportFileTo("format.gradle", formatScriptDir); + } + + public boolean glowrootAgentExists() { + log.debug("Checking if glowroot folder exists in " + glowrootDir); + return new File(glowrootDir).exists(); + } + + public void addGlowrootAgent() throws IOException { + File flyflyFolder = new File(flyflyDir); + if (!flyflyFolder.exists()) flyflyFolder.mkdirs(); + String zipDir = flyflyDir + separator + "glowroot.zip"; + fileTools.exportFileTo("glowroot.zip", zipDir); + fileTools.unzip(zipDir, flyflyDir); + new File(zipDir).delete(); + } + + public String getGlowrootAgentPath() { + return flyflyDir + separator + "glowroot" + separator + "glowroot.jar"; + } +} diff --git a/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectTypeChecker.java b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectTypeChecker.java new file mode 100644 index 000000000..1fa9857bf --- /dev/null +++ b/FlySpring/edgechain-app/src/main/java/com/edgechain/lib/flyfly/utils/ProjectTypeChecker.java @@ -0,0 +1,20 @@ +package com.edgechain.lib.flyfly.utils; + +import java.io.File; +import org.springframework.stereotype.Component; + +@Component +public class ProjectTypeChecker { + + public boolean isMavenProject() { + File dir = new File(System.getProperty("user.dir")); + for (File file : dir.listFiles()) if (file.getName().equals("pom.xml")) return true; + return false; + } + + public boolean isGradleProject() { + File dir = new File(System.getProperty("user.dir")); + for (File file : dir.listFiles()) if (file.getName().equals("build.gradle")) return true; + return false; + } +} diff --git a/FlySpring/edgechain-app/src/main/resources/application.properties b/FlySpring/edgechain-app/src/main/resources/application.properties index 81f3f10ac..3efd93515 100644 --- a/FlySpring/edgechain-app/src/main/resources/application.properties +++ b/FlySpring/edgechain-app/src/main/resources/application.properties @@ -1,8 +1,12 @@ spring.main.allow-bean-definition-overriding=true +spring.banner.location=classpath:banner.txt spring.mvc.async.request-timeout=1200000 spring.servlet.multipart.max-file-size=70MB spring.servlet.multipart.max-request-size=100MB spring.jackson.default-property-inclusion=NON_NULL logging.level.org.apache.tika.parser.pdf=error logging.level.org.apache.pdfbox=error -logging.level.org.apache.fontbox.ttf.CmapSubtable=error \ No newline at end of file +logging.level.org.apache.fontbox.ttf.CmapSubtable=error +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false +spring.jpa.hibernate.ddl-auto=none +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect \ No newline at end of file diff --git a/FlySpring/edgechain-app/src/main/resources/banner.txt b/FlySpring/edgechain-app/src/main/resources/banner.txt new file mode 100644 index 000000000..e3580b9cc --- /dev/null +++ b/FlySpring/edgechain-app/src/main/resources/banner.txt @@ -0,0 +1,6 @@ + ______ __ ________ _ + / ____/___/ /___ ____ / ____/ /_ ____ _(_)___ + / __/ / __ / __ `/ _ \ / / / __ \/ __ `/ / __ \ + / /___/ /_/ / /_/ / __/ / /___/ / / / /_/ / / / / / +/_____/\__,_/\__, /\___/ \____/_/ /_/\__,_/_/_/ /_/ + /____/ diff --git a/FlySpring/edgechain-app/src/main/resources/glowroot.zip b/FlySpring/edgechain-app/src/main/resources/glowroot.zip new file mode 100644 index 0000000000000000000000000000000000000000..00b2b7fc12418dbd15da1d39ebad3b66222ef5a9 GIT binary patch literal 18613441 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