Skip to content

Commit 00b0355

Browse files
authored
Added Historical Data (#35)
1 parent 2fa5289 commit 00b0355

File tree

11 files changed

+68
-10
lines changed

11 files changed

+68
-10
lines changed

invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/models/InvertPluginFileKey.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ enum class InvertPluginFileKey(
1010
) {
1111
DEPENDENCIES("dependencies.json", "Dependencies"),
1212
CONFIGURATIONS("configurations.json", "Configurations"),
13+
HISTORICAL_DATA("historical_data.json", "Historical Data"),
1314
PLUGINS("plugins.json", "Plugins"),
1415
OWNERS("owners.json", "Owners"),
1516
METADATA("metadata.json", "Metadata"),

invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/report/InvertReportWriter.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.squareup.invert.logging.InvertLogger
1313
import com.squareup.invert.models.DependencyId
1414
import com.squareup.invert.models.ModulePath
1515
import com.squareup.invert.models.js.CollectedStatTotalsJsReportModel
16+
import com.squareup.invert.models.js.HistoricalData
1617
import com.squareup.invert.models.js.MetadataJsReportModel
1718
import java.io.File
1819

@@ -27,12 +28,13 @@ class InvertReportWriter(
2728
collectedDependencies: List<CollectedDependenciesForProject>,
2829
collectedConfigurations: List<CollectedConfigurationsForProject>,
2930
collectedPlugins: List<CollectedPluginsForProject>,
31+
historicalData: List<HistoricalData>,
3032
) {
3133
val collectedOwnershipInfo = InvertJsReportUtils.buildModuleToOwnerMap(collectedOwners)
3234
val allProjectsStatsData = InvertJsReportUtils.buildModuleToStatsMap(collectedStats)
3335
val directDependenciesJsReportModel = InvertJsReportUtils.toDirectDependenciesJsReportModel(collectedDependencies)
34-
val invertedDependenciesJsReportModel = InvertJsReportUtils
35-
.toInvertedDependenciesJsReportModel(collectedDependencies)
36+
val invertedDependenciesJsReportModel =
37+
InvertJsReportUtils.toInvertedDependenciesJsReportModel(collectedDependencies)
3638

3739
assertModuleMatch(
3840
logger = invertLogger,
@@ -50,7 +52,8 @@ class InvertReportWriter(
5052
allProjectsStatsData = allProjectsStatsData,
5153
allPluginsData = collectedPlugins,
5254
allOwnersData = collectedOwners,
53-
globalStats = globalStats
55+
globalStats = globalStats,
56+
historicalData = historicalData,
5457
)
5558

5659
// HTML/JS Report
@@ -64,6 +67,7 @@ class InvertReportWriter(
6467
collectedOwnershipInfo = collectedOwnershipInfo,
6568
allProjectsConfigurationsData = collectedConfigurations,
6669
globalStatTotals = CollectedStatTotalsJsReportModel(globalStats),
70+
historicalData = historicalData,
6771
)
6872
}
6973

invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/report/js/InvertJsReportWriter.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ import com.squareup.invert.models.js.CollectedStatTotalsJsReportModel
1010
import com.squareup.invert.models.js.ConfigurationsJsReportModel
1111
import com.squareup.invert.models.js.DependenciesJsReportModel
1212
import com.squareup.invert.models.js.DirectDependenciesJsReportModel
13+
import com.squareup.invert.models.js.HistoricalData
1314
import com.squareup.invert.models.js.HomeJsReportModel
1415
import com.squareup.invert.models.js.JsReportFileKey
1516
import com.squareup.invert.models.js.MetadataJsReportModel
1617
import com.squareup.invert.models.js.OwnershipJsReportModel
1718
import com.squareup.invert.models.js.PluginsJsReportModel
1819
import com.squareup.invert.models.js.StatsJsReportModel
1920
import kotlinx.serialization.KSerializer
21+
import kotlinx.serialization.builtins.ListSerializer
2022
import java.io.File
2123

2224
class InvertJsReportWriter(
@@ -35,6 +37,7 @@ class InvertJsReportWriter(
3537
collectedOwnershipInfo: OwnershipJsReportModel,
3638
globalStatTotals: CollectedStatTotalsJsReportModel,
3739
reportMetadata: MetadataJsReportModel,
40+
historicalData: List<HistoricalData>,
3841
) {
3942
val pluginsReport = InvertJsReportUtils.toCollectedPlugins(allPluginsData)
4043
val modulesList = allProjectsDependencyData.map { it.path }
@@ -51,6 +54,12 @@ class InvertJsReportWriter(
5154
value = reportMetadata
5255
)
5356

57+
writeJsFileInDir(
58+
fileKey = JsReportFileKey.HISTORICAL_DATA,
59+
serializer = ListSerializer(HistoricalData.serializer()),
60+
value = historicalData
61+
)
62+
5463
writeJsFileInDir(
5564
fileKey = JsReportFileKey.OWNERS,
5665
serializer = OwnershipJsReportModel.serializer(),

invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/report/json/InvertJsonReportWriter.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import com.squareup.invert.logging.InvertLogger
1010
import com.squareup.invert.logging.SystemOutInvertLogger
1111
import com.squareup.invert.models.InvertSerialization.InvertJson
1212
import com.squareup.invert.models.StatKey
13-
import com.squareup.invert.models.StatMetadata
1413
import com.squareup.invert.models.js.CollectedStatTotalsJsReportModel
14+
import com.squareup.invert.models.js.HistoricalData
1515
import com.squareup.invert.models.js.MetadataJsReportModel
1616
import com.squareup.invert.models.js.StatTotalAndMetadata
1717
import com.squareup.invert.models.js.StatsJsReportModel
@@ -32,6 +32,7 @@ class InvertJsonReportWriter(
3232
allOwnersData: List<CollectedOwnershipForProject>,
3333
globalStats: Map<StatKey, StatTotalAndMetadata>,
3434
reportMetadata: MetadataJsReportModel,
35+
historicalData: List<HistoricalData>,
3536
) {
3637
writeJsonFileInDir(
3738
jsonFileKey = InvertPluginFileKey.METADATA,
@@ -43,6 +44,11 @@ class InvertJsonReportWriter(
4344
serializer = ListSerializer(CollectedPluginsForProject.serializer()),
4445
value = allPluginsData
4546
)
47+
writeJsonFileInDir(
48+
jsonFileKey = InvertPluginFileKey.HISTORICAL_DATA,
49+
serializer = ListSerializer(HistoricalData.serializer()),
50+
value = historicalData
51+
)
4652

4753
writeJsonFileInDir(
4854
jsonFileKey = InvertPluginFileKey.STAT_TOTALS,

invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/tasks/InvertTask.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ abstract class InvertTask : DefaultTask() {
9696
collectedDependencies = allCollectedData.collectedDependencies,
9797
collectedConfigurations = allCollectedData.collectedConfigurations,
9898
collectedPlugins = allCollectedData.collectedPlugins,
99+
historicalData = emptyList(),
99100
)
100101
}
101102
}

invert-models/src/commonMain/kotlin/com/squareup/invert/models/js/CollectedStatTotalsJsReportModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,9 @@ data class StatTotalAndMetadata(
1818
val totalByModule: Map<ModulePath, Int>,
1919
val totalByOwner: Map<OwnerName, Int>,
2020
)
21+
22+
@Serializable
23+
data class HistoricalData(
24+
val reportMetadata: MetadataJsReportModel,
25+
val statTotalsAndMetadata: CollectedStatTotalsJsReportModel
26+
)

invert-models/src/commonMain/kotlin/com/squareup/invert/models/js/JsReportFileKey.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ enum class JsReportFileKey(
1010
) {
1111
DIRECT_DEPENDENCIES("direct_dependencies", "Direct Dependencies"),
1212
INVERTED_DEPENDENCIES("inverted_dependencies", "Inverted Dependencies"),
13+
HISTORICAL_DATA("historical_stats", "Historical Stats"),
1314
HOME("home", "Home"),
1415
PLUGINS("plugins", "Plugins"),
1516
OWNERS("owners", "Owners"),

invert-report/src/jsMain/kotlin/com/squareup/invert/common/CollectedDataRepo.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.squareup.invert.models.js.CollectedStatTotalsJsReportModel
44
import com.squareup.invert.models.js.ConfigurationsJsReportModel
55
import com.squareup.invert.models.js.DependenciesJsReportModel
66
import com.squareup.invert.models.js.DirectDependenciesJsReportModel
7+
import com.squareup.invert.models.js.HistoricalData
78
import com.squareup.invert.models.js.HomeJsReportModel
89
import com.squareup.invert.models.js.JsReportFileKey
910
import com.squareup.invert.models.js.MetadataJsReportModel
@@ -13,6 +14,7 @@ import com.squareup.invert.models.js.StatsJsReportModel
1314
import kotlinx.coroutines.CoroutineDispatcher
1415
import kotlinx.coroutines.flow.Flow
1516
import kotlinx.coroutines.flow.MutableStateFlow
17+
import kotlinx.coroutines.flow.map
1618
import kotlinx.coroutines.flow.onEach
1719
import kotlinx.coroutines.withContext
1820

@@ -50,6 +52,14 @@ class CollectedDataRepo(
5052
loadJsOfType(JsReportFileKey.INVERTED_DEPENDENCIES)
5153
}
5254

55+
private val _historicalData: MutableStateFlow<List<HistoricalData>?> =
56+
MutableStateFlow(null)
57+
val historicalData: Flow<List<HistoricalData>?> = _historicalData.onEach {
58+
loadJsOfType(JsReportFileKey.HISTORICAL_DATA)
59+
}.map {
60+
it?.sortedBy { it.reportMetadata.currentTime }
61+
}
62+
5363
private val _directDependenciesData: MutableStateFlow<DirectDependenciesJsReportModel?> =
5464
MutableStateFlow(null)
5565
val directDependenciesData: Flow<DirectDependenciesJsReportModel?> = _directDependenciesData.onEach {
@@ -113,6 +123,10 @@ class CollectedDataRepo(
113123
this._statTotals.value = statTotals
114124
}
115125

126+
fun historicalDataUpdated(historicalData: List<HistoricalData>) {
127+
this._historicalData.value = historicalData
128+
}
129+
116130
fun homeUpdated(data: HomeJsReportModel) {
117131
this._home.value = data
118132
}

invert-report/src/jsMain/kotlin/com/squareup/invert/common/ReportDataRepo.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.squareup.invert.models.Stat
1313
import com.squareup.invert.models.StatKey
1414
import com.squareup.invert.models.StatMetadata
1515
import com.squareup.invert.models.js.CollectedStatTotalsJsReportModel
16+
import com.squareup.invert.models.js.HistoricalData
1617
import com.squareup.invert.models.js.MetadataJsReportModel
1718
import com.squareup.invert.models.js.PluginsJsReportModel
1819
import com.squareup.invert.models.js.StatsJsReportModel
@@ -42,6 +43,8 @@ class ReportDataRepo(
4243

4344
val statsData: Flow<StatsJsReportModel?> = collectedDataRepo.statsData
4445

46+
val historicalData: Flow<List<HistoricalData>?> = collectedDataRepo.historicalData.mapLatest { it }
47+
4548
val statInfos: Flow<Collection<StatMetadata>?> = collectedDataRepo.statsData.mapLatest { it?.statInfos?.values }
4649

4750
val statTotals: Flow<CollectedStatTotalsJsReportModel?> = collectedDataRepo.statTotals

invert-report/src/jsMain/kotlin/com/squareup/invert/common/charts/ChartsJs.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,18 @@ object ChartsJs {
6262
val data: ChartJsData,
6363
val options: ChartJsOptions,
6464
)
65+
@Serializable
66+
data class ChartJsLineChartParam(
67+
val type: String,
68+
val data: ChartJsData,
69+
val options: ChartJsOptions,
70+
)
6571
}
6672

6773
@Composable
6874
private fun LineChartJsComposable(
6975
graphDomId: String,
70-
chartData: ChartsJs.ChartJsParam,
76+
chartData: ChartsJs.ChartJsLineChartParam,
7177
heightCssValue: CSSSizeValue<*>,
7278
onClick: (label: String, value: Int) -> Unit = { _, _ -> }
7379
) {
@@ -83,12 +89,13 @@ private fun LineChartJsComposable(
8389
maxWidth(100.percent)
8490
}
8591
})
92+
val dataAsJson = InvertSerialization.InvertJsonPrettyPrint.encodeToString(
93+
ChartsJs.ChartJsLineChartParam.serializer(), chartData
94+
)
8695
CoroutineScope(Dispatchers.Main).launch {
8796
renderLineChartJs(
8897
graphDomId,
89-
InvertSerialization.InvertJson.encodeToString(
90-
ChartsJs.ChartJsParam.serializer(), chartData
91-
),
98+
dataAsJson,
9299
onClick = onClick
93100
)
94101
}
@@ -186,7 +193,7 @@ fun ChartJsLineChartComposable(
186193
LineChartJsComposable(
187194
graphDomId = domId,
188195
heightCssValue = height,
189-
chartData = ChartsJs.ChartJsParam(
196+
chartData = ChartsJs.ChartJsLineChartParam(
190197
type = "line",
191198
data = data,
192199
options = ChartsJs.ChartJsOptions(

invert-report/src/jsMain/kotlin/navigation/RemoteJsLoadingProgress.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.squareup.invert.models.js.CollectedStatTotalsJsReportModel
88
import com.squareup.invert.models.js.ConfigurationsJsReportModel
99
import com.squareup.invert.models.js.DependenciesJsReportModel
1010
import com.squareup.invert.models.js.DirectDependenciesJsReportModel
11+
import com.squareup.invert.models.js.HistoricalData
1112
import com.squareup.invert.models.js.HomeJsReportModel
1213
import com.squareup.invert.models.js.JsReportFileKey
1314
import com.squareup.invert.models.js.MetadataJsReportModel
@@ -17,6 +18,7 @@ import com.squareup.invert.models.js.StatsJsReportModel
1718
import externalLoadJavaScriptFile
1819
import kotlinx.browser.window
1920
import kotlinx.coroutines.flow.MutableStateFlow
21+
import kotlinx.serialization.builtins.ListSerializer
2022

2123
object RemoteJsLoadingProgress {
2224
val awaitingResults = MutableStateFlow<List<JsReportFileKey>>(listOf())
@@ -53,7 +55,7 @@ object RemoteJsLoadingProgress {
5355
JsReportFileKey.INVERTED_DEPENDENCIES -> {
5456
collectedDataRepo.reportDataUpdated(
5557
InvertJson.decodeFromString(DependenciesJsReportModel.serializer(), json)
56-
)
58+
)
5759
}
5860

5961
JsReportFileKey.DIRECT_DEPENDENCIES -> {
@@ -103,6 +105,10 @@ object RemoteJsLoadingProgress {
103105
InvertJson.decodeFromString(CollectedStatTotalsJsReportModel.serializer(), json)
104106
)
105107
}
108+
109+
JsReportFileKey.HISTORICAL_DATA -> collectedDataRepo.historicalDataUpdated(
110+
InvertJson.decodeFromString(ListSerializer(HistoricalData.serializer()), json)
111+
)
106112
}
107113
}
108114
}

0 commit comments

Comments
 (0)