/
kronicle.yaml
204 lines (193 loc) · 8.62 KB
/
kronicle.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# This file is read automatically by Kronicle https://kronicle.tech
components:
- id: kronicle-app
name: Kronicle App
typeId: spa
repo:
url: https://github.com/kronicle-tech/kronicle.git
description: |
The [Single Page App (SPA)](https://en.wikipedia.org/wiki/Single-page_application) for
[Kronicle's UI](https://kronicle.tech). kronicle-app hosts the whole web UI for Kroncile
notes: |
The SPA is built with [Nuxt](https://nuxtjs.org) and [Vue.js](https://vuejs.org). Nuxt is an awesome
framework for building Vue.js apps that removes a lot of the boiler plate code needed and introduces a lot of
helpful conventions and patterns. Nuxt supports both Server Side Rendering (SSR) and static generation.
kronicle-app uses Nuxt with Server Side Rendering. Inital page renders are done server-side with further page
renders performed client-side.
tags:
- frontend
teams:
- teamId: kronicle-project
platform: aws-ecs-fargate
responsibilities:
- description: |
Rendering a web UI that visualises all the data in Kronicle. Data is a combination of data from
kronicle.yaml files store in Git repos and data pulled in by Scanners from external data sources like Git
repos, Zipkin, SonarQube etc. The Kronicle App uses the Konricle Service's RESTful API to retrieve all this
data.
links:
- url: https://kronicle.tech
description: |
The Kronicle website
- url: https://demo.kronicle.tech
description: |
The Kronicle live demo
crossFunctionalRequirements: []
techDebts: []
- id: kronicle-service
name: Kronicle Service
typeId: microservice
repo:
url: https://github.com/kronicle-tech/kronicle.git
description: |
The microservice that powers [Kronicle](https://kronicle.tech). All the data collection (scanning) and
processing is performed in this microservice, with [kronicle-app](/components/kronicle-app) then responsible
for placing a web UI on top of that
notes: |
The microservice is built with Java and [Spring Boot](https://spring.io/projects/spring-boot)
tags:
- backend
teams:
- teamId: kronicle-project
platform: aws-ecs-fargate
responsibilities:
- description: |
Uses `Repo Finders` to discover Git repos that belong to an organisation. Also detects the presense of
`kronicle.yaml` metadata files in any of the Git repos that are found. Currently there are Repo Finders for
GitHub and Bitbucket Server. Bitbucket Server is the self-hosted version of Bitbucket and not the cloud
version. This happens once every 15 minutes.
- description: |
Loads the metadata from any Git repos that contain a `kronicle.yaml` file. This happens once every 15
minutes.
- description: |
Executes `Scanners` that use the metadata from `kronicle.yaml` files to fetch additional data from sources
like the Git repos themselves (finding dependencies in Gradle projects, counting lines of code, finding
the names of frequent code committers), [Zipkin](https://zipkin.io), [SonarQube](https://www.sonarqube.org/)
etc. The data found by the Scanners is combined with the metadata from the `kronicle.yaml` files.
This happens once every 15 minutes.
- description: |
Executes `Tests` against the data found from `kronicle.yaml` files and Scanners. Knonicle includes built-in
tests for things like minimum 80% code coverage (using coverage data from SonarQube). This happens once
every 15 minutes.
- description: |
Provides an web API for querying all the data held by the Kronicle Service. The Kronicle App is powered by
the Kronicle Service's API.
links:
- url: https://kronicle.tech
description: |
The Kronicle website
- url: https://demo.kronicle.tech
description: |
The Kronicle live demo
crossFunctionalRequirements:
- description: |
When refreshing the data in Kronicle, either on start up or on scheduled, if an individual scanner fails when
scanning a component, the refresh should continue
notes: |
Other scanners should not be affected and if possible the failed scanner should continue to process other
components
- description: |
The Gradle Scanner needs to be able to discover dependencies in `*.gradle` Groovy based Gradle build files
notes: |
The scanner does not need to be able to handle `*.gradle.kts` Kotlin based Gradle build files for now
techDebts:
- description: |
Kronicle Service stores all of its data in-memory. This means:
1. Only 1 instance of the service can run at a time (not including a few seconds of dual running during a deployment). Due to this, it is not possible to run multiple instances of the service (horizontal scaling) for availability or processing capacity.
2. Kronicle Service stores all of its data in-memory. This means the data has to be recreated (via Repo Finders, Scanners, Tests) every time the service restarts. This means that when the service restarts, it can take from seconds to many minutes for data to be available in the service and during this time the Kronicle App dashboards will appear to contain no data.
priority: medium
- description: |
Currently Kronicle Service refreshing its data on a schedule. Data is reloaded every 15 minutes. This means
that external services like Git repos, Zipkin, SonarQube are hit every 15 minutes. It would probably be
better to replace this approach with a combination of webhooks for Git repos and less frequent refresh
intervals for data sources like Zipkin and SonarQube.
priority: medium
openApiSpecs:
- url: https://demo.kronicle.tech/openapi
description: |
OpenAPI spec for the Kronicle Service
graphQlSchemas:
- url: https://demo.kronicle.tech/graphql
description: |
GraphQL schema for the Kronicle Service
docs:
- id: example-docs
dir: example-docs
name: Example Docs
- id: amazon-aws
name: Amazon AWS
typeId: third-party-platform
description: |
Kronicle integrates with several of Amazon AWS's APIs
teams:
- teamId: kronicle-project
platform: third-party-platform
- id: bitbucket-server
name: Bitbucket Server
typeId: third-party-platform
description: |
Kronicle integrates with Bitbucket Server's APIs. This is the self-hosted version of Bitbucket, rather than the
SaaS version of Bitbucket (which has a completely API)
teams:
- teamId: kronicle-project
platform: third-party-platform
- id: datadog
name: Datadog
typeId: third-party-platform
description: |
Kronicle integrates with Datadog's Service Dependencies API
teams:
- teamId: kronicle-project
platform: third-party-platform
- id: github
name: GitHub
typeId: third-party-platform
description: |
Kronicle integrates with GitHub's APIs
teams:
- teamId: kronicle-project
platform: third-party-platform
- id: gitlab
name: GitLab
typeId: third-party-platform
description: |
Kronicle integrates with GitLab Platforms's APIs
teams:
- teamId: kronicle-project
platform: third-party-platform
- id: sonarqube
name: SonarQube
typeId: third-party-platform
description: |
Kronicle integrates with SonarQube's APIs. Kronicle supports both self-hosted SonarQube and the SaaS version of
SonarQube called SonarCloud
teams:
- teamId: kronicle-project
platform: third-party-platform
- id: zipkin
name: Zipkin
typeId: third-party-platform
description: |
Kronicle integrates with Zipkin's APIs
notes: |
Kronicle imports raw traces to produce detailed component dependencies, deduplicated call graphs, response times
and request times
teams:
- teamId: kronicle-project
platform: third-party-platform
diagrams:
- id: kronicle
name: Kronicle
type: architecture
description: |
Architecture diagram for Kronicle
connections:
- sourceComponentId: kronicle-app
targetComponentId: kronicle-service
label: calls the service's REST API
- sourceComponentId: kronicle-service
targetComponentId: aws-plugin
label: contains the plugin
- sourceComponentId: kronicle-service
targetComponentId: amazon-aws
label: calls APIs