Giter Site home page Giter Site logo

archguard / archguard Goto Github PK

View Code? Open in Web Editor NEW
585.0 585.0 96.0 18.9 MB

ArchGuard is a architecture workbench, also for architecture governance, which can analysis architecture in container, component, code level, create architecure fitness functions, and anaysis system dependencies..

Home Page: https://archguard.org/

License: MIT License

Dockerfile 0.11% Kotlin 73.56% Java 25.50% Shell 0.04% Go 0.01% C# 0.23% Python 0.01% Scala 0.01% TypeScript 0.48% JavaScript 0.02% C 0.05% Rust 0.01%

archguard's Introduction

ArchGuard backend

CI codecov GitHub release languages Java support License Gitpod Ready-to-Code Maven Central

ArchGuard is an architecture governance tool that can analysis architecture in container, component, code level, database, create architecture fitness functions, and test for architecture rules.

Chinese: ArchGuard 是一个针对于微服务(分布式场景)下的架构工作台/治理工具。它可以帮助架构师、开发人员进行架构自助,自定义架构的洞察、 分析系统间的远程服务依赖情况、数据库依赖、API 依赖等。并根据一些架构治理模型,对现有系统提出改进建议。

Architecture

特性(Features):

  • 设计态
  • 开发态
    • 架构扫描
      • 扫描配置
      • 插件化规则定制
      • 规则化治理:Code Smell, Test Code Smell, SQL Smell, API Smell, Documentation Smell, etc.
    • 架构可视化
      • 基于 C4 模型的可视化分析
        • 上下文:API 服务地图(API 生产者支持语言:Java、Kotlin、C#,API 消费者支持语言:TypeScript/JavaScript、Kotlin、Java 等)
        • 容器分析。数据库地图(支持 MyBatis、JDBI、JPA)
        • 组件分析
        • 代码分析:支持级别模块、包、类、方法四个级别。
      • 高级分析 + 可视化
        • 系统不稳定性模块分析。
        • 容器间:精准测试/变化分析
    • 架构指标(单体DONE,分布式DOING)
      • 体量维度:过大的组件
      • 耦合维度:枢纽组件,过深调用,循环依赖
      • 内聚维度:霰弹式修改
      • 冗余维度:冗余元素,过度泛化
      • 质量维度:测试保护
    • 代码分析
      • CLOCO:代码复杂度 #79
      • SCA 分析
      • OpenAPI 分析
      • Architecture analysis
  • 运行态
    • APM(TODO)
  • 架构工作台

Features:

  • Design State
  • Development state
    • Schema scan
      • Scan configuration
      • Plug-in rule customization
      • Rule-based governance: Code Smell, Test Code Smell, SQL Smell, API Smell, Documentation Smell, etc.
    • Architecture visualization
      • Visual analysis based on C4 model
        • Context: API service map (API producer supported languages: Java, Kotlin, C#, API consumer supported languages: TypeScript/JavaScript, Kotlin, Java, etc.)
        • Container analysis. Database map (support MyBatis, JDBI, JPA)
        • Component analysis
        • Code analysis: supports four levels of modules, packages, classes, and methods.
      • Advanced Analysis + Visualization
        • System instability module analysis.
        • Between containers: precise testing/variation analysis
    • Architecture metrics (single DONE, distributed DOING)
      • Volume dimension: oversize components
      • Coupling dimension: hub components, too deep calls, circular dependencies
      • Cohesive Dimension: Shotgun Modification
      • Redundant dimensions: redundant elements, overgeneralization
      • Quality dimension: test protection
      • Continuous Integration
    • External analysis
      • CLOCO: Code Complexity #79
      • SCA analysis
      • OpenAPI analysis
      • Architecture analysis
  • Running state
    • APM (TODO)
  • Architecture Workbench

Screenshots:

1 2
3 4

Languages parse by Chapi

Features/Languages Java Python Go Kotlin TypeScript C C# Scala C++
http api decl 🆕 🆕 🆕 🆕 🆕
syntax parse 🆕
function call 🆕
arch/package 🆕
real world validate

Custom Backend

case example:

use Scanner CLI you can customize your backend. For more detail, see in: ArchGuardHttpClient

HTTP examples:

POST http://127.0.0.1:8765/scanner/:systemId/reporting/class-items

POST http://127.0.0.1:8765/scanner/:systemId/reporting/openapi

POST http://127.0.0.1:8765/scanner/:systemId/reporting/container-services

POST http://127.0.0.1:8765/scanner/:systemId/reporting/datamap-relations

...

Chat

关注我们:

wechat

欢迎加入我们:

wechat

(PS:如果群满,请添加微信 phodal02,并注明 ArchGuard)

Thanks

JetBrains support:

JetBrains Logo (Main) logo

License

This code is distributed under the MIT license. See LICENSE in this directory.

archguard's People

Contributors

abigail830 avatar cgqaq avatar dozencoder avatar hangliu6 avatar hezhong0711 avatar huld2010 avatar huletw avatar impactcn avatar isixline avatar lianglliu avatar liguangzheng-tw avatar lixiang2-tw avatar phodal avatar poseiden avatar qicaisheng avatar quincik avatar teobler avatar thxno avatar twyunchen avatar victorzeng avatar wizardbyron avatar yoogodong avatar yunzhi-liu avatar zjjay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

archguard's Issues

无法链接私有仓库

Describe the bug
A clear and concise description of what the bug is.
使用的公司的私有仓库,配置了地址和登录的用户名和密码,扫描没有异常,查看日志发现ssl连接有问题
Env (please complete the following information):

  • OS: macos,Docker Desktop 4.7.0 (77141)
  • Env: Docker compose
  • Browser [e.g. edge ]
  • Version [e.g. 98.0.1108.55 (官方内部版本) (x86_64)]

异常信息:

022-04-15 15:38:11.981  INFO 1 --- [pool-1-thread-2] c.t.a.s.domain.system.SystemOperator     : workSpace is: /tmp/archguard17943594146772129611
2022-04-15 15:38:11.981  INFO 1 --- [pool-1-thread-2] c.t.a.s.domain.system.SystemOperator     : workSpace is /tmp/archguard17943594146772129611 repo is: https://coding.xxxxx.com/xxxx/xxx-xxxxx.git
2022-04-15 15:38:12.129  INFO 1 --- [pool-1-thread-2] c.t.a.s.i.command.Processor              : HEAD is now at 6e817eaba 鏃ュ織鎷艰绉诲嚭
2022-04-15 15:38:12.154  INFO 1 --- [pool-1-thread-2] c.t.a.s.i.command.Processor              : Removing scm_git_hot_file.txt
2022-04-15 15:38:12.557  INFO 1 --- [pool-1-thread-2] c.t.a.s.i.command.Processor              : From https://coding.xxxxx.com/xxxx/xxx-xxxxx.git
2022-04-15 15:38:12.557  INFO 1 --- [pool-1-thread-2] c.t.a.s.i.command.Processor              :  * branch                master     -> FETCH_HEAD
2022-04-15 15:38:12.564  INFO 1 --- [pool-1-thread-2] c.t.a.s.i.command.Processor              : Already up to date.
2022-04-15 15:38:12.577  INFO 1 --- [pool-1-thread-2] c.t.a.s.i.command.Processor              : Current branch master is up to date.
2022-04-15 15:38:12.582  INFO 1 --- [pool-8-thread-1] c.t.a.s.d.s.c.sourcecode.SourceCodeTool  : start download scan_sourcecode Tool
2022-04-15 15:38:12.584  INFO 1 --- [pool-8-thread-2] c.t.a.s.d.s.j.tbs.TestBadSmellScanner    : start scan test bad smell
2022-04-15 15:38:12.584  INFO 1 --- [pool-8-thread-2] c.t.a.s.d.s.j.tbs.TestBadsmellTool       : start download scan_test_badsmell tool
2022-04-15 15:38:12.585  INFO 1 --- [pool-8-thread-4] c.t.a.s.d.scanner.git.GitSourceScanner   : start scan git source
2022-04-15 15:38:12.586  INFO 1 --- [pool-8-thread-4] c.t.a.s.d.scanner.git.GitScannerTool     : start download scan_git tool
2022-04-15 15:38:12.801 ERROR 1 --- [pool-8-thread-2] c.t.a.s.d.hubexecutor.ScannerManager     : failed to scan TestBadSmellScanner

javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
        at java.base/sun.security.ssl.SSLSocketImpl.handleEOF(SSLSocketImpl.java:1349) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1188) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1091) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) ~[na:na]
        at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) ~[na:na]
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187) ~[na:na]
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1581) ~[na:na]
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509) ~[na:na]
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246) ~[na:na]
        at java.base/java.net.URL.openStream(URL.java:1140) ~[na:na]
        at com.thoughtworks.archguard.scanner.infrastructure.FileOperator.download(FileOperator.kt:14) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.javaext.tbs.TestBadsmellTool.download(TestBadsmellTool.kt:63) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.javaext.tbs.TestBadsmellTool.prepareTool(TestBadsmellTool.kt:22) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.javaext.tbs.TestBadsmellTool.getTestBadSmellReport(TestBadsmellTool.kt:27) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.javaext.tbs.TestBadSmellScanner.scan(TestBadSmellScanner.kt:31) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.hubexecutor.ScannerManager.execute$lambda-1$lambda-0(ScannerManager.kt:27) ~[classes!/:na]
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
Caused by: java.io.EOFException: SSL peer shut down incorrectly
        at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:167) ~[na:na]
        at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:108) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1180) ~[na:na]
        ... 18 common frames omitted

