import { Effect, Metric } from "effect"
import { NodeSdk } from "@effect/opentelemetry"
import { PrometheusExporter } from "@opentelemetry/exporter-prometheus"
import { NodeRuntime } from "@effect/platform-node"
import express from 'express'
const NodeSdkLive = NodeSdk.layer(() => ({
resource: { serviceName: "example" },
metricReader: new PrometheusExporter({
port: 9464,
endpoint: '/metrics',
}),
}))
const requestCount = Metric.counter("request_count", {
incremental: true,
})
const incrementCounter = Effect.gen(function* () {
// Increment the counter by 1
yield* requestCount(Effect.succeed(1))
const state = yield* Metric.value(requestCount)
console.log(state.count)
return state.count
})
const mainProgram = Effect.sync(() => {
const app = express()
const port = 3000
app.get('/', (req, res) => {
const counterResult = Effect.runSync(incrementCounter)
res.send('Hello World!' + counterResult) // <-- this works
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
})
const instrumented = mainProgram.pipe(Effect.provide(NodeSdkLive))
NodeRuntime.runMain(instrumented)
import { Effect, Metric } from "effect"
import { NodeSdk } from "@effect/opentelemetry"
import { PrometheusExporter } from "@opentelemetry/exporter-prometheus"
import { NodeRuntime } from "@effect/platform-node"
import express from 'express'
const NodeSdkLive = NodeSdk.layer(() => ({
resource: { serviceName: "example" },
metricReader: new PrometheusExporter({
port: 9464,
endpoint: '/metrics',
}),
}))
const requestCount = Metric.counter("request_count", {
incremental: true,
})
const incrementCounter = Effect.gen(function* () {
// Increment the counter by 1
yield* requestCount(Effect.succeed(1))
const state = yield* Metric.value(requestCount)
console.log(state.count)
return state.count
})
const mainProgram = Effect.sync(() => {
const app = express()
const port = 3000
app.get('/', (req, res) => {
const counterResult = Effect.runSync(incrementCounter)
res.send('Hello World!' + counterResult) // <-- this works
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
})
const instrumented = mainProgram.pipe(Effect.provide(NodeSdkLive))
NodeRuntime.runMain(instrumented)