forked from finos/vuu
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
finos#1195 enable metric tracking for each instance of session table
- reason TBA
- Loading branch information
1 parent
5748bb2
commit d7b3346
Showing
8 changed files
with
153 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 1 addition & 2 deletions
3
vuu/src/main/scala/org/finos/vuu/viewport/InMemViewPortTableCreator.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
vuu/src/test/scala/org/finos/vuu/core/module/metrics/MetricsTableProviderTest.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package org.finos.vuu.core.module.metrics | ||
|
||
import org.finos.toolbox.jmx.{MetricsProvider, MetricsProviderImpl} | ||
import org.finos.toolbox.lifecycle.{LifeCycleComponentContext, LifecycleContainer, LifecycleEnabled} | ||
import org.finos.toolbox.time.{Clock, TestFriendlyClock} | ||
import org.finos.vuu.api.{Indices, TableDef, VisualLinks} | ||
import org.finos.vuu.core.module.ModuleFactory.stringToString | ||
import org.finos.vuu.core.module.metrics.MetricsTableProviderTest.{createMockTable, createTestTableDef} | ||
import org.finos.vuu.core.table.{Column, Columns, DataTable, TableContainer} | ||
import org.finos.vuu.test.TestFriendlyJoinTableProvider | ||
import org.scalamock.scalatest.MockFactory | ||
import org.scalatest.featurespec.AnyFeatureSpec | ||
import org.scalatest.matchers.should.Matchers | ||
|
||
class MetricsTableProviderTest extends AnyFeatureSpec with Matchers with MockFactory { | ||
private implicit val metricsProvider: MetricsProvider = new MetricsProviderImpl() | ||
private implicit val clock: Clock = new TestFriendlyClock(10001) | ||
private implicit val lifecycleContainer: LifecycleContainer = stub[LifecycleContainer] | ||
private val lifeCycleComponentContext = stub[LifeCycleComponentContext] | ||
(lifecycleContainer.apply _).when(*).returns(lifeCycleComponentContext) | ||
(lifeCycleComponentContext.dependsOn: LifecycleEnabled => Unit).when(*).returns() | ||
|
||
private val joinProvider = new TestFriendlyJoinTableProvider() | ||
private val mockTable = stub[DataTable] | ||
private val tableContainer = new TableContainer(joinProvider) | ||
|
||
private val metricsTableProvider = new MetricsTableProvider(mockTable, tableContainer) | ||
|
||
Feature("runOnce") { | ||
Scenario("can get and update expected list of tables") { | ||
tableContainer.createTable(createTestTableDef(name = "instruments")) | ||
tableContainer.addTable(createMockTable(tableName = "instrumentsSessionTable_1", tableDefName = "instruments")) | ||
tableContainer.addTable(createMockTable(tableName = "instrumentsSessionTable_2", tableDefName = "instruments")) | ||
tableContainer.createTable(createTestTableDef(name = "other")) | ||
|
||
metricsTableProvider.runOnce() | ||
|
||
(mockTable.processUpdate _).verify("instruments", *, *).once | ||
(mockTable.processUpdate _).verify("instrumentsSessionTable_1", *, *).once | ||
(mockTable.processUpdate _).verify("instrumentsSessionTable_2", *, *).once | ||
(mockTable.processUpdate _).verify("other", *, *).once | ||
} | ||
} | ||
} | ||
|
||
object MetricsTableProviderTest extends MockFactory { | ||
private def createTestTableDef(name: String, | ||
keyField: String = "id", | ||
columns: Array[Column] = Columns.fromNames("id".long(), "field".string())): TableDef = { | ||
new TableDef(name, keyField, columns, Seq.empty, false, VisualLinks(), Indices()) | ||
} | ||
|
||
private def createMockTable(tableName: String, tableDefName: String): DataTable = { | ||
val table = stub[DataTable] | ||
(table.name _).when().returns(tableName) | ||
(table.getTableDef _).when().returns(createTestTableDef(tableDefName)) | ||
table | ||
} | ||
} |
41 changes: 41 additions & 0 deletions
41
vuu/src/test/scala/org/finos/vuu/core/table/InMemSessionDataTableTest.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package org.finos.vuu.core.table | ||
|
||
import org.finos.toolbox.jmx.{MetricsProvider, MetricsProviderImpl} | ||
import org.finos.toolbox.time.{Clock, DefaultClock} | ||
import org.finos.vuu.api.{Indices, SessionTableDef} | ||
import org.finos.vuu.core.module.ModuleFactory.stringToString | ||
import org.finos.vuu.net.ClientSessionId | ||
import org.finos.vuu.test.TestFriendlyJoinTableProvider | ||
import org.scalatest.featurespec.AnyFeatureSpec | ||
import org.scalatest.matchers.should.Matchers | ||
|
||
class InMemSessionDataTableTest extends AnyFeatureSpec with Matchers { | ||
private implicit val metricsProvider: MetricsProvider = new MetricsProviderImpl() | ||
private implicit val clock: Clock = new DefaultClock() | ||
private val clientSessionId = ClientSessionId(sessionId = "sessionId", user = "user") | ||
private val joinProvider = new TestFriendlyJoinTableProvider() | ||
|
||
private val sessionTableDef: SessionTableDef = new SessionTableDef( | ||
name = "test-table", | ||
keyField = "id", | ||
columns = Columns.fromNames("id".long(), "field".string()), | ||
indices = Indices(), | ||
joinFields = Seq.empty | ||
) | ||
|
||
private val inMemSessionDataTable = new InMemSessionDataTable(clientSessionId, sessionTableDef, joinProvider) | ||
|
||
Feature("Metrics update") { | ||
Scenario("Should correctly update metrics WHEN processUpdate called") { | ||
inMemSessionDataTable.processUpdate("1", RowWithData("1", Map("id" -> 1, "field" -> "value1")), clock.now()) | ||
inMemSessionDataTable.processUpdate("2", RowWithData("2", Map("id" -> 2, "field" -> "value2")), clock.now()) | ||
|
||
val counter = metricsProvider.counter(inMemSessionDataTable.name + ".processUpdates.Counter") | ||
val meter = metricsProvider.meter(inMemSessionDataTable.name + ".processUpdates.Meter") | ||
|
||
counter.getCount shouldEqual 2 | ||
meter.getCount shouldEqual 2 | ||
} | ||
} | ||
|
||
} |