2022-04-15 15:38:12.801 ERROR 1 --- [pool-8-thread-1] c.t.a.s.d.hubexecutor.ScannerManager     : failed to scan SourceCodeScanner

javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
        at java.base/sun.security.ssl.SSLSocketImpl.handleEOF(SSLSocketImpl.java:1349) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1188) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1091) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) ~[na:na]
        at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) ~[na:na]
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187) ~[na:na]
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1581) ~[na:na]
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509) ~[na:na]
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246) ~[na:na]
        at java.base/java.net.URL.openStream(URL.java:1140) ~[na:na]
        at com.thoughtworks.archguard.scanner.infrastructure.FileOperator.download(FileOperator.kt:14) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.codescan.sourcecode.SourceCodeTool.download(SourceCodeTool.kt:61) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.codescan.sourcecode.SourceCodeTool.prepareTool(SourceCodeTool.kt:38) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.codescan.sourcecode.SourceCodeTool.analyse(SourceCodeTool.kt:24) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.codescan.sourcecode.SourceCodeScanner.scan(SourceCodeScanner.kt:26) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.hubexecutor.ScannerManager.execute$lambda-1$lambda-0(ScannerManager.kt:27) ~[classes!/:na]
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
Caused by: java.io.EOFException: SSL peer shut down incorrectly
        at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:167) ~[na:na]
        at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:108) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1180) ~[na:na]
        ... 18 common frames omitted

