Skip to content
This repository was archived by the owner on Mar 27, 2023. It is now read-only.

Commit 9c24910

Browse files
author
Michel Zimmer
committed
Preseed stats on boot with measurements from database
1 parent c59c1b0 commit 9c24910

File tree

6 files changed

+38
-25
lines changed

6 files changed

+38
-25
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ LABEL org.opencontainers.image.vendor="neuland – Büro für Informatik GmbH"
1212
LABEL org.opencontainers.image.licenses="Apache-2.0"
1313
LABEL org.opencontainers.image.title="bandwhichd-server"
1414
LABEL org.opencontainers.image.description="bandwhichd server collecting measurements and calculating statistics"
15-
LABEL org.opencontainers.image.version="0.6.0-rc4"
15+
LABEL org.opencontainers.image.version="0.6.0-rc5"
1616
USER guest
1717
ENTRYPOINT ["/opt/java/openjdk/bin/java"]
1818
CMD ["-jar", "/opt/bandwhichd-server.jar"]
1919
EXPOSE 8080
2020
STOPSIGNAL SIGTERM
21-
COPY --from=build --chown=root:root /tmp/bandwhichd-server/target/scala-3.1.3/bandwhichd-server-assembly-0.6.0-rc4.jar /opt/bandwhichd-server.jar
21+
COPY --from=build --chown=root:root /tmp/bandwhichd-server/target/scala-3.1.3/bandwhichd-server-assembly-0.6.0-rc5.jar /opt/bandwhichd-server.jar

