Ver código fonte

抽次提交

huangzhiyong 8 anos atrás
pai
commit
4374f55441
100 arquivos alterados com 216 adições e 7476 exclusões
  1. 216 0
      eip_manage.iml
  2. 0 24
      hos-agent/.gitignore
  3. BIN
      hos-agent/.mvn/wrapper/maven-wrapper.jar
  4. 0 1
      hos-agent/.mvn/wrapper/maven-wrapper.properties
  5. 0 233
      hos-agent/mvnw
  6. 0 145
      hos-agent/mvnw.cmd
  7. 0 121
      hos-agent/pom.xml
  8. 0 11
      hos-agent/src/main/java/com/yihu/hos/agent/HosAgentApplication.java
  9. 0 64
      hos-agent/src/main/java/com/yihu/hos/agent/configuration/AgentConfiguration.java
  10. 0 10
      hos-agent/src/main/java/com/yihu/hos/agent/constant/FlowConstant.java
  11. 0 9
      hos-agent/src/main/java/com/yihu/hos/agent/constant/MycatConstant.java
  12. 0 14
      hos-agent/src/main/java/com/yihu/hos/agent/constant/ShellConstant.java
  13. 0 11
      hos-agent/src/main/java/com/yihu/hos/agent/controller/ProxyController.java
  14. 0 66
      hos-agent/src/main/java/com/yihu/hos/agent/service/FlowService.java
  15. 0 50
      hos-agent/src/main/java/com/yihu/hos/agent/service/MycatService.java
  16. 0 62
      hos-agent/src/main/java/com/yihu/hos/agent/service/ShellService.java
  17. 0 128
      hos-agent/src/main/java/com/yihu/hos/agent/util/SSHLinuxTool.java
  18. 0 72
      hos-agent/src/main/resources/application.yml
  19. 0 16
      hos-agent/src/test/java/com/yihu/hos/HosAgentApplicationTests.java
  20. 0 1
      hos-arbiter/.mvn/wrapper/maven-wrapper.properties
  21. 0 12
      hos-arbiter/ReadMe.md
  22. 0 233
      hos-arbiter/mvnw
  23. 0 145
      hos-arbiter/mvnw.cmd
  24. 0 91
      hos-arbiter/pom.xml
  25. 0 30
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/HosArbiterApplication.java
  26. 0 29
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/configuration/ActivemqConfiguration.java
  27. 0 61
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/configuration/ArbiterServerConfiguration.java
  28. 0 36
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/ArbiterServerController.java
  29. 0 75
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/BrokerServerController.java
  30. 0 44
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/EndpointController.java
  31. 0 19
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/ServiceFlowController.java
  32. 0 25
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/listener/ApplicationStartListener.java
  33. 0 17
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/ArbiterServerRouter.java
  34. 0 36
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/EndpointEventRouter.java
  35. 0 39
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/MycatRouter.java
  36. 0 15
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/SerivceHealthRouter.java
  37. 0 42
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/ServiceFlowEventRouter.java
  38. 0 39
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/ShellRouter.java
  39. 0 54
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ArbiterServerService.java
  40. 0 172
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/BrokerServerService.java
  41. 0 118
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/EndpointService.java
  42. 0 89
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/MycatService.java
  43. 0 198
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ProxyService.java
  44. 0 402
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowService.java
  45. 0 119
      hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ShellService.java
  46. 0 19
      hos-arbiter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  47. 0 77
      hos-arbiter/src/main/resources/application.yml
  48. 0 27
      hos-arbiter/src/main/resources/log4j2.xml
  49. 0 88
      hos-arbiter/src/main/resources/logback.xml
  50. 0 19
      hos-arbiter/src/test/java/com/yihu/hos/HosArbiterApplicationTests.java
  51. 0 28
      hos-arbiter/src/test/java/com/yihu/hos/arbiter/services/ProxyServiceTest.java
  52. 0 1
      hos-broker/.mvn/wrapper/maven-wrapper.properties
  53. 0 233
      hos-broker/mvnw
  54. 0 145
      hos-broker/mvnw.cmd
  55. 0 173
      hos-broker/pom.xml
  56. 0 57
      hos-broker/src/main/java/com/yihu/hos/broker/HosBrokerApplication.java
  57. 0 23
      hos-broker/src/main/java/com/yihu/hos/broker/common/camelrouter/BrokerServerRouter.java
  58. 0 16
      hos-broker/src/main/java/com/yihu/hos/broker/common/camelrouter/MonitorRouterBulider.java
  59. 0 13
      hos-broker/src/main/java/com/yihu/hos/broker/common/constants/BrokerConstant.java
  60. 0 17
      hos-broker/src/main/java/com/yihu/hos/broker/common/constants/MonitorConstant.java
  61. 0 25
      hos-broker/src/main/java/com/yihu/hos/broker/common/log/JmsAppender.java
  62. 0 68
      hos-broker/src/main/java/com/yihu/hos/broker/common/log/TracerFormatter.java
  63. 0 184
      hos-broker/src/main/java/com/yihu/hos/broker/common/shell/SSHLinuxTool.java
  64. 0 29
      hos-broker/src/main/java/com/yihu/hos/broker/configurations/ActivemqConfiguration.java
  65. 0 33
      hos-broker/src/main/java/com/yihu/hos/broker/configurations/ApplicationConfiguration.java
  66. 0 31
      hos-broker/src/main/java/com/yihu/hos/broker/configurations/ArbiterConfiguration.java
  67. 0 51
      hos-broker/src/main/java/com/yihu/hos/broker/configurations/MongoConfiguration.java
  68. 0 45
      hos-broker/src/main/java/com/yihu/hos/broker/configurations/SwaggerConfig.java
  69. 0 102
      hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBCamelController.java
  70. 0 31
      hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBMycatController.java
  71. 0 36
      hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBShellController.java
  72. 0 27
      hos-broker/src/main/java/com/yihu/hos/broker/daos/BrokerDao.java
  73. 0 122
      hos-broker/src/main/java/com/yihu/hos/broker/services/BrokerServerService.java
  74. 0 238
      hos-broker/src/main/java/com/yihu/hos/broker/services/MycatConfigService.java
  75. 0 91
      hos-broker/src/main/java/com/yihu/hos/broker/services/ServerMonitorService.java
  76. 0 89
      hos-broker/src/main/java/com/yihu/hos/broker/services/ServerShellService.java
  77. 0 58
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelCompiler.java
  78. 0 91
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelStartBoot.java
  79. 0 487
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/ESBCamelService.java
  80. 0 59
      hos-broker/src/main/java/com/yihu/hos/broker/services/camel/SystemCamelContext.java
  81. 0 133
      hos-broker/src/main/java/com/yihu/hos/broker/util/Cols.java
  82. 0 89
      hos-broker/src/main/java/com/yihu/hos/broker/util/FileUtil.java
  83. 0 188
      hos-broker/src/main/java/com/yihu/hos/broker/util/IOUtil.java
  84. 0 407
      hos-broker/src/main/java/com/yihu/hos/broker/util/SigarUtil.java
  85. 0 167
      hos-broker/src/main/java/com/yihu/hos/broker/util/XMLUtil.java
  86. 0 14
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/F0.java
  87. 0 15
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/F1.java
  88. 0 5
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/F2.java
  89. 0 45
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/Fs.java
  90. 0 40
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/FsGenerated.java
  91. 0 5
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P0.java
  92. 0 11
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P1.java
  93. 0 12
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P2.java
  94. 0 5
      hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P3.java
  95. 0 65
      hos-broker/src/main/java/com/yihu/hos/broker/util/lang/AggressiveClassLoader.java
  96. 0 110
      hos-broker/src/main/java/com/yihu/hos/broker/util/lang/DynamicClassLoader.java
  97. 0 28
      hos-broker/src/main/java/com/yihu/hos/broker/util/lang/ExceptingClassLoader.java
  98. 0 19
      hos-broker/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  99. 0 107
      hos-broker/src/main/resources/application.yml
  100. 0 0
      hos-broker/src/main/resources/jndi.properties

+ 216 - 0
eip_manage.iml

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="web" name="Web">
      <configuration>
        <webroots>
          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
        </webroots>
        <sourceRoots>
          <root url="file://$MODULE_DIR$/src/main/java" />
          <root url="file://$MODULE_DIR$/src/main/resources" />
        </sourceRoots>
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.11" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.2.4.Final" level="project" />
    <orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.3" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.7" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-jasper:8.5.11" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.11" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.11" level="project" />
    <orderEntry type="library" name="Maven: org.eclipse.jdt.core.compiler:ecj:4.5.1" level="project" />
    <orderEntry type="library" name="Maven: net.sourceforge.jexcelapi:jxl:2.6.10" level="project" />
    <orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
    <orderEntry type="library" name="Maven: javax.servlet:jstl:1.2" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.hos:hos-core:1.3.0" level="project" />
    <orderEntry type="library" name="Maven: net.lingala.zip4j:zip4j:1.3.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.0" level="project" />
    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.3.2" level="project" />
    <orderEntry type="library" name="Maven: commons-net:commons-net:3.3" level="project" />
    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.2" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.4.1" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.9.0" level="project" />
    <orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.0" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.7" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.7" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.8.7" level="project" />
    <orderEntry type="library" name="Maven: org.codehaus.woodstox:stax2-api:3.1.4" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.woodstox:woodstox-core:5.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.6" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.hos:hos-web-framework:1.3.0" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.1.11" level="project" />
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.1.11" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.24" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.24" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongodb-driver:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongodb-driver-core:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:bson:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:1.9.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:1.12.8.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mongodb:mongo-java-driver:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.41" level="project" />
    <orderEntry type="library" name="Maven: eu.medsea.mimeutil:mime-util:2.1.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-orm:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-tx:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-extras:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-core:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-api:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: commons-digester:commons-digester:2.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-request-servlet-wildcard:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-request-servlet:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-request-mustache:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-request-api:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: com.github.spullara.mustache.java:compiler:0.8.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-freemarker:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-request-freemarker:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.25-incubating" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-velocity:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.velocity:velocity-tools:2.0" level="project" />
    <orderEntry type="library" name="Maven: oro:oro:2.0.8" level="project" />
    <orderEntry type="library" name="Maven: org.apache.velocity:velocity:1.7" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-request-velocity:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-el:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-mvel:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.mvel:mvel2:2.0.11" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-ognl:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: ognl:ognl:3.1.12" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-compat:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-jsp:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-servlet:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-template:3.0.5" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-autotag-core-runtime:1.1.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.tiles:tiles-request-jsp:1.0.6" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:fop:1.0" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:1.4" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-svg-dom:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-anim:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-css:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-dom:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-parser:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-util:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: xml-apis:xml-apis-ext:1.3.04" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-bridge:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-script:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-js:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-xml:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-awt-util:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-gvt:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-transcoder:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-svggen:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-extension:1.7" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.xmlgraphics:batik-ext:1.7" level="project" />
    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
    <orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avalon.framework:avalon-framework-api:4.3.1" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.avalon.framework:avalon-framework-impl:4.3.1" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: xalan:xalan:2.7.0" level="project" />
    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.openoffice:jurt:2.3.0" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.openoffice:ridl:2.3.0" level="project" />
    <orderEntry type="library" scope="PROVIDED" name="Maven: org.openoffice:juh:2.3.0" level="project" />
    <orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:2.4" level="project" />
    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.5" level="project" />
    <orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-jms:4.3.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate:hibernate-core:4.3.11.Final" level="project" />
    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.0.Final" level="project" />
    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1" level="project" />
    <orderEntry type="library" name="Maven: org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final" level="project" />
    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:4.0.5.Final" level="project" />
    <orderEntry type="library" name="Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final" level="project" />
    <orderEntry type="library" name="Maven: org.javassist:javassist:3.20.0-GA" level="project" />
    <orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
    <orderEntry type="library" name="Maven: org.jboss:jandex:1.1.0.Final" level="project" />
    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.9" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-dbcp2:2.1.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.4.2" level="project" />
    <orderEntry type="library" name="Maven: org.json:json:20140107" level="project" />
    <orderEntry type="library" name="Maven: org.zbus:zbus:7.2.0" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-all:4.1.9.Final" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:4.1.4.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:4.1.4.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.ehr:commons-admin-gateway-model:1.1.0" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.7" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.ehr:commons-util:1.1.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.6.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.6.2" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.ehr:commons-ehr-constants:1.1.0" level="project" />
    <orderEntry type="library" name="Maven: com.unboundid:unboundid-ldapsdk:3.2.1" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:1.4.5.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.2.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.2.1" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.1" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:2.5.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:1.10.19" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.1" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.3.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:4.3.7.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.6" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.6" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: com.google.guava:guava:19.0" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.15-beta1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.15-beta1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.15-beta1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.03" level="project" />
    <orderEntry type="library" name="Maven: com.oracle:ojdbc6:11.2.0.3.0" level="project" />
    <orderEntry type="library" name="Maven: com.yihu.core:ehr-dbhelper:1.1.9" level="project" />
  </component>
</module>

+ 0 - 24
hos-agent/.gitignore

@ -1,24 +0,0 @@
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/

BIN
hos-agent/.mvn/wrapper/maven-wrapper.jar


+ 0 - 1
hos-agent/.mvn/wrapper/maven-wrapper.properties

@ -1 +0,0 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

+ 0 - 233
hos-agent/mvnw

@ -1,233 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
#   JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
#   M2_HOME - location of maven2's installed home dir
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
#     e.g. to debug Maven itself, use
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi
  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi
fi
# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  MINGW*) mingw=true;;
  Darwin*) darwin=true
           #
           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
           # for the new JDKs provided by Oracle.
           #
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
             #
             # Oracle JDKs
             #
             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=`/usr/libexec/java_home`
           fi
           ;;
esac
if [ -z "$JAVA_HOME" ] ; then
  if [ -r /etc/gentoo-release ] ; then
    JAVA_HOME=`java-config --jre-home`
  fi
fi
if [ -z "$M2_HOME" ] ; then
  ## resolve links - $0 may be a link to maven's home
  PRG="$0"
  # need this for relative symlinks
  while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
    else
      PRG="`dirname "$PRG"`/$link"
    fi
  done
  saveddir=`pwd`
  M2_HOME=`dirname "$PRG"`/..
  # make it fully qualified
  M2_HOME=`cd "$M2_HOME" && pwd`
  cd "$saveddir"
  # echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --unix "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  # TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
  javaExecutable="`which javac`"
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
    # readlink(1) is not available as standard on Solaris 10.
    readLink=`which readlink`
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
      if $darwin ; then
        javaHome="`dirname \"$javaExecutable\"`"
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
      else
        javaExecutable="`readlink -f \"$javaExecutable\"`"
      fi
      javaHome="`dirname \"$javaExecutable\"`"
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
      JAVA_HOME="$javaHome"
      export JAVA_HOME
    fi
  fi
fi
if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi
if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly." >&2
  echo "  We cannot execute $JAVACMD" >&2
  exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
  echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
  local basedir=$(pwd)
  local wdir=$(pwd)
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=$(cd "$wdir/.."; pwd)
  done
  echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "$(tr -s '\n' ' ' < "$1")"
  fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} "$@"

+ 0 - 145
hos-agent/mvnw.cmd

@ -1,145 +0,0 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
set MAVEN_CMD_LINE_ARGS=%*
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

+ 0 - 121
hos-agent/pom.xml

@ -1,121 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         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>com.yihu.hos</groupId>
        <artifactId>hos-parent</artifactId>
        <version>1.3.0</version>
        <relativePath>../hos-parent</relativePath><!-- lookup parent from repository -->
    </parent>
    <artifactId>hos-agent</artifactId>
    <version>1.3.0</version>
    <packaging>jar</packaging>
    <name>hos-agent</name>
    <description>hos agent</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.hos</groupId>
            <artifactId>hos-core</artifactId>
            <version>${hos-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-etcd</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-xstream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-http4</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-http</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.zbus</groupId>
            <artifactId>zbus</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.yihu.hos.agent.HosAgentApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

+ 0 - 11
hos-agent/src/main/java/com/yihu/hos/agent/HosAgentApplication.java

@ -1,11 +0,0 @@
package com.yihu.hos.agent;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HosAgentApplication {
    public static void main(String[] args) {
        SpringApplication.run(HosAgentApplication.class, args);
    }
}

+ 0 - 64
hos-agent/src/main/java/com/yihu/hos/agent/configuration/AgentConfiguration.java

@ -1,64 +0,0 @@
package com.yihu.hos.agent.configuration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.zbus.broker.ZbusBroker;
import java.io.IOException;
/**
 * @author Airhead
 * @since 2017/1/19.
 */
@Configuration
public class AgentConfiguration {
    @Value("${agent.zbus.url}")
    private String zbusBrokerURL;
    @Value("${agent.tenant.name}")
    private String tenant;
    @Value("${spring.activemq.broker-url}")
    private String brokerURL;
    @Value("${spring.activemq.user}")
    private String activeMqUser;
    @Value("${spring.activemq.password}")
    private String activeMqPassword;
    private ZbusBroker zbusBroker;
    public String getBrokerURL() {
        return brokerURL;
    }
    public String getActiveMqUser() {
        return activeMqUser;
    }
    public String getActiveMqPassword() {
        return activeMqPassword;
    }
    @Bean
    public ZbusBroker getZbusBroker() {
        try {
            zbusBroker = new ZbusBroker(this.zbusBrokerURL);
            return zbusBroker;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public String getZbusBrokerURL() {
        return zbusBrokerURL;
    }
    public String getTenant() {
        return tenant;
    }
}

+ 0 - 10
hos-agent/src/main/java/com/yihu/hos/agent/constant/FlowConstant.java

@ -1,10 +0,0 @@
package com.yihu.hos.agent.constant;
/**
 * @author Airhead
 * @since 2017/1/20.
 */
public interface FlowConstant {
    String PREFIX = "ssh";
    String ENDPOINT = "service.flow.event:queue:configuration.service.flow";
}

+ 0 - 9
hos-agent/src/main/java/com/yihu/hos/agent/constant/MycatConstant.java

@ -1,9 +0,0 @@
package com.yihu.hos.agent.constant;
/**
 * @author Airhead
 * @since 2017/1/20.
 */
public interface MycatConstant {
    String PREFIX = "mycat";
}

+ 0 - 14
hos-agent/src/main/java/com/yihu/hos/agent/constant/ShellConstant.java

@ -1,14 +0,0 @@
package com.yihu.hos.agent.constant;
/**
 * @author Airhead
 * @since 2017/1/20.
 */
public interface ShellConstant {
    String PREFIX_IN =  "shell_arbiter";
    String PREFIX_OUT = "shell_admin";
    // shell 请求命令,对列名称
    String QUEUE = "configuration.service.shell";
    String ENDPOINT = "service.shell.event:queue:configuration.service.shell";
}

+ 0 - 11
hos-agent/src/main/java/com/yihu/hos/agent/controller/ProxyController.java

@ -1,11 +0,0 @@
package com.yihu.hos.agent.controller;
import org.springframework.stereotype.Controller;
/**
 * @author Airhead
 * @since 2017/1/20.
 */
@Controller
public class ProxyController {
}

+ 0 - 66
hos-agent/src/main/java/com/yihu/hos/agent/service/FlowService.java

@ -1,66 +0,0 @@
package com.yihu.hos.agent.service;
import com.yihu.hos.agent.configuration.AgentConfiguration;
import org.apache.camel.CamelContext;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author Airhead
 * @since 2016/12/22.
 */
@Service
public class FlowService {
    private static final Logger logger = LogManager.getLogger(ShellService.class);
//    private ZbusBroker zbusBroker;
//    private Consumer consumer;
    private AgentConfiguration configuration;
    private CamelContext camelContext;
//    @Autowired
//    public void setZbusBroker(ZbusBroker zbusBroker) {
//        this.zbusBroker = zbusBroker;
//    }
    @Autowired
    public void setConfiguration(AgentConfiguration configuration) {
        this.configuration = configuration;
    }
    @Autowired
    public void setCamelContext(CamelContext camelContext) {
        this.camelContext = camelContext;
    }
//    public void handle(Message message, Consumer consumer) {
//        Map<String, Object> header = new HashMap<>();
//        header.put("event", message.getHead("event"));
//
//        ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
//        producerTemplate.sendBodyAndHeaders(FlowConstant.ENDPOINT, message.getBodyString(), header);
//    }
//    public void server() {
//        if (zbusBroker == null) {
//            logger.error("zbusBroker is null");
//            return;
//        }
//
//        consumer = new Consumer(zbusBroker, FlowConstant.PREFIX + "@" + configuration.getTenant());
//        try {
//            consumer.start(this::handle);
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error(e.getMessage());
//        }
//    }
//
//    @Override
//    protected void finalize() throws Throwable {
//        consumer.close();
//        super.finalize();
//    }
}

+ 0 - 50
hos-agent/src/main/java/com/yihu/hos/agent/service/MycatService.java

@ -1,50 +0,0 @@
package com.yihu.hos.agent.service;
import org.springframework.stereotype.Service;
/**
 * @author Airhead
 * @since 2017/1/19.
 */
@Service
public class MycatService {
//    private static final Logger logger = LogManager.getLogger(ShellService.class);
//
//    private ZbusBroker zbusBroker;
//    private Consumer consumer;
//    private AgentConfiguration configuration;
//
//    @Autowired
//    public void setZbusBroker(ZbusBroker zbusBroker) {
//        this.zbusBroker = zbusBroker;
//    }
//
//    @Autowired
//    public void setConfiguration(AgentConfiguration configuration) {
//        this.configuration = configuration;
//    }
//
//    @Override
//    protected void finalize() throws Throwable {
//        consumer.close();
//        super.finalize();
//    }
//
//    public void server(){
//        if (zbusBroker == null) {
//            logger.error("zbusBroker is null");
//            return;
//        }
//
//        consumer = new Consumer(zbusBroker, FlowConstant.PREFIX + "@" + configuration.getTenant());
//        try {
//            consumer.start(this::handle);
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error(e.getMessage());
//        }
//    }
//
//    public void handle(Message message, Consumer consumer) {
//    }
}

+ 0 - 62
hos-agent/src/main/java/com/yihu/hos/agent/service/ShellService.java

@ -1,62 +0,0 @@
package com.yihu.hos.agent.service;
import org.springframework.stereotype.Service;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/6.
 */
@Service
public class ShellService {
//    private static final Logger logger = LogManager.getLogger(ShellService.class);
//
//    private ZbusBroker zbusBroker;
//    private Consumer consumer;
//    private AgentConfiguration configuration;
//    private CamelContext camelContext;
//
//    @Autowired
//    public void setZbusBroker(ZbusBroker zbusBroker) {
//        this.zbusBroker = zbusBroker;
//    }
//
//    @Autowired
//    public void setConfiguration(AgentConfiguration configuration) {
//        this.configuration = configuration;
//    }
//
//    @Autowired
//    public void setCamelContext(CamelContext camelContext) {
//        this.camelContext = camelContext;
//    }
//
//    public void handle(Message message, Consumer consumer) {
//        Map<String, Object> header = new HashMap<>();
//        header.put("event", message.getHead("event"));
//
//        ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
//        producerTemplate.sendBodyAndHeaders(ShellConstant.ENDPOINT, message.getBodyString(), header);
//    }
//
//    public void server() {
//        if (zbusBroker == null) {
//            logger.error("zbusBroker is null");
//            return;
//        }
//
//        consumer = new Consumer(zbusBroker, ShellConstant.PREFIX_IN + "@" + configuration.getTenant());
//        try {
//            consumer.start(this::handle);
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error(e.getMessage());
//        }
//    }
//
//    @Override
//    protected void finalize() throws Throwable {
//        consumer.close();
//        super.finalize();
//    }
}

+ 0 - 128
hos-agent/src/main/java/com/yihu/hos/agent/util/SSHLinuxTool.java

@ -1,128 +0,0 @@
package com.yihu.hos.agent.util;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * ssh 链接操作测试类
 *
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/3.
 */
@Service("SSHLinuxTool")
public class SSHLinuxTool {
    public static final String BEAN_ID = "SSHLinuxTool";
    @Value("${agent.jcraft.host}")
    private String host;
    @Value("${agent.jcraft.port}")
    private Integer port;
    @Value("${agent.jcraft.user}")
    private String user;
    @Value("${agent.jcraft.password}")
    private String password;
    public static Channel channel = null;
    /**
     * //TODO 密钥密码等验证
     * 建立一个shell连接会话
     *
     * @return
     * @throws JSchException
     */
    public Session getsessionConn() throws JSchException {
        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, port);
        session.setConfig("StrictHostKeyChecking", "no");
        //    java.util.Properties config = new java.util.Properties();
        //   config.put("StrictHostKeyChecking", "no");
        session.setTimeout(600000); // 设置timeout时间
        session.setPassword(password);
        session.connect();
        return session;
    }
//    public String exeCommand(Session session, String command, boolean exit) throws JSchException, IOException {
//
//        if (!session.isConnected()) {
//            session = getsessionConn();
//        }
//
//        ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
//        InputStream in = channelExec.getInputStream();
//        channelExec.setCommand(command);
//        channelExec.setErrStream(System.err);
//        channelExec.connect();
//        String out = IOUtils.toString(in, "UTF-8");
//        if (exit) {
//            channelExec.disconnect();
//        }
//        return out;
//    }
    /**
     * 利用JSch实现远程主机SHELL命令执行
     */
    public  String sshShell(Session session, String command, boolean exit) throws Exception {
        //如果服务器连接不上,则抛出异常
        if (session == null) {
            throw new Exception("session is null");
        }
        try {
            //创建sftp通信通道
            if (channel == null) {
                channel = session.openChannel("shell");
                channel.connect(3000);
            }
            //获取输入流和输出流
            InputStream instream = channel.getInputStream();
            OutputStream outstream = channel.getOutputStream();
            //发送需要执行的SHELL命令,需要用\n结尾,表示回车
            String shellCommand = command + " \n";
            outstream.write(shellCommand.getBytes());
            outstream.flush();
            //获取命令执行的结果
            Thread.sleep(2000);
            if (instream.available() > 0) {
                byte[] data = new byte[instream.available()];
                int nLen = instream.read(data);
                if (nLen < 0) {
                    throw new Exception("network error.");
                }
                //转换输出结果并打印出来
                String temp = new String(data, 0, nLen, "iso8859-1");
                System.out.println(temp);
                return temp;
            }
            outstream.close();
            instream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (exit) {
                channel.disconnect();
                session.disconnect();
            }
        }
        return null;
    }
}

+ 0 - 72
hos-agent/src/main/resources/application.yml

@ -1,72 +0,0 @@
spring:
  application:
    name: HosAgent
server:
  port: 9080
security:
  basic:
    enabled: false
# the name of Camel
camel:
  springboot:
    name: HosAgent
---
spring:
  profiles: dev
  activemq:
      broker-url: tcp://172.19.103.57:61616
      user: admin
      password: admin
  data:
    mongodb:
      host: 172.19.103.57
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: log
      gridFsDatabase: dfs
agent:
  zbus:
    url: 172.19.103.57:9020
  tenant:
    name: jzkl
  proxy:
    port: 9090
  jcraft:
    host:
    port: 22
    user:
    password:
---
spring:
  profiles: test
  activemq:
      broker-url: tcp://172.19.103.58:61616
      user: admin
      password: admin
  data:
    mongodb:
      host: 172.19.103.58
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: log
      gridFsDatabase: dfs
agent:
  zbus:
    url: 172.19.103.58:9020
  tenant:
    name: jzkl
  proxy:
    port: 9090
  jcraft:
    host:
    port: 22
    user:
    password:

+ 0 - 16
hos-agent/src/test/java/com/yihu/hos/HosAgentApplicationTests.java

@ -1,16 +0,0 @@
package com.yihu.hos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class HosAgentApplicationTests {
	@Test
	public void contextLoads() {
	}
}

+ 0 - 1
hos-arbiter/.mvn/wrapper/maven-wrapper.properties

@ -1 +0,0 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

+ 0 - 12
hos-arbiter/ReadMe.md

@ -1,12 +0,0 @@
#说明
hos-arbiter的主要功能就是实现服务的发现
* BrokerServer的服务注册与发现,无通知机制(客户端缓存和定时更新机制)
* Endpoint的服务注册与发现,有通知机制,会将服务状态发送给BrokerServer,
以便BrokerServer进行实际的调度策略的实现
* ServiceFlow的服务注册与发现,有通知机制,会将服务状态发送给BrokerServer,
以便BrokerServer实现流程的动态加载与运行。
因为hos-arbiter没有使用zookeeper等相关软件来做事件推送,做了个折中。
尽量使用现有的功能组件来
* 通过ActiveMQ来解耦hos-admin的依赖
* 利用了MongoDB的TTL来做服务的过期
* 直接调用broker进行数据更新

+ 0 - 233
hos-arbiter/mvnw

@ -1,233 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
#   JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
#   M2_HOME - location of maven2's installed home dir
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
#     e.g. to debug Maven itself, use
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi
  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi
fi
# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  MINGW*) mingw=true;;
  Darwin*) darwin=true
           #
           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
           # for the new JDKs provided by Oracle.
           #
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
             #
             # Oracle JDKs
             #
             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=`/usr/libexec/java_home`
           fi
           ;;
esac
if [ -z "$JAVA_HOME" ] ; then
  if [ -r /etc/gentoo-release ] ; then
    JAVA_HOME=`java-config --jre-home`
  fi
fi
if [ -z "$M2_HOME" ] ; then
  ## resolve links - $0 may be a link to maven's home
  PRG="$0"
  # need this for relative symlinks
  while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
    else
      PRG="`dirname "$PRG"`/$link"
    fi
  done
  saveddir=`pwd`
  M2_HOME=`dirname "$PRG"`/..
  # make it fully qualified
  M2_HOME=`cd "$M2_HOME" && pwd`
  cd "$saveddir"
  # echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --unix "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  # TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
  javaExecutable="`which javac`"
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
    # readlink(1) is not available as standard on Solaris 10.
    readLink=`which readlink`
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
      if $darwin ; then
        javaHome="`dirname \"$javaExecutable\"`"
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
      else
        javaExecutable="`readlink -f \"$javaExecutable\"`"
      fi
      javaHome="`dirname \"$javaExecutable\"`"
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
      JAVA_HOME="$javaHome"
      export JAVA_HOME
    fi
  fi
fi
if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi
if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly." >&2
  echo "  We cannot execute $JAVACMD" >&2
  exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
  echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
  local basedir=$(pwd)
  local wdir=$(pwd)
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=$(cd "$wdir/.."; pwd)
  done
  echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "$(tr -s '\n' ' ' < "$1")"
  fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} "$@"

