Commit f17eeba
perf: replace in-memory stats with Cypher aggregations, add cache invalidation
- P1: QueryService.getStats() and getDetailedStats() now use GraphStore.computeAggregateStats()
which runs Cypher COUNT/GROUP BY queries instead of loading all nodes into heap via findAll().
This prevents OOM on large codebases (100K+ nodes).
- P2: Added POST /api/cache/invalidate endpoint that clears all Spring caches.
Allows cache refresh after re-enrichment without server restart.
- P4: Wrapped Analyzer.runBatchedIndex() executor in try-with-resources to prevent
thread leak on exception between creation (line 522) and close (line 639).
- Code cleanup: removed dead matchesAnyExclude() method, removed dead branches in
ProjectConfigLoader.applyOverrides(), fixed AbstractJavaParserDetector ThreadLocal
misuse (PARSER.remove() defeated pooling), removed unused ServeCommand.COMMAND_NAME,
removed unused QueryService.statsService field and useNeo4j() method.
All 1431 tests pass.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent abf7f92 commit f17eeba
11 files changed
Lines changed: 327 additions & 89 deletions
File tree
- src
- main/java/io/github/randomcodespace/iq
- analyzer
- api
- cli
- config
- detector/java
- graph
- query
- test/java/io/github/randomcodespace/iq
- api
- cli
- query
Lines changed: 2 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
522 | 522 | | |
523 | 523 | | |
524 | 524 | | |
| 525 | + | |
525 | 526 | | |
526 | 527 | | |
527 | 528 | | |
| |||
636 | 637 | | |
637 | 638 | | |
638 | 639 | | |
639 | | - | |
| 640 | + | |
640 | 641 | | |
641 | 642 | | |
642 | 643 | | |
| |||
1290 | 1291 | | |
1291 | 1292 | | |
1292 | 1293 | | |
1293 | | - | |
1294 | | - | |
1295 | | - | |
1296 | | - | |
1297 | | - | |
1298 | | - | |
1299 | | - | |
1300 | | - | |
1301 | | - | |
1302 | 1294 | | |
1303 | 1295 | | |
1304 | 1296 | | |
| |||
Lines changed: 21 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| 12 | + | |
11 | 13 | | |
12 | 14 | | |
13 | 15 | | |
| |||
30 | 32 | | |
31 | 33 | | |
32 | 34 | | |
| 35 | + | |
33 | 36 | | |
34 | 37 | | |
35 | | - | |
| 38 | + | |
| 39 | + | |
36 | 40 | | |
37 | 41 | | |
| 42 | + | |
38 | 43 | | |
39 | 44 | | |
40 | 45 | | |
| |||
196 | 201 | | |
197 | 202 | | |
198 | 203 | | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | 204 | | |
207 | 205 | | |
208 | 206 | | |
| |||
250 | 248 | | |
251 | 249 | | |
252 | 250 | | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
253 | 266 | | |
254 | 267 | | |
255 | 268 | | |
| |||
Lines changed: 0 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
34 | | - | |
35 | 33 | | |
36 | 34 | | |
37 | 35 | | |
| |||
Lines changed: 2 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
162 | 162 | | |
163 | 163 | | |
164 | 164 | | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
| 165 | + | |
| 166 | + | |
180 | 167 | | |
181 | 168 | | |
182 | 169 | | |
| |||
Lines changed: 0 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
33 | | - | |
34 | 32 | | |
35 | 33 | | |
36 | 34 | | |
| |||
0 commit comments