build.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ lazy val root = (project in file("."))
22
.settings(
33
organization := "de.neuland-bfi",
44
name := "bandwhichd-server",
5-
version := "0.6.0-rc4",
5+
version := "0.6.0-rc5",
66
scalaVersion := "3.1.3",
77
Compile / scalaSource := baseDirectory.value / "src" / "main" / "scala",
88
Test / scalaSource := baseDirectory.value / "src" / "test" / "scala",

src/main/scala/de/neuland/bandwhichd/server/boot/App.scala

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@ import de.neuland.bandwhichd.server.application.{
1313
MeasurementApplicationService,
1414
StatsApplicationService
1515
}
16-
import de.neuland.bandwhichd.server.domain.measurement.MeasurementsRepository
17-
import de.neuland.bandwhichd.server.domain.stats.StatsRepository
16+
import de.neuland.bandwhichd.server.domain.measurement.{
17+
MeasurementsRepository,
18+
Timing
19+
}
20+
import de.neuland.bandwhichd.server.domain.stats.{Stats, StatsRepository}
1821
import de.neuland.bandwhichd.server.lib.cassandra.CassandraContext
22+
import de.neuland.bandwhichd.server.lib.time.Interval
1923
import de.neuland.bandwhichd.server.lib.time.cats.TimeContext
2024
import org.http4s.dsl.io.*
2125
import org.http4s.ember.server.EmberServerBuilder
@@ -25,6 +29,7 @@ import org.typelevel.log4cats.slf4j.Slf4jLogger
2529
import org.typelevel.log4cats.{Logger, SelfAwareStructuredLogger}
2630

2731
import java.io.{BufferedReader, InputStreamReader}
32+
import java.time.Duration
2833
import java.util.Scanner
2934
import scala.io.StdIn
3035

@@ -91,11 +96,32 @@ object App extends IOApp.Simple {
9196
_ <- Resource.eval(
9297
CassandraMigration(cassandraContext).migrate(configuration)
9398
)
94-
main = App[IO](
95-
TimeContext.systemTimeContext,
99+
timeContext = TimeContext.systemTimeContext[IO]
100+
main: App[IO] = App[IO](
101+
timeContext,
96102
cassandraContext,
97103
configuration
98104
)
105+
_ <- Resource.eval {
106+
for {
107+
now <- timeContext.now
108+
preseedDuration = Stats.defaultTimeframeDuration.plus(
109+
Duration.ofMinutes(15)
110+
)
111+
initialStats <- main.statsRepository.get
112+
preseededStats <- main.measurementsRepository
113+
.get(
114+
Timing.Timeframe(
115+
Interval(now.minus(preseedDuration), preseedDuration)
116+
)
117+
)
118+
.compile
119+
.fold(initialStats) { case (stats, measurement) =>
120+
stats.append(measurement)
121+
}
122+
_ <- main.statsRepository.safe(preseededStats)
123+
} yield ()
124+
}
99125
server <- EmberServerBuilder
100126
.default[IO]
101127
.withHostOption(None)

src/main/scala/de/neuland/bandwhichd/server/boot/Configuration.scala

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ case class Configuration(
1919
measurementNetworkConfigurationTTL: Duration,
2020
measurementNetworkUtilizationTTL: Duration,
2121
recordMeasurementQueryTimeout: Duration,
22-
getAllMeasurementsQueryTimeout: Duration,
23-
aggregationSchedulerInterval: Duration
22+
getAllMeasurementsQueryTimeout: Duration
2423
)
2524

2625
object Configuration {
@@ -33,8 +32,7 @@ object Configuration {
3332
measurementNetworkConfigurationTTL: String,
3433
measurementNetworkUtilizationTTL: String,
3534
recordMeasurementQueryTimeout: String,
36-
getAllMeasurementsQueryTimeout: String,
37-
aggregationSchedulerInterval: String
35+
getAllMeasurementsQueryTimeout: String
3836
): F[Configuration] = {
3937

4038
val maybeHostnameContactPoints = contactPoints
@@ -74,9 +72,7 @@ object Configuration {
7472
recordMeasurementQueryTimeout =
7573
Duration.parse(recordMeasurementQueryTimeout),
7674
getAllMeasurementsQueryTimeout =
77-
Duration.parse(getAllMeasurementsQueryTimeout),
78-
aggregationSchedulerInterval =
79-
Duration.parse(aggregationSchedulerInterval)
75+
Duration.parse(getAllMeasurementsQueryTimeout)
8076
)
8177
}
8278

@@ -94,8 +90,7 @@ object Configuration {
9490
scala.util.Properties
9591
.envOrElse("RECORD_MEASUREMENT_QUERY_TIMEOUT", "PT2S"),
9692
scala.util.Properties
97-
.envOrElse("GET_ALL_MEASUREMENTS_QUERY_TIMEOUT", "PT8S"),
98-
scala.util.Properties.envOrElse("AGGREGATION_SCHEDULER_INTERVAL", "PT10S")
93+
.envOrElse("GET_ALL_MEASUREMENTS_QUERY_TIMEOUT", "PT8S")
9994
)
10095

10196
def resource[F[_]: Sync]: Resource[F, Configuration] =

src/main/scala/de/neuland/bandwhichd/server/domain/stats/Stats.scala

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,6 @@ object Stats {
5656

5757
val empty: MonitoredStats = new Stats(Map.empty)
5858

59-
def apply[F[_]: Concurrent](
60-
measurements: Stream[F, Measurement[Timing]]
61-
): F[MonitoredStats] =
62-
measurements.compile.fold(Stats.empty) { case (stats, measurement) =>
63-
stats.append(measurement)
64-
}
65-
6659
extension (stats: MonitoredStats) {
6760
def append(
6861
measurement: Measurement[Timing]

src/test/scala/de/neuland/bandwhichd/server/boot/ConfigurationFixtures.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ object ConfigurationFixtures {
1616
measurementNetworkConfigurationTTL = Duration.ofHours(2),
1717
measurementNetworkUtilizationTTL = Duration.ofHours(2),
1818
recordMeasurementQueryTimeout = Duration.ofSeconds(4),
19-
getAllMeasurementsQueryTimeout = Duration.ofSeconds(8),
20-
aggregationSchedulerInterval = Duration.ofSeconds(10)
19+
getAllMeasurementsQueryTimeout = Duration.ofSeconds(8)
2120
)
2221

2322
def testDefaults(container: CassandraContainer): Configuration =

0 commit comments

Comments
 (0)