Skip to content

Commit

Permalink
Merge pull request #612 from ptrdom/run-examples-in-ci
Browse files Browse the repository at this point in the history
Run examples in CI
  • Loading branch information
lgajowy authored Feb 21, 2023
2 parents c49b67e + f40394a commit 380d50b
Show file tree
Hide file tree
Showing 32 changed files with 188 additions and 117 deletions.
30 changes: 25 additions & 5 deletions .github/workflows/scala.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ on:

jobs:
lint:
runs-on: ubuntu-latest
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Checkout current branch
uses: actions/checkout@v3
Expand All @@ -23,10 +23,13 @@ jobs:
java-version: '11'
distribution: zulu
- name: Check code linting
run: sbt check
run: sbt "clean;check"

build:
runs-on: ubuntu-latest
strategy:
matrix:
os: [ windows-latest, ubuntu-latest ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch
uses: actions/checkout@v3
Expand All @@ -36,13 +39,30 @@ jobs:
java-version: '11'
distribution: zulu
- name: Run tests
run: sbt clean; sbt testAll
run: sbt "clean;testAll"

run-examples:
strategy:
matrix:
os: [windows-latest, ubuntu-latest]
example: [exampleAkka, exampleAkkaStream, exampleZio]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch
uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: zulu
- name: Run example
run: echo -ne '\n' | sbt "clean;${{ matrix.example }}/run"

publish:

runs-on: ubuntu-latest

needs: [build]
needs: [lint, build, run-examples]
if: github.event_name != 'pull_request'

steps:
Expand Down
139 changes: 55 additions & 84 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Dependencies._
import sbt.Keys.connectInput

lazy val scala213 = "2.13"

Expand Down Expand Up @@ -49,7 +50,7 @@ lazy val all: Project = (project in file("."))
name := "mesmer-all",
publish / skip := true
)
.aggregate(extension, otelExtension, example, core, testkit)
.aggregate(extension, otelExtension, core, testkit, exampleAkka, exampleAkkaStream, exampleZio)

lazy val core = (project in file("core"))
.disablePlugins(sbtassembly.AssemblyPlugin)
Expand Down Expand Up @@ -153,18 +154,34 @@ lazy val otelExtension = (project in file("otel-extension"))
)
.dependsOn(core % "provided->compile;compile->compile", testkit % "it,test")

lazy val example = (project in file("example"))
.enablePlugins(JavaAppPackaging, UniversalPlugin)
def exampleCommonSettings = Seq(
publish / skip := true,
resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
run / javaOptions ++= Seq(
s"-javaagent:$projectRootDir/opentelemetry-javaagent-$OpentelemetryVersion.jar",
s"-Dotel.javaagent.extensions=${(otelExtension / assembly).value.absolutePath}",
"-Dotel.javaagent.debug=true"
),
libraryDependencies ++= {
logback ++ Seq(
"io.opentelemetry" % "opentelemetry-sdk-extension-autoconfigure" % OpentelemetryAlphaMinor0Version,
"io.grpc" % "grpc-netty-shaded" % "1.53.0",
"org.wvlet.airframe" %% "airframe-log" % AirframeVersion
)
},
run / fork := true,
run / connectInput := true
)