+ 0 - 145
hos-arbiter/mvnw.cmd

@ -1,145 +0,0 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
set MAVEN_CMD_LINE_ARGS=%*
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

+ 0 - 91
hos-arbiter/pom.xml

@ -1,91 +0,0 @@
<?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>com.yihu.hos</groupId>
        <artifactId>hos-parent</artifactId>
        <version>1.3.0</version>
        <relativePath>../hos-parent</relativePath><!-- lookup parent from repository -->
    </parent>
    <artifactId>hos-arbiter</artifactId>
    <version>1.3.0</version>
    <packaging>jar</packaging>
    <name>hos-arbiter</name>
    <description>ESB服务状态协调模块</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <!--<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>-->
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- test start -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- test end -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.hos</groupId>
            <artifactId>hos-web-framework</artifactId>
            <version>${hos-version}</version>
        </dependency>
        <dependency>
            <groupId>org.zbus</groupId>
            <artifactId>zbus</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot-version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.yihu.hos.arbiter.HosArbiterApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

+ 0 - 30
hos-arbiter/src/main/java/com/yihu/hos/arbiter/HosArbiterApplication.java

@ -1,30 +0,0 @@
package com.yihu.hos.arbiter;
import com.yihu.hos.arbiter.services.ProxyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class HosArbiterApplication implements CommandLineRunner {
    private ProxyService proxyService;
    public static void main(String[] args) {
        SpringApplication.run(HosArbiterApplication.class, args);
    }
    @Autowired
    public void setProxyService(ProxyService proxyService) {
        this.proxyService = proxyService;
    }
    @Override
    public void run(String... strings) throws Exception {
        proxyService.start();
    }
}

+ 0 - 29
hos-arbiter/src/main/java/com/yihu/hos/arbiter/configuration/ActivemqConfiguration.java

@ -1,29 +0,0 @@
package com.yihu.hos.arbiter.configuration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
 * @created Airhead 2016/8/4.
 */
@Configuration
public class ActivemqConfiguration {
    @Value("${spring.activemq.broker-url}")
    private String brokerURL;
    @Value("${spring.activemq.user}")
    private String user;
    @Value("${spring.activemq.password}")
    private String password;
    public String getBrokerURL() {
        return brokerURL;
    }
    public String getUser() {
        return user;
    }
    public String getPassword() {
        return password;
    }
}

+ 0 - 61
hos-arbiter/src/main/java/com/yihu/hos/arbiter/configuration/ArbiterServerConfiguration.java

@ -1,61 +0,0 @@
package com.yihu.hos.arbiter.configuration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.zbus.broker.ZbusBroker;
import java.io.IOException;
/**
 * @author Airhead
 * @since 2016/12/9.
 */
@Configuration
public class ArbiterServerConfiguration {
    @Value("${arbiter.central.url}")
    private String centralUrl;
    @Value("${arbiter.tenant.name}")
    private String tenant;
    @Value("${arbiter.mycat.name}")
    private String mycatName;
    private ZbusBroker zbusBroker;
    public String getMycatName() {
        return mycatName;
    }
    public String getCentralUrl() {
        return centralUrl;
    }
    public String getTenant() {
        return tenant;
    }
    @Bean
    public ZbusBroker getZbusBroker() {
        try {
            zbusBroker = new ZbusBroker(this.centralUrl);
            return zbusBroker;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void finalize() throws Throwable {
        if (zbusBroker != null) {
            zbusBroker.close();
        }
        super.finalize();
    }
}

+ 0 - 36
hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/ArbiterServerController.java

@ -1,36 +0,0 @@
package com.yihu.hos.arbiter.controllers;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.web.framework.model.bo.ArbiterServer;
import com.yihu.hos.arbiter.services.ArbiterServerService;
import com.yihu.hos.core.datatype.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
/**
 * @author Airhead
 * @since 2016/12/9.
 */
@RestController
@RequestMapping("/arbiter")
public class ArbiterServerController {
    @Autowired
    private ArbiterServerService arbiterServerService;
    @Autowired
    private ObjectMapper objectMapper;
    @RequestMapping()
    public void register(@RequestBody String body) {
        try {
            ArbiterServer arbiterServer = objectMapper.readValue(body, ArbiterServer.class);
            arbiterServer.setCreateTime(DateUtil.getSysDateTime());
            arbiterServerService.save(arbiterServer);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 75
hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/BrokerServerController.java

@ -1,75 +0,0 @@
package com.yihu.hos.arbiter.controllers;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.arbiter.services.BrokerServerService;
import com.yihu.hos.core.datatype.DateUtil;
import com.yihu.hos.web.framework.model.bo.BrokerServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
/**
 * @created Airhead 2016/7/27.
 */
@RestController
@RequestMapping("/brokerServer")
public class BrokerServerController {
    @Autowired
    private BrokerServerService brokerServerService;
    @RequestMapping(method = RequestMethod.GET)
    public String get() {
        try {
            BrokerServer brokerServer = brokerServerService.get();
            if (brokerServer == null) {
                return "{}";
            }
            ObjectMapper objectMapper = new ObjectMapper();
            return objectMapper.writeValueAsString(brokerServer);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return "{}";
    }
    @RequestMapping(value = "login", method = RequestMethod.POST)
    public void login(String brokerServer) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            BrokerServer server = objectMapper.readValue(brokerServer, BrokerServer.class);
            server.setCreateTime(DateUtil.getSysDateTime());
            brokerServerService.login(server);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @RequestMapping(value = "heartbeat", method = RequestMethod.POST)
    public void heartbeat(String brokerServer) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            BrokerServer server = objectMapper.readValue(brokerServer, BrokerServer.class);
            brokerServerService.heartbeat(server);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @RequestMapping(value = "logout", method = RequestMethod.POST)
    public void logout(String brokerServer) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            BrokerServer server = objectMapper.readValue(brokerServer, BrokerServer.class);
            brokerServerService.logout(server);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 44
hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/EndpointController.java

@ -1,44 +0,0 @@
package com.yihu.hos.arbiter.controllers;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.web.framework.model.bo.Endpoint;
import com.yihu.hos.arbiter.services.EndpointService;
import com.yihu.hos.core.datatype.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
/**
 * @created Airhead 2016/7/27.
 */
@RestController
@RequestMapping("/endpoint")
public class EndpointController {
    @Autowired
    private EndpointService endpointService;
    @RequestMapping(method = RequestMethod.POST)
    public void save(String service) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            Endpoint endpoint = objectMapper.readValue(service, Endpoint.class);
            endpoint.setCreateTime(DateUtil.getSysDateTime());
            endpointService.save(endpoint);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @RequestMapping(method = RequestMethod.GET)
    public String get(String serviceName) {
        return endpointService.get(serviceName).toString();
    }
    @RequestMapping(method = RequestMethod.PUT)
    public String put(String serviceName, String ClientInfo) {
        return endpointService.get(serviceName).toString();
    }
}

+ 0 - 19
hos-arbiter/src/main/java/com/yihu/hos/arbiter/controllers/ServiceFlowController.java

@ -1,19 +0,0 @@
package com.yihu.hos.arbiter.controllers;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author Airhead
 * @since 2017/2/6.
 */
@RestController
@RequestMapping("/serviceFlow")
public class ServiceFlowController {
    @RequestMapping(method = RequestMethod.GET)
    public String get() {
        return "{}";
    }
}

+ 0 - 25
hos-arbiter/src/main/java/com/yihu/hos/arbiter/listener/ApplicationStartListener.java

@ -1,25 +0,0 @@
package com.yihu.hos.arbiter.listener;
import com.yihu.hos.arbiter.services.ArbiterServerService;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
public class ApplicationStartListener implements ApplicationListener<ContextRefreshedEvent> {
    private static Logger logger = LoggerFactory.getLogger(ApplicationStartListener.class);
    @Autowired
    private ArbiterServerService arbiterServerService;
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        arbiterServerStart();
    }
    public void arbiterServerStart() {
//        arbiterServerService.start();   //后期可以统一到Router上来处理
    }
}

+ 0 - 17
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/ArbiterServerRouter.java

@ -1,17 +0,0 @@
package com.yihu.hos.arbiter.routers;
import org.apache.camel.builder.RouteBuilder;
/**
 * @author Airhead
 * @since 2016/12/19.
 */
//因为配置问题,暂时服务启动,先屏蔽,才使用的是Spring的事件来注册的。
//@Component
public class ArbiterServerRouter  extends RouteBuilder {
    @Override
    public void configure() throws Exception {
//        from("direct:arbiterServer")
//                .to("bean:arbiterServerService?method=serverServiceFlow");
    }
}

+ 0 - 36
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/EndpointEventRouter.java

@ -1,36 +0,0 @@
package com.yihu.hos.arbiter.routers;
import com.yihu.hos.arbiter.configuration.ActivemqConfiguration;
import com.yihu.hos.web.framework.constant.EndPointConstant;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.model.ModelCamelContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
 * @created Airhead 2016/8/1.
 */
@Component
public class EndpointEventRouter extends RouteBuilder {
    @Autowired
    private ActivemqConfiguration activemqConfiguration;
    @Override
    public void configure() throws Exception {
        ModelCamelContext context = this.getContext();
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                activemqConfiguration.getUser(), activemqConfiguration.getPassword(), activemqConfiguration.getBrokerURL());
        // Note we can explicit name the component
        context.addComponent(EndPointConstant.CAMEL_COMPONENT, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from(EndPointConstant.CAMEL_ENDPOINT)
                .choice()
                .when(header("event").isEqualTo(EndPointConstant.ADD_ENDPOINT)).to("bean:endpointService?method=addEndpoint")
                .when(header("event").isEqualTo(EndPointConstant.DELETE_ENDPOINT)).to("bean:endpointService?method=deleteEndpoint")
                .when(header("event").isEqualTo(EndPointConstant.OFF_SERVER)).to("bean:endpointService?method=offServer")
                .endChoice();
    }
}

+ 0 - 39
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/MycatRouter.java

@ -1,39 +0,0 @@
package com.yihu.hos.arbiter.routers;
import com.yihu.hos.arbiter.configuration.ActivemqConfiguration;
import com.yihu.hos.web.framework.constant.MycatConstant;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.model.ModelCamelContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
 * mycat操作  消息router
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/5.
 */
@Component
public class MycatRouter extends RouteBuilder {
    @Autowired
    private ActivemqConfiguration activemqConfiguration;
    @Override
    public void configure() throws Exception {
        ModelCamelContext context = this.getContext();
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                activemqConfiguration.getUser(), activemqConfiguration.getPassword(), activemqConfiguration.getBrokerURL());
        // Note we can explicit name the component
        context.addComponent(MycatConstant.CAMEL_COMPONENT, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from(MycatConstant.CAMEL_ENDPOINT)
                .choice()
                .when(header("tenant").isNotNull()).to("bean:mycatService?method=handleServiceFlow")
                .when(header("event").isEqualTo(MycatConstant.EXECUTE_MYCAT)).to("bean:mycatService?method=updateMycat")
                .endChoice();
    }
}

+ 0 - 15
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/SerivceHealthRouter.java

@ -1,15 +0,0 @@
package com.yihu.hos.arbiter.routers;
import org.apache.camel.builder.RouteBuilder;
/**
 * @created Airhead 2016/8/1.
 */
//@Component
public class SerivceHealthRouter extends RouteBuilder {
    @Override
    public void configure() throws Exception {
//        from("timer:healthCheck?period={{arbiter.timer.period}}")
//                .to("bean:endpointService?method=check");
    }
}

+ 0 - 42
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/ServiceFlowEventRouter.java

@ -1,42 +0,0 @@
package com.yihu.hos.arbiter.routers;
import com.yihu.hos.arbiter.configuration.ActivemqConfiguration;
import com.yihu.hos.web.framework.constant.ServiceFlowConstant;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.model.ModelCamelContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
 * @created Airhead 2016/8/1.
 */
@Component
public class ServiceFlowEventRouter extends RouteBuilder {
    @Autowired
    private ActivemqConfiguration activemqConfiguration;
    @Override
    public void configure() throws Exception {
        ModelCamelContext context = this.getContext();
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                activemqConfiguration.getUser(), activemqConfiguration.getPassword(), activemqConfiguration.getBrokerURL());
        // Note we can explicit name the component
        context.addComponent(ServiceFlowConstant.CAMEL_COMPONENT, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from(ServiceFlowConstant.CAMEL_ENDPOINT)
                .choice()
//                .when(header("tenant").isNotNull()).to("bean:serviceFlowService?method=handleServiceFlow")
                .when(header("event").isEqualTo(ServiceFlowConstant.SERVICE_FLOW_STARTED)).to("bean:serviceFlowService?method=serviceFlowStarted")
                .when(header("event").isEqualTo(ServiceFlowConstant.SERVICE_FLOW_STOPPED)).to("bean:serviceFlowService?method=serviceFlowStopped")
                .when(header("event").isEqualTo(ServiceFlowConstant.SERVICE_FLOW_ADDED)).to("bean:serviceFlowService?method=serviceFlowAdd")
                .when(header("event").isEqualTo(ServiceFlowConstant.SERVICE_FLOW_MODIFIED_ADD)).to("bean:serviceFlowService?method=serviceFlowModifyAdd")
                .when(header("event").isEqualTo(ServiceFlowConstant.SERVICE_FLOW_MODIFIED_REDUCE)).to("bean:serviceFlowService?method=serviceFlowModifyReduce")
                .when(header("event").isEqualTo(ServiceFlowConstant.SERVICE_FLOW_DELETED)).to("bean:serviceFlowService?method=serviceFlowDelete")
                .when(header("event").isEqualTo(ServiceFlowConstant.BROKER_SERVER_ON)).to("bean:serviceFlowService?method=brokerServerOn")
                .when(header("event").isEqualTo(ServiceFlowConstant.BROKER_SERVER_OFF)).to("bean:brokerServerService?method=brokerServerOff")
                .endChoice();
    }
}

+ 0 - 39
hos-arbiter/src/main/java/com/yihu/hos/arbiter/routers/ShellRouter.java

@ -1,39 +0,0 @@
package com.yihu.hos.arbiter.routers;
import com.yihu.hos.arbiter.configuration.ActivemqConfiguration;
import com.yihu.hos.web.framework.constant.SSHConstant;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.model.ModelCamelContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.jms.ConnectionFactory;
/**
 * 中心shell命令消息
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/5.
 */
@Component
public class ShellRouter extends RouteBuilder {
    @Autowired
    private ActivemqConfiguration activemqConfiguration;
    @Override
    public void configure() throws Exception {
        ModelCamelContext context = this.getContext();
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                activemqConfiguration.getUser(), activemqConfiguration.getPassword(), activemqConfiguration.getBrokerURL());
        // Note we can explicit name the component
        context.addComponent(SSHConstant.CAMEL_COMPONENT, JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        from(SSHConstant.CAMEL_ENDPOINT)
                .choice()
                .when(header("tenant").isNotNull()).to("bean:linuxShellService?method=handleServiceFlow")
                .when(header("event").isEqualTo(SSHConstant.ARBITER_SHELL_SEND)).to("bean:linuxShellService?method=sendShell")
                .endChoice();
    }
}

+ 0 - 54
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ArbiterServerService.java

@ -1,54 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.yihu.hos.arbiter.configuration.ArbiterServerConfiguration;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.model.bo.ArbiterServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
/**
 * @author Airhead
 * @since 2016/12/9.
 */
@Service
public class ArbiterServerService {
    private static final Logger logger = LoggerFactory.getLogger(ArbiterServerService.class);
    private MongoOperations mongoOperations;
    private ArbiterServerConfiguration configuration;
    public ArbiterServerService() {
    }
    @Autowired
    public void setMongoOperations(MongoOperations mongoOperations){
        this.mongoOperations = mongoOperations;
    }
    @Autowired
    public void setConfiguration(ArbiterServerConfiguration configuration){
        this.configuration = configuration;
    }
    public void save(ArbiterServer arbiterServer) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tenant").is(arbiterServer.getTenant()));
        Update update = new Update();
        update.set("tenant", arbiterServer.getTenant());
        update.set("url", arbiterServer.getUrl());
        mongoOperations.upsert(query, update, ArbiterServer.class);
    }
    public ArbiterServer get(String tenant) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tenant").is(tenant));
        return mongoOperations.findOne(query, ArbiterServer.class);
    }
}

+ 0 - 172
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/BrokerServerService.java

@ -1,172 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.constant.ServiceFlowConstant;
import com.yihu.hos.web.framework.model.bo.BrokerServer;
import com.yihu.hos.web.framework.model.bo.ServiceFlow;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.util.*;
/**
 * @created Airhead 2016/7/27.
 */
@Service("brokerServerService")
public class BrokerServerService {
    private static final Logger logger = LoggerFactory.getLogger(BrokerServerService.class);
    @Autowired
    private MongoOperations mongoOperations;
    @Autowired
    private CamelContext camelContext;
    @Autowired
    private ProducerTemplate producerTemplate;
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * 暂不提供动态均衡算法,只是随机返回一个。
     *
     * @return
     */
    public BrokerServer get() {
        Query query = new Query();
        query.addCriteria(Criteria.where("enable").is(true));
        query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "updateTime")));
        return mongoOperations.findOne(query, BrokerServer.class);
    }
    public List<BrokerServer> get(boolean one) {
        if (one) {
            BrokerServer brokerServer = get();
            List<BrokerServer> brokerServers = new ArrayList<>();
            brokerServers.add(brokerServer);
            return brokerServers;
        }
        Query query = new Query();
        query.addCriteria(Criteria.where("enable").is(true));
        query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "updateTime")));
        return mongoOperations.find(query, BrokerServer.class);
    }
    public List<BrokerServer> getBrokerList(String routeCode) {
        Query query = new Query();
        query.addCriteria(Criteria.where("serviceFlows.routeCode").is(routeCode));
        return mongoOperations.find(query, BrokerServer.class);
    }
    public void addServiceFlow(BrokerServer brokerServer, ServiceFlow serviceFlow) {
        BrokerServer.ServiceFlow flow = new BrokerServer.ServiceFlow();
        flow.setFlowId(serviceFlow.getId());
        flow.setRouteCode(serviceFlow.getRouteCode());
        flow.setType(serviceFlow.getFlowType());
        brokerServer.addServiceFlow(flow);
        Query query = new Query();
        query.addCriteria(Criteria.where("hostName").is(brokerServer.getHostName()));
        query.addCriteria(Criteria.where("hostAddress").is(brokerServer.getHostAddress()));
        query.addCriteria(Criteria.where("port").is(brokerServer.getPort()));
        Update update = new Update();
        update.set("hostName", brokerServer.getHostName());
        update.set("hostAddress", brokerServer.getHostAddress());
        update.set("port", brokerServer.getPort());
        update.set("updateTime", brokerServer.getUpdateTime());
        update.set("enable", brokerServer.isEnable());
        update.addToSet("serviceFlows", serviceFlow);
        mongoOperations.upsert(query, update, BrokerServer.class);
    }
    public void removeServiceFlow(BrokerServer brokerServer, ServiceFlow serviceFlow) {
        Query query = new Query();
        query.addCriteria(Criteria.where("hostName").is(brokerServer.getHostName()));
        query.addCriteria(Criteria.where("hostAddress").is(brokerServer.getHostAddress()));
        query.addCriteria(Criteria.where("port").is(brokerServer.getPort()));
        Update update = new Update();
        update.set("hostName", brokerServer.getHostName());
        update.set("hostAddress", brokerServer.getHostAddress());
        update.set("port", brokerServer.getPort());
        update.set("updateTime", brokerServer.getUpdateTime());
        update.set("enable", brokerServer.isEnable());
        update.pull("serviceFlows", serviceFlow);
        mongoOperations.upsert(query, update, BrokerServer.class);
    }
    public void login(BrokerServer brokerServer) {
        Query query = new Query();
        query.addCriteria(Criteria.where("hostName").is(brokerServer.getHostName()));
        query.addCriteria(Criteria.where("hostAddress").is(brokerServer.getHostAddress()));
        query.addCriteria(Criteria.where("port").is(brokerServer.getPort()));
        Update update = new Update();
        update.set("tenant", brokerServer.getTenant());
        update.set("hostName", brokerServer.getHostName());
        update.set("hostAddress", brokerServer.getHostAddress());
        update.set("port", brokerServer.getPort());
        Date updateTime = brokerServer.getUpdateTime() == null ? new Date() : brokerServer.getUpdateTime();
        update.set("updateTime", updateTime);
        update.set("createTime", new Date());
        update.set("enable", brokerServer.isEnable());
        mongoOperations.upsert(query, update, BrokerServer.class);
        try {
            String msg = objectMapper.writeValueAsString(brokerServer);
            ProducerTemplate producerTemplate = createProducerTemplate();
            Map<String, Object> header = new HashMap<>();
            header.put("event", ServiceFlowConstant.BROKER_SERVER_ON);
            producerTemplate.sendBodyAndHeaders(ServiceFlowConstant.CAMEL_ENDPOINT, msg, header);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    public void logout(BrokerServer brokerServer) {
        Query query = new Query();
        query.addCriteria(Criteria.where("hostName").is(brokerServer.getHostName()));
        query.addCriteria(Criteria.where("hostAddress").is(brokerServer.getHostAddress()));
        query.addCriteria(Criteria.where("port").is(brokerServer.getPort()));
        BrokerServer server = mongoOperations.findOne(query, BrokerServer.class);
        mongoOperations.remove(server);
    }
    public void heartbeat(BrokerServer brokerServer) {
        Query query = new Query();
        query.addCriteria(Criteria.where("hostName").is(brokerServer.getHostName()));
        query.addCriteria(Criteria.where("hostAddress").is(brokerServer.getHostAddress()));
        query.addCriteria(Criteria.where("port").is(brokerServer.getPort()));
        BrokerServer server = mongoOperations.findOne(query, BrokerServer.class);
        if (server != null) {
            server.setUpdateTime(new Date());
            mongoOperations.save(server);
        }
    }
    private ProducerTemplate createProducerTemplate() {
        if (producerTemplate == null) {
            producerTemplate = camelContext.createProducerTemplate();
        }
        return producerTemplate;
    }
}

+ 0 - 118
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/EndpointService.java

@ -1,118 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.core.http.HTTPResponse;
import com.yihu.hos.core.http.HttpClientKit;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.model.bo.Endpoint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.List;
/**
 * @created Airhead 2016/7/27.
 */
@Service("endpointService")
public class EndpointService {
    private static final Logger logger = LoggerFactory.getLogger(BrokerServerService.class);
    @Autowired
    private MongoOperations mongoOperations;
    @Autowired
    private ObjectMapper objectMapper;
    public void save(Endpoint endpoint) {
        Query query = new Query();
        query.addCriteria(Criteria.where("code").is(endpoint.getCode()));
        Update update = new Update();
        update.set("code", endpoint.getCode());
        update.set("createTime", endpoint.getCreateTime());
        update.set("endpoint", endpoint.getEndpoint());
        update.set("event", endpoint.getEvent());
        update.set("healthCheckType", endpoint.getHealthCheckType());
        update.set("healthCheckURL", endpoint.getHealthCheckURL());
        update.set("metricsType", endpoint.getMetricsType());
        update.set("metricsURL", endpoint.getMetricsURL());
        update.set("name", endpoint.getName());
        update.set("updateTime", endpoint.getUpdateTime());
        update.set("active", endpoint.isActive());
        mongoOperations.upsert(query, update, Endpoint.class);
    }
    public void delete(Endpoint endpoint) {
        mongoOperations.remove(endpoint);
    }
    public Endpoint get(String serviceName) {
        return mongoOperations.findOne(new Query(), Endpoint.class);
    }
    public List<Endpoint> getEndpointList() {
        return mongoOperations.findAll(Endpoint.class);
    }
    public void check() {
        List<Endpoint> endpointList = getEndpointList();
        endpointList.forEach(this::remoteCheck);
    }
    public void addEndpoint(String msg) {
        try {
            Endpoint endpoint = objectMapper.readValue(msg, Endpoint.class);
            endpoint.setActive(true);
            this.save(endpoint);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void deleteEndpoint(String msg) {
        try {
            Endpoint endpoint = objectMapper.readValue(msg, Endpoint.class);
            this.delete(endpoint);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void offServer(String msg) {
        try {
            Endpoint endpoint = objectMapper.readValue(msg, Endpoint.class);
            endpoint.setActive(false);
            this.save(endpoint);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 调用实际的检查地址
     *
     * @param endpoint 通讯点信息
     */
    private void remoteCheck(Endpoint endpoint) {
        String url = endpoint.getHealthCheckURL();
        if (StringUtil.isEmpty(url)) {
            return;
        }
        HTTPResponse response = HttpClientKit.get(url);
        if (response.getStatusCode() == 200) {
            return;
        }
        endpoint.setActive(false);
        this.save(endpoint);
    }
}

+ 0 - 89
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/MycatService.java

@ -1,89 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.yihu.hos.core.http.HTTPResponse;
import com.yihu.hos.core.http.HttpClientKit;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.model.bo.BrokerServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/5.
 */
@Service("mycatService")
public class MycatService {
    private static final Logger logger = LoggerFactory.getLogger(MycatService.class);
    @Autowired
    private BrokerServerService brokerServerService;
    /**
     * 发送shell命令请求到broker
     *
     * @param msg 命令消息内容
     */
    public void updateMycat(String msg) {
        try {
            List<BrokerServer> brokerServerList = brokerServerService.get(false);
            for (BrokerServer broker : brokerServerList) {
                String result = sendMessage(broker, "post", "/esb/serviceMycat/update", msg);
                if (result == null) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                } else {
                    logger.debug("发送mycat修改请求到broker成功");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    private String sendMessage(BrokerServer brokerServer, String method, String path, String msg) {
        if (brokerServer == null) {
            return null;
        }
        switch (method) {
            case "post": {
                HTTPResponse response = HttpClientKit.post(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    return body;
                }
                return null;
            }
            case "put": {
                HTTPResponse response = HttpClientKit.put(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                    return body;
                }
                return null;
            }
            case "delete": {
                HTTPResponse response = HttpClientKit.delete(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                    return body;
                }
                return null;
            }
            default:
                break;
        }
        return null;
    }
}

+ 0 - 198
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ProxyService.java

@ -1,198 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.yihu.hos.arbiter.configuration.ArbiterServerConfiguration;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.constant.EndPointConstant;
import com.yihu.hos.web.framework.constant.MycatConstant;
import com.yihu.hos.web.framework.constant.SSHConstant;
import com.yihu.hos.web.framework.constant.ServiceFlowConstant;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.zbus.broker.ZbusBroker;
import org.zbus.mq.Consumer;
import org.zbus.net.http.Message;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
 * @author Airhead
 * @since 2016/12/22.
 */
@Service
public class ProxyService {
    private static final Logger logger = LoggerFactory.getLogger(ProxyService.class);
    private CamelContext camelContext;
    private ArbiterServerConfiguration configuration;
    private ZbusBroker zbusBroker;
    @Autowired
    public void setZbusBroker(ZbusBroker zbusBroker) {
        this.zbusBroker = zbusBroker;
    }
    @Autowired
    public void setCamelContext(CamelContext camelContext) {
        this.camelContext = camelContext;
    }
    @Autowired
    public void setConfiguration(ArbiterServerConfiguration configuration) {
        this.configuration = configuration;
    }
    public void start() {
        new ServiceFlow().start();
        new Mycat().start();
        new Shell().start();
        new EndPoint().start();
    }
    public class ServiceFlow {
        private Consumer consumer;
        public void handle(Message message, Consumer consumer) {
            Map<String, Object> header = new HashMap<>();
            header.put("event", message.getHead("event"));
            ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
            producerTemplate.sendBodyAndHeaders(ServiceFlowConstant.CAMEL_ENDPOINT, message.getBodyString(), header);
        }
        public void start() {
            if (zbusBroker == null) {
                logger.error("zbusBroker is null");
                return;
            }
            try {
                consumer = new Consumer(zbusBroker, ServiceFlowConstant.ZBUS_MQ + "@" + configuration.getTenant());
                consumer.start(this::handle);
            } catch (IOException e) {
                e.printStackTrace();
                logger.error(e.getMessage());
            }
        }
        @Override
        protected void finalize() throws Throwable {
            if (consumer != null) {
                consumer.close();
            }
            super.finalize();
        }
    }
    public class Mycat {
        private Consumer consumer;
        public void handle(Message message, Consumer consumer) {
            Map<String, Object> header = new HashMap<>();
            header.put("event", message.getHead("event"));
            ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
            producerTemplate.sendBodyAndHeaders(MycatConstant.CAMEL_ENDPOINT, message.getBodyString(), header);
        }
        public void start() {
            if (zbusBroker == null) {
                logger.error("zbusBroker is null");
                return;
            }
            try {
                consumer = new Consumer(zbusBroker, MycatConstant.ZBUS_MQ + "@" + configuration.getMycatName());
                consumer.start(this::handle);
            } catch (IOException e) {
                e.printStackTrace();
                logger.error(e.getMessage());
            }
        }
        @Override
        protected void finalize() throws Throwable {
            if (consumer != null) {
                consumer.close();
            }
            super.finalize();
        }
    }
    public class Shell {
        private Consumer consumer;
        public void handle(Message message, Consumer consumer) {
            Map<String, Object> header = new HashMap<>();
            header.put("event", message.getHead("event"));
            ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
            producerTemplate.sendBodyAndHeaders(SSHConstant.CAMEL_ENDPOINT, message.getBodyString(), header);
        }
        public void start() {
            if (zbusBroker == null) {
                logger.error("zbusBroker is null");
                return;
            }
            try {
                consumer = new Consumer(zbusBroker, SSHConstant.SHELL_REQUEST + "@" + configuration.getTenant());
                consumer.start(this::handle);
            } catch (IOException e) {
                e.printStackTrace();
                logger.error(e.getMessage());
            }
        }
        @Override
        protected void finalize() throws Throwable {
            if (consumer != null) {
                consumer.close();
            }
            super.finalize();
        }
    }
    public class EndPoint {
        private Consumer consumer;
        public void handle(Message message, Consumer consumer) {
            Map<String, Object> header = new HashMap<>();
            header.put("event", message.getHead("event"));
            ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
            producerTemplate.sendBodyAndHeaders(EndPointConstant.CAMEL_ENDPOINT, message.getBodyString(), header);
        }
        public void start() {
            if (zbusBroker == null) {
                logger.error("zbusBroker is null");
                return;
            }
            try {
                consumer = new Consumer(zbusBroker, EndPointConstant.ZBUS_MQ + "@" + configuration.getTenant());
                consumer.start(this::handle);
            } catch (IOException e) {
                e.printStackTrace();
                logger.error(e.getMessage());
            }
        }
        @Override
        protected void finalize() throws Throwable {
            if (consumer != null) {
                consumer.close();
            }
            super.finalize();
        }
    }
}

+ 0 - 402
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ServiceFlowService.java

@ -1,402 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.http.HTTPResponse;
import com.yihu.hos.core.http.HttpClientKit;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.constant.ServiceFlowConstant;
import com.yihu.hos.web.framework.model.bo.BrokerServer;
import com.yihu.hos.web.framework.model.bo.ServiceFlow;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.List;
/**
 * Broker原则上具有等同性,这样Arbiter无论选择了哪个Broker能提供的服务都是一样的。
 * 但是因为Broker上还是会运行一些定时的采集任务,这些采集任务如果是多台Broker运行的话,可能会引起数据重复问题。
 * 所以在事件触发时需要做一些策略的调整:
 * 1.实时任务,通知所有的Broker进行更新路由
 * 2.采集任务,只通知其中的一台进行更新路由
 *
 * @created Airhead 2016/8/16.
 */
@Service("serviceFlowService")
public class ServiceFlowService {
    private static final Logger logger = LoggerFactory.getLogger(BrokerServerService.class);
    @Autowired
    private MongoOperations mongoOperations;
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private BrokerServerService brokerServerService;
    public ServiceFlow save(ServiceFlow serviceFlow) {
        if (serviceFlow == null) {
            logger.error("ServiceFlow is null");
            return null;
        }
        Query query = new Query();
        query.addCriteria(Criteria.where("routeCode").is(serviceFlow.getRouteCode()));
        Update update = new Update();
        update.set("routeCode", serviceFlow.getRouteCode());
        update.set("updated", serviceFlow.getUpdated());
        update.set("flowType", serviceFlow.getFlowType());
        update.set("tenant", serviceFlow.getTenant());
        //删除旧记录
        update.set("handleFiles", serviceFlow.getHandleFiles());
//        update1.set("handleFiles.$.className", handleFile.getClassName());
//        Query query1 = Query.query(new Criteria().andOperator(Criteria.where("className").is( handleFile.getClassName()),Criteria.where("handleFiles").elemMatch(Criteria.where("className").is( handleFile.getClassName()))));
//        mongoOperations.updateFirst(query1, update1, ServiceFlow.class);
        mongoOperations.upsert(query, update, ServiceFlow.class);
        return mongoOperations.findOne(query, ServiceFlow.class);
    }
    public String get(String serviceName) {
        return null;
    }
    public void delete(ServiceFlow serviceFlow) {
        mongoOperations.remove(serviceFlow);
    }
    public List<ServiceFlow> getAll() {
        return mongoOperations.findAll(ServiceFlow.class);
    }
    /**
     * admin发过来的服务流程启动事件处理。
     *
     * @param msg serviceFlow
     */
    public void serviceFlowStarted(String msg) {
        try {
            ServiceFlow serviceFlow = getServiceFlow(msg);
            serviceFlow = this.save(serviceFlow);
            boolean one = ServiceFlowConstant.JAVA.equals(serviceFlow.getFlowType());//java类型为采集任务
            if (one && isStarted(serviceFlow)) {
                return;
            }
            List<BrokerServer> brokerServerList;
            brokerServerList = brokerServerService.get(one);
            for (BrokerServer broker : brokerServerList) {
                boolean result = sendMessage(broker, "post", "/esb/serviceFlow/serverServiceFlow", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                }
                brokerServerService.addServiceFlow(broker, serviceFlow);
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    public void serviceFlowStopped(String msg) {
        try {
            ServiceFlow serviceFlow = getServiceFlow(msg);
            this.delete(serviceFlow);
            List<BrokerServer> brokerServerList;
            brokerServerList = brokerServerService.get(false);
            for (BrokerServer broker : brokerServerList) {
                HTTPResponse response = HttpClientKit.post(broker.getURL() + "", msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                }
                boolean result = sendMessage(broker, "post", "/esb/serviceFlow/stop", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                }
                brokerServerService.removeServiceFlow(broker, serviceFlow);
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    public void serviceFlowAdd(String msg) {
        try {
            ServiceFlow serviceFlow = getServiceFlow(msg);
            serviceFlow = this.save(serviceFlow);
            System.out.println("流程添加serviceFlowAdd开始!");
            boolean one = ServiceFlowConstant.JAVA.equals(serviceFlow.getFlowType());//java类型为采集任务
            if (one) {
                BrokerServer brokerServer = brokerServerService.get();
                boolean result = sendMessage(brokerServer, "post", "/esb/serviceFlow", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + brokerServer.getURL() + ", msg:" + msg);
                    return;
                }
                brokerServerService.addServiceFlow(brokerServer, serviceFlow);
                return;
            }
            List<BrokerServer> brokerServerList;
            brokerServerList = brokerServerService.get(one);
            for (BrokerServer broker : brokerServerList) {
                boolean result = sendMessage(broker, "post", "/esb/serviceFlow", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                }
                brokerServerService.addServiceFlow(broker, serviceFlow);
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    public void serviceFlowModifyAdd(String msg) {
        try {
            ServiceFlow serviceFlow = getServiceFlow(msg);
            serviceFlow = this.save(serviceFlow);
            boolean one = ServiceFlowConstant.JAVA.equals(serviceFlow.getFlowType());//java类型为采集任务
            if (one) {
                List<BrokerServer> brokerList = brokerServerService.getBrokerList(serviceFlow.getRouteCode());
                if (brokerList == null || brokerList.size() == 0) {
                    logger.error("service flow stopped unexpected.");
                    return;
                }
                boolean result = sendMessage(brokerList.get(0), "put", "/esb/serviceFlow/add", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + brokerList.get(0).getURL() + ", msg:" + msg);
                    return;
                }
                brokerServerService.addServiceFlow(brokerList.get(0), serviceFlow);
                return;
            }
            List<BrokerServer> brokerServerList;
            brokerServerList = brokerServerService.get(one);
            for (BrokerServer broker : brokerServerList) {
                boolean result = sendMessage(broker, "put", "/esb/serviceFlow/add", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                }
                brokerServerService.addServiceFlow(broker, serviceFlow);
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    public void serviceFlowModifyReduce(String msg) {
        try {
            ServiceFlow serviceFlow = getServiceFlow(msg);
            serviceFlow = this.save(serviceFlow);
            boolean one = ServiceFlowConstant.JAVA.equals(serviceFlow.getFlowType());//java类型为采集任务
            if (one) {
                List<BrokerServer> brokerList = brokerServerService.getBrokerList(serviceFlow.getRouteCode());
                if (brokerList == null || brokerList.size() == 0) {
                    logger.error("service flow stopped unexpected.");
                    return;
                }
                boolean result = sendMessage(brokerList.get(0), "put", "/esb/serviceFlow/reduce", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + brokerList.get(0).getURL() + ", msg:" + msg);
                    return;
                }
                brokerServerService.addServiceFlow(brokerList.get(0), serviceFlow);
                return;
            }
            List<BrokerServer> brokerServerList;
            brokerServerList = brokerServerService.get(one);
            for (BrokerServer broker : brokerServerList) {
                boolean result = sendMessage(broker, "put", "/esb/serviceFlow/reduce", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                }
                brokerServerService.addServiceFlow(broker, serviceFlow);
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    public void serviceFlowDelete(String msg) {
        try {
            ServiceFlow serviceFlow = getServiceFlow(msg);
             this.delete(serviceFlow);
            boolean one = ServiceFlowConstant.JAVA.equals(serviceFlow.getFlowType());//java类型为采集任务
            if (one) {
                List<BrokerServer> brokerList = brokerServerService.getBrokerList(serviceFlow.getRouteCode());
                if (brokerList == null || brokerList.size() == 0) {
                    logger.error("service flow stopped unexpected.");
                    return;
                }
                boolean result = sendMessage(brokerList.get(0), "delete", "/esb/serviceFlow", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + brokerList.get(0).getURL() + ", msg:" + msg);
                    return;
                }
                brokerServerService.removeServiceFlow(brokerList.get(0), serviceFlow);
                return;
            }
            List<BrokerServer> brokerServerList;
            brokerServerList = brokerServerService.get(one);
            for (BrokerServer broker : brokerServerList) {
                boolean result = sendMessage(broker, "delete", "/esb/serviceFlow", msg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                }
                brokerServerService.removeServiceFlow(broker, serviceFlow);
            }
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    public void brokerServerOn(String msg) {
        List<ServiceFlow> serviceFlowList = getAll();
        serviceFlowList.forEach(serviceFlow -> {
            try {
                serviceFlow = this.save(serviceFlow);
                boolean one = ServiceFlowConstant.JAVA.equals(serviceFlow.getFlowType());//java类型为采集任务
                if (one && isStarted(serviceFlow)) {
                    return;
                }
                BrokerServer brokerServer = objectMapper.readValue(msg, BrokerServer.class);
                String serviceFlowMsg = objectMapper.writeValueAsString(serviceFlow);
                boolean result = sendMessage(brokerServer, "post", "/esb/serviceFlow/start", serviceFlowMsg);
                if (!result) {
                    logger.error("sendMessage to broker start failed, broker:" + brokerServer.getURL() + ", msg:" + serviceFlowMsg);
                    return;
                }
                brokerServerService.addServiceFlow(brokerServer, serviceFlow);
            } catch (IOException e) {
                e.printStackTrace();
                logger.error(e.getMessage());
            }
        });
    }
    public void brokerServerOff(String msg) {
        //可以不用处理。
    }
    private boolean sendMessage(BrokerServer brokerServer, String method, String path, String msg) {
        if (brokerServer == null) {
            return false;
        }
        switch (method) {
            case "post": {
                HTTPResponse response = HttpClientKit.post(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                    return true;
                }
                System.out.println("post error,url: "+brokerServer.getURL() + path);
                return false;
            }
            case "put": {
                HTTPResponse response = HttpClientKit.put(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                    return true;
                }
                System.out.println("put error,url: "+brokerServer.getURL() + path);
                return false;
            }
            case "delete": {
                HTTPResponse response = HttpClientKit.delete(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                    return true;
                }
                System.out.println("delete error,url: "+brokerServer.getURL() + path);
                return false;
            }
            default:
                break;
        }
        return false;
    }
    private ServiceFlow getServiceFlow(String msg) throws IOException {
        return objectMapper.readValue(msg, ServiceFlow.class);
    }
    private boolean isStarted(ServiceFlow serviceFlow) {
        List<BrokerServer> brokerList = brokerServerService.getBrokerList(serviceFlow.getRouteCode());
        if (brokerList != null && brokerList.size() != 0) {
            logger.debug("service flow is already started on the broker");
            return true;
        }
        return false;
    }
}

+ 0 - 119
hos-arbiter/src/main/java/com/yihu/hos/arbiter/services/ShellService.java

@ -1,119 +0,0 @@
package com.yihu.hos.arbiter.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.core.http.HTTPResponse;
import com.yihu.hos.core.http.HttpClientKit;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import com.yihu.hos.web.framework.constant.SSHConstant;
import com.yihu.hos.web.framework.model.bo.BrokerServer;
import com.yihu.hos.web.framework.model.bo.ServiceShell;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.zbus.broker.ZbusBroker;
import org.zbus.mq.Producer;
import org.zbus.net.http.Message;
import java.util.List;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/5.
 */
@Service("linuxShellService")
public class ShellService {
    private static final Logger logger = LoggerFactory.getLogger(ShellService.class);
    @Autowired
    private BrokerServerService brokerServerService;
    private ZbusBroker zbusBroker;
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * 发送shell命令请求到broker
     * @param msg    命令消息内容
     */
    public void sendShell(String msg) {
        try {
            List<BrokerServer> brokerServerList  = brokerServerService.get(false);
            for (BrokerServer broker : brokerServerList) {
                String result = sendMessage(broker, "post", "/esb/serviceShell/send", msg);
                if (result==null) {
                    logger.error("sendMessage to broker start failed, broker:" + broker.getURL() + ", msg:" + msg);
                    continue;
                }else {
                    logger.debug("发送shell请求到broker成功");
                    // shell执行成功,见执行结果返回到中心zbus显示。
                    ServiceShell serviceShell = objectMapper.readValue(msg,ServiceShell.class);
                    Producer producer = new Producer(zbusBroker,  SSHConstant.SHELL_RESPONSE + "@" + serviceShell.getTenant());
                    producer.createMQ();    //确定为创建消息队列需要显示调用
                    Message message = new Message();
                    message.setHead("event", serviceShell.getType());
                    message.setHead("tenant", serviceShell.getTenant());
                    message.setMethod("POST");
                    message.setBody(result);
                    message = producer.sendSync(message);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    private String sendMessage(BrokerServer brokerServer, String method, String path, String msg) {
        if (brokerServer == null) {
            return null;
        }
        switch (method) {
            case "post": {
                HTTPResponse response = HttpClientKit.post(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    return body;
                }
                return null;
            }
            case "put": {
                HTTPResponse response = HttpClientKit.put(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                    return body;
                }
                return null;
            }
            case "delete": {
                HTTPResponse response = HttpClientKit.delete(brokerServer.getURL() + path, msg);
                if (response.getStatusCode() == 200) {
                    String body = response.getBody();
                    logger.debug(body);
                    return body;
                }
                return null;
            }
            default:
                break;
        }
        return null;
    }
    @Autowired
    public void setZbusBroker(ZbusBroker zbusBroker) {
        this.zbusBroker = zbusBroker;
    }
}

+ 0 - 19
hos-arbiter/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -1,19 +0,0 @@
{
  "properties": [
    {
      "name": "arbiter.timer.period",
      "type": "java.lang.String",
      "description": "Description for arbiter.timer.period."
    },
    {
      "name": "arbiter.central.url",
      "type": "java.lang.String",
      "description": "Description for arbiter.central.url."
    },
    {
      "name": "arbiter.tenant.name",
      "type": "java.lang.String",
      "description": "Description for arbiter.tenant.name."
    }
  ]
}

+ 0 - 77
hos-arbiter/src/main/resources/application.yml

@ -1,77 +0,0 @@
server:
  port: 10135
spring:
  application:
    name: ArbiterServer
---
spring:
  profiles: dev
  data:
    mongodb:
      host: 172.19.103.57
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: runtime
  activemq:
    broker-url: tcp://172.19.103.57:61616
    user: admin
    password: admin
arbiter:
  timer:
    period: 10000
  central:
    url: 172.19.103.57:9020
  tenant:
    name: jkzl
  mycat:
    name: mycat172.19.103.42
---
spring:
  profiles: test
  data:
    mongodb:
      host: 172.19.103.42
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: runtime
  activemq:
    broker-url: tcp://172.19.103.42:61616
    user: admin
    password: admin
arbiter:
  timer:
    period: 10000
  central:
    url: 172.19.103.37:9020
  tenant:
    name: jkzl
  mycat:
    name: mycat172.19.103.42
---
spring:
  profiles: prod
  data:
    mongodb:
      host: 172.19.103.86
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: runtime
  activemq:
    broker-url: tcp://172.19.103.86:61616
    user: admin
    password: admin
arbiter:
  timer:
      period: 10000
  central:
    url: 172.19.103.57:9020
  tenant:
    name: yichang
  mycat:
    name: mycat172.19.103.42

+ 0 - 27
hos-arbiter/src/main/resources/log4j2.xml

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration status ="ALL"  monitorInterval="1800">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout charset="UTF-8" pattern="%d{HH:mm:ss}[%-5p][%t][%c]: %m%n"/>
        </Console>
        <RollingFile name="RollingFile" filename="/usr/local/esb/log/CrunchifyTest.log"
                     filepattern="/usr/local/esb/log/rolling/%d{yyyyMMddHHmmss}-fargo.log">
            <PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile" />
        </Root>
    </Loggers>
</configuration>

+ 0 - 88
hos-arbiter/src/main/resources/logback.xml

@ -1,88 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!-- 日志文件基础目录-->
    <property name="log_dir" value="/usr/local/esb/logs/" />
    <!-- 应用名称 -->
    <property name="APP_NAME" value="hos-arbiter" />
    <!--日志文件的保存路径,首先查找系统属性-Dlog.dir,如果存在就使用其;否则,在当前目录下创建名为logs目录做日志存放的目录 -->
    <property name="LOG_HOME" value="${log_dir:-logs}/${APP_NAME}" />
    <!-- 日志输出格式 -->
    <property name="ENCODER_PATTERN"
              value="%d{yyyy-MM-dd  HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n" />
    <contextName>${APP_NAME}</contextName>
    <!-- 控制台日志:输出全部日志到控制台 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>${ENCODER_PATTERN}</Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>
    <!-- 文件日志:输出全部日志到文件 根据时间和文件大小滚动 -->
    <!--<appender name="FILE_SizeAndTime" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
    <!--<file>${LOG_HOME}/output.log</file>-->
    <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
    <!--<fileNamePattern>${LOG_HOME}/output.%d{yyyy-MM-dd_HH_mm}.%i.log</fileNamePattern>-->
    <!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
    <!--<maxFileSize>100KB</maxFileSize>-->
    <!--</timeBasedFileNamingAndTriggeringPolicy>-->
    <!--&lt;!&ndash; keep X days' worth of history &ndash;&gt;-->
    <!--<maxHistory>3</maxHistory>-->
    <!--<cleanHistoryOnStart>true</cleanHistoryOnStart>-->
    <!--</rollingPolicy>-->
    <!--<append>true</append>-->
    <!--<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
    <!--<pattern>${ENCODER_PATTERN}</pattern>-->
    <!--<charset>utf-8</charset>-->
    <!--</encoder>-->
    <!--</appender>-->
    <!-- 文件日志:输出全部日志到文件 根据日期滚动 -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/output.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/output.%d{yyyy-MM-dd_HH}.log</fileNamePattern>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${ENCODER_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>
    <!-- 错误日志:用于将错误日志输出到独立文件 -->
    <appender name="ERROR_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${ENCODER_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
    </appender>
    <logger name="org.hibernate" level="WARN"/>
    <logger name="org.springframework" level="WARN"/>
    <logger name="springfox.documentation" level="WARN"/>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>
</configuration>

+ 0 - 19
hos-arbiter/src/test/java/com/yihu/hos/HosArbiterApplicationTests.java

@ -1,19 +0,0 @@
package com.yihu.hos;
import com.yihu.hos.arbiter.HosArbiterApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = HosArbiterApplication.class)
@WebAppConfiguration
public class HosArbiterApplicationTests {
	@Test
	public void contextLoads() {
	}
}

+ 0 - 28
hos-arbiter/src/test/java/com/yihu/hos/arbiter/services/ProxyServiceTest.java

@ -1,28 +0,0 @@
package com.yihu.hos.arbiter.services;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestComponent;
import org.zbus.broker.ZbusBroker;
import org.zbus.mq.Producer;
import org.zbus.net.http.Message;
/**
 * @author Airhead
 * @since 2016/12/22.
 */
@SpringBootTest
public class ProxyServiceTest {
    @Autowired
    private ZbusBroker zbusBroker;
    @Test
    public void proxy() throws Exception {
        Producer producer = new Producer(zbusBroker, "RemoteControl");
        producer.createMQ();//确定为创建消息队列需要显示调用
        Message msg = new Message();
        msg.setBody("hello world"); //消息体底层是byte[]
        msg = producer.sendSync(msg);
    }
}

+ 0 - 1
hos-broker/.mvn/wrapper/maven-wrapper.properties

@ -1 +0,0 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

+ 0 - 233
hos-broker/mvnw

@ -1,233 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
#   JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
#   M2_HOME - location of maven2's installed home dir
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
#     e.g. to debug Maven itself, use
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi
  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi
fi
# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  MINGW*) mingw=true;;
  Darwin*) darwin=true
           #
           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
           # for the new JDKs provided by Oracle.
           #
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
             #
             # Oracle JDKs
             #
             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=`/usr/libexec/java_home`
           fi
           ;;
esac
if [ -z "$JAVA_HOME" ] ; then
  if [ -r /etc/gentoo-release ] ; then
    JAVA_HOME=`java-config --jre-home`
  fi
fi
if [ -z "$M2_HOME" ] ; then
  ## resolve links - $0 may be a link to maven's home
  PRG="$0"
  # need this for relative symlinks
  while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
    else
      PRG="`dirname "$PRG"`/$link"
    fi
  done
  saveddir=`pwd`
  M2_HOME=`dirname "$PRG"`/..
  # make it fully qualified
  M2_HOME=`cd "$M2_HOME" && pwd`
  cd "$saveddir"
  # echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --unix "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  # TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
  javaExecutable="`which javac`"
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
    # readlink(1) is not available as standard on Solaris 10.
    readLink=`which readlink`
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
      if $darwin ; then
        javaHome="`dirname \"$javaExecutable\"`"
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
      else
        javaExecutable="`readlink -f \"$javaExecutable\"`"
      fi
      javaHome="`dirname \"$javaExecutable\"`"
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
      JAVA_HOME="$javaHome"
      export JAVA_HOME
    fi
  fi
fi
if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi
if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly." >&2
  echo "  We cannot execute $JAVACMD" >&2
  exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
  echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
  local basedir=$(pwd)
  local wdir=$(pwd)
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=$(cd "$wdir/.."; pwd)
  done
  echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "$(tr -s '\n' ' ' < "$1")"
  fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} "$@"

+ 0 - 145
hos-broker/mvnw.cmd

@ -1,145 +0,0 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
set MAVEN_CMD_LINE_ARGS=%*
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

+ 0 - 173
hos-broker/pom.xml

@ -1,173 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         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>com.yihu.hos</groupId>
        <artifactId>hos-parent</artifactId>
        <version>1.3.0</version>
        <relativePath>../hos-parent</relativePath><!-- lookup parent from repository -->
    </parent>
    <artifactId>hos-broker</artifactId>
    <version>1.3.0</version>
    <packaging>war</packaging>
    <name>hos-broker</name>
    <description>ESB服务运行模块</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix</artifactId>
            <version>${spring-cloud-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>${spring-cloud-version}</version>
        </dependency>
        <!-- spring-boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.yihu.hos</groupId>
            <artifactId>hos-web-framework</artifactId>
            <version>${hos-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <!-- sigar -->
        <dependency>
            <groupId>org.fusesource</groupId>
            <artifactId>sigar</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
        </dependency>
        <!-- camel -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>spi-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-http4</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-cxf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-quartz</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-xmljson</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-restlet</artifactId>
        </dependency>
        <!-- camel end -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.hos</groupId>
            <artifactId>hos-core</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot-version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.yihu.hos.broker.HosBrokerApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

+ 0 - 57
hos-broker/src/main/java/com/yihu/hos/broker/HosBrokerApplication.java

@ -1,57 +0,0 @@
package com.yihu.hos.broker;
import com.yihu.hos.broker.services.camel.CamelStartBoot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.mongodb.gridfs.GridFsOperations;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@EnableScheduling
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@EnableAsync
@ComponentScan(value={"com.yihu.hos.broker","camel"})
@EnableEurekaClient
public class HosBrokerApplication extends SpringBootServletInitializer implements CommandLineRunner {
    @Autowired
    private GridFsOperations operations;
    @Autowired
    private CamelStartBoot camelStartBoot;
    private ExecutorService executorService = Executors.newSingleThreadExecutor();
    public static void main(String[] args) {
        SpringApplication.run(HosBrokerApplication.class, args);
    }
    @Override
    public void run(String... strings) throws Exception {
        executorService.execute(() -> {
            camelStartBoot.start();
        });
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            try {
                camelStartBoot.shutdown();
                executorService.shutdown();
            } catch (Exception ignored) {
            }
        }));
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(HosBrokerApplication.class);
    }
}

+ 0 - 23
hos-broker/src/main/java/com/yihu/hos/broker/common/camelrouter/BrokerServerRouter.java

@ -1,23 +0,0 @@
package com.yihu.hos.broker.common.camelrouter;
import com.yihu.hos.broker.configurations.ArbiterConfiguration;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * @created Airhead 2016/8/1.
 */
@Component
public class BrokerServerRouter extends RouteBuilder {
    @Autowired
    private ArbiterConfiguration arbiterConfiguration;
    @Override
    public void configure() throws Exception {
        if (arbiterConfiguration.getEnable()) {
            from("timer:heartbeat?period={{hos.timer.period}}")
                    .to("bean:brokerServerService?method=heartbeat");
        }
    }
}

+ 0 - 16
hos-broker/src/main/java/com/yihu/hos/broker/common/camelrouter/MonitorRouterBulider.java

@ -1,16 +0,0 @@
package com.yihu.hos.broker.common.camelrouter;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
/**
 * Created by l4qiang on 2017-06-16.
 */
@Component
public class MonitorRouterBulider extends RouteBuilder {
    @Override
    public void configure() throws Exception {
//        from("quartz://monitor/monitorTimer?cron=0 0/1 * * * ?")
//                .to("bean:serverMonitorService?method=collectEnvHealth");
    }
}

+ 0 - 13
hos-broker/src/main/java/com/yihu/hos/broker/common/constants/BrokerConstant.java

@ -1,13 +0,0 @@
package com.yihu.hos.broker.common.constants;
/**
 * Created by Administrator on 2016/4/13.
 */
public class BrokerConstant {
    public static String CLASS_SUFFIX = ".class";
    public static String JAVA_SUFFIX = ".java";
    public static String CLASS = "class";
    public static String ROUTE = "route";
    public static String PROCESSOR = "processor";
}

+ 0 - 17
hos-broker/src/main/java/com/yihu/hos/broker/common/constants/MonitorConstant.java

@ -1,17 +0,0 @@
package com.yihu.hos.broker.common.constants;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/11/3.
 */
public interface MonitorConstant {
    String DATABASE = "log";
    String SERVER = "server";
    String HOST = "host";     //这个是否需要,可以在runtime库中使用brokerServer?
    String CPU = "cpu";
    String FILES = "files";
    String MEMORY = "memory";
    String NET = "net";
}

+ 0 - 25
hos-broker/src/main/java/com/yihu/hos/broker/common/log/JmsAppender.java

@ -1,25 +0,0 @@
package com.yihu.hos.broker.common.log;
import ch.qos.logback.classic.net.JMSQueueAppender;
import ch.qos.logback.classic.net.JMSTopicAppender;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.util.Map;
/**
 * Logback JMSQueueAppender
 * <p>
 * Created by l4qiang on 2017-04-12.
 */
public class JmsAppender extends JMSTopicAppender {
    @Override
    public void append(ILoggingEvent event) {
        Map<String, String> mdcPropertyMap = event.getMDCPropertyMap();
        if (mdcPropertyMap.size() == 0) {
            return;
        }
        super.append(event);
    }
}

+ 0 - 68
hos-broker/src/main/java/com/yihu/hos/broker/common/log/TracerFormatter.java

@ -1,68 +0,0 @@
package com.yihu.hos.broker.common.log;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.processor.interceptor.DefaultTraceFormatter;
import org.apache.camel.processor.interceptor.TraceInterceptor;
import java.util.Map;
/**
 * 处理日志格式
 * Created by l4qiang on 2017-04-14.
 */
public class TracerFormatter extends DefaultTraceFormatter {
    @Override
    public Object format(TraceInterceptor interceptor, ProcessorDefinition<?> node, Exchange exchange) {
        System.out.println(exchange.getIn().getBody());
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            ObjectNode rootNode = objectMapper.createObjectNode();
            {
                Message in = exchange.getIn();
                ObjectNode inNode = rootNode.with("in");
                Map<String, Object> headers = in.getHeaders();
                headers.forEach((key, value) -> {
                    if (value == null) {
                        return;
                    }
                    inNode.put(key, value.toString());
                });
                if (in.getBody() != null) {
                    inNode.put("body", in.getBody(String.class));
                }
            }
            {
                ObjectNode outNode = rootNode.with("out");
                Message out = exchange.getOut();
                Map<String, Object> headers = out.getHeaders();
                headers.forEach((key, value) -> {
                    if (value == null) {
                        return;
                    }
                    outNode.put(key, value.toString());
                });
                if (out.getBody() != null) {
                    outNode.put("body", out.getBody(String.class));
                }
            }
            return objectMapper.writeValueAsString(rootNode);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return exchange.getIn().getBody();
    }
}

+ 0 - 184
hos-broker/src/main/java/com/yihu/hos/broker/common/shell/SSHLinuxTool.java

@ -1,184 +0,0 @@
package com.yihu.hos.broker.common.shell;
import com.jcraft.jsch.*;
import com.yihu.hos.core.file.FileUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;
/**
 * ssh 链接操作测试类
 *
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/3.
 */
@Service("SSHLinuxTool")
public class SSHLinuxTool {
    public static final String BEAN_ID = "SSHLinuxTool";
    @Value("${hos.jcraft.host}")
    private String host;
    @Value("${hos.jcraft.port}")
    private String port;
    @Value("${hos.jcraft.user}")
    private String user;
    @Value("${hos.jcraft.password}")
    private String password;
    public static Channel channel = null;
    /**
     * //TODO 密钥密码等验证
     * 建立一个shell连接会话
     *
     * @return
     * @throws JSchException
     */
    public Session getsessionConn() throws JSchException {
        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, Integer.parseInt(port));
        session.setConfig("StrictHostKeyChecking", "no");
        //    java.util.Properties config = new java.util.Properties();
        //   config.put("StrictHostKeyChecking", "no");
        session.setTimeout(600000); // 设置timeout时间
        session.setPassword(password);
        session.connect();
        return session;
    }
//    public String exeCommand(Session session, String command, boolean exit) throws JSchException, IOException {
//
//        if (!session.isConnected()) {
//            session = getsessionConn();
//        }
//
//        ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
//        InputStream in = channelExec.getInputStream();
//        channelExec.setCommand(command);
//        channelExec.setErrStream(System.err);
//        channelExec.connect();
//        String out = IOUtils.toString(in, "UTF-8");
//        if (exit) {
//            channelExec.disconnect();
//        }
//        return out;
//    }
    /**
     * 利用JSch实现远程主机SHELL命令执行
     */
    public  String sshShell(Session session, String command, boolean exit) throws Exception {
        //如果服务器连接不上,则抛出异常
        if (session == null) {
            throw new Exception("session is null");
        }
        try {
            //创建sftp通信通道
            if (channel == null) {
                channel = session.openChannel("shell");
                channel.connect(3000);
            }
            //获取输入流和输出流
            InputStream instream = channel.getInputStream();
            OutputStream outstream = channel.getOutputStream();
            //发送需要执行的SHELL命令,需要用\n结尾,表示回车
            String shellCommand = command;
            outstream.write(shellCommand.getBytes());
            outstream.flush();
            while (instream.available()<1){
                //获取命令执行的结果
                Thread.sleep(1000);
            }
            if (instream.available() > 0) {
                byte[] data = new byte[instream.available()];
                int nLen = instream.read(data);
                if (nLen < 0) {
                    throw new Exception("network error.");
                }
                String result = FileUtil.readFileText(data);
                System.out.println("FileUtil獲取内容:"+result);
                //转换输出结果并打印出来
                String temp = new String(data, 0, nLen, "utf-8");
                System.out.println(temp);
                return temp;
            }
            outstream.close();
            instream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (exit) {
                channel.disconnect();
                session.disconnect();
            }
        }
        return null;
    }
    /**
     *
     * @param session       ssh会话
     * @param inputStream   文件流
     * @param targetDir     上传的目标文件夹
     * @param targetFileName    上传的目标文件名
     * @throws Exception
     */
    public  void sshSftp(Session session,InputStream inputStream, String targetDir,String targetFileName) throws Exception{
        Channel channel = null;
        //如果服务器连接不上,则抛出异常
        if (session == null) {
            throw new Exception("session is null");
        }
        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;
            //进入服务器指定的文件夹
            sftp.cd(targetDir);
            //列出服务器指定的文件列表
            Vector v = sftp.ls("*.txt");
            for(int i=0;i<v.size();i++){
                System.out.println(v.get(i));
            }
            //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
            OutputStream outstream = sftp.put(targetFileName);
            byte b[] = new byte[1024];
            int n;
            while ((n = inputStream.read(b)) != -1) {
                outstream.write(b, 0, n);
            }
            outstream.flush();
            outstream.close();
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            channel.disconnect();
        }
    }
}

+ 0 - 29
hos-broker/src/main/java/com/yihu/hos/broker/configurations/ActivemqConfiguration.java

@ -1,29 +0,0 @@
package com.yihu.hos.broker.configurations;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
 * @created Airhead 2016/8/4.
 */
@Configuration
public class ActivemqConfiguration {
    @Value("${spring.activemq.broker-url}")
    private String brokerURL;
    @Value("${spring.activemq.user}")
    private String user;
    @Value("${spring.activemq.password}")
    private String password;
    public String getBrokerURL() {
        return brokerURL;
    }
    public String getUser() {
        return user;
    }
    public String getPassword() {
        return password;
    }
}

+ 0 - 33
hos-broker/src/main/java/com/yihu/hos/broker/configurations/ApplicationConfiguration.java

@ -1,33 +0,0 @@
package com.yihu.hos.broker.configurations;
import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
/**
 * @created Airhead 2016/8/1.
 */
@Configuration
public class ApplicationConfiguration implements ApplicationListener<EmbeddedServletContainerInitializedEvent> {
    private int port;
    @Override
    public void onApplicationEvent(EmbeddedServletContainerInitializedEvent event) {
        port = event.getEmbeddedServletContainer().getPort();
    }
    public int getPort() {
        return port;
    }
//    @Bean
//    public QuartzComponent quartz(){
//        QuartzComponent quartzComponent =  new QuartzComponent();
//        Properties properties1 = new Properties();
//        properties1.setProperty("propertiesFile", "classPath:quartz.properties");
//        quartzComponent.setProperties(properties1);
//        return quartzComponent;
//    }
}

+ 0 - 31
hos-broker/src/main/java/com/yihu/hos/broker/configurations/ArbiterConfiguration.java

@ -1,31 +0,0 @@
package com.yihu.hos.broker.configurations;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
 * @created Airhead 2016/8/1.
 */
@Configuration
public class ArbiterConfiguration {
    @Value("${hos.arbiter.enable}")
    private boolean enable;
    @Value("${hos.arbiter.url}")
    private String server;
    @Value("${hos.tenant.name}")
    private String tenant;
    public String getServer() {
        return server;
    }
    public boolean getEnable() {
        return enable;
    }
    public String getTenant() {
        return tenant;
    }
}

+ 0 - 51
hos-broker/src/main/java/com/yihu/hos/broker/configurations/MongoConfiguration.java

@ -1,51 +0,0 @@
package com.yihu.hos.broker.configurations;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import static java.util.Collections.singletonList;
/**
 * @created Airhead 2016/7/27.
 */
@Configuration
public class MongoConfiguration extends AbstractMongoConfiguration {
//    @Value("${spring.data.mongodb.uri}")
//    private String uri;
    @Value("${spring.data.mongodb.host}")
    private String host;
    @Value("${spring.data.mongodb.port}")
    private int port;
    @Value("${spring.data.mongodb.username}")
    private String username;
    @Value("${spring.data.mongodb.password}")
    private String password;
    @Value("${spring.data.mongodb.authenticationDatabase}")
    private String authenticationDatabase;
    @Value("${spring.data.mongodb.database}")
    private String database;
    @Override
    public String getDatabaseName() {
        return database;
    }
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient(singletonList(new ServerAddress(host, port)),
                singletonList(MongoCredential.createCredential(username, authenticationDatabase, password.toCharArray())));
    }
    @Bean
    public MongoClient mongoClient() throws Exception {
        return new MongoClient(singletonList(new ServerAddress(host, port)),
                singletonList(MongoCredential.createCredential(username, authenticationDatabase, password.toCharArray())));
    }
}

+ 0 - 45
hos-broker/src/main/java/com/yihu/hos/broker/configurations/SwaggerConfig.java

@ -1,45 +0,0 @@
package com.yihu.hos.broker.configurations;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig  {
    private static final String PUBLIC_API = "Default";
    @Bean
    public Docket publicAPI() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName(PUBLIC_API)
                .genericModelSubstitutes(DeferredResult.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(true)
                .pathMapping("/")
                .select()
                .paths(PathSelectors.regex("/.*"))
                .build()
                .apiInfo(publicApiInfo());
    }
    private ApiInfo publicApiInfo() {
        ApiInfo apiInfo = new ApiInfo("ESB平台API",
                "向其他服务提供的接口。",
                "1.0",
                "No terms of service",
                new Contact("admin@jkzl.com", "", ""),
                "The Apache License, Version 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0.html"
        );
        return apiInfo;
    }
}

+ 0 - 102
hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBCamelController.java

@ -1,102 +0,0 @@
package com.yihu.hos.broker.controllers;
import com.yihu.hos.broker.services.camel.ESBCamelService;
import com.yihu.hos.broker.services.camel.SystemCamelContext;
import com.yihu.hos.web.framework.model.Result;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.camel.Route;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 流程管理
 * Created by lingfeng on 2016/8/4.
 */
@RestController
@RequestMapping("/esb")
public class ESBCamelController {
    @Autowired
    private ESBCamelService esbCamelService;
    @RequestMapping(value = "/heartbeat", method = RequestMethod.GET)
    @ApiOperation(value = "测试服务器可以正常连接", notes = "测试服务器可以正常连接")
    public String heartbeat() {
        return "test";
    }
    @RequestMapping(value = "/serviceFlow", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ApiOperation(value = "新增流程", produces = "application/json", notes = "当Arbiter通知一个的流程被创建时,该事件被触发")
    public Result onServiceFlowAdd(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return esbCamelService.onServiceFlowAdd(msg);
    }
    @RequestMapping(value = "/serviceFlow/add", produces = "application/json;charset=UTF-8", method = RequestMethod.PUT)
    @ApiOperation(value = "修改流程", produces = "application/json", notes = "当Arbiter通知一个的流程被修改(Router,Process被修改或增加)时,该事件被触发")
    public Result onServiceFlowModifyAdd(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return esbCamelService.onServiceFlowModifyAdd(msg);
    }
    @RequestMapping(value = "/serviceFlow/reduce", produces = "application/json;charset=UTF-8", method = RequestMethod.PUT)
    @ApiOperation(value = "修改流程", produces = "application/json", notes = "当Arbiter通知一个的流程被修改(Router,Process被删除)时,该事件被触发")
    public Result onServiceFlowModifyReduce(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return esbCamelService.onServiceFlowModifyReduce(msg);
    }
    @RequestMapping(value = "/serviceFlow", produces = "application/json;charset=UTF-8", method = RequestMethod.DELETE)
    @ApiOperation(value = "删除流程", produces = "application/json", notes = "当Arbiter通知一个的流程被删除时,该事件被触发")
    public Result onServiceFlowDelete(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return esbCamelService.onServiceFlowDelete(msg);
    }
    @RequestMapping(value = "/serviceFlow/start", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ApiOperation(value = "启动服务流程", produces = "application/json", notes = "启动服务流程时,该事件被触发")
    public Result onServiceFlowStart(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return esbCamelService.onServiceFlowStart(msg);
    }
    @RequestMapping(value = "/serviceFlow/stop", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ApiOperation(value = "停止服务流程", produces = "application/json", notes = "停止服务流程时,该事件被触发")
    public Result onServiceFlowStop(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return esbCamelService.onServiceFlowStop(msg);
    }
    @RequestMapping(value = "/serviceFlow/status", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
    @ApiOperation(value = "服务流程运行状态", produces = "application/json", notes = "查看服务流程的运行状态,运行中/停止")
    public String serviceFlowStatus(
            @ApiParam(name = "routeId", value = "routeId", required = true)
            @RequestParam String routeId) {
        return esbCamelService.getRouteStatus(routeId);
    }
        @RequestMapping(value = "/allFlow/status", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
    @ApiOperation(value = "所有服务流程运行状态", produces = "application/json", notes = "查看所有服务流程的运行状态,运行中/停止")
    public Map<String,String > allFlowStatus() {
        List<Route> routes = SystemCamelContext.getContext().getRoutes();
        Map<String,String > map = new HashMap<>();
        for (Route route : routes){
            System.out.println("routId: "+route.getId() + " : " +SystemCamelContext.getContext().getRouteStatus(route.getId()));
            map.put(route.getId(),SystemCamelContext.getContext().getRouteStatus(route.getId()).name());
        }
        return map;
    }
}

+ 0 - 31
hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBMycatController.java

@ -1,31 +0,0 @@
package com.yihu.hos.broker.controllers;
import com.yihu.hos.broker.services.MycatConfigService;
import com.yihu.hos.web.framework.model.Result;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
 * MyCat管理
 * Created by lingfeng on 2016/8/4.
 */
@RestController
@RequestMapping("/esb")
public class ESBMycatController {
    @Autowired
    private MycatConfigService mycatService;
    @RequestMapping(value = "/serviceMycat/update", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ApiOperation(value = "修改mycat", produces = "application/json", notes = "修改mycat的配置文件,并重新加载配置")
    public Result updateMycat(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return mycatService.addeMycat(msg);
    }
}

+ 0 - 36
hos-broker/src/main/java/com/yihu/hos/broker/controllers/ESBShellController.java

@ -1,36 +0,0 @@
package com.yihu.hos.broker.controllers;
import com.yihu.hos.broker.services.ServerShellService;
import com.yihu.hos.web.framework.model.Result;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * @author HZY
 * @vsrsion 1.0
 * SSH命令控制
 * Created at 2017/1/6.
 */
@RestController
@RequestMapping("/esb")
public class ESBShellController {
    @Resource(name = ServerShellService.BEAN_ID)
    private ServerShellService serverShellService;
    @RequestMapping(value = "/serviceShell/send", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ApiOperation(value = "shell命令执行", produces = "application/json", notes = "执行shell命令并返回结果")
    public Result onServiceFlowModifyAdd(
            @ApiParam(name = "msg", value = "消息", required = true)
            @RequestBody() String msg) {
        return serverShellService.executeShell(msg);
    }
}

+ 0 - 27
hos-broker/src/main/java/com/yihu/hos/broker/daos/BrokerDao.java

@ -1,27 +0,0 @@
package com.yihu.hos.broker.daos;
import com.yihu.hos.web.framework.model.bo.Endpoint;
import com.yihu.hos.web.framework.model.bo.ServiceFlow;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class BrokerDao {
    private MongoOperations mongoOperations;
    @Autowired
    public void setMongoOperations(MongoOperations mongoOperations) {
        this.mongoOperations = mongoOperations;
    }
    public List<ServiceFlow> getServiceFlowList() {
        return mongoOperations.findAll(ServiceFlow.class);
    }
    public List<Endpoint> getEndPointList() {
        return mongoOperations.findAll(Endpoint.class);
    }
}

+ 0 - 122
hos-broker/src/main/java/com/yihu/hos/broker/services/BrokerServerService.java

@ -1,122 +0,0 @@
package com.yihu.hos.broker.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.hos.broker.configurations.ArbiterConfiguration;
import com.yihu.hos.core.http.HttpClientKit;
import com.yihu.hos.core.net.IPChoiceUtils;
import org.apache.camel.util.InetAddressUtil;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
/**
 * @created Airhead 2016/8/1.
 */
@Component("brokerServerService")
public class BrokerServerService {
    @Autowired
    private ArbiterConfiguration arbiterConfiguration;
    private String hostName;
    private String hostAddress;
    private int port;
    public void login() {
        try {
            hostName = InetAddressUtil.getLocalHostName();
            String host = System.getenv("host");
            if (host == null) {
                hostAddress = IPChoiceUtils.getSourceIP();
            } else {    //使用Docker方式时按固定的方式配置
                hostAddress = host;
            }
            port = 8099;    //目前先固定下来
            ObjectMapper objectMapper = new ObjectMapper();
            ObjectNode objectNode = objectMapper.createObjectNode();
            objectNode.put("tenant", arbiterConfiguration.getTenant());
            objectNode.put("hostName", hostName);
            objectNode.put("hostAddress", hostAddress);
            objectNode.put("port", port);
            objectNode.put("enable", true);
            String brokerServer = objectMapper.writeValueAsString(objectNode);
            Map<String, String> params = new HashMap<>();
            params.put("brokerServer", brokerServer);
            HttpClientKit.post(arbiterConfiguration.getServer() + "/brokerServer/login", params);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void heartbeat() {
        try {
            hostName = InetAddressUtil.getLocalHostName();
            String host = System.getenv("host");
            if (host == null) {
                hostAddress = IPChoiceUtils.getSourceIP();
            } else {    //使用Docker方式时按固定的方式配置
                hostAddress = host;
            }
            port = 8099;    //目前先固定下来
            ObjectMapper objectMapper = new ObjectMapper();
            ObjectNode objectNode = objectMapper.createObjectNode();
            objectNode.put("tenant", arbiterConfiguration.getTenant());
            objectNode.put("hostName", hostName);
            objectNode.put("hostAddress", hostAddress);
            objectNode.put("port", port);
            objectNode.put("enable", true);
            String brokerServer = objectMapper.writeValueAsString(objectNode);
            Map<String, String> params = new HashMap<>();
            params.put("brokerServer", brokerServer);
            HttpClientKit.post(arbiterConfiguration.getServer() + "/brokerServer/heartbeat", params);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * brokerServer下线时通知
     */
    public void logout() {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            ObjectNode objectNode = objectMapper.createObjectNode();
            objectNode.put("hostName", hostName);
            objectNode.put("hostAddress", hostAddress);
            objectNode.put("port", port);
            objectNode.put("enable", false);
            String brokerServer = objectMapper.writeValueAsString(objectNode);
            URI uri = new URIBuilder(arbiterConfiguration.getServer() + "/brokerServer/logout")
                    .addParameter("brokerServer", brokerServer)
                    .build();
            HttpDelete httpDelete = new HttpDelete(uri);
            CloseableHttpClient httpclient = HttpClients.createDefault();
            CloseableHttpResponse response = httpclient.execute(httpDelete);
            response.close();
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 238
hos-broker/src/main/java/com/yihu/hos/broker/services/MycatConfigService.java

@ -1,238 +0,0 @@
package com.yihu.hos.broker.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.hos.broker.common.shell.SSHLinuxTool;
import com.yihu.hos.broker.util.XMLUtil;
import com.yihu.hos.web.framework.constant.MycatConstant;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.model.bo.ServiceMycat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.annotation.Resource;
import java.util.Map;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/24.
 */
@Service("MycatConfigService")
public class MycatConfigService {
    public static final String BEAN_ID = "MycatConfigService";
    @Resource(name = SSHLinuxTool.BEAN_ID)
    private SSHLinuxTool sshLinuxTool;
    @Autowired
    private ObjectMapper objectMapper;
    @Value("${hos.mycat.path}")
    private String mycatPath;
    @Resource(name = ServerShellService.BEAN_ID)
    private ServerShellService serverShellService;
    //新增 mycat
    public Result addeMycat(String msg) {
        String result = "";
        try {
            ServiceMycat serviceMycat = objectMapper.readValue(msg, ServiceMycat.class);
            //mycat 修改操作
            System.out.println("修改mycat配置,并重载==================");
            //schema.xml修改
//            String schemaXmlPath =  "e:/conf/schema.xml";
            String schemaXmlPath = mycatPath + "/conf/schema.xml";
            Document schemaXML = XMLUtil.parseXml2Doc(schemaXmlPath);
            schemaXML = addMycatSchema(schemaXML, serviceMycat);
            boolean b1 = XMLUtil.writeToXml(schemaXML, schemaXmlPath);
            //server.mxl修改
//            String serverPath =  "e:/conf/server.xml";
            String serverPath = mycatPath + "/conf/server.xml";
            Document serverXML = XMLUtil.parseXml2Doc(serverPath);
            serverXML = addMycatServer(serverXML, serviceMycat);
            boolean b2 = XMLUtil.writeToXml(serverXML, serverPath);
            //TODO 修改完配置文件后,重启mycat
            mycatRestart(mycatPath + "/bin/");
            if (b1 && b2){
                //TODO  需要做灾难抢救处理
                return Result.success("mycat 修改,重启完成!");
            }else {
                return Result.error("mycat 修改配置失败!!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.error("mycat 修改异常,请处理!!");
    }
    public void mycatRestart( String mycatBinPath) throws Exception {
        StringBuffer command = new StringBuffer();
        command.append("cd ").append(mycatBinPath).append("\r\n");
        command.append("./mycat restart").append("\r\n");
        serverShellService.executeShell(command.toString(), false);
    }
    /***************************************   修改mycat 的schema.xml配置  ****************************************************/
    /**
     * 添加mycat schema.xml 配置
     * @param doc   mycat xml的dom对象
     * @param obj   租户信息
     * @return
     */
    public  Document addMycatSchema(Document doc, ServiceMycat obj) {
        Node stNode = doc.getElementsByTagName("mycat:schema").item(0);
        //获取数据库实例名,当前写死获取第一个
        Element dnElem = (Element)  doc.getElementsByTagName("dataHost").item(0);
        String dataHost = dnElem.getAttribute("name");//数据库实例名
        //添加schema节点
        Element firstSchema = (Element)  doc.getElementsByTagName("schema").item(0);// 第一个schema节点;用于新节点的插入
        Element schemaElem = doc.createElement("schema");
        schemaElem.setAttribute("name", obj.getSchema());
        schemaElem.setAttribute("dataNode",  MycatConstant.DATA_NODE + obj.getSchema());
        schemaElem.setAttribute("checkSQLschema", "false");
        schemaElem.setAttribute("sqlMaxLimit", "100");
        stNode.insertBefore(schemaElem,firstSchema);
//        stNode.appendChild(schemaElem);
        //添加dataNode节点
        Element firstDataNode = (Element)  doc.getElementsByTagName("dataNode").item(0);//  第一个dataNode节点;用于新节点的插入
        Element dataNodeElem = doc.createElement("dataNode");
        dataNodeElem.setAttribute("dataHost", dataHost);
        dataNodeElem.setAttribute("name",  MycatConstant.DATA_NODE + obj.getSchema());
        dataNodeElem.setAttribute("database",  MycatConstant.DATA_BASE + obj.getSchema());
        stNode.insertBefore(dataNodeElem,firstDataNode);
//        stNode.appendChild(dataNodeElem);
        return doc;
    }
    /**
     * 删除schema相关的mycat配置
     * @param doc   mycat xml的dom对象
     * @param obj   租户信息
     * @return
     */
    public  Document delMycatSchema(Document doc, ServiceMycat obj) {
        Node stNode = doc.getElementsByTagName("mycat:schema").item(0);
        //删除schema节点
        Element schemaNode = doc.createElement("schema");
        schemaNode.setAttribute("name",obj.getSchema());
        stNode.removeChild(schemaNode);
        //删除dataNode节点
        Element dataNodeNode = doc.createElement("schema");
        dataNodeNode.setAttribute("name",MycatConstant.DATA_NODE + obj.getSchema());
        stNode.removeChild(dataNodeNode);
        return doc;
    }
    /***************************************   修改mycat server.xml配置  ****************************************************/
    /**
     * 添加mycat  server.xml配置
     * @param doc   mycat xml的dom对象
     * @param obj   租户信息
     * @return
     */
    public  Document addMycatServer(Document doc, ServiceMycat obj) {
        //获取数据库实例名,当前写死获取第一个
        Element stNode = (Element)  doc.getElementsByTagName("mycat:server").item(0);
        //添加user节点
        Element schemaElem = doc.createElement("user");
        schemaElem.setAttribute("name", obj.getLoginName());
        //添加user的属性子节点
        Element password = doc.createElement("property");
        password.setAttribute("name","password");
        password.setTextContent(obj.getPassword());
        Element schemas = doc.createElement("property");
        schemas.setAttribute("name","schemas");
        schemas.setTextContent(obj.getSchema());
        schemaElem.appendChild(password);
        schemaElem.appendChild(schemas);
        stNode.appendChild(schemaElem);
        //TODO 修改管理员节点,添加新的schema,使管理员可以看到所有的schema;
        Element firstUser = (Element)  doc.getElementsByTagName("user").item(0);// 第一个user节点;用于新节点的插入
        NodeList childNodes = firstUser.getElementsByTagName("property");
        for (int i=0;i<childNodes.getLength();i++){
            Element item = (Element)  childNodes.item(i);
            String name = item.getAttribute("name");
            if ("schemas".equals(name)){
                item.setTextContent(item.getTextContent() + "," + obj.getSchema());
            }
        }
        return doc;
    }
    /* **********************************  以下为具体操作方法;暂无用 *********************************************/
    /**
     *  添加schema节点
     * @param doc      xml DOM对象
     * @param childMap   schema节点
     * @return
     */
    public  Document addSchemaElement(Document doc, Map<String ,String> childMap) {
        Node stNode = doc.getElementsByTagName("mycat:schema").item(0);
        Element element = doc.createElement("schema");
        for (Map.Entry<String, String> entry : childMap.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            element.setAttribute(key,value);
        }
        stNode.appendChild(element);
        return doc;
    }
    /**
     * 删除Schema子节点
     * @param doc         xml DOM对象
     * @param schemaName  要删除的子节点名称
     */
    public  void deleteElement(Document doc, String schemaName) {
        Node stNode = doc.getElementsByTagName("mycat:schema").item(0);
        Element schemaNode = doc.createElement("schema");
        schemaNode.setAttribute("name", schemaName);
        stNode.removeChild(schemaNode);
    }
    /**
     * 修改节点属性
     * @param doc          mycat xmldom对象
     * @param schemaName   要修改的节点名称
     * @param childMap 修改的节点属性
     */
    public  Document updateAttributeValue(Document doc,String schemaName ,Map<String,String> childMap) {
        NodeList nodeList = doc.getElementsByTagName("schema");
        if (nodeList != null) {
            //所有schema节点
            for (int i = 0; i < nodeList.getLength(); i++) {
                Element elem = (Element) nodeList.item(i);
                String name = elem.getAttribute("name");
                if (schemaName.equals(name)){
                    //schema节点的所有属性
                    for (Map.Entry<String, String> entry : childMap.entrySet()) {
                        String key = entry.getKey();
                        String value = entry.getValue();
                        elem.setAttribute(key,value);
                    }
                }
            }
        }
        return doc;
    }
}

+ 0 - 91
hos-broker/src/main/java/com/yihu/hos/broker/services/ServerMonitorService.java

@ -1,91 +0,0 @@
package com.yihu.hos.broker.services;
import com.mongodb.*;
import com.yihu.hos.broker.common.constants.MonitorConstant;
import com.yihu.hos.broker.util.SigarUtil;
import com.yihu.hos.core.datatype.DateUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("serverMonitorService")
public class ServerMonitorService {
    @Value("${hos.tenant.name}")
    private String tenant;
    private static String host = SigarUtil.getHost();
    @Autowired
    private Mongo mongo;
    /**
     * 服务器健康指标采集
     *
     * @return
     */
    public void collectEnvHealth() {
        try {
            BasicDBObject result = new BasicDBObject();
            DBCollection terminal = mongo.getDB(MonitorConstant.DATABASE).getCollection(MonitorConstant.SERVER);
            result.put("tenant", tenant);
            result.put("create_date", DateUtil.getCurrentString(DateUtil.DEFAULT_YMDHMSDATE_FORMAT));
            result.put("create_time", DateUtil.getSysDateTime());
            result.put("host", host);
            //cpu
            net.sf.json.JSONObject cpu = net.sf.json.JSONObject.fromObject(SigarUtil.cpu());
            result.put("data", cpu);
            result.put("type", MonitorConstant.CPU);
            terminal.insert(result);
            //内存
            net.sf.json.JSONObject memory = net.sf.json.JSONObject.fromObject(SigarUtil.memory());
            result.put("data", memory);
            result.put("type", MonitorConstant.MEMORY);
            result.remove("_id");
            terminal.insert(result);
            //硬盘
            List<net.sf.json.JSONObject> files = JSONArray.fromObject(SigarUtil.file());
            result.put("data", files);
            result.put("type", MonitorConstant.FILES);
            result.remove("_id");
            terminal.insert(result);
            //网络
            JSONObject net = JSONObject.fromObject(SigarUtil.net());
            result.put("data", net);
            result.put("type", MonitorConstant.NET);
            result.remove("_id");
            terminal.insert(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void checkHost() {
        DBCollection terminal = mongo.getDB(MonitorConstant.DATABASE).getCollection(MonitorConstant.HOST);
        BasicDBObject queryObject = new BasicDBObject().append(QueryOperators.AND,
                new BasicDBObject[]{
                        new BasicDBObject().append("host", host),
                        new BasicDBObject().append("tenant", tenant)});
        DBCursor cursor = terminal.find(queryObject);
        if (cursor.size() < 1) {
            try {
                BasicDBObject result = new BasicDBObject();
                String host = SigarUtil.getHost();
                String hostName = SigarUtil.getHostName();
                result.put("tenant", tenant);
                result.put("name", hostName);
                result.put("host", host);
                terminal.insert(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

+ 0 - 89
hos-broker/src/main/java/com/yihu/hos/broker/services/ServerShellService.java

@ -1,89 +0,0 @@
package com.yihu.hos.broker.services;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jcraft.jsch.Session;
import com.yihu.hos.broker.common.shell.SSHLinuxTool;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.model.bo.ServiceShell;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * @author HZY
 * @vsrsion 1.0
 * Created at 2017/1/6.
 */
@Service("ServerShellService")
public class ServerShellService {
    public static final String BEAN_ID = "ServerShellService";
    @Resource(name = SSHLinuxTool.BEAN_ID)
    private SSHLinuxTool sshLinuxTool;
    @Autowired
    private ObjectMapper objectMapper;
    public static Session session ;
    public Result executeShell(String msg) {
        String result="";
        try {
            ServiceShell serviceShell = objectMapper.readValue(msg , ServiceShell.class);
            if (session==null){
                session = sshLinuxTool.getsessionConn();
            }
            if (!serviceShell.isDisconnect()) {
                //保持通道连接
                System.out.println("执行命令,并保持当前会话==================");
                result = sshLinuxTool.sshShell(session, serviceShell.getCommand(), false);
                System.out.println("结果:"+result);
                return Result.success(result);
            } else {
                //断开通道连接,会话
                System.out.println("执行命令,并结束当前会话==================");
                result = sshLinuxTool.sshShell(session, serviceShell.getCommand(), true);
                session = null;
                System.out.println("结果:"+result);
                return Result.success(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.error("shell命令执行失败!");
    }
    public String executeShell(String command,boolean iskeep) {
        String result="";
        try {
            if (session==null){
                session = sshLinuxTool.getsessionConn();
            }
            if (!iskeep) {
                //保持通道连接
                System.out.println("执行命令,并保持当前会话==================");
                result = sshLinuxTool.sshShell(session, command, false);
                System.out.println("结果:"+result);
            } else {
                //断开通道连接,会话
                System.out.println("执行命令,并结束当前会话==================");
                result = sshLinuxTool.sshShell(session, command, true);
                session = null;
                System.out.println("结果:"+result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

+ 0 - 58
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelCompiler.java

@ -1,58 +0,0 @@
package com.yihu.hos.broker.services.camel;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import javax.tools.*;
import java.io.File;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;
/**
 * java编译工具类
 *
 * @author HZY
 * @vsrsion 1.0
 * Created at 2016/11/17.
 */
public class CamelCompiler {
    private static final Logger logger = LoggerFactory.getLogger(CamelCompiler.class);
    public static boolean compile(String sourcePath, String targetPath) {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        boolean success = false;
        try {
            // 建立DiagnosticCollector对象
            DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
            StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, Charset.forName("UTF-8"));
            // 建立源文件对象,根据java模板文件生成要加载的java类
            Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(sourcePath);
            String classPath = CamelCompiler.class.getResource("/").getPath();
            String libPath = new File(classPath).getParent() + File.separator + "lib";//指定需要导入的包路径
            Iterable<String> options = Arrays.asList("-d", targetPath, "-sourcepath", targetPath, "-extdirs", libPath);// 指定的路径一定要存在,javac不会自己创建文件夹
            JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits);
            // 编译源程序
            success = task.call();
            fileManager.close();
            if (!success) {
                //错误信息打印
                List diagnosticList = diagnostics.getDiagnostics();
                System.out.println("编译失败:lib包路径:"+libPath);
                for (Object aDiagnosticList : diagnosticList) {
                    logger.error(aDiagnosticList.toString());
                }
            } else {
                System.out.println("编译成功" + sourcePath);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return success;
    }
}

+ 0 - 91
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/CamelStartBoot.java

@ -1,91 +0,0 @@
package com.yihu.hos.broker.services.camel;
import com.yihu.hos.broker.services.BrokerServerService;
import com.yihu.hos.broker.util.lang.DynamicClassLoader;
import com.yihu.hos.core.log.Logger;
import com.yihu.hos.core.log.LoggerFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.stereotype.Component;
import java.util.concurrent.SynchronousQueue;
/**
 * @author Airhead
 * @since 2016/12/9.
 */
@Component
public class CamelStartBoot {
    private static Logger logger = LoggerFactory.getLogger(CamelStartBoot.class);
    private BrokerServerService brokerServerService;
    private CamelContext context = SystemCamelContext.getContext();
    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;
    @Autowired
    public void setBrokerServerService(BrokerServerService brokerServerService) {
        this.brokerServerService = brokerServerService;
    }
    public void start() {
        logger.info("Apache Camel Context 启动...");
        try {
//            context.setStreamCaching(true); //确保outBody可以消费多次。参考链接:http://camel.apache.org/why-is-my-message-body-empty.html
            context.setUseMDCLogging(true);
//            Tracer tracer = new Tracer();
//            tracer.setTraceOutExchanges(true);
//            DefaultTraceFormatter formatter = new TracerFormatter();
//            formatter.setShowHeaders(true);
//            formatter.setShowBody(true);
//            formatter.setShowBodyType(true);
//            formatter.setShowOutHeaders(true);
//            formatter.setShowOutBody(true);
//            formatter.setShowOutBodyType(true);
//            tracer.setFormatter(formatter);
//            context.addInterceptStrategy(tracer);
//            context.setTracing(true);
//            context.getGlobalOptions().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
            context.start();
            logger.info("Apache Camel Context 启动完成...");
            brokerServerService.login();
            //如果没有收到其它线程的加载请求,主线程将停止在这里,所以该while之后不能有其他业务逻辑
            SynchronousQueue<String> camelContextOperateQueue = SystemCamelContext.getQueue();
            String className;
            while ((className = camelContextOperateQueue.take()) != null) {
                try {
                    DynamicClassLoader dynamicClassLoader = new DynamicClassLoader(SystemCamelContext.getResource(this).getPath());
                    Class<RouteBuilder> routeBuilderClass = (Class<RouteBuilder>) dynamicClassLoader.loadClass(className);
                    if (routeBuilderClass != null) {
                        RouteBuilder routeBuilder = routeBuilderClass.newInstance();
                        capableBeanFactory.autowireBean(routeBuilder);
                        context.addRoutes(routeBuilder);
                    }
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                    logger.error("加载数据Class失败。");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("Apache Camel Context 启动失败。");
        }
    }
    public void shutdown() {
        brokerServerService.logout();
    }
}

+ 0 - 487
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/ESBCamelService.java

@ -1,487 +0,0 @@
package com.yihu.hos.broker.services.camel;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.yihu.hos.core.constants.CoreConstant;
import com.yihu.hos.core.datatype.ClassFileUtil;
import com.yihu.hos.core.datatype.StringUtil;
import com.yihu.hos.web.framework.constant.ServiceFlowConstant;
import com.yihu.hos.web.framework.model.Result;
import com.yihu.hos.web.framework.model.bo.ServiceFlow;
import org.apache.camel.Route;
import org.apache.camel.ServiceStatus;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
/**
 * 对于Broker来说,Camel路由的加载只有这样的几个过程。
 * 文件相关
 * 1.Java, Class文件下载
 * 2.Java文件编译
 * 3.Class文件上传(有java编译生成的class的文件更新)
 * 4.Java,Class删除文件
 * Camel相关
 * 1.增加服务流程
 * 2.删除服务流程
 * 3.修改服务流程
 * 3.1增加Router,Processor
 * 3.2减少Router,Processor
 * 4.启动服务流程
 * 5.停止服务流程
 * <p>
 * Created by lingfeng on 2016/8/4.
 */
@Service
public class ESBCamelService {
    private static Logger logger = LogManager.getLogger(ESBCamelService.class);
    @Autowired
    private MongoClient mongoClient;
    private String serviceFlow = "serviceFlow";
    private String configuration = "runtime";
    @Autowired
    private ObjectMapper objectMapper;
    @Value("${hos.filesystem.url}")
    private String fsUrl;
    @Value("${spring.data.mongodb.gridFsDatabase}")
    private String dbName;
    public Result onServiceFlowAdd(String msg) {
        try {
            System.out.println("hos-broker 流程添加开始,onServiceFlowModifyAdd");
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            ArrayList<ServiceFlow.HandleFile> handleFiles = serviceFlowValid.getHandleFiles();
            if ("java".equals(serviceFlowValid.getServiceFlow().getFlowType())) {
                final boolean[] created = new boolean[1];
                //先生成和编译 processor
                handleFiles.stream().filter(handleFile -> ServiceFlowConstant.FLOW_TYPE_PROCESSOR.equals(handleFile.getUsage())).forEach(handleFile -> {
                    try {
                        if (this.generateClassFile(handleFile)) created[0] = true;
                        else created[0] = false;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
                if (!created[0]) {
                    System.out.println("onServiceFlowAdd ,生成processor文件失败,");
                    return Result.error("服务流程启动失败!");
                }
                handleFiles.stream().filter(handleFile -> ServiceFlowConstant.FLOW_TYPE_ROUTE.equals(handleFile.getUsage())).forEach(handleFile -> {
                    try {
                        if (this.generateClassFile(handleFile)) created[0] = true;
                        else created[0] = false;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
                if (!created[0]) {
                    System.out.println("onServiceFlowAdd ,生成route文件失败,");
                    return Result.error("服务流程启动失败!");
                }
            } else {
                for (ServiceFlow.HandleFile handleFile : handleFiles) {
                    boolean created = this.createClassFile(handleFile);
                    if (!created) {
                        return Result.error("服务流程启动失败!");
                    }
                }
            }
            logger.debug("add camel router" + serviceFlow.getRouteCode());
            this.addRouter(serviceFlow.getHandleFiles());
            logger.debug("start camel router," + serviceFlow.getRouteCode());
            SystemCamelContext.startRouter(serviceFlow.getRouteCode());
            logger.debug("start camel router success," + serviceFlow.getRouteCode());
            return Result.error("服务流程增加成功!");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e);
            return Result.error("服务流程增加失败!");
        }
    }
    /**
     * 当外界组件通知一个新的processor处理器被定义时,该事件被触发。
     */
    public Result onServiceFlowModifyAdd(String msg) {
        try {
            System.out.println("hos-broker 流程修改开始,onServiceFlowModifyAdd");
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            List<Route> routes = SystemCamelContext.getContext().getRoutes();
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            SystemCamelContext.stopRouter(serviceFlow.getRouteCode());
            boolean b = SystemCamelContext.removeRouter(serviceFlow.getRouteCode());
            ArrayList<ServiceFlow.HandleFile> handleFiles = serviceFlowValid.getHandleFiles();
            if ("java".equals(serviceFlowValid.getServiceFlow().getFlowType())) {
                final boolean[] created = new boolean[1];
                //先生成和编译 processor
                handleFiles.stream().filter(handleFile -> ServiceFlowConstant.FLOW_TYPE_PROCESSOR.equals(handleFile.getUsage())).forEach(handleFile -> {
                    try {
                        if (this.generateClassFile(handleFile)) created[0] = true;
                        else created[0] = false;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
                if (!created[0]) {
                    return Result.error("服务流程启动失败!");
                }
                handleFiles.stream().filter(handleFile -> ServiceFlowConstant.FLOW_TYPE_ROUTE.equals(handleFile.getUsage())).forEach(handleFile -> {
                    try {
                        if (this.generateClassFile(handleFile)) created[0] = true;
                        else created[0] = false;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
                if (!created[0]) {
                    return Result.error("服务流程启动失败!");
                }
            } else {
                for (ServiceFlow.HandleFile handleFile : handleFiles) {
                    boolean created = this.createClassFile(handleFile);
                    if (!created) {
                        return Result.error("服务流程启动失败!");
                    }
                }
            }
            this.addRouter(serviceFlowValid.getHandleFiles());
            SystemCamelContext.startRouter(serviceFlow.getRouteCode());
            return Result.error("服务流程变更增加成功!");
        } catch (Exception e) {
            e.printStackTrace();
//            logger.error(e);
            return Result.error("服务流程变更增加失败!");
        }
    }
    /**
     * 当外界组件通知一个已有的RouteDefine路由定义被删除时,该事件被触发。
     */
    public Result onServiceFlowModifyReduce(String msg) {
        try {
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            ServiceFlow.HandleFile handleFile = serviceFlowValid.getHandleFile();
            String routeCode = serviceFlow.getRouteCode();
            SystemCamelContext.getContext().stopRoute(routeCode);
            SystemCamelContext.getContext().removeRoute(routeCode);
            this.deleteClassFile(handleFile);
            this.addRouter(serviceFlowValid.getHandleFiles());
            SystemCamelContext.startRouter(serviceFlow.getRouteCode());
            return Result.success("服务流程变更减少成功!");
        } catch (Exception e) {
            return Result.error("服务流程变更减少失败!");
        }
    }
    public Result onServiceFlowDelete(String msg) {
        try {
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            String routeCode = serviceFlow.getRouteCode();
            SystemCamelContext.getContext().stopRoute(routeCode);
            boolean b = SystemCamelContext.getContext().removeRoute(routeCode);
            ArrayList<ServiceFlow.HandleFile> handleFiles = serviceFlowValid.getHandleFiles();
            if (handleFiles != null) {
                for (ServiceFlow.HandleFile handleFile : handleFiles) {
                    this.deleteClassFile(handleFile);
                    this.deleteServiceFlow(handleFile.getRouteCode());//删除mongo中serviceFlow信息
                }
            }
            return Result.success("服务流程删除成功!");
        } catch (Exception e) {
            return Result.error("服务流程删除失败!");
        }
    }
    /**
     * 启动路由时,该事件被触发。
     */
    public Result onServiceFlowStart(String msg) {
        try {
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            ArrayList<ServiceFlow.HandleFile> handleFiles = serviceFlowValid.getHandleFiles();
            if ("java".equals(serviceFlowValid.getServiceFlow().getFlowType())) {
                final boolean[] created = new boolean[1];
                //先生成和编译 processor
                handleFiles.stream().filter(handleFile -> ServiceFlowConstant.FLOW_TYPE_PROCESSOR.equals(handleFile.getUsage())).forEach(handleFile -> {
                    try {
                        if (this.generateClassFile(handleFile)) created[0] = true;
                        else created[0] = false;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
                if (!created[0]) {
                    System.out.println("processor 生成失败!");
                    return Result.error("服务流程启动失败!");
                } else {
                    System.out.println("processor 生成成功!");
                }
                handleFiles.stream().filter(handleFile -> ServiceFlowConstant.FLOW_TYPE_ROUTE.equals(handleFile.getUsage())).forEach(handleFile -> {
                    try {
                        if (this.generateClassFile(handleFile)) created[0] = true;
                        else created[0] = false;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
                if (!created[0]) {
                    System.out.println("route文件 生成失败!");
                    return Result.error("服务流程启动失败!");
                } else {
                    System.out.println("route文件 生成成功!");
                }
            } else {
                for (ServiceFlow.HandleFile handleFile : handleFiles) {
                    boolean created = this.createClassFile(handleFile);
                    if (!created) {
                        return Result.error("服务流程启动失败!");
                    }
                }
            }
            this.addRouter(handleFiles);
            SystemCamelContext.startRouter(serviceFlow.getRouteCode());
            List<Route> routes = SystemCamelContext.getContext().getRoutes();
            return Result.success("服务流程启动成功!");
        } catch (Exception e) {
            logger.error(e.getMessage());
            return Result.error("服务流程启动失败!");
        }
    }
    /**
     * 停止路由时,该事件被触发。
     */
    public Result onServiceFlowStop(String msg) {
        try {
            ServiceFlowValid serviceFlowValid = new ServiceFlowValid(msg).invoke();
            if (serviceFlowValid.is()) return Result.error("必要的入参数据不正确,请检查!");
            ServiceFlow serviceFlow = serviceFlowValid.getServiceFlow();
            String routeCode = serviceFlow.getRouteCode();
            SystemCamelContext.getContext().stopRoute(routeCode);
            return Result.success("停止路由成功!");
        } catch (Exception e) {
            return Result.error("停止路由失败!");
        }
    }
    private boolean createClassFile(ServiceFlow.HandleFile handleFile) throws Exception {
        if (handleFile == null) {
            return false;
        }
        SystemCamelContext.putClassMapping(handleFile.getRouteCode(), handleFile.getPackageName(), handleFile.getUsage(), handleFile.getClassName());
        URL resource = SystemCamelContext.getResource(this);
        FileOutputStream outputStream = ClassFileUtil.createFile(resource, handleFile.getPackageName(), handleFile.getClassName(), ClassFileUtil.CLASS_FILE);
        String fileName = handleFile.getClassName() + ClassFileUtil.CLASS_FILE;
        //从中心下载
        String downUrl = fsUrl + "/" + handleFile.getFilePath();
        String sourcePath = ClassFileUtil.downFile(downUrl, resource, handleFile.getPackageName(), handleFile.getClassName(), ClassFileUtil.CLASS_FILE);
        if (sourcePath == null) {
            logger.error("not mongo file, fileName:" + fileName);
            return false;
        }
        return true;
    }
    private boolean generateClassFile(ServiceFlow.HandleFile handleFile) throws Exception {
        if (handleFile == null) {
            System.out.println("=====handleFile is null...");
            return false;
        }
        SystemCamelContext.putClassMapping(handleFile.getRouteCode(), handleFile.getPackageName(), handleFile.getUsage(), handleFile.getClassName());
        URL resource = SystemCamelContext.getResource(this);
        //从中心下载java文件
        String downUrl = fsUrl + "/" + handleFile.getFilePath();
        String sourcePath = ClassFileUtil.downFile(downUrl, resource, handleFile.getPackageName(), handleFile.getClassName(), ClassFileUtil.JAVA_FILE);
        if (sourcePath == null) {
            System.out.println("下载java文件失败,downUrl:" + downUrl);
            return false;
        }
        logger.info(sourcePath);
        boolean succ = CamelCompiler.compile(sourcePath, resource.getPath());
        if (succ) {
            //编译成功后将class文件上传至mongodb;文件名为类名+ routeCode
//            String packagePath = StringUtil.replaceStrAll(handleFile.getPackageName(), ".", "/");
//            String classPath = this.getClass().getResource("/").getPath() + packagePath + "/" + handleFile.getClassName() + ClassFileUtil.CLASS_FILE;
//
//            //上传文件
//            String fileName = handleFile.getClassName() + ClassFileUtil.CLASS_FILE;
//            ClassFileUtil.upload(fsUrl, classPath);
        } else {
            System.out.println("编译失败,sourcePath:" + sourcePath);
        }
        return succ;
    }
    private void deleteClassFile(ServiceFlow.HandleFile handleFile) {
        try {
            String packagePath = StringUtil.replaceStrAll(handleFile.getPackageName(), ".", "/");
            String classPath = this.getClass().getResource("/").getPath() + "/" + packagePath + "/" + handleFile.getClassName() + ".class";
            String javaPath = this.getClass().getResource("/").getPath() + "/" + packagePath + "/" + handleFile.getClassName() + ".java";
            Boolean aBoolean = ClassFileUtil.deleteClassfile(javaPath);
            Boolean bBoolean = ClassFileUtil.deleteClassfile(classPath);
            //删除mongodb中文件
            String delJavaUrl = fsUrl + "/" + handleFile.getFilePath();
            ClassFileUtil.deleteFile(delJavaUrl);
            // 完成
            logger.info("===================" + handleFile.getPackageName() + CoreConstant.DOT + handleFile.getClassName() + ".class 删除过程结束");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 删除 serviceFlow记录
     *
     * @param routeCode
     */
    private void deleteServiceFlow(String routeCode) {
        try {
            MongoDatabase db = mongoClient.getDatabase(configuration);
            MongoCollection<Document> collection = db.getCollection(serviceFlow);
            collection.deleteMany(Filters.eq("routeCode", routeCode));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void addRouter(ArrayList<ServiceFlow.HandleFile> handleFiles) throws Exception {
        ArrayList<ServiceFlow.HandleFile> routerFiles = new ArrayList<>();
        handleFiles.forEach(handleFile -> {
            try {
                if (handleFile.getUsage().equals(ServiceFlowConstant.FLOW_TYPE_ROUTE)) {
                    String className = SystemCamelContext.getClassMapping(handleFile.getRouteCode(), handleFile.getClassName(), handleFile.getUsage());
                    SystemCamelContext.getQueue().put(className);
                }
            } catch (Exception e) {
                logger.error(e.getMessage());
                e.printStackTrace();
            }
        });
        routerFiles.forEach(handleFile -> {
            try {
            } catch (Exception e) {
                logger.error(e.getMessage());
                e.printStackTrace();
            }
        });
    }
    public String getRouteStatus(String routeId){
        ServiceStatus routeStatus = SystemCamelContext.getContext().getRouteStatus(routeId);
        if (routeStatus!=null){
            return routeStatus.name();
        }else {
            return null;
        }
    }
    private class ServiceFlowValid {
        private boolean myResult;
        private String msg;
        private ServiceFlow serviceFlow;
        private ServiceFlow.HandleFile handleFile;
        private ArrayList<ServiceFlow.HandleFile> handleFiles;
        public ServiceFlowValid(String msg) {
            this.msg = msg;
        }
        public ArrayList<ServiceFlow.HandleFile> getHandleFiles() {
            return handleFiles;
        }
        public ServiceFlow getServiceFlow() {
            return serviceFlow;
        }
        public ServiceFlow.HandleFile getHandleFile() {
            return handleFile;
        }
        public ServiceFlowValid invoke() throws IOException {
            serviceFlow = objectMapper.readValue(msg, ServiceFlow.class);
            handleFiles = serviceFlow.getHandleFiles();
            if (handleFiles == null || handleFiles.size() == 0) {
                logger.error("必要的入参数据不正确,请检查!");
                myResult = true;
                return this;
            }
            handleFile = handleFiles.get(0);
            if (handleFile == null || StringUtil.isEmpty(serviceFlow.getRouteCode()) || StringUtil.isEmpty(handleFile.getPackageName())
                    || StringUtil.isEmpty(handleFile.getPackageName()) || StringUtil.isEmpty(handleFile.getFilePath())) {
                logger.error("必要的入参数据不正确,请检查!");
                myResult = true;
                return this;
            }
            myResult = false;
            return this;
        }
        boolean is() {
            return myResult;
        }
    }
}

+ 0 - 59
hos-broker/src/main/java/com/yihu/hos/broker/services/camel/SystemCamelContext.java

@ -1,59 +0,0 @@
package com.yihu.hos.broker.services.camel;
import com.yihu.hos.core.constants.CoreConstant;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.SynchronousQueue;
/**
 * Created by lingfeng on 2016/8/9.
 */
public class SystemCamelContext {
    private static CamelContext context;
    private static SynchronousQueue<String> queue = new SynchronousQueue<>();
    private static Map<String, String> mapping = new HashMap<>();
    public static Map<String, String> getMapping() {
        return mapping;
    }
    public static void putClassMapping(String routeCode, String packageName, String type, String className) {
        mapping.put(routeCode + "|" + type + "|" + className, packageName + CoreConstant.DOT + className);
    }
    public static String getClassMapping(String routeCode, String className, String type) {
        return mapping.get(routeCode + "|" + type + "|" + className);
    }
    public static URL getResource(Object o) {
        return o.getClass().getProtectionDomain().getClassLoader().getResource("");
    }
    public static CamelContext getContext() {
        if (context == null) {
            context = new DefaultCamelContext();
        }
        return context;
    }
    public static SynchronousQueue<String> getQueue() {
        return queue;
    }
    public static void startRouter(String routeCode) throws Exception {
        getContext().startRoute(routeCode);
    }
    public static void stopRouter(String routeCode) throws Exception {
        getContext().stopRoute(routeCode);
    }
    public static boolean removeRouter(String routeCode) throws Exception {
        return getContext().removeRoute(routeCode);
    }
}

+ 0 - 133
hos-broker/src/main/java/com/yihu/hos/broker/util/Cols.java

@ -1,133 +0,0 @@
package com.yihu.hos.broker.util;
import com.yihu.hos.broker.util.funct.F0;
import com.yihu.hos.broker.util.funct.F1;
import java.util.*;
/**
 * Created by QuanLA
 * Date: Mar 2, 2006
 * Time: 9:10:49 AM
 */
@SuppressWarnings({"rawtypes","unchecked"})
public class Cols {
	/**
	 * If a collection is empty
	 * @param objs
	 * @return
	 */
	public static boolean isEmpty(Collection<?> objs) {
		return objs == null || objs.isEmpty();
	}
	/**
	 * If a collection is not empty
	 * @param col
	 * @return
	 */
    public static boolean isNotEmpty(Collection<?> col) {
        return !isEmpty(col);
    }
	
    /**
     * Get single element, or null if Col is empty
     * @param collection
     * @return
     */
    public static <A> A getSingle(
            Collection<A> collection) {
    	if (collection == null) {
    		return null;
    	}
        for (A a : collection) {
            return a;
        }
        return null;
    }
	
    public static <A> List<A> createList(int size, F0<A> f) {
        ArrayList<A> list = new ArrayList<A>(size);
        for (int i = 0; i < size; i++) {
            list.add(f.e());
        }
        return list;
    }
	
    /**
     * Create a string connecting all values in collection, separated with delimiter
     * @param objs
     * @param delimiter
     * @return
     */
	public static <A> String join(Iterable<A> objs, String delimiter) {
        if (objs == null) {
            return "";
        }
		StringBuilder sb = new StringBuilder();
		for (A a : objs) {
			sb.append(a).append(delimiter);
		}
		if (sb.length() > 0) {
			sb.setLength(sb.length() - delimiter.length());
		}
		return sb.toString();
	}
	
	
	public static <A,T> List<T> yield(List<A> col, F1<A, T> f1) {
        if (col!=null) {
            return yield(col, new ArrayList<T>(col.size()), f1);
        } else {
            return null;
        }
    }
	
	/**
	 * Apply function on every elements to get new collection of returned value
	 * @param <A>
	 * @param <T>
	 * @param <C>
	 * @param inputs
	 * @param col
	 * @param f1
	 * @return
	 */
	public static <A,T,C extends Collection<T>> C yield(Iterable<A> inputs, C col, F1<A, T> f1) {
//		ArrayList<T> list = new ArrayList<T>();
		if (inputs!=null) {
            for (A a : inputs) {
                T e = f1.e(a);
				if (e != null) {
					col.add(e);
				}
            }
		}
		return col;
	}
	/**
     * Create a map based on the Object... param. Each 2 values is an entry
     * which is a pair of key then value
     * @param objects The params that will be converted to map.
     * 					Format: [key1, value1, key2, value2]
     * @return The map after converted from param objects
     */
//    @SuppressWarnings({"unchecked"})
    public static <A, B> Map<A, B> map(Object... objects) {
    	if (objects==null) {
    		return null;
    	}
        Map<A, B> map = new LinkedHashMap<A, B>(objects.length / 2);
        for (int i = 0; i < objects.length; i+=2) {
            map.put((A)objects[i], (B)objects[i + 1]);
        }
        return map;
    }
}

+ 0 - 89
hos-broker/src/main/java/com/yihu/hos/broker/util/FileUtil.java

@ -1,89 +0,0 @@
package com.yihu.hos.broker.util;
import com.yihu.hos.broker.util.funct.F1;
import com.yihu.hos.broker.util.funct.F2;
import com.yihu.hos.broker.util.funct.Fs;
import com.yihu.hos.broker.util.funct.P2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
@SuppressWarnings("UnusedDeclaration")
public class FileUtil {
	/**
	 * 
	 * @param fileToRead
	 * @return
	 * @throws IOException
	 */
	public static byte[] readFileToBytes(File fileToRead) {
		try {
			return IOUtil.readData(new FileInputStream(fileToRead));
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
    public static FileInputStream fileInputStream(File file) {
        try {
            return new FileInputStream(file);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    public static FileInputStream fileInputStream(String file) {
        try {
            return new FileInputStream(file);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
	
    public static void eachFile(File path, P2<File, String> f) {
        eachFile(path, f, null);
    }
	
    public static void eachFile(File path, P2<File, String> f, F1<File, Boolean> exclude) {
    	eachFile(path, Fs.f2(f, true), exclude);
    }
	
    public static void eachFile(File path, F2<File, String,Boolean> f, F1<File, Boolean> exclude) {
        ArrayList<String> relPath = new ArrayList<>();
        if (path.isFile()) {
            f.e(path, Cols.join(relPath, File.separator));
        } else {
            if (!eachFileInDir(path, f, relPath, exclude)) return;
        }
    }
	
    private static boolean eachFileInDir(File path, F2<File, String,Boolean> f, ArrayList<String> relPath, F1<File, Boolean> exclude) {
        if (!path.exists() || !path.isDirectory()) {
            throw new RuntimeException("Invalid path: " + path);
        }
        for (File child : path.listFiles()) {
            if (exclude != null && exclude.e(child)) {
//            	System.out.println("Excluded " + child);
                continue;
            }
//        	System.out.println("Accepted " + child);
            if (child.isFile()) {
                if (!f.e(child, Cols.join(relPath, File.separator))) return false;
            } else {
                relPath.add(child.getName());
                if (!eachFileInDir(child, f, relPath, exclude)) return false;
                relPath.remove(relPath.size() - 1);
            }
        }
        return true;
    }
}

+ 0 - 188
hos-broker/src/main/java/com/yihu/hos/broker/util/IOUtil.java

@ -1,188 +0,0 @@
package com.yihu.hos.broker.util;
import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * Created by Quan on 22/12/2014.
 */
public class IOUtil {
	
	/**
	 * Read the stream into byte array
	 * @param inputStream
	 * @return
	 * @throws IOException
	 */
    public static byte[] readData(InputStream inputStream) {
        try {
			return readDataNice(inputStream);
		} finally {
        	close(inputStream);
		}
    }
    public static byte[] readDataNice(InputStream inputStream) {
		ByteArrayOutputStream boTemp = null;
        byte[] buffer = null;
        try {
            int read;
			buffer = new byte[8192];
            boTemp = new ByteArrayOutputStream();
            while ((read=inputStream.read(buffer, 0, 8192)) > -1) {
                boTemp.write(buffer, 0, read);
            }
            return boTemp.toByteArray();
        } catch (IOException e) {
			throw new RuntimeException(e);
        }
	}
	
	
    /**
     * Close streams (in or out)
     * @param stream
     */
    public static void close(Closeable stream) {
        if (stream != null) {
            try {
                if (stream instanceof Flushable) {
                    ((Flushable)stream).flush();
                }
                stream.close();
            } catch (IOException e) {
                // When the stream is closed or interupted, can ignore this exception
            }
        }
    }
	public static void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                // When the conn is closed or interupted, can ignore this exception
			}
        }
		
	}
    public static void close(ResultSet rs) {
    	if (rs != null) {
    		try {
    			rs.close();
    		} catch (SQLException e) {
    			// When the file is closed already, can ignore this exception
    		}
    	}
    }
    public static void close(PreparedStatement ps) {
    	if (ps != null) {
    		try {
    			ps.close();
    		} catch (SQLException e) {
    			// When the file is closed already, can ignore this exception
    		}
    	}
    }
	
	/**
	 * Will close stream
	 * @param in
	 * @param charSet
	 * @return
	 */
	public static String toString(InputStream in, String charSet) {
		return inputStreamToString_force(in, charSet);
	}
	
	/**
	 * Will close stream
	 * @param in
	 * @param charSet
	 * @return
	 */
	public static String inputStreamToString_force(InputStream in, String charSet) {
		try {
			return inputStreamToString(in, charSet);
		} catch (IOException e) {
			return null;
		}
	}
    /**
     * Reads in whole input stream and returns as a string<br>
     * Will close stream
     * @param in The input stream to read in, will be closed 
     * 				by this method at finish
     * @param charSet charset to convert the input bytes into string
     * @return the result string
     * @throws IOException
     */
	public static String inputStreamToString(InputStream in, String charSet) throws IOException {
		InputStreamReader inputStreamReader = null;
		try {
			inputStreamReader = charSet == null? new InputStreamReader(in) : new InputStreamReader(in, charSet);
			return toString(inputStreamReader);
		} catch (UnsupportedEncodingException e1) {
			throw new RuntimeException(e1);
		} finally {
			close(in);
		}
	}
	
    /**
     * Reads in whole input stream and returns as a string
     * @param reader The input reader to read in, will be closed 
     * 				by this method at finish
     * @return the result string
     * @throws IOException
     */
	public static String toString(Reader reader) {
		try {
			StringBuilder sb = new StringBuilder();
			char[] buffer = new char[4096];
			for (int read; (read = reader.read(buffer)) > -1;) {
				sb.append(buffer, 0, read);
			}
			return sb.toString();
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			close(reader);
		}
	}
	/**
	 * Read the input stream and write to output stream
	 * @param inputStream
	 * @param out
	 * @return
	 * @throws IOException
	 */
    public static long connect(InputStream inputStream, OutputStream out) throws IOException {
        try {
            return dump(inputStream, out);
        } finally {
            close(inputStream);
        }
    }
    
    private static long dump(InputStream inputStream, OutputStream out) throws IOException {
        long total = 0;
        int read;
        int bufferSize = 8192;
        byte[] buffer = new byte[bufferSize];
        while ((read=inputStream.read(buffer, 0, bufferSize)) > -1) {
            out.write(buffer, 0, read);
            total+=read;
        }
        out.flush();
        return total;
    }
}

+ 0 - 407
hos-broker/src/main/java/com/yihu/hos/broker/util/SigarUtil.java

@ -1,407 +0,0 @@
    package com.yihu.hos.broker.util;
    import com.yihu.hos.core.log.Logger;
    import com.yihu.hos.core.log.LoggerFactory;
    import org.hyperic.sigar.*;
    import java.net.InetAddress;
    import java.net.URL;
    import java.net.UnknownHostException;
    import java.util.*;
    /**
     * sigar 服务器硬件指标 工具类
     *
     * @author HZY
     * @vsrsion 1.0
     * Created at 2016/10/10.
     */
    public class SigarUtil {
        static private final Logger logger = LoggerFactory.getLogger(SigarUtil.class);
        public final static Sigar sigar = initSigar();
        private static Sigar initSigar() {
            try {
                //此处只为得到依赖库文件的目录,可根据实际项目自定义
                String sigarLibPath = SigarUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
                String path = System.getProperty("java.library.path");
                //为防止java.library.path重复加,此处判断了一下
                if (!path.contains(sigarLibPath)) {
                    if (isOSWin()) {
                        path += ";" + sigarLibPath;
                    } else {
                        path += ":" + sigarLibPath;
                    }
                    System.setProperty("java.library.path", path);
                }
                return new Sigar();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        public URL getUrl() {
            return this.getClass().getResource("/");
        }
    //    public static void main(String[] args) {
    //        DecimalFormat df = new DecimalFormat("#0.00");
    //        double d = 0;
    //        String f = df.format(d);
    //        double e = Double.parseDouble(String.format("%.2f", d));
    //        logger.info(e);
    //    }
        /**
         * 是否是windows系统
         *
         * @return
         */
        public static boolean isOSWin() {//OS 版本判断
            String OS = System.getProperty("os.name").toLowerCase();
            if (OS.indexOf("win") >= 0) {
                return true;
            } else return false;
        }
        /* ==================================================   以下是打印测试   ========================================================================== */
        /**
         * 系统信息  jvm等
         *
         * @throws UnknownHostException
         */
        public static String getHostName(){
            try {
                NetInfo netInfo = sigar.getNetInfo();
                String hostName = netInfo.getHostName();
                return hostName;
            } catch (SigarException e) {
                e.printStackTrace();
            }
            return "";
        }
        public static String getHost(){
            try {
                NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(null);
                String ip = netInterfaceConfig.getAddress();
                return ip;
            } catch (SigarException e) {
                e.printStackTrace();
            }
            return "unknowHost";
        }
        private static void property() throws UnknownHostException {
            Runtime r = Runtime.getRuntime();
            Properties props = System.getProperties();
            InetAddress addr;
            addr = InetAddress.getLocalHost();
            String ip = addr.getHostAddress();
            Map<String, String> map = System.getenv();
            String userName = map.get("USERNAME");// 获取用户名
            String computerName = map.get("COMPUTERNAME");// 获取计算机名
            String userDomain = map.get("USERDOMAIN");// 获取计算机域名
            logger.info("用户名:    " + userName);
            logger.info("计算机名:    " + computerName);
            logger.info("计算机域名:    " + userDomain);
            logger.info("本地ip地址:    " + ip);
            logger.info("本地主机名:    " + addr.getHostName());
            logger.info("JVM可以使用的总内存:    " + r.totalMemory());
            logger.info("JVM可以使用的剩余内存:    " + r.freeMemory());
            logger.info("JVM可以使用的处理器个数:    " + r.availableProcessors());
            logger.info("Java的运行环境版本:    " + props.getProperty("java.version"));
            logger.info("Java的运行环境供应商:    " + props.getProperty("java.vendor"));
            logger.info("Java供应商的URL:    " + props.getProperty("java.vendor.url"));
            logger.info("Java的安装路径:    " + props.getProperty("java.home"));
            logger.info("Java的虚拟机规范版本:    " + props.getProperty("java.vm.specification.version"));
            logger.info("Java的虚拟机规范供应商:    " + props.getProperty("java.vm.specification.vendor"));
            logger.info("Java的虚拟机规范名称:    " + props.getProperty("java.vm.specification.name"));
            logger.info("Java的虚拟机实现版本:    " + props.getProperty("java.vm.version"));
            logger.info("Java的虚拟机实现供应商:    " + props.getProperty("java.vm.vendor"));
            logger.info("Java的虚拟机实现名称:    " + props.getProperty("java.vm.name"));
            logger.info("Java运行时环境规范版本:    " + props.getProperty("java.specification.version"));
            logger.info("Java运行时环境规范供应商:    " + props.getProperty("java.specification.vender"));
            logger.info("Java运行时环境规范名称:    " + props.getProperty("java.specification.name"));
            logger.info("Java的类格式版本号:    " + props.getProperty("java.class.version"));
            logger.info("Java的类路径:    " + props.getProperty("java.class.path"));
            logger.info("加载库时搜索的路径列表:    " + props.getProperty("java.library.path"));
            logger.info("默认的临时文件路径:    " + props.getProperty("java.io.tmpdir"));
            logger.info("一个或多个扩展目录的路径:    " + props.getProperty("java.ext.dirs"));
            logger.info("操作系统的名称:    " + props.getProperty("os.name"));
            logger.info("操作系统的构架:    " + props.getProperty("os.arch"));
            logger.info("操作系统的版本:    " + props.getProperty("os.version"));
            logger.info("文件分隔符:    " + props.getProperty("file.separator"));
            logger.info("路径分隔符:    " + props.getProperty("path.separator"));
            logger.info("行分隔符:    " + props.getProperty("line.separator"));
            logger.info("用户的账户名称:    " + props.getProperty("user.name"));
            logger.info("用户的主目录:    " + props.getProperty("user.home"));
            logger.info("用户的当前工作目录:    " + props.getProperty("user.dir"));
        }
        /**
         * 内存信息
         *
         * @return 返回单位 :G
         * @throws SigarException
         */
        public static Map<String, Object> memory() throws SigarException {
            Mem mem = sigar.getMem();
            Swap swap = sigar.getSwap();
            Map<String, Object> memory = new HashMap<>();
            memory.put("total", getDouble((double)mem.getTotal() / 1024L / 1024L / 1024L));
            memory.put("used",  getDouble((double)mem.getUsed() / 1024L / 1024L / 1024L));
            memory.put("free",  getDouble((double)mem.getFree() / 1024L / 1024L / 1024L));
            memory.put("freePerc", getDouble(mem.getFreePercent()));
            memory.put("usedPerc", getDouble(mem.getUsedPercent()));
            //交换区
            memory.put("swapTotal", getDouble((double)swap.getTotal() / 1024L / 1024L / 1024L));
            memory.put("swapUsed",  getDouble((double)swap.getUsed() / 1024L / 1024L / 1024L));
            memory.put("swapFree", getDouble((double) swap.getFree() / 1024L / 1024L / 1024L));
            return memory;
        }
        /**
         * cpu使用情况
         *
         * @return
         * @throws SigarException
         */
        public static Map<String, Object> cpu()  {
            Map<String, Object> cpuMap = new HashMap<>();
            try {
                Cpu timer = sigar.getCpu();
                CpuInfo infos[] = sigar.getCpuInfoList();
                Cpu cpu = sigar.getCpu();
                ThreadCpu threadCpu = sigar.getThreadCpu();
                CpuInfo[] cpuInfoList = sigar.getCpuInfoList();
                CpuPerc cpuPerc = sigar.getCpuPerc();
                CpuInfo info1 = infos[0];
                //cpu信息
                cpuMap.put("quantity", infos.length);
                cpuMap.put("model", info1.getModel());// CPU型号
                cpuMap.put("totalCores", info1.getTotalCores());// CPU逻辑个数
                cpuMap.put("totalSockets", info1.getTotalSockets());// CPU物理个数
                cpuMap.put("Mhz", info1.getMhz());
                cpuMap.put("cores",info1.getCoresPerSocket());//核数
                long cacheSize = info1.getCacheSize();
                if (cacheSize != Sigar.FIELD_NOTIMPL) {
                    cpuMap.put("cache",info1.getCacheSize());//核数
                }
                //cpu使用率
                cpuMap.put("timer",timer.getUser());//核数
                cpuMap.put("totalPerc", getDouble(cpuPerc.getCombined() * 100));
                cpuMap.put("userPerc", getDouble(cpuPerc.getUser() * 100));
                cpuMap.put("sysPerc", getDouble(cpuPerc.getSys() * 100));
                cpuMap.put("wait", getDouble(cpuPerc.getWait() * 100));
                cpuMap.put("nice", getDouble(cpuPerc.getNice() * 100));
                cpuMap.put("freePerc", getDouble(cpuPerc.getIdle() * 100));
            } catch (SigarException e){
                e.printStackTrace();
            }
            return cpuMap;
        }
        /**
         * 操作系统信息
         */
        private static void os() {
            OperatingSystem OS = OperatingSystem.getInstance();
            // 操作系统内核类型如: 386、486、586等x86
            logger.info("操作系统:    " + OS.getArch());
            logger.info("操作系统CpuEndian():    " + OS.getCpuEndian());//
            logger.info("操作系统DataModel():    " + OS.getDataModel());//
            // 系统描述
            logger.info("操作系统的描述:    " + OS.getDescription());
            // 操作系统类型
            // logger.info("OS.getName():    " + OS.getName());
            // logger.info("OS.getPatchLevel():    " + OS.getPatchLevel());//
            // 操作系统的卖主
            logger.info("操作系统的卖主:    " + OS.getVendor());
            // 卖主名称
            logger.info("操作系统的卖主名:    " + OS.getVendorCodeName());
            // 操作系统名称
            logger.info("操作系统名称:    " + OS.getVendorName());
            // 操作系统卖主类型
            logger.info("操作系统卖主类型:    " + OS.getVendorVersion());
            // 操作系统的版本号
            logger.info("操作系统的版本号:    " + OS.getVersion());
        }
        private static void who() throws SigarException {
            Who who[] = sigar.getWhoList();
            if (who != null && who.length > 0) {
                for (int i = 0; i < who.length; i++) {
                    // logger.info("当前系统进程表中的用户名" + String.valueOf(i));
                    Who _who = who[i];
                    logger.info("用户控制台:    " + _who.getDevice());
                    logger.info("用户host:    " + _who.getHost());
                    // logger.info("getTime():    " + _who.getTime());
                    // 当前系统进程表中的用户名
                    logger.info("当前系统进程表中的用户名:    " + _who.getUser());
                }
            }
        }
        /**
         * 硬盘信息
         */
        public static List<Map<String, Object>> file() {
            List<Map<String, Object>> files = new ArrayList<>();
            Map<String, Object> fileMap = null;
            FileSystem fslist[] = new FileSystem[0];
            try {
                fslist = sigar.getFileSystemList();
                for (int i = 0; i < fslist.length; i++) {
                    FileSystem fs = fslist[i];
                    fileMap = new HashMap<>();
                    switch (fs.getType()) {
                        case 0: // TYPE_UNKNOWN :未知
                            break;
                        case 1: // TYPE_NONE
                            break;
                        case 2: // TYPE_LOCAL_DISK : 本地硬盘
                            FileSystemUsage usage = sigar.getFileSystemUsage(fs.getDirName());
                            fileMap.put("devName", fs.getDevName());
                            fileMap.put("dirName", fs.getDirName());
                            fileMap.put("flags", fs.getFlags());
                            fileMap.put("sysTypeName", fs.getSysTypeName());
                            fileMap.put("typeName", fs.getTypeName());
                            fileMap.put("type", fs.getType());
                            fileMap.put("total", usage.getTotal() / 1024L / 1024L);
                            fileMap.put("free", usage.getFree() / 1024L / 1024L);
                            fileMap.put("aVall", usage.getAvail() / 1024L / 1024L);//可用大小
                            fileMap.put("used", usage.getUsed() / 1024L / 1024L);
                            fileMap.put("usePercent", usage.getUsePercent() * 100D);
                            fileMap.put("diskRead", usage.getDiskReads());
                            fileMap.put("diskWrite", usage.getDiskWrites());
                            files.add(fileMap);
                            break;
                        case 3:// TYPE_NETWORK :网络
                            break;
                        case 4:// TYPE_RAM_DISK :闪存
                            break;
                        case 5:// TYPE_CDROM :光驱
                            break;
                        case 6:// TYPE_SWAP :页面交换
                            break;
                    }
                }
            } catch (SigarException e) {
                e.printStackTrace();
            }
            return files;
        }
        /**
         * 网络信息
         *
         * @throws Exception
         */
        public static Map<String, Object> net() {
            Map<String, Object> netMap = new HashMap<>();
            NetInterfaceConfig netConfig = null;
            try {
                netConfig = sigar.getNetInterfaceConfig(null);
                NetInterfaceStat netIfStat = sigar.getNetInterfaceStat(netConfig.getName());
                Map<String, Object> bps = populate(netConfig.getName());//bps
                netMap.put("name", netConfig.getName());
                netMap.put("address", netConfig.getAddress());
                netMap.put("mac", netConfig.getHwaddr());
                netMap.put("type", netConfig.getType());
                netMap.put("broadcast", netConfig.getBroadcast());
                netMap.put("netmask", netConfig.getNetmask());
                netMap.put("rxPackets", netIfStat.getRxPackets());
                netMap.put("txPackets", netIfStat.getTxPackets());
                netMap.put("rxBytes", netIfStat.getRxBytes());
                netMap.put("txBytes", netIfStat.getTxBytes());
                netMap.put("txPackets", netIfStat.getTxPackets());
                netMap.put("txbps", bps.get("txbps"));
                netMap.put("rxbps", bps.get("rxbps"));
            } catch (SigarException e) {
                e.printStackTrace();
            }
            return netMap;
        }
        private static void ethernet() throws SigarException {
            String[] ifaces = sigar.getNetInterfaceList();
            for (int i = 0; i < ifaces.length; i++) {
                NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(ifaces[i]);
                if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0
                        || NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())
                        || NetFlags.ANY_ADDR.equals(cfg.getAddress())) {
                    continue;
                }
                if ((cfg.getFlags() & 1L) <= 0L) {
                    System.out.println("!IFF_UP...skipping getNetInterfaceStat");
                    continue;
                }
                logger.info(cfg.getName() + "IP地址:" + cfg.getAddress());// IP地址
                logger.info(cfg.getName() + "网关广播地址:" + cfg.getBroadcast());// 网关广播地址
                logger.info(cfg.getName() + "网卡MAC地址:" + cfg.getHwaddr());// 网卡MAC地址
                logger.info(cfg.getName() + "子网掩码:" + cfg.getNetmask());// 子网掩码
                logger.info(cfg.getName() + "网卡描述信息:" + cfg.getDescription());// 网卡描述信息
                logger.info(cfg.getName() + "网卡类型" + cfg.getType());//
            }
        }
        /**
         * 網絡傳輸速率 bps
         *
         * @param name
         * @throws SigarException
         */
        public static Map<String, Object> populate(String name)
                throws SigarException {
            Map<String, Object> bps = new HashMap<>();
            try {
                long start = System.currentTimeMillis();
                NetInterfaceStat statStart = sigar.getNetInterfaceStat(name);
                long rxBytesStart = statStart.getRxBytes();
                long txBytesStart = statStart.getTxBytes();
                Thread.sleep(1000);
                long end = System.currentTimeMillis();
                NetInterfaceStat statEnd = sigar.getNetInterfaceStat(name);
                long rxBytesEnd = statEnd.getRxBytes();
                long txBytesEnd = statEnd.getTxBytes();
                long rxbps = ((rxBytesEnd - rxBytesStart) * 8 / 1024) / ((end - start) / 1000);
                long txbps = ((txBytesEnd - txBytesStart) * 8 / 1024) / ((end - start) / 1000);
                bps.put("rxbps", rxbps);
                bps.put("txbps", txbps);
                logger.info("#######rxbps: " + rxbps + " txbps: " + txbps);
            } catch (SigarException e) {
            } catch (Exception e) {
            }
            return bps;
        }
        /**
         * 获取两位小数的double值
         * @param value
         * @return
         */
        public static double getDouble(double value){
            String total = String.format("%.2f", value );
            return Double.parseDouble(total);
        }
    }

+ 0 - 167
hos-broker/src/main/java/com/yihu/hos/broker/util/XMLUtil.java

@ -1,167 +0,0 @@
package com.yihu.hos.broker.util;
import org.w3c.dom.*;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.util.Map;
public class XMLUtil {
//    public static void main(String[] args) {
//        String filePath = "e://test.xml";
//        XMLUtil xmlUtil = new XMLUtil();
//        xmlUtil.parseXml(filePath);
//    }
    public static void parseXml(String filePath) {
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            dBuilder.setEntityResolver(new IgnoreDTDEntityResolver());
            Document doc = dBuilder.parse(xmlFile);
            Element eltName = doc.createElement("schema");
            Attr attr = doc.createAttribute("name");
            attr.setValue("22222");
            Attr attr2 = doc.createAttribute("checkSQLschema");
            attr2.setValue("true");
            Attr attr3 = doc.createAttribute("sqlMaxLimit");
            attr3.setValue("10");
            Attr attr4 = doc.createAttribute("dataNode");
            attr4.setValue("T2222");
            eltName.setAttributeNode(attr);
            eltName.setAttributeNode(attr2);
            eltName.setAttributeNode(attr3);
            eltName.setAttributeNode(attr4);
            Node stNode = doc.getElementsByTagName("mycat:schema").item(0);
            stNode = addElement(stNode, eltName);
            writeToXml(doc, filePath);
            Element rootElement = doc.getDocumentElement();
            NodeList nodeList = rootElement.getElementsByTagName("schema");
            if (nodeList != null) {
                for (int i = 0; i < nodeList.getLength(); i++) {
                    Element element = (Element) nodeList.item(i);
                    String name = element.getAttribute("name");
                    System.out.println(name);
                }
            }
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
    public static Document parseXml2Doc(String filePath) {
        Document doc = null;
        File xmlFile = new File(filePath);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        try {
            dBuilder = dbFactory.newDocumentBuilder();
            dBuilder.setEntityResolver(new IgnoreDTDEntityResolver());
            doc = dBuilder.parse(xmlFile);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return doc;
    }
    /**
     *  添加节点
     * @param stNode      基节点
     * @param childNode   要新增的子节点
     * @return
     */
    public static Node addElement(Node stNode, Element childNode) {
        stNode.appendChild(childNode);
        return stNode;
    }
    /**
     * 删除子节点
     * @param node        父节点
     * @param childNode  要删除的子节点
     */
    public static void deleteElement(Node node, Element childNode) {
        node.removeChild(childNode);
    }
    /**
     * //TODO 不需要
     * 修改子节点
     * @param doc
     */
    public static void updateElementValue(Document doc) {
        NodeList mycatNode = doc.getElementsByTagName("mycat:schema");
        Element emp = null;
        //loop for each employee
        for (int i = 0; i < mycatNode.getLength(); i++) {
            emp = (Element) mycatNode.item(i);
            Node name = emp.getElementsByTagName("name").item(0).getFirstChild();
            name.setNodeValue(name.getNodeValue().toUpperCase());
        }
    }
    /**
     * 修改节点属性
     * @param element   要修改的节点
     * @param updateMap 修改的节点属性
     */
    public static Element updateAttributeValue(Element element ,Map<String,String> updateMap) {
        for (Map.Entry<String, String> entry : updateMap.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            element.setAttribute(key,value);
        }
        return element;
    }
    /**
     * 将修改完的xml保存
     *
     * @param doc       修改后的xml
     * @param rptdesign xml的保存路径
     */
    public static boolean writeToXml(Document doc, String rptdesign) {
        boolean succ = false;
        try {
            OutputStream fileoutputStream = new FileOutputStream(rptdesign);
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer();
            transformer.setOutputProperty("indent" ,  "yes" );
            System.out.println(doc.getDoctype().getPublicId());
            DOMSource source = new DOMSource(doc);
            //添加解析时忽略的dtd引用
            transformer.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_SYSTEM, doc.getDoctype().getSystemId());
            StreamResult result = new StreamResult(fileoutputStream);
            transformer.transform(source, result);
            succ = true;
        } catch (Exception e) {
            System.out.println("Can't write to file: " + rptdesign);
            e.printStackTrace();
        }
        return succ;
    }
   static class IgnoreDTDEntityResolver implements EntityResolver {
        @Override
        public InputSource resolveEntity(String arg0, String arg1) throws SAXException, IOException {
            return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
        }
    }
}

+ 0 - 14
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/F0.java

@ -1,14 +0,0 @@
package com.yihu.hos.broker.util.funct;
/**
 * Represent a function that accept no parameter and return value
 * @param <T> The return value
 */
public interface F0<T> {
    /**
     * Evaluate or execute the function
     * @return Result of execution
     */
    T e();
}

+ 0 - 15
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/F1.java

@ -1,15 +0,0 @@
package com.yihu.hos.broker.util.funct;
/**
 * Represent a function that accept one parameter and return value
 * @param <A> The only parameter
 * @param <T> The return value
 */
public interface F1<A, T> {
    /**
     * Evaluate or execute the function
     * @param obj The parameter
     * @return Result of execution
     */
	T e(A obj);
}

+ 0 - 5
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/F2.java

@ -1,5 +0,0 @@
package com.yihu.hos.broker.util.funct;
public interface F2<A, B, T>{
	T e(A a, B b);
}

+ 0 - 45
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/Fs.java

@ -1,45 +0,0 @@
package com.yihu.hos.broker.util.funct;
import java.util.Collection;
import java.util.concurrent.atomic.AtomicReference;
/**
 * The utility that employ idea of functional programming
 *
 */
@SuppressWarnings({"unchecked", "rawtypes"})
public class Fs extends FsGenerated {
	
    public static Runnable runnable(final P0 action) {
        return new Runnable() {
            public void run() {
                action.e();
            }
        };
    }
	
	/**
	 * Just store the object to collection
	 * @param col
	 * @return
	 */
    public static <A> P1<A> store(final Collection<A> col) {
        return new P1<A>() {public void e(A a) {
            col.add(a);
        }};
    }
    
	public static <A> P1<A> setter(
			final AtomicReference<A> ref) {
		return new P1<A>() {public void e(A obj) {
			ref.set(obj);
		}};
	}
	
	public static <A> void invokeAll(final Collection<P1<A>> col, A a) {
		for (P1<A> p1 : col) {
			p1.e(a);
		}
	}
}

+ 0 - 40
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/FsGenerated.java

@ -1,40 +0,0 @@
package com.yihu.hos.broker.util.funct;
public class FsGenerated {
	/**
	 * Convert from a p0 to p1
	 * @return p1
	 */
	public static <A> P1<A> p1(final P0 p0) {
		return new P1<A>(){public void e(final A a) {
			p0.e();
		}};
	}
	
	/**
	 * Call to p and return fixed value
	 * @param p1 the function to call before return value
	 * @param ret the fixed value to return
	 * @return ret
	 */
	public static <A, R> F1<A, R> f1(final P1<A> p1, final R ret) {
		return new F1<A, R>(){public R e(final A a) {
			p1.e(a);
			return ret;
		}};
	}
	
	/**
	 * Call to p and return fixed value
	 * @param p2 the function to call before return value
	 * @param ret the fixed value to return
	 * @return ret
	 */
	public static <A, B, R> F2<A, B, R> f2(final P2<A, B> p2, final R ret) {
		return new F2<A, B, R>(){public R e(final A a, final B b) {
			p2.e(a, b);
			return ret;
		}};
	}
}

+ 0 - 5
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P0.java

@ -1,5 +0,0 @@
package com.yihu.hos.broker.util.funct;
public interface P0 {
	void e();
}

+ 0 - 11
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P1.java

@ -1,11 +0,0 @@
package com.yihu.hos.broker.util.funct;
/**
 * Function that accept 1 objects and return nothing
 * @author QuanLA
 *
 * @param <A>
 */
public interface P1<A> {
	void e(A obj);
}

+ 0 - 12
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P2.java

@ -1,12 +0,0 @@
package com.yihu.hos.broker.util.funct;
/**
 * Function that accept 2 objects and return nothing
 * @author QuanLA
 *
 * @param <A>
 * @param <B>
 */
public interface P2<A, B> {
	void e(A a, B b);
}

+ 0 - 5
hos-broker/src/main/java/com/yihu/hos/broker/util/funct/P3.java

@ -1,5 +0,0 @@
package com.yihu.hos.broker.util.funct;
public interface P3<A, B, C> {
	void e(A a, B b, C c);
}

+ 0 - 65
hos-broker/src/main/java/com/yihu/hos/broker/util/lang/AggressiveClassLoader.java

@ -1,65 +0,0 @@
package com.yihu.hos.broker.util.lang;
import java.util.HashSet;
import java.util.Set;
/**
 * Load all classes it can, leave the rest to the Parent ClassLoader
 */
public abstract class AggressiveClassLoader extends ClassLoader {
	Set<String> loadedClasses = new HashSet<>();
	Set<String> unavaiClasses = new HashSet<>();
    private ClassLoader parent = AggressiveClassLoader.class.getClassLoader();
    @Override
	public Class<?> loadClass(String name) throws ClassNotFoundException {
		if (loadedClasses.contains(name) || unavaiClasses.contains(name)) {
			return super.loadClass(name); // Use default CL cache
		}
		byte[] newClassData = loadNewClass(name);
		if (newClassData != null) {
			loadedClasses.add(name);
			return loadClass(newClassData, name);
		} else {
			unavaiClasses.add(name);
			return parent.loadClass(name);
		}
	}
//    public AggressiveClassLoader setParent(ClassLoader parent) {
//        this.parent = parent;
//        return this;
//    }
	
	/**
	 * Handle exception
	 * @param name
	 * @return
	 */
	public Class<?> load(String name) {
		try {
			return loadClass(name);
		} catch (ClassNotFoundException e) {
			throw new RuntimeException(e);
		}
	}
	
	protected abstract byte[] loadNewClass(String name);
	public Class<?> loadClass(byte[] classData, String name) {
		Class<?> clazz = defineClass(name, classData, 0, classData.length);
		if (clazz != null) {
			if (clazz.getPackage() == null) {
				definePackage(name.replaceAll("\\.\\w+$", ""), null, null, null, null, null, null, null);
			}
			resolveClass(clazz);
		}
		return clazz;
	}
	public static String toFilePath(String name) {
		return name.replaceAll("\\.", "/") + ".class";
	}
}

+ 0 - 110
hos-broker/src/main/java/com/yihu/hos/broker/util/lang/DynamicClassLoader.java

@ -1,110 +0,0 @@
package com.yihu.hos.broker.util.lang;
//import qj.util.FileUtil;
//import qj.util.IOUtil;
//import qj.util.funct.F1;
import com.yihu.hos.broker.util.FileUtil;
import com.yihu.hos.broker.util.IOUtil;
import com.yihu.hos.broker.util.funct.F1;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
public class DynamicClassLoader extends AggressiveClassLoader {
    LinkedList<F1<String, byte[]>> loaders = new LinkedList<>();
    public DynamicClassLoader(String... paths) {
        for (String path : paths) {
            File file = new File(path);
            F1<String, byte[]> loader = loader(file);
            if (loader == null) {
                throw new RuntimeException("Path not exists " + path);
            }
            loaders.add(loader);
        }
    }
    @SuppressWarnings("UnusedDeclaration")
    public DynamicClassLoader(Collection<File> paths) {
        for (File file : paths) {
            F1<String, byte[]> loader = loader(file);
            if (loader == null) {
                throw new RuntimeException("Path not exists " + file.getPath());
            }
            loaders.add(loader);
        }
    }
    public static F1<String, byte[]> loader(File file) {
        if (!file.exists()) {
            return null;
        } else if (file.isDirectory()) {
            return dirLoader(file);
        } else {
            try {
                final JarFile jarFile = new JarFile(file);
                return jarLoader(jarFile);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
    private static File findFile(String filePath, File classPath) {
        File file = new File(classPath, filePath);
        return file.exists() ? file : null;
    }
    public static F1<String, byte[]> dirLoader(final File dir) {
        return filePath -> {
            File file = findFile(filePath, dir);
            if (file == null) {
                return null;
            }
            return FileUtil.readFileToBytes(file);
        };
    }
    private static F1<String, byte[]> jarLoader(final JarFile jarFile) {
        return new F1<String, byte[]>() {
            public byte[] e(String filePath) {
                ZipEntry entry = jarFile.getJarEntry(filePath);
                if (entry == null) {
                    return null;
                }
                try {
                    return IOUtil.readData(jarFile.getInputStream(entry));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            @Override
            protected void finalize() throws Throwable {
                IOUtil.close(jarFile);
                super.finalize();
            }
        };
    }
    @Override
    protected byte[] loadNewClass(String name) {
//		System.out.println("Loading class " + name);
        for (F1<String, byte[]> loader : loaders) {
            byte[] data = loader.e(AggressiveClassLoader.toFilePath(name));
            if (data != null) {
                return data;
            }
        }
        return null;
    }
}

+ 0 - 28
hos-broker/src/main/java/com/yihu/hos/broker/util/lang/ExceptingClassLoader.java

@ -1,28 +0,0 @@
package com.yihu.hos.broker.util.lang;
import com.yihu.hos.broker.util.funct.F1;
/**
 * This class loader will not load certain classes, instead delegate to parent
 * class loader to do the job
 */
@SuppressWarnings("UnusedDeclaration")
public class ExceptingClassLoader extends DynamicClassLoader {
	private F1<String, Boolean> except;
	public ExceptingClassLoader(F1<String, Boolean> except, String... paths) {
		super(paths);
		this.except = except;
	}
	@Override
	protected byte[] loadNewClass(String name) {
		if (except.e(name)) {
            return null;
		}
		return super.loadNewClass(name);
	}
}

+ 0 - 19
hos-broker/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -1,19 +0,0 @@
{
  "properties": [
    {
      "name": "hos.arbiter.enable",
      "type": "java.lang.String",
      "description": "Description for hos.arbiter.enable."
    },
    {
      "name": "hos.arbiter.url",
      "type": "java.lang.String",
      "description": "Description for hos.arbiter.url."
    },
    {
      "name": "hos.timer.period",
      "type": "java.lang.String",
      "description": "Description for hos.timer.period."
    }
  ]
}

+ 0 - 107
hos-broker/src/main/resources/application.yml

@ -1,107 +0,0 @@
spring:
  application:
    name: HosBrokerServer
server:
  port: 8099
  contextPath:
  sessionTimeout:  300
security:
  basic:
    enabled: false
# the name of Camel
camel:
  springboot:
    name: HosBrokerServer
---
spring:
  profiles: dev
  activemq:
    broker-url: tcp://172.19.103.57:61616
    user: admin
    password: admin
  data:
    mongodb:
      host: 172.19.103.57
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: log
      gridFsDatabase: dfs
eureka:
  client:
    serviceUrl:
      defaultZone: http://192.168.1.221:8761/eureka/
log:
  path: D://logs/logback/dev
  level: info
hos:
  filesystem:
    url: http://172.19.103.57:9010/dfs/file
  arbiter:
    enable: true
    url: http://172.19.103.57:10135
  rest:
    url: http://172.19.103.57:8088
  timer:
      period: 10000
  tenant:
    name: jkzl
  mycat:
    path: /usr/local/mycat/   ##mycat的安装目录
  #jcraft shell操作
  jcraft:
    host: 172.19.103.57
    port: 22
    user: root
    password: ceshi
  https:
    enable: false
---
spring:
  profiles: test
  activemq:
    broker-url: tcp://172.19.103.42:61616
    user: admin
    password: admin
  data:
    mongodb:
      host: 172.19.103.42
      port: 27017
      username: esb
      password: esb
      authenticationDatabase: admin
      database: log
      gridFsDatabase: dfs
eureka:
  client:
    serviceUrl:
      defaultZone: http://172.19.103.73:8761/eureka/
log:
  path: /usr/local/esb/logs/logback/broker
  level: info
hos:
  filesystem:
    url: http://172.19.103.37:9010/dfs/file
  arbiter:
    enable: true
    url: http://172.19.103.37:10135
  rest:
    url: http://172.19.103.37:8088
  timer:
      period: 10000
  tenant:
    name: jkzl
  mycat:
    path: /usr/local/mycat/   ##mycat的安装目录
  #jcraft shell操作
  jcraft:
    host: 172.19.103.37
    port: 22
    user: root
    password: ceshi
  https:
    enable: false

+ 0 - 0
hos-broker/src/main/resources/jndi.properties


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff