Browse Source

buildRelative

bfzgs 2 years ago
parent
commit
6f739331e1

+ 10 - 4
.idea/compiler.xml

@@ -7,23 +7,28 @@
         <sourceOutputDir name="target/generated-sources/annotations" />
         <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
         <outputRelativeToContentRoot value="true" />
+        <module name="final-builder" />
+        <module name="final-fileserver" />
+        <module name="final-common" />
+        <module name="final-event" />
+        <module name="final-user" />
         <module name="final-trigger" />
         <module name="final-config" />
         <module name="final-mockserver" />
         <module name="final-persistence" />
         <module name="final-gateway" />
         <module name="final-transfer" />
-        <module name="final-fileserver" />
         <module name="final-device" />
         <module name="final-timetable" />
-        <module name="final-common" />
-        <module name="final-event" />
-        <module name="final-user" />
       </profile>
     </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="final-trigger-client" target="17" />
+    </bytecodeTargetLevel>
   </component>
   <component name="JavacSettings">
     <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="final-builder" options="-parameters" />
       <module name="final-common" options="-parameters" />
       <module name="final-config" options="-parameters" />
       <module name="final-device" options="-parameters" />
@@ -36,6 +41,7 @@
       <module name="final-timetable" options="-parameters" />
       <module name="final-transfer" options="-parameters" />
       <module name="final-trigger" options="-parameters" />
+      <module name="final-trigger-client" options="-parameters" />
       <module name="final-user" options="-parameters" />
     </option>
   </component>

+ 2 - 0
.idea/encodings.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/final-builder/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/final-common/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/final-common/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/final-config/src/main/java" charset="UTF-8" />
@@ -14,6 +15,7 @@
     <file url="file://$PROJECT_DIR$/final-persistence/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/final-timetable/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/final-transfer/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/final-trigger-client/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/final-trigger/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/final-user/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/finalfileserver/src/main/java" charset="UTF-8" />

+ 1 - 0
.idea/misc.xml

@@ -12,6 +12,7 @@
     </option>
     <option name="ignoredFiles">
       <set>
+        <option value="$PROJECT_DIR$/final-trigger-client/pom.xml" />
         <option value="$PROJECT_DIR$/finalfileserver/pom.xml" />
       </set>
     </option>

+ 8 - 0
final-builder.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4">
+  <component name="FacetManager">
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+</module>

+ 3 - 0
final-builder/Dockerfile

@@ -0,0 +1,3 @@
+FROM jdk19
+ADD config.jar /
+#ENTRYPOINT ["java","‐jar","/config.jar"]

+ 93 - 0
final-builder/pom.xml

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.brynhild.graduation</groupId>
+        <artifactId>final-project-parent</artifactId>
+        <version>1.0</version>
+    </parent>
+
+    <artifactId>final-builder</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.brynhild.graduation</groupId>
+            <artifactId>final-transfer</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-groovy-templates</artifactId>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-bus</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bootstrap</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>builder</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>3.0.1</version>
+            </plugin>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>1.2.2</version>
+                <configuration>
+                    <imageName>192.168.110.3:5000/${project.artifactId}:${project.version}
+                    </imageName>
+                    <baseImage>jdk19</baseImage>
+                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
+                    <resources>
+                        <resource>
+                            <targetPath>/</targetPath>
+                            <directory>${project.build.directory}</directory>
+                            <include>${project.build.finalName}.jar</include>
+                        </resource>
+                    </resources>
+                    <dockerHost>http://192.168.110.3:2375</dockerHost>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 19 - 0
final-builder/src/main/java/org/brynhild/graduation/builder/BuilderApplication.java

@@ -0,0 +1,19 @@
+package org.brynhild.graduation.builder;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.client.RestTemplate;
+
+@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+public class BuilderApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(BuilderApplication.class,args);
+    }
+
+    @Bean
+    public RestTemplate restTemplate(){
+        return new RestTemplate();
+    }
+}

+ 65 - 0
final-builder/src/main/java/org/brynhild/graduation/builder/event/BuildEventListener.groovy

@@ -0,0 +1,65 @@
+package org.brynhild.graduation.builder.event
+
+import jakarta.annotation.Resource
+import org.brynhild.graduation.common.constant.RabbitQueueConstant
+import org.brynhild.graduation.common.utils.ByteTransferUtil
+import org.brynhild.graduation.transfer.builder.BuildTaskResult
+import org.brynhild.graduation.transfer.trigger.BuildTask
+import org.springframework.amqp.rabbit.annotation.RabbitHandler
+import org.springframework.amqp.rabbit.annotation.RabbitListener
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Component
+import org.springframework.web.client.RestTemplate
+
+@Component
+@RabbitListener(queues = RabbitQueueConstant.BUILD_EVENT)
+class BuildEventListener {
+    private BuildEventResultSender sender
+    private RestTemplate restTemplate
+
+    @RabbitHandler
+    void execute(byte[] bytes){
+        try{
+            Object obj= ByteTransferUtil.getBytesFromObject(bytes)
+            switch(obj){
+                case BuildTask:
+                    handleBuildTask(obj)
+                    break
+                default: throw new IllegalStateException("Unexpected value: " + objectFromBytes)
+
+            }
+        }catch (Exception e){
+            e.printStackTrace()
+        }
+    }
+
+    void handleBuildTask(BuildTask task){
+        def hooks = task.hooks
+        def result=new BuildTaskResult()
+        result.with {
+            taskId=task.taskId
+            flag=true
+        }
+        try{
+            for(hook in hooks){
+//                restTemplate.getForObject(hook,Object.class)
+            }
+        }catch (Exception e){
+            result.flag=false
+            e.printStackTrace()
+        }
+        sender.sendResult(result)
+    }
+
+    @Autowired
+    @Resource
+    void setSender(BuildEventResultSender sender) {
+        this.sender = sender
+    }
+
+    @Autowired
+    @Resource
+    void setRestTemplate(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate
+    }
+}

+ 23 - 0
final-builder/src/main/java/org/brynhild/graduation/builder/event/BuildEventResultSender.groovy

@@ -0,0 +1,23 @@
+package org.brynhild.graduation.builder.event
+
+import jakarta.annotation.Resource
+import org.brynhild.graduation.common.constant.RabbitQueueConstant
+import org.brynhild.graduation.common.utils.ByteTransferUtil
+import org.brynhild.graduation.transfer.builder.BuildTaskResult
+import org.springframework.amqp.rabbit.core.RabbitTemplate
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Component
+
+@Component
+class BuildEventResultSender {
+    private RabbitTemplate rabbitTemplate
+    void sendResult(BuildTaskResult result){
+        rabbitTemplate.convertAndSend(RabbitQueueConstant.BUILD_EVENT_RESULT, ByteTransferUtil.getBytesFromObject(result))
+    }
+
+    @Autowired
+    @Resource
+    void setRabbitTemplate(RabbitTemplate rabbitTemplate) {
+        this.rabbitTemplate = rabbitTemplate
+    }
+}

+ 18 - 0
final-builder/src/main/resources/application.yaml

@@ -0,0 +1,18 @@
+server:
+  port: 8201
+spring:
+  application:
+    name: final-builder
+  rabbitmq:
+    host: 47.94.15.64
+    port: 5672
+    username: client
+    password: client
+org:
+  brynhild:
+    graduation:
+      jwt:
+        key: sjmbahczdszjj
+        ttl: 360000000
+
+

+ 3 - 0
final-common/src/main/java/org/brynhild/graduation/common/constant/RabbitQueueConstant.java

@@ -7,4 +7,7 @@ public class RabbitQueueConstant {
     public static final String USER_TOKEN = "user_token";
     public static final String SYSTEM_LOG = "system_log";
     public static final String OPERATION_LOG = "operation_log";
+
+    public static final String BUILD_EVENT="build_event";
+    public static final String BUILD_EVENT_RESULT="build_event_result";
 }

+ 7 - 1
final-common/src/main/java/org/brynhild/graduation/common/constant/TriggerConstant.java