lazy val exampleAkka = (project in file("examples/akka"))
.settings(exampleCommonSettings)
.settings(
name := "mesmer-akka-example",
publish / skip := true,
name := "mesmer-akka-example",
libraryDependencies ++= {
akka ++
scalatest.map(_ % "test") ++
akkaTestkit.map(_ % "test") ++
akkaPersistance ++
zio ++
logback ++ Seq(
akkaPersistance ++ Seq(
"io.circe" %% "circe-core" % CirceVersion,
"io.circe" %% "circe-generic" % CirceVersion,
"io.circe" %% "circe-parser" % CirceVersion,
Expand All @@ -175,30 +192,40 @@ lazy val example = (project in file("example"))
"com.typesafe.akka" %% "akka-discovery" % AkkaVersion,
"com.lightbend.akka.management" %% "akka-management" % AkkaManagementVersion,
"com.lightbend.akka.management" %% "akka-management-cluster-http" % AkkaManagementVersion,
"com.lightbend.akka.management" %% "akka-management-cluster-bootstrap" % AkkaManagementVersion,
"io.opentelemetry" % "opentelemetry-sdk-extension-autoconfigure" % OpentelemetryAlphaMinor0Version,
"io.grpc" % "grpc-netty-shaded" % "1.53.0",
"org.wvlet.airframe" %% "airframe-log" % AirframeVersion
"com.lightbend.akka.management" %% "akka-management-cluster-bootstrap" % AkkaManagementVersion
)
},
assemblyMergeStrategySettings,
mainClass := Some("example.Boot"),
assembly / assemblyJarName := "mesmer-akka-example.jar",
resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
run / fork := true,
run / javaOptions ++= {
val properties = System.getProperties
mainClass := Some("example.Boot"),
run / javaOptions ++= Seq(
s"-Dotel.service.name=mesmer-example",
s"-Dotel.metric.export.interval=5000"
)
)
.dependsOn(core)

import scala.collection.JavaConverters._
val keys = for {
(key, value) <- properties.asScala.toList if value.nonEmpty
} yield s"-D$key=$value"
lazy val exampleAkkaStream = (project in file("examples/akka-stream"))
.settings(exampleCommonSettings)
.settings(
name := "mesmer-akka-stream-example",
libraryDependencies ++= akka,
mainClass := Some("example.SimpleStreamExample"),
run / javaOptions ++= Seq(
s"-Dotel.service.name=mesmer-stream-example",
s"-Dotel.metric.export.interval=5000"
)
)
.dependsOn(core)

keys
},
commands += runExampleWithOtelAgent,
commands += runStreamExampleWithOtelAgent,
commands += runZioExampleWithOtelAgent
lazy val exampleZio = (project in file("examples/zio"))
.settings(exampleCommonSettings)
.settings(
name := "mesmer-zio-example",
libraryDependencies ++= zio,
mainClass := Some("example.SimpleZioExample"),
run / javaOptions ++= Seq(
s"-Dotel.service.name=mesmer-zio-example",
s"-Dotel.metric.export.interval=1000"
)
)
.dependsOn(core)

Expand Down Expand Up @@ -228,59 +255,3 @@ lazy val assemblyMergeStrategySettings = assembly / assemblyMergeStrategy := {
MergeStrategy.last
case _ => MergeStrategy.first
}

def runExampleWithOtelAgent = Command.command("runExampleWithOtelAgent") { state =>
val extracted = Project extract state
val newState = extracted.appendWithSession(
Seq(
run / javaOptions ++= Seq(
s"-javaagent:$projectRootDir/opentelemetry-javaagent-$OpentelemetryVersion.jar",
s"-Dotel.service.name=mesmer-example",
s"-Dotel.metric.export.interval=5000",
s"-Dotel.javaagent.extensions=${(otelExtension / assembly).value.absolutePath}",
"-Dotel.javaagent.debug=true"
)
),
state
)
val (s, _) =
Project.extract(newState).runInputTask(Compile / runMain, " example.Boot", newState)
s
}

def runStreamExampleWithOtelAgent = Command.command("runStreamExampleWithOtelAgent") { state =>
val extracted = Project extract state
val newState = extracted.appendWithSession(
Seq(
run / javaOptions ++= Seq(
s"-javaagent:$projectRootDir/opentelemetry-javaagent-$OpentelemetryVersion.jar",
s"-Dotel.service.name=mesmer-stream-example",
s"-Dotel.metric.export.interval=5000",
s"-Dotel.javaagent.extensions=${(otelExtension / assembly).value.absolutePath}",
"-Dotel.javaagent.debug=true"
)
),
state
)
val (s, _) =
Project.extract(newState).runInputTask(Compile / runMain, " example.SimpleStreamExample", newState)
s
}

def runZioExampleWithOtelAgent = Command.command("runZioExampleWithOtelAgent") { state =>
val extracted = Project extract state
val newState = extracted.appendWithSession(
Seq(
run / javaOptions ++= Seq(
s"-javaagent:$projectRootDir/opentelemetry-javaagent-$OpentelemetryVersion.jar",
s"-Dotel.service.name=mesmer-zio-example",
s"-Dotel.metric.export.interval=1000",
s"-Dotel.javaagent.extensions=${(otelExtension / assembly).value.absolutePath}"
)
),
state
)
val (s, _) =
Project.extract(newState).runInputTask(Compile / runMain, " example.SimpleZioExample", newState)
s
}
16 changes: 0 additions & 16 deletions example/src/main/scala/example/SimpleZioExample.scala

This file was deleted.

8 changes: 4 additions & 4 deletions example/README.md → examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,22 @@ This will set up everything needed by the application:
data (Averages, Requests per second etc). It shows graphs based both on Mesmer-provided (Akka Persistence + Actor
Metrics) and OpenTelemetry-provided metrics (Akka Http).

## Run the application (both Akka and ZIO examples)
## Run the application

```
sbt "project example" runExampleWithOtelAgent
sbt exampleAkka/run
```

or (for Akka Streaming example)

```
sbt "project example" runStreamExampleWithOtelAgent
sbt exampleAkkaStream/run
```

or (for ZIO 2.0.0 example)

```
sbt "project example" runZioExampleWithOtelAgent
sbt exampleZio/run
```

## In case you are running the non-streaming example: call the endpoints
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import org.slf4j.Logger
import org.slf4j.LoggerFactory

import scala.concurrent.duration._
import scala.io.StdIn

/**
* Another example useful to testing if stream instrumentation work. It's a simple example that prints amount of process
Expand Down Expand Up @@ -47,8 +48,8 @@ object SimpleStreamExample extends App {
.toMat(Sink.ignore)(Keep.left)
.run()

sys.addShutdownHook {
ks.shutdown()
}
StdIn.readLine()

ks.shutdown()
system.terminate()
}
File renamed without changes.
File renamed without changes.
40 changes: 40 additions & 0 deletions examples/akka/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<configuration>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home:-.}/logs/journal.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) %cyan(%logger{36}) %magenta(%X{akkaSource}) %msg%n
</pattern>
</encoder>
</appender>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) %cyan(%logger{36}) %magenta(%X{akkaSource}) %msg%n
</pattern>
</encoder>
</appender>

<appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE"/>
</appender>

<appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="STDOUT"/>
</appender>

<logger name="akka" level="WARN"/>
<logger name="slick" level="INFO"/>
<logger name="io.scalac" level="INFO"/>
<logger name="io.scalac.mesmer.extension.AkkaMonitoring" level="DEBUG"/>


<root level="INFO">
<appender-ref ref="ASYNCSTDOUT"/>
</root>

</configuration>
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,9 @@ object Boot extends App with FailFastCirceSupport with JsonCodecs {

StdIn.readLine()

sys.addShutdownHook {
binding
.flatMap(_.unbind())
.onComplete(_ => system.terminate())
}
binding
.flatMap(_.unbind())
.onComplete(_ => system.terminate())
}

startUp()
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
40 changes: 40 additions & 0 deletions examples/zio/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<configuration>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home:-.}/logs/journal.log</file>
<encoder>
<charset>UTF-8</charset>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) %cyan(%logger{36}) %magenta(%X{akkaSource}) %msg%n
</pattern>
</encoder>
</appender>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) %cyan(%logger{36}) %magenta(%X{akkaSource}) %msg%n
</pattern>
</encoder>
</appender>

<appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE"/>
</appender>

<appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="STDOUT"/>
</appender>

<logger name="akka" level="WARN"/>
<logger name="slick" level="INFO"/>
<logger name="io.scalac" level="INFO"/>
<logger name="io.scalac.mesmer.extension.AkkaMonitoring" level="DEBUG"/>


<root level="INFO">
<appender-ref ref="ASYNCSTDOUT"/>
</root>

</configuration>
Loading

0 comments on commit 380d50b

Please sign in to comment.