2022-04-15 15:38:12.801 ERROR 1 --- [pool-8-thread-4] c.t.a.s.d.hubexecutor.ScannerManager     : failed to scan GitSourceScanner

javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
        at java.base/sun.security.ssl.SSLSocketImpl.handleEOF(SSLSocketImpl.java:1349) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1188) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1091) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) ~[na:na]
        at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) ~[na:na]
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187) ~[na:na]
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1581) ~[na:na]
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509) ~[na:na]
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246) ~[na:na]
        at java.base/java.net.URL.openStream(URL.java:1140) ~[na:na]
        at com.thoughtworks.archguard.scanner.infrastructure.FileOperator.download(FileOperator.kt:14) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.git.GitScannerTool.download(GitScannerTool.kt:78) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.git.GitScannerTool.prepareTool(GitScannerTool.kt:55) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.git.GitScannerTool.getGitReport(GitScannerTool.kt:25) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.scanner.git.GitSourceScanner.scan(GitSourceScanner.kt:25) ~[classes!/:na]
        at com.thoughtworks.archguard.scanner.domain.hubexecutor.ScannerManager.execute$lambda-1$lambda-0(ScannerManager.kt:27) ~[classes!/:na]
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
Caused by: java.io.EOFException: SSL peer shut down incorrectly
        at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:167) ~[na:na]
        at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:108) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1180) ~[na:na]
        ... 18 common frames omitted

2022-04-15 15:38:14.735  INFO 1 --- [pool-8-thread-3] c.t.a.s.d.scanner.git.GitHotFileScanner  : Saved gitHotFiles, systemId=1

访问 http://localhost:11080/ ,网页间断性崩溃