@@ -13,7 +13,7 @@ public class TriggerConstant {
     public static final Integer FINAL_COMMON_CODE=1;
     public static final String FINAL_COMMON_HOOK="";
 
-    public static final String FINAL_CONFIG="final_config";
+    public static final String FINAL_CONFIG="final-config";
     public static final Integer FINAL_CONFIG_CODE=2;
     public static final String FINAL_CONFIG_HOOK="";
 
@@ -58,6 +58,10 @@ public class TriggerConstant {
     public static final Integer FINAL_USER_CODE=12;
     public static final String FINAL_USER_HOOK="";
 
+    public static final String FINAL_BUILDER="final-builder";
+    public static final Integer FINAL_BUILDER_CODE=13;
+    public static final String FINAL_BUILDER_HOOK="";
+
 
     public static final Map<String,Integer> moduleCodeMap= new HashMap<>() {{
         put(FINAL_COMMON, FINAL_COMMON_CODE);
@@ -72,6 +76,7 @@ public class TriggerConstant {
         put(FINAL_TRANSFER, FINAL_TRANSFER_CODE);
         put(FINAL_TRIGGER, FINAL_TRIGGER_CODE);
         put(FINAL_USER, FINAL_USER_CODE);
+        put(FINAL_BUILDER,FINAL_BUILDER_CODE);
     }};
 
     public static final Map<String,String> moduleHookMap=new HashMap<>(){{
@@ -87,6 +92,7 @@ public class TriggerConstant {
         put(FINAL_TRANSFER, FINAL_TRANSFER_HOOK);
         put(FINAL_TRIGGER, FINAL_TRIGGER_HOOK);
         put(FINAL_USER, FINAL_USER_HOOK);
+        put(FINAL_BUILDER,FINAL_BUILDER_HOOK);
     }};
 
 

+ 11 - 0
final-transfer/src/main/java/org/brynhild/graduation/transfer/builder/BuildTaskResult.java

@@ -0,0 +1,11 @@
+package org.brynhild.graduation.transfer.builder;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class BuildTaskResult implements Serializable {
+    private String taskId;
+    private Boolean flag;
+}

+ 12 - 0
final-transfer/src/main/java/org/brynhild/graduation/transfer/trigger/BuildTask.java

@@ -0,0 +1,12 @@
+package org.brynhild.graduation.transfer.trigger;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class BuildTask implements Serializable {
+    List<String> hooks;
+    private String taskId;
+}

+ 3 - 0
final-trigger/Dockerfile

@@ -0,0 +1,3 @@
+FROM jdk19
+ADD config.jar /
+#ENTRYPOINT ["java","‐jar","/config.jar"]

+ 29 - 0
final-trigger/src/main/java/org/brynhild/graduation/trigger/event/BuildEventResultListener.groovy

@@ -0,0 +1,29 @@
+package org.brynhild.graduation.trigger.event
+
+import org.brynhild.graduation.common.constant.RabbitQueueConstant
+import org.brynhild.graduation.common.utils.ByteTransferUtil
+import org.brynhild.graduation.transfer.builder.BuildTaskResult
+import org.springframework.amqp.rabbit.annotation.RabbitHandler
+import org.springframework.amqp.rabbit.annotation.RabbitListener
+import org.springframework.stereotype.Component
+
+
+@Component
+@RabbitListener(queues = RabbitQueueConstant.BUILD_EVENT_RESULT)
+class BuildEventResultListener {
+
+    @RabbitHandler
+    void handleResult(byte[] bytes){
+        try{
+            Object obj= ByteTransferUtil.getObjectFromBytes(bytes);
+            switch(obj){
+                case BuildTaskResult:
+                    println "Task(${obj.taskId}) finished with flag:${obj.flag}"
+                    break
+                default: throw new IllegalStateException("Unexpected value: " + objectFromBytes)
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+}

+ 23 - 0
final-trigger/src/main/java/org/brynhild/graduation/trigger/event/BuildEventSender.groovy

@@ -0,0 +1,23 @@
+package org.brynhild.graduation.trigger.event
+
+import jakarta.annotation.Resource
+import org.brynhild.graduation.common.constant.RabbitQueueConstant
+import org.brynhild.graduation.common.utils.ByteTransferUtil
+import org.brynhild.graduation.transfer.trigger.BuildTask
+import org.springframework.amqp.rabbit.core.RabbitTemplate
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Component
+
+@Component
+class BuildEventSender {
+    private RabbitTemplate rabbitTemplate
+    void sendBuildEvent(BuildTask task){
+        rabbitTemplate.convertAndSend(RabbitQueueConstant.BUILD_EVENT, ByteTransferUtil.getBytesFromObject(task))
+    }
+
+    @Autowired
+    @Resource
+    void setRabbitTemplate(RabbitTemplate rabbitTemplate) {
+        this.rabbitTemplate = rabbitTemplate
+    }
+}

+ 20 - 1
final-trigger/src/main/java/org/brynhild/graduation/trigger/resolve/CommandResolver.groovy

@@ -1,17 +1,24 @@
 package org.brynhild.graduation.trigger.resolve
 
+import jakarta.annotation.Resource
 import org.brynhild.graduation.common.constant.TriggerConstant
+import org.brynhild.graduation.common.utils.RandomCodeUtil
 import org.brynhild.graduation.common.utils.StringUtil
+import org.brynhild.graduation.transfer.trigger.BuildTask
+import org.brynhild.graduation.trigger.event.BuildEventSender
 import org.brynhild.graduation.trigger.transfer.Commit
 import org.brynhild.graduation.trigger.transfer.EffectedModule
 import org.brynhild.graduation.trigger.transfer.Pusher
 import org.brynhild.graduation.trigger.transfer.UpdateMessage
+import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Component
 
 import java.util.stream.Collectors
 
 @Component
 class CommandResolver {
+    private BuildEventSender sender
+
     void resolve(UpdateMessage message){
         def pusher = message.pusher
         if(pusher==null){
@@ -70,6 +77,14 @@ class CommandResolver {
         }
         println "---------------------------------"
         println ""
+
+        def task=new BuildTask()
+        task.with {
+            taskId= RandomCodeUtil.getRandomNumberCode(10)
+            it.hooks=hooks.stream().collect(Collectors.toList())
+        }
+
+        sender.sendBuildEvent(task)
     }
 
     static Set<EffectedModule> getEffectedModuleHook(String message){
@@ -103,5 +118,9 @@ class CommandResolver {
         hooks
     }
 
-
+    @Autowired
+    @Resource
+    void setSender(BuildEventSender sender) {
+        this.sender = sender
+    }
 }

+ 1 - 0
pom.xml

@@ -21,6 +21,7 @@
         <module>final-device</module>
         <module>final-timetable</module>
         <module>final-trigger</module>
+        <module>final-builder</module>
     </modules>
 
     <parent>