From cb4a5be4fc111933b387a8edc0ddd4a6c99646f9 Mon Sep 17 00:00:00 2001 From: Minh Nguyen Date: Wed, 22 Apr 2026 12:52:30 +0800 Subject: [PATCH] Update dashboard for new team breakdown(included lib owner) --- cli-config-template.yml | 1 + docker/grafana/grafana.db | Bin 1089536 -> 1097728 bytes docker/grafana/grafana.db.bak | Bin 0 -> 1089536 bytes docs/cli.md | 24 ++++++ docs/limitation.md | 2 +- docs/plugin.md | 25 ++++++ docs/report.md | 8 ++ grafana/dashboard-to-import.json | 135 +++++++++++++++++++++++++------ 8 files changed, 168 insertions(+), 27 deletions(-) create mode 100644 docker/grafana/grafana.db.bak diff --git a/cli-config-template.yml b/cli-config-template.yml index d8e11cd..18c1583 100644 --- a/cli-config-template.yml +++ b/cli-config-template.yml @@ -4,6 +4,7 @@ project-input: modules-dir-is-project-root: true r8-mapping-file: "./path/to/R8/mapping/file.txt" owner-mapping-file: "./path/to/owner/mapping/file.yml" + library-owner-mapping-file: "./path/to/library/owner/mapping/file.yml" version: "your/app/version" large-file-threshold: 10 project-name: "your/project/name" diff --git a/docker/grafana/grafana.db b/docker/grafana/grafana.db index 512378752c74cb6f226704a6e4f74cf4f1821942..f254f3a77dc34ad9e00bce854685be3a8732277d 100644 GIT binary patch delta 6756 zcmeGhYitz9d1v?TeCPA*tO;%mNz8J#F{FO%-oDR8*d_s@gn$jC2^j3XyFGfszB}v- zkE9esT2NF)HfrT*LetcuX;glM0PU?rt76oq6-tx>RVCacl#nz;iWQtlQK_Jh*|m*d zI1e>yf?)UNo152u-?!gu=G(6RhOVx~J$JyzDGC%&BiFw98hHG0YjHIQ{$P9c5>R`z zzgiGEwMvky!eL&JB9ajijoq!eR^Y7*&|4_fLT^D=jur|GunYS@Ie3_&-~tLPUcBqb z0|7}21pLtN_s{XGW+qb=Pj5}NrOkL%XYw(tD%xS0o1CutOopeZf{)x~18bR??w`XG z*6a4FUx57}sHvK&3Wj1B1}^M5?IWHybJ(LtqUVAG+d~=P;;T`LdAuW3&RW( z2;`$@3EpxFUBO%z!TUCPopAXI`W^Z;YDeX$oZ!94;_`0qwg(-IfSK!Ht_BS6;GPGV zIicZpo(B*j^xENCiwxJQFpe$qKdI_ z*oesqAsSOe(l5t#!w@vdG7ZVlqBadxLs|6#Xgd>u+ zHY|i?$8<%37vzW}M1(Nu8kxqAOxsI$=aUk&>F$F6WDpUXhmKO{`Cwn(U3BzU9BiWP z6Ay8V0ya7eJs$gc1lMJH>yX#WBq%0fzf}Q`5yPkqZ4E`jvVHnTkOv-O)D|{t;OeE# zsU=M-mh;UaV*f3U**AxpQ{P;6Z_~Z}{N@x-1_pwW0tx^>kOFYm;TA^Kt`X_F99fJA zy4|;qvp&`O&#;92k0Ako5h+H*n`d#Qw5-@C?qV~5Zcbq_3U9+*-CUmELGE0*FAe99 zwaoc!Rn6!aU;p4eghGd#j^@zte173~_?iu6*+fgqY`4m47LcdD^$c8v(>@r)`@aj9 z;I1gT6K5hEU(uWzsME)|J8~Z*E7!Oac~OYS&Tk5L(iGp8Q@K3A5zgLr*rVw+RDO_N zgBy3lq|GBg)?4}c%=^6+E3S^?Dh;%tPuh63;BvHc`AAPJg#5L&I)AHS+mV; zI>Ih<#5+;4lVs{FbQGa@bY@vL*={XKwq=PPq(&sZ0SmjK_s)jVD8@&(^X+Cb#V<~` zXVNJvmF>iZ=V8^14l~u6NO!cG*t-!GunmwBJ2)a_b&+X{)4a#4}AkZ=`=Uuwg}7OgM+XKpL!9_vuj_3-vdC!L(ieF z`Hxb;I^Sd9D6W43F0}7I1-}LC&R*`RfDM|sevh*Uq3oVY_%gT=RT}TkaO&sMTFKSg z7d%5yz~G;3CRfbunm#7TpV^)#8FEp9(=pzbi*Vy_;Y?=4UW@RDI-KR$xoh5&jdp3% ziZv_whDSy`IzAC(|7Z)1a0dW_&2^xUXuGF?wE?cVoArH(QDZbtac#+HhuN{+W#|hG zRT55r%zoYRUiVx_%9!}3wT=c4;<*>l$=)XRl)YjGx7I%v)W0GEw21)!#$aI&Cp#g% z3zuZzGKcav?ZUlW4L$9qIEM_{Pnnl-}w54?bN1 zXWwkTwMZsAYs=cSDrBUd{+kHPnb&iXB18){!xOV~Dd86*7Zdv*# zSvnDQ>CaapzBj{pe1NH;n3~*gP|tMdg-1T~mU%QuK{m<*4aV3R{>XAhQLmlh-NXvX z>h(`Pd~ca?Yyt6_Pz@!Kko+I zhdKu#3*=fkAOw7!Bs+J20tZOy_-SAt*vFl6PPl=m?5(}rlL3cO3ZG-xg||{W)1`L4 zq+G>`LvUW{xQ{m^lPZUoG^|}AY}>YK({P$JO)+UASc@qipliq6#o^_QrcZPi?&`_; O!|Q*AIq4|H-~S8d;Gm=c delta 3358 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 OESt||8JJeT^#1{5YBYxc literal 0 HcmV?d00001 diff --git a/docs/cli.md b/docs/cli.md index 6fa154a..cab2833 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -41,6 +41,7 @@ report: | modules-dir-is-project-root | Boolean value. Enable this flag if you set the root project as the modules-directory to optimize performance | | r8-mapping-file | Path to the R8 mapping file if you enable R8 for your build | | owner-mapping-file | Path to YAML file mapping project modules to team owners | +| library-owner-mapping-file | Path to YAML file mapping external libraries (Maven coordinates) to team owners. Optional. | | version | Your app version | | large-file-threshold | File size threshold (in bytes) for considering a file as large | | project-name | Project name | @@ -57,6 +58,28 @@ Team2: - sample-group:android-module-level2 ``` +And example of `library-owner-mapping-file`: + +```yaml +Platform: + - androidx.core:* # all artifacts under the androidx.core group + - androidx.lifecycle:* +Team1: + - com.google.android.material:* + - androidx.navigation:* +Team2: + - org.jetbrains.kotlin:* + - org.jetbrains.kotlinx:* +``` + +Pattern matching is evaluated in this order; the first match wins: + +1. **Exact coordinate** — e.g. `androidx.core:core-ktx:1.13.1` +2. **Group wildcard** using `:*` — e.g. `androidx.core:*` (matches any artifact under `androidx.core`) +3. **Group wildcard** using `.*` — e.g. `androidx.*` (matches any group beginning with `androidx.`) + +Libraries that do not match any pattern are attributed to the `app` module (see [Limitations](./limitation.md)). + ### APK Generation | Property | Description | @@ -94,6 +117,7 @@ project-input: modules-dir-is-project-root: true r8-mapping-file: "./app/build/outputs/mapping/proDebug/mapping.txt" owner-mapping-file: "./module-owner.yml" + library-owner-mapping-file: "./library-owner.yml" version: "1.0.1" large-file-threshold: 10 project-name: "sample" diff --git a/docs/limitation.md b/docs/limitation.md index a13d0d9..f532ddb 100644 --- a/docs/limitation.md +++ b/docs/limitation.md @@ -27,7 +27,7 @@ The `resources.arsc` file is a special file in Android APKs containing precompil ### Uncategorized Files * Any files that cannot be categorized as Java/Kotlin code, resources, native libraries, or assets are automatically distributed to the app module and grouped under the **"Others"** category. -* Any files/classes that cannot find an owner (does not belong to a module or library) are automatically distributed to the app module +* Any files/classes that cannot find an owner — i.e. files that don't belong to a module owned in `module-owner.yml` and libraries that don't match any pattern in `library-owner.yml` — are automatically distributed to the `app` module. ## Inline Functions and Classes diff --git a/docs/plugin.md b/docs/plugin.md index 4b25c97..8a4a8a5 100644 --- a/docs/plugin.md +++ b/docs/plugin.md @@ -83,6 +83,7 @@ appSizer { projectInput { largeFileThreshold = [your_threshold_in_bytes] teamMappingFile = file("path/to/your/module-owner.yml") + libraryOwnershipFile = file("path/to/your/library-owner.yml") enableMatchDebugVariant = [true|false] variantFilter { variant -> variant.setIgnore(variant.flavors.contains("your-ignore-flavor")) @@ -99,6 +100,7 @@ appSizer { |----------|----------------------------------------------------------------| | `largeFileThreshold` | File size threshold (in bytes) for considering a file as large. | | `teamMappingFile` | YAML file mapping project modules to team owners. | +| `libraryOwnershipFile` | YAML file mapping external libraries (Maven coordinates) to team owners. Optional. | | `enableMatchDebugVariant` | If true, uses debug AAR files to improve build performance. | | `variantFilter` | Specifies which variants to exclude from analysis. | @@ -114,6 +116,28 @@ Team2: - sample-group:android-module-level2 ``` +And example of `libraryOwnershipFile`: + +```yaml +Platform: + - androidx.core:* # all artifacts under the androidx.core group + - androidx.lifecycle:* +Team1: + - com.google.android.material:* + - androidx.navigation:* +Team2: + - org.jetbrains.kotlin:* + - org.jetbrains.kotlinx:* +``` + +Pattern matching is evaluated in this order; the first match wins: + +1. **Exact coordinate** — e.g. `androidx.core:core-ktx:1.13.1` +2. **Group wildcard** using `:*` — e.g. `androidx.core:*` (matches any artifact under `androidx.core`) +3. **Group wildcard** using `.*` — e.g. `androidx.*` (matches any group beginning with `androidx.`) + +Libraries that do not match any pattern are attributed to the `app` module (see [Limitations](./limitation.md)). + ### APK Generation Configure APK generation settings: @@ -199,6 +223,7 @@ appSizer { enableMatchDebugVariant = true largeFileThreshold = 10 teamMappingFile = file("${rootProject.rootDir}/module-owner.yml") + libraryOwnershipFile = file("${rootProject.rootDir}/library-owner.yml") } metrics { influxDB { diff --git a/docs/report.md b/docs/report.md index e805dd9..a9bf85f 100644 --- a/docs/report.md +++ b/docs/report.md @@ -43,6 +43,14 @@ Markdown tables provide a convenient format for local analysis. The report is sa | android-module-level1 | Team1 | 124.042 KB | | kotlin-module | Team2 | 248.326 KB | +### Example: Library-wise Size Contribution + +| Contributor | Owner | Size | +|-------------|-------|------| +| androidx.appcompat:appcompat:1.7.0 | Platform | 166.844 KB | +| com.google.android.material:material:1.4.0-beta01 | Team1 | 164.000 KB | +| org.jetbrains.kotlin:kotlin-stdlib:1.8.22 | Team2 | 58.547 KB | + ## JSON Report JSON reports offer compatibility with other platforms and tools. The report is saved as `[option]-metrics.json` in the configured output folder. diff --git a/grafana/dashboard-to-import.json b/grafana/dashboard-to-import.json index 4fcbde0..7bc17e6 100644 --- a/grafana/dashboard-to-import.json +++ b/grafana/dashboard-to-import.json @@ -25,7 +25,7 @@ "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 3, - "iteration": 1718528153248, + "iteration": 1776832837098, "links": [], "liveNow": false, "panels": [ @@ -229,8 +229,8 @@ "overrides": [] }, "gridPos": { - "h": 15, - "w": 12, + "h": 13, + "w": 24, "x": 0, "y": 17 }, @@ -260,12 +260,12 @@ }, "targets": [ { - "alias": "$tag_contributor", + "alias": "$tag_owner", "datasource": { "type": "influxdb", "uid": "m2unCvxIk" }, - "query": "SELECT last(\"size\") FROM \"app_size\" WHERE (\"type\"='team' and \"app_version\" =~ /^$app_version$/ and \"device_name\" =~ /^$reference_device$/ AND $timeFilter ) GROUP BY \"contributor\"", + "query": "SELECT last(\"size\")\nFROM \"app_size\"\nWHERE (\n \"type\" = 'team'\n AND \"contributor\" = 'total'\n AND \"app_version\" =~ /^$app_version$/\n AND \"device_name\" =~ /^$reference_device$/\n AND $timeFilter\n)\nGROUP BY \"owner\"", "rawQuery": true, "refId": "A", "resultFormat": "time_series" @@ -279,7 +279,76 @@ "type": "influxdb", "uid": "m2unCvxIk" }, - "description": "A list of module names associated with the selected 'Team Name' filter, accompanied by a graph illustrating the contribution of each module to the app download size.\nYou have the option to filter by App Version, Reference Device and Team Name", + "description": "A compilation of libraries, each denoted with the size it contributes to the overall App Download Size. You have the option to filter by App Version and Reference Device.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [], + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 15, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 7, + "options": { + "displayLabels": [], + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "percent", + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "alias": "$tag_contributor", + "datasource": { + "type": "influxdb", + "uid": "m2unCvxIk" + }, + "query": "SELECT last(\"size\") FROM \"app_size\" WHERE (\"type\" = 'library' AND \"app_version\" =~ /^$app_version$/ AND \"device_name\" =~ /^$reference_device$/ AND $timeFilter ) GROUP BY \"contributor\"\n", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "App Download Size Breakdown by Libraries", + "type": "piechart" + }, + { + "datasource": { + "type": "influxdb", + "uid": "m2unCvxIk" + }, + "description": "A list of module names/libraries associated with the selected 'Team Name' filter, accompanied by a graph illustrating the contribution of each module to the app download size.\nYou have the option to filter by App Version, Reference Device, and Team Name", "fieldConfig": { "defaults": { "color": { @@ -300,8 +369,8 @@ "gridPos": { "h": 15, "w": 12, - "x": 12, - "y": 17 + "x": 0, + "y": 45 }, "id": 6, "options": { @@ -333,13 +402,26 @@ "type": "influxdb", "uid": "m2unCvxIk" }, - "query": "SELECT last(\"size\") FROM \"app_size\" WHERE (\"type\" = 'module' AND \"app_version\" =~ /^$app_version$/ and \"device_name\" =~ /^$reference_device$/ and \"owner\" =~ /^$tf_name$/ ) GROUP BY \"contributor\"", + "query": "SELECT last(\"size\") FROM \"app_size\"\nWHERE (\"type\" = 'module'\n AND \"app_version\" =~ /^$app_version$/\n AND \"device_name\" =~ /^$reference_device$/\n AND \"owner\" =~ /^$tf_name$/)\nGROUP BY \"contributor\"", "rawQuery": true, "refId": "A", "resultFormat": "time_series" + }, + { + "alias": "$tag_contributor", + "datasource": { + "type": "influxdb", + "uid": "m2unCvxIk" + }, + "hide": false, + "query": "SELECT last(\"size\") FROM \"app_size\"\nWHERE (\"type\" = 'library'\n AND \"app_version\" =~ /^$app_version$/\n AND \"device_name\" =~ /^$reference_device$/\n AND \"owner\" =~ /^$tf_name$/)\nGROUP BY \"contributor\"", + "rawQuery": true, + "refId": "B", + "resultFormat": "time_series" } ], - "title": "Team Codebase Breakdown (Select the team name to see the detail)", + "title": "Team Breakdown (Select the team name to see the detail)", + "transformations": [], "type": "piechart" }, { @@ -347,7 +429,7 @@ "type": "influxdb", "uid": "m2unCvxIk" }, - "description": "A compilation of libraries, each denoted with the size it contributes to the overall App Download Size. You have the option to filter by App Version and Reference Device.", + "description": "A graph representation of the breakdown of the Team Download Size by individual components. You have the option to filter by App Version, Reference Device, and Team name", "fieldConfig": { "defaults": { "color": { @@ -367,13 +449,12 @@ }, "gridPos": { "h": 15, - "w": 24, - "x": 0, - "y": 32 + "w": 12, + "x": 12, + "y": 45 }, - "id": 7, + "id": 11, "options": { - "displayLabels": [], "legend": { "displayMode": "table", "placement": "right", @@ -402,13 +483,14 @@ "type": "influxdb", "uid": "m2unCvxIk" }, - "query": "SELECT last(\"size\") FROM \"app_size\" WHERE (\"type\" = 'library' AND \"app_version\" =~ /^$app_version$/ AND \"device_name\" =~ /^$reference_device$/ AND $timeFilter ) GROUP BY \"contributor\"\n", + "query": "SELECT last(\"size\")\nFROM \"app_size\"\nWHERE (\n \"type\" = 'team'\n AND \"contributor\" != 'total'\n AND \"app_version\" =~ /^$app_version$/\n AND \"owner\" =~ /^$tf_name$/\n AND \"device_name\" =~ /^$reference_device$/\n AND $timeFilter\n)\nGROUP BY \"contributor\"", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } ], - "title": "App Download Size Breakdown by Libraries", + "title": "Team Breakdown by main Components (Select the team name to see the detail)", + "transformations": [], "type": "piechart" }, { @@ -433,7 +515,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -449,7 +532,7 @@ "h": 9, "w": 24, "x": 0, - "y": 47 + "y": 60 }, "id": 8, "options": { @@ -505,9 +588,9 @@ "list": [ { "current": { - "selected": false, - "text": "1.0.2", - "value": "1.0.2" + "selected": true, + "text": "0.0.1", + "value": "0.0.1" }, "datasource": { "type": "influxdb", @@ -529,7 +612,7 @@ }, { "current": { - "selected": false, + "selected": true, "text": "device-1", "value": "device-1" }, @@ -585,6 +668,6 @@ "timezone": "", "title": "App Download Size Breakdown", "uid": "FBZO0xxSk", - "version": 51, + "version": 57, "weekStart": "" -} \ No newline at end of file +}