扫描代码库一切正常,通过网页访问http://localhost:11080/ ,网页出现间断性崩溃,未响应,只能重启浏览器,周而复始。
已经做清理浏览器缓存等操作,都没啥改变,请问大家也是这个样子嘛?感谢大佬们的恢回复,抱拳了!!!
image

Plugin [id: 'org.springframework.boot', version: '2.5.10'] was not found in any of the following sources

参考:https://archguard.org/development, 采用Local setup方式

操作步骤

  1. msql 建立
docker pull mysql:8
docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
docker exec -it mysql8 /bin/bash  # 进入 mysql 容器
mysql -uroot -p123456   # 连接Mysql
create database archguard default character set utf8mb4 collate utf8mb4_unicode_ci;  # 创建数据库
  1. 后端启动
git clone https://github.com/archguard/archguard
./gradlew bootrun

问题

  1. ./gradlew bootrun启动后,出现https://services.gradle.org/distributions/gradle-7.4-bin.zip 下载 timeout
    手动下载,上传到公司自己服务器上,修改 gradle 配置文件gradle/wrapper/gradle-wrapper.properties解决
  2. Plugin [id: 'org.springframework.boot', version: '2.5.10'] was not found in any of the following sources详细日志如下
Starting a Gradle Daemon (subsequent builds will be faster)
<-------------> 0% CONFIGURING [2m 47s]
> root project > Resolve dependencies of detachedConfiguration1 > org.springframework.boot.gradle.plugin-2.5.10.pom

FAILURE: Build failed with an exception.

* Where:
Build file '/5g_build/5g_Main/archguard/build.gradle.kts' line: 3

* What went wrong:
Plugin [id: 'org.springframework.boot', version: '2.5.10'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'org.springframework.boot:org.springframework.boot.gradle.plugin:2.5.10')
  Searched in the following repositories:
    maven(https://plugins.gradle.org/m2/)
    Gradle Central Plugin Repository

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 3m 22s

请问这个咋配置下呐?是否可以类似问题1中,手动下载后放在公司服务器上来间接下载呐?但是没找到需要修改哪个源文件。。。

backend服务一直是unhealthy

backend服务一直是unhealthy, docker compose切换到1.29.2也试过了不行

环境:
Mac M1
Docker version 20.10.14, build a224086
docker-compose version 1.29.2, build 5becea4c
image

image

社区的持久发展

我有以下建议:

  1. 能否举行双周会议,明确方向,更多人了解社区发展

  2. issue 发布任务,更多人了解项目需求

分布式架构治理模型

针对分布式架构,比如微服务架构、以及大型组织范围内的分布式系统,进行架构治理的功能。
包括架构评估、度量趋势等

Exception in thread "main" java.lang.StackOverflowError

我下载的最新的代码,再按照demo分析https://gitee.com/thoughtworks/archguard.git这个项目
image
出现如下报错

Apr 09, 2022 5:29:14 PM org.archguard.ident.mysql.MysqlIdentApp analysis
INFO: select id, module_name as moduleName, fanin as fanIn, fanout as fanOut from metric_module where system_id = '' and (fanin > '' or fanout > '') , moduleName limit 10 offset 10
Apr 09, 2022 5:29:14 PM org.archguard.scanner.sourcecode.database.MysqlAnalyser analysisByNode
WARNING: error for ModuleCouplingRepositoryImpl.getCouplingAboveThreshold origin:"select id, module_name as moduleName, fanin as fanIn, fanout as fanOut from metric_module where system_id = :systemId and "+
"(fanin > :moduleFanInThreshold or fanout > :moduleFanOutThreshold) "+
orderSqlPiece+", moduleName limit :limit offset :offset"
new:select id, module_name as moduleName, fanin as fanIn, fanout as fanOut from metric_module where system_id = '' and (fanin > '' or fanout > '') , moduleName limit 10 offset 10
Exception in thread "main" java.lang.StackOverflowError
	at java.base/java.util.regex.Pattern$GroupTail.match(Pattern.java:4841)
	at java.base/java.util.regex.Pattern$Curly.match1(Pattern.java:4419)
	at java.base/java.util.regex.Pattern$Curly.match(Pattern.java:4368)
	at java.base/java.util.regex.Pattern$GroupHead.match(Pattern.java:4791)
	at java.base/java.util.regex.Pattern$Branch.match(Pattern.java:4736)
	at java.base/java.util.regex.Pattern$GroupHead.match(Pattern.java:4791)
	at java.base/java.util.regex.Pattern$Loop.match(Pattern.java:4928)
	at java.base/java.util.regex.Pattern$GroupTail.match(Pattern.java:4850)
	at java.base/java.util.regex.Pattern$BranchConn.match(Pattern.java:4700)
	at java.base/java.util.regex.Pattern$GroupTail.match(Pattern.java:4850)
	at java.base/java.util.regex.Pattern$Curly.match1(Pattern.java:4419)
	at java.base/java.util.regex.Pattern$Curly.match(Pattern.java:4368)
	at java.base/java.util.regex.Pattern$GroupHead.match(Pattern.java:4791)

代码量约12G,出现 ERROR 1 --- [pool-2-thread-4] c.t.a.s.d.hubexecutor.ScannerManager : failed to scan GitSourceScanner

详细日志如下,麻烦大佬帮看下,再次感谢

archguard-backend   | 2022-04-13 00:48:09.218 ERROR 1 --- [pool-2-thread-4] c.t.a.s.d.hubexecutor.ScannerManager     : failed to scan GitSourceScanner
archguard-backend   |
archguard-backend   | org.jdbi.v3.core.statement.UnableToExecuteStatementException: java.sql.BatchUpdateException: Data truncation: Data too long for column 'committer_email' at row 1 [statement:"null", arguments:{positional:{}, named:{}, finder:[]}]
archguard-backend   |   at org.jdbi.v3.core.statement.Batch.execute(Batch.java:86) ~[jdbi3-core-3.10.1.jar!/:3.10.1]
archguard-backend   |   at org.jdbi.v3.core.statement.Script.execute(Script.java:45) ~[jdbi3-core-3.10.1.jar!/:3.10.1]
archguard-backend   |   at com.thoughtworks.archguard.scanner.infrastructure.db.SqlScriptRunner.run(SqlScriptRunner.kt:10) ~[classes!/:na]
archguard-backend   |   at com.thoughtworks.archguard.scanner.infrastructure.db.SqlScriptRunner$$FastClassBySpringCGLIB$$180380bd.invoke(<generated>) ~[classes!/:na]
archguard-backend   |   at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at com.thoughtworks.archguard.scanner.infrastructure.db.SqlScriptRunner$$EnhancerBySpringCGLIB$$71f3dab1.run(<generated>) ~[classes!/:na]
archguard-backend   |   at com.thoughtworks.archguard.scanner.infrastructure.db.GitSourceScanRepositoryImpl.saveGitReport(GitSourceScanRepositoryImpl.kt:36) ~[classes!/:na]
archguard-backend   |   at com.thoughtworks.archguard.scanner.infrastructure.db.GitSourceScanRepositoryImpl$$FastClassBySpringCGLIB$$e0b80fc8.invoke(<generated>) ~[classes!/:na]
archguard-backend   |   at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.16.jar!/:5.3.16]
archguard-backend   |   at com.thoughtworks.archguard.scanner.infrastructure.db.GitSourceScanRepositoryImpl$$EnhancerBySpringCGLIB$$9591c6b2.saveGitReport(<generated>) ~[classes!/:na]
archguard-backend   |   at com.thoughtworks.archguard.scanner.domain.scanner.git.GitSourceScanner.scan(GitSourceScanner.kt:29) ~[classes!/:na]
archguard-backend   |   at com.thoughtworks.archguard.scanner.domain.hubexecutor.ScannerManager.execute$lambda-1$lambda-0(ScannerManager.kt:27) ~[classes!/:na]
archguard-backend   |   at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
archguard-backend   |   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
archguard-backend   |   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
archguard-backend   |   at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
archguard-backend   | Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'committer_email' at row 1
archguard-backend   |   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
archguard-backend   |   at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
archguard-backend   |   at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
archguard-backend   |   at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[na:na]
archguard-backend   |   at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[na:na]
archguard-backend   |   at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.mysql.cj.util.Util.getInstance(Util.java:167) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.mysql.cj.util.Util.getInstance(Util.java:174) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.mysql.cj.jdbc.StatementImpl.executeBatchInternal(StatementImpl.java:892) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:3118) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at com.alibaba.druid.wall.WallFilter.statement_executeBatch(WallFilter.java:546) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:3116) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at com.alibaba.druid.filter.FilterAdapter.statement_executeBatch(FilterAdapter.java:2507) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at com.alibaba.druid.filter.FilterEventAdapter.statement_executeBatch(FilterEventAdapter.java:279) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:3116) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeBatch(StatementProxyImpl.java:202) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at com.alibaba.druid.pool.DruidPooledStatement.executeBatch(DruidPooledStatement.java:803) ~[druid-1.2.8.jar!/:1.2.8]
archguard-backend   |   at org.jdbi.v3.core.statement.SqlLoggerUtil.wrap(SqlLoggerUtil.java:31) ~[jdbi3-core-3.10.1.jar!/:3.10.1]
archguard-backend   |   at org.jdbi.v3.core.statement.Batch.execute(Batch.java:84) ~[jdbi3-core-3.10.1.jar!/:3.10.1]
archguard-backend   |   ... 29 common frames omitted
archguard-backend   | Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'committer_email' at row 1
archguard-backend   |   at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.mysql.cj.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1335) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   at com.mysql.cj.jdbc.StatementImpl.executeBatchInternal(StatementImpl.java:858) ~[mysql-connector-java-8.0.28.jar!/:8.0.28]
archguard-backend   |   ... 40 common frames omitted
archguard-backend   |
archguard-backend   | 2022-04-13 00:48:09.219  INFO 1 --- [pool-1-thread-1] t.a.s.d.a.ArchitectureDependencyAnalysis : ************************************
archguard-backend   | 2022-04-13 00:48:09.219  INFO 1 --- [pool-1-thread-1] t.a.s.d.a.ArchitectureDependencyAnalysis :  Finished level 1 scanners
archguard-backend   | 2022-04-13 00:48:09.219  INFO 1 --- [pool-1-thread-1] t.a.s.d.a.ArchitectureDependencyAnalysis : ************************************

HTTP API 用于扫描上传结果

Is your feature request related to a problem? Please describe.
#30 拆解出来

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

archguard-backend exited with code 139

Describe the bug
docker-compose无法拉起backend容器实例。
image

image

Env (please complete the following information):

  • OS: centos7
  • Env: Docker compose
  • Browser: chrome
  • Version: master branch

Message queue analysis

Is your feature request related to a problem? Please describe.
see Message queue between servcies

Describe the solution you'd like
Message queue map

Describe alternatives you've considered
figure out Kafka caller/callee and message naming

maven 工程扫描失败

问题描述
新增系统时增加maven工程显示扫描失败

版本信息
v1.4.5

操作流程

  1. docker-compose up 启动,启动无异常,数据库等均无报错。
  2. 新增系统
    image

报错截图

image

问题分析

  1. 进入容器查看,项目已经拉下来了。
  2. 看起来好像是临时目录套了两层的问题?而且mvn显示找不到
    image

架构的模型的 DSL

Is your feature request related to a problem? Please describe.
易于阅读的编程的架构(当前架构、目标架构、未来架构)描述方式

Describe the solution you'd like
DSL

Describe alternatives you've considered
JSON Model

Additional context

参考:

需要注意的是: DSL 的 IDE、Web IDE 支持。

从实践的层面,采用 Kotlin 构建 DSL 会有比较好的 IDE 支持。

软件架构是多层次的,架构治理守护也因该如此。

《代码精进之路》一书中,将软件架构划分为业务架构,应用架构、系统架构(我更愿意称职为服务架构)、数据架构、物理架构和运维架构,我觉得还应该补充上技术架构和工程架构。

所以,ArchGuard来说,架构是指什么架构呢?对于开发态来说,也许是在讲应用架构、系统架构和工程架构。

因此,我建议ArchGuard将架构分为应用架构、服务架构、和工程架构更利于使用者对于架构守护的理解。

  • 应用架构:分层架构、六边形架构、洋葱架构、整洁架构、COLA架构等,它评估的维度可能有是否符合架构规范(类似ArchUnit)、架构复杂度等

  • 服务架构(系统架构):单体架构、SOA架构、分布式架构、微服务架构、事件驱动架构等,它评估的维度可能是否符合服务架构规范(如DDD,中台等**),调用链路复杂度(如Skywalking的链路分析),服务依赖关系等

  • 工程架构:Maven,Gradle、Ant 等这些应用工程管理工具,它评估的维度可能是依赖关系,体量,质量,耦合,内聚,冗余,测试,代码质量等

简而言之,架构应该从多个层次去分析才有意义。软件领域谈架构,它范围太广,以至于包含很多东西,不利于理解,或者会产生歧义。划分清晰的架构层次能让我们更好的对某一层次的架构进行设计,实施,守护和治理。

以上是本人的一个小建议,欢迎斧正。(Meet Up 上本来想提出来的,但是思路还不清晰,哈哈哈 )

SSL certificate problem: unable to get local issuer certificate

主要操纵步骤如下:

  1. git clone https://github.com/archguard/archguard
  2. docker-compose -p ArchGuard -f ./docker-compose.yml up -d 所有组件启动OK
  3. 参考 https://archguard.org/ ,访问 http://localhost:11080/, 创建系统
    image
  4. ./docker-compose logs -f 查看日志打印,出现SSL certificate problem: unable to get local issuer certificate错误。可以确定代码仓在机器上可以clone的
    image

查找网上一些解决方法【暂时未解决问题】:
(1)git config --global http.sslVerify false

只能clone master分支

配置分支不起作用,首次clone只能clone master分支。

第二次扫描,会设置git参数 remote.origin.fetch 为配置的分支,但是由于这个分支没有被fetch到,所以会报错。

看了源码确实是这个问题。

服务地图支持RPC调用关系

Is your feature request related to a problem? Please describe.
当前服务地图仅支持HTTP API 调用关系,但对于微服务系统,服务间内部调用主要依赖于RPC调用(如Dubbo,GRPC等),这部分信息比HTTP API的调用关系在评价分布式系统状态时会更加重要

Describe the solution you'd like
增加RPC服务地图支持

Describe alternatives you've considered
可以提供服务地图依赖信息扫描的接口,基于该接口实现各框架的依赖关系扫描的组件,代码实现可以开放交给社区贡献或者使用方基于自身服务情况进行实现

docker-compose 安装之后扫描项目报错

archguard-backend     | 2022-04-07 11:29:25.008 ERROR 1 --- [pool-1-thread-3] t.a.s.d.a.ArchitectureDependencyAnalysis : Exception in asyncAnalyse: {}
archguard-backend     |
archguard-backend     | com.thoughtworks.archguard.scanner.domain.exception.CloneSourceException: Fail to clone source with exitCode 128
archguard-backend     |         at com.thoughtworks.archguard.scanner.domain.system.SystemOperator.cloneSingleRepo(SystemOperator.kt:52) ~[classes!/:na]
archguard-backend     |         at com.thoughtworks.archguard.scanner.domain.system.SystemOperator.cloneAndBuildAllRepo(SystemOperator.kt:35) ~[classes!/:na]
archguard-backend     |         at com.thoughtworks.archguard.scanner.domain.hubexecutor.HubExecutorService.doScan(HubExecutorService.kt:64) ~[classes!/:na]
archguard-backend     |         at com.thoughtworks.archguard.scanner.domain.hubexecutor.HubExecutorService.doScanIfNotRunning(HubExecutorService.kt:38) ~[classes!/:na]
archguard-backend     |         at com.thoughtworks.archguard.scanner.domain.analyser.ArchitectureDependencyAnalysis.analyse(ArchitectureDependencyAnalysis.kt:63) ~[classes!/:na]
archguard-backend     |         at com.thoughtworks.archguard.scanner.domain.analyser.ArchitectureDependencyAnalysis.asyncAnalyse$lambda-0(ArchitectureDependencyAnalysis.kt:48) ~[classes!/:na]
archguard-backend     |         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
archguard-backend     |         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]

建议新增SSH Key的方式支持git从仓库clone代码

建议新增SSH Key的方式支持git从仓库clone代码,因为有时会修改密码,这样当项目多的情况下,需要一个个修改,带来不便,全局修改也不太好,不容ssh这种方式来的更直接些

扫描后内容为空,日志报错scan jar包不完整

本地虚拟机搭建起来服务,添加系统后,进行扫描后,扫描结果为空,没有数据,查询日志如下:

日志
HEAD is now at a53da43 chore: remove project name of docker compose
Removing archguard.log
Removing countTest.log
Removing scm_git_hot_file.txt
From https://gitee.com/luzhanheng/archguard

  • branch master -> FETCH_HEAD
    Already up to date.
    Current branch master is up to date.
    Error: Invalid or corrupt jarfile scan_sourcecode.jar
    jar 包不完整,请尝试连接 VPN 下载。访问: https://archguard.org/docs/faq.html 了解更多
    Error: Invalid or corrupt jarfile scan_git.jar
    jar 包不完整,请尝试连接 VPN 下载。访问: https://archguard.org/docs/faq.html 了解更多
    Error: Unable to access jarfile scan_test_badsmell.jar
    下载 Scanner 可能出错,请尝试连接 VPN 下载。访问: https://archguard.org/docs/faq.html 了解更多

随后我进入backend的docker容器内部,进入/home/spring目录下,查看存在scan等jar包,如下
~ $ ls -l
total 63068
-rw-r--r-- 1 root root 58272645 Apr 13 21:02 app.jar
-rw-r--r-- 1 spring spring 3767698 Apr 21 14:19 scan_git-1.5.0-all.jar
-rw-r--r-- 1 spring spring 605579 Apr 21 14:15 scan_sourcecode-1.5.0-all.jar
-rw-r--r-- 1 spring spring 1932680 Apr 21 14:21 scan_test_badsmell-1.4.5-all.jar
~ $ pwd
/home/spring

请大佬指教

变更分析

精准测试,影响的 API,哪些变更影响到哪些接口

Client exception when send metrics to InfluxDB.

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"error":"partial write: unable to parse 'metric_class_coupling,class_name=.ApplicationTest,package_name=,module_name=root,system_id=3 inner_fan_in=0,inner_fan_out=0,outer_fan_in=0,outer_fan_out=0,inner_instability=0.0,inner_coupling=0.0,outer_instability=0.0,outer_coupling=0.0': missing tag value\nunable to parse 'metric_class_coupling,class_name=.ApplicationTest,package_name=,module_name=root,system_id=3 inner_fan_in=0,inner_fan_out=0,outer_fan_in=0,outer_fan_out=0,inner_instability=0.0,inner_coupling=0.0,outer_instability=0.0,outer_coupling=0.0': missing tag value\nunable to parse 'metric_class_coupling,class_name=.ApplicationTest,package_name=,module_name=root,system_id=3 inner_fan_in=0,inner_fan_out=0,outer_fan_in=0,outer_fan_out=0,inner_instability=0.0,inner_coupling=0.0,outer_instability=0.0,outer_coupling=0.0': missing tag value dropped=0"}"

Look me:ArchGuard 部署搭建 —— help !!!

本人小白一枚,最近刚刚接触ArchGuard,在部署搭建过程中遇到一些问题,麻烦大佬们各显神通,救救小菜鸡。
以下操作按照READ.ME进行,如有理解不当,还请大家多多指教。
ArchGuard scanner - scan source code, binary data and othes, and feed to database.
ArchGuard frontend - visualization results & dashboard
ArchGuard backend - connect scanner and show data.

ArchGuard backend

docker setup

docker-compose -p ArchGuard -f ./docker-compose.yml up -d,无报错信息,执行完毕后,需要干啥??

[+] Running 7/7
 ⠿ Network archguard_dependence_network  Created                                                                               0.1s
 ⠿ Volume "archguard_mysql"              Created                                                                               0.0s
 ⠿ Volume "archguard_influxdb"           Created                                                                               0.0s
 ⠿ Container archguard_influxdb          Started                                                                               1.3s
 ⠿ Container archguard_mysql             Healthy                                                                              31.9s
 ⠿ Container archguard-backend           Started                                                                              32.1s
 ⠿ Container archguard-frontend          Started                                                                              32.3s

是否考虑结合链路追踪

目前基于纯静态分析的方式实现代码分析,是否考虑对接类似skywalking,动静结合,结果更加准确通用性也比较好

通过链路追踪分析分布式单体的结核

分布式单体的判断是否可以通过分析链路来确定,因为分布式单体肯定有一个结核服务,很多业务场景都要依赖某服务,如果有百分之x以上的url通过链路都要经过某个非 api-gateway之类的服务,风险就非常